✅已完成、⚠️部分完成、❌未完成这样显示
-----------------------------------------------------------------------------------------------需要解决

一、ApiServer-web-admin_dashboard_pc


二、ApiServer-web-user_dashboard_pc



三、ApiServer-Web-home
1.http://localhost:3000/api/v1/tool/good/list?page=1&count=10&good_group_id=60在商品购买页请求的商品列表，以下为响应数据：
{
    "code": 200,
    "message": "Success",
    "data": {
        "all_count": 1,
        "data": [
            {
                "id": 52,
                "name": "湖北宿主机",
                "table": "table",
                "content": "湖北宿主机",
                "historyViewNum": 0,
                "goodGroupId": 60,
                "cover": "https://oss.hostidc.net/api-server/static/files/2026-03-11/17732219634?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=ArcvgSO24g2qfKf1Rq7w%2F20260417%2Fus-east-1%2Fs3%2Faws4_request\u0026X-Amz-Date=20260417T093612Z\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=3ed0f9e50f7b7ad793f3b482caa60877446e0861eef987c6797f07d6165e4c9c",
                "coverId": 1502,
                "inventoryControl": true,
                "inventory": 100,
                "price": 6000,
                "payNum": 1,
                "expireTime": 30,
                "goodArgs": [
                    {
                        "id": 89,
                        "name": "11",
                        "type": "string",
                        "step": 1,
                        "min": 0,
                        "max": 0,
                        "must": true,
                        "attrs": null,
                        "key": "",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 138,
                        "name": "IPv4数量",
                        "type": "number",
                        "step": 1,
                        "min": 0,
                        "max": 0,
                        "must": false,
                        "attrs": null,
                        "key": "ipv4_num",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 139,
                        "name": "IPv6数量",
                        "type": "number",
                        "step": 1,
                        "min": 0,
                        "max": 254,
                        "must": false,
                        "attrs": null,
                        "key": "ipv6_num",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 140,
                        "name": "内存大小(KB)",
                        "type": "number",
                        "step": 1,
                        "min": 1,
                        "max": 88080384,
                        "must": true,
                        "attrs": null,
                        "key": "memory",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 141,
                        "name": "CPU数量(核心数)",
                        "type": "number",
                        "step": 1,
                        "min": 1,
                        "max": 84,
                        "must": true,
                        "attrs": null,
                        "key": "vcpu",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 142,
                        "name": "系统盘大小(GB)",
                        "type": "number",
                        "step": 1,
                        "min": 1,
                        "max": 370,
                        "must": true,
                        "attrs": null,
                        "key": "system_size",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 143,
                        "name": "下行带宽(mbps)",
                        "type": "number",
                        "step": 1,
                        "min": 0,
                        "max": 100,
                        "must": true,
                        "attrs": null,
                        "key": "rx_bandwidth",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 144,
                        "name": "上行带宽(mbps)",
                        "type": "number",
                        "step": 1,
                        "min": 0,
                        "max": 100,
                        "must": true,
                        "attrs": null,
                        "key": "tx_bandwidth",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    },
                    {
                        "id": 145,
                        "name": "选择镜像",
                        "type": "select",
                        "step": 1,
                        "min": 0,
                        "max": 0,
                        "must": true,
                        "attrs": [
                            {
                                "id": 198,
                                "value": "7",
                                "index": 0,
                                "range": 0,
                                "rangeType": "",
                                "name": "Windows 2022-Datacenter-cn-魔方",
                                "argId": 145,
                                "price": 0
                            },
                            {
                                "id": 199,
                                "value": "1",
                                "index": 1,
                                "range": 0,
                                "rangeType": "",
                                "name": "Ubuntu 22.04 x64",
                                "argId": 145,
                                "price": 0
                            },
                            {
                                "id": 200,
                                "value": "5",
                                "index": 2,
                                "range": 0,
                                "rangeType": "",
                                "name": "Windows server 2022 Datacenter-cn",
                                "argId": 145,
                                "price": 0
                            },
                            {
                                "id": 201,
                                "value": "6",
                                "index": 3,
                                "range": 0,
                                "rangeType": "",
                                "name": "Windows 2019 Datacenter cn",
                                "argId": 145,
                                "price": 0
                            }
                        ],
                        "key": "image",
                        "userAdd": false,
                        "useUserGroupDiscount": false,
                        "useUserDiscount": false
                    }
                ],
                "argType": "all",
                "tag": "普通商品",
                "canRenew": false
            }
        ]
    }
}
在goodArgs对象下有must:true就不能单独只商品就去进行购买，需要选择旗下的套餐进行购买，并且就不需要选择商品就请求价格
✅已完成 — 商品有must:true参数时，根据argType(plan/customize/all)提示用户必须选择套餐或自定义配置，未选择前不请求价格、不允许下单；同时修复了good_arg_must_error错误的友好提示展示。



-----------------------------------------------------------------------------------------------需要解决
1.请求接口的带有page-size或者是count参数的都只能是10
2.每次解决后的内容写在-需要解决之间，不要写在外面
3.我不要你解释，不是我主动告诉你解释需求，那么你就根据问题开始直接编写代码解决问题或者完善功能，问题都是用-需要解决隔开的
4.涉及到表单，需要查看后端模型是不是JSON字符串或者数组，前端发送的是不是对应的JSON字符串或者数组，如果不同需要改为相同，前端提交的数据需要跟后端对应
5.涉及到表单时，需要检查后端模型字段类型。
6.前端提交的数据格式必须与后端对应：
后端模型为 JSON 字符串 → 前端需要 `JSON.stringify()` 后提交
后端模型为数组 → 前端需要提交 JSON 数组字符串
注意各项目 POST 请求默认 Content-Type 不同，可能需要手动调整
7.内存统一kb单位（展示是以Mb为单位），硬盘统一GB单位，流量统一MB单位（展示是以GB为单位），续费价格统一以分为单位（展示是以元为单位），基础价格统一以分为单位（展示是以元为单位）
8.开发的代码或者文件放在对应的文件模块，不要太乱
9.前端页面有问题或者不美观的也可以修改优化美化等
10.例如订单ID，套餐ID的这种都需要变为选择组件选择，里面是列表展示，并且带有分页，和刷新按钮
11.只需要修改我指定的位置，如果有关联使用的需要提前告知确认后再进行修改
管理员前端控制台：ApiServer-web-admin_dashboard_pc

网站首页前端：ApiServer-Web-home

用户前端控制台：ApiServer-web-user_dashboard_pc

移动端前端：ApiServer-Web-user_dashboard_pe---移动前端需要适配兼容微信小程序 H5 APP （安卓/IOS双端），注意分包大小

文档统计：全前端项目文档.md
全部项目涉及到硬编码配置的可以单独在一个文件进行配置然后进行调用（每个项目都有一个单独配置的文件）
开始编写代码完善项目
对应完成的部分在当前文档记录并且进行标记✅已完成、⚠️部分完成、❌未完成这样显示
