Files
ApiServer-Web-admin_dashboa…/问题.MD
T
lin 043be60f4f
Build and Deploy Vue3 / build (push) Successful in 4m59s
Build and Deploy Vue3 / deploy (push) Successful in 1m23s
feate:添加分组标签
2026-01-29 17:43:45 +08:00

1958 lines
55 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
✅已完成、⚠️部分完成、❌未完成这样显示
-----------------------------------------------------------------------------------------------需要解决
{
"openapi": "3.0.1",
"info": {
"title": "默认模块",
"description": "",
"version": "1.0.0"
},
"tags": [],
"paths": {
"/api/v1/admin/good/goods/list": {
"get": {
"summary": "获取商品列表",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "count",
"in": "query",
"description": "获取条数 默认 10",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "page",
"in": "query",
"description": "获取页码 默认 1",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "good_group_id",
"in": "query",
"description": "筛选商品组id",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/goods/tag_list": {
"get": {
"summary": "获取商品标签列表",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/goods/create": {
"post": {
"summary": "创建商品",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"name": {
"description": "名称",
"example": "",
"type": "string"
},
"table": {
"description": "商品所属表",
"example": "",
"type": "string"
},
"tag": {
"description": "商品标签,从 tag_list 接口中获取",
"example": "",
"type": "string"
},
"content": {
"description": "内容",
"example": "",
"type": "string"
},
"cover_id": {
"description": "封面id",
"example": 0,
"type": "integer"
},
"inventory_control": {
"description": "是否开启商品库存",
"example": "",
"type": "string"
},
"inventory": {
"description": "商品库存",
"example": 0,
"type": "integer"
},
"price": {
"description": "商品价格",
"example": 0,
"type": "integer"
},
"pay_num": {
"description": "单个商品数量",
"example": 0,
"type": "integer"
},
"expire_time": {
"description": "商品购买有效期 /天",
"example": 0,
"type": "integer"
},
"recommend": {
"description": "是否开启推介",
"example": "",
"type": "boolean"
},
"recommend_rebate": {
"description": "商品推介返还 /100%",
"example": 0,
"type": "integer"
},
"good_group_id": {
"description": "商品组id",
"example": 0,
"type": "integer"
},
"arg_type": {
"description": "商品参数类型 all 所有 / plan 套餐 / customize 自定义",
"example": "",
"type": "string"
}
}
},
"examples": {}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/goods/update": {
"post": {
"summary": "更新商品",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"description": "ID 编号",
"example": "",
"type": "string"
},
"name": {
"description": "名称",
"example": "",
"type": "string"
},
"table": {
"description": "商品所属表",
"example": "",
"type": "string"
},
"tag": {
"description": "商品标签,从 tag_list 接口中获取",
"example": "",
"type": "string"
},
"content": {
"description": "内容",
"example": "",
"type": "string"
},
"cover_id": {
"description": "封面id",
"example": 0,
"type": "integer"
},
"inventory_control": {
"description": "是否开启商品库存",
"example": "",
"type": "boolean"
},
"inventory": {
"description": "商品库存",
"example": 0,
"type": "integer"
},
"price": {
"description": "商品价格",
"example": 0,
"type": "integer"
},
"pay_num": {
"description": "单个商品数量",
"example": 0,
"type": "integer"
},
"expire_time": {
"description": "商品购买有效期 /天",
"example": 0,
"type": "integer"
},
"recommend": {
"description": "是否开启推介",
"example": "",
"type": "boolean"
},
"recommend_rebate": {
"description": "商品推介返还 /100%",
"example": 0,
"type": "integer"
},
"good_group_id": {
"description": "商品组id",
"example": 0,
"type": "integer"
},
"arg_type": {
"description": "商品参数类型 all 所有 / plan 套餐 / customize 自定义",
"example": "",
"type": "string"
}
}
},
"examples": {}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/goods/delete": {
"delete": {
"summary": "删除商品",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"description": "ID 编号",
"example": "",
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
}
},
"components": {
"schemas": {},
"responses": {},
"securitySchemes": {}
},
"servers": [],
"security": []
}
{
"openapi": "3.0.1",
"info": {
"title": "默认模块",
"description": "",
"version": "1.0.0"
},
"tags": [],
"paths": {
"/api/v1/admin/good/plan/list": {
"get": {
"summary": "获取商品套餐列表",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "good_id",
"in": "query",
"description": "商品id",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/plan/create": {
"post": {
"summary": "创建商品套餐",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"good_id": {
"description": "商品id",
"example": "",
"type": "string"
},
"name": {
"description": "名称",
"example": "",
"type": "string"
},
"note": {
"description": "说明",
"example": "",
"type": "string"
},
"args": {
"description": "参数 json\n{\n\"arg_id\": 参数id,\n\"name\": \"参数名称\"\n\"attr_id\": 参数值id,\n\"value\": \"参数值\"(如果是 select 或 string 类型),\n\"number\": 参数值(如果是 number 类型),\n}",
"example": "",
"type": "string"
},
"extra_arg_ids": {
"description": "额外参数 示例:1,2,3,4",
"example": "",
"type": "string"
},
"index": {
"type": "integer",
"description": "套餐排序索引",
"example": 0
}
}
},
"examples": {}
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/plan/detail": {
"get": {
"summary": "获取商品套餐详情",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "good_id",
"in": "query",
"description": "商品id",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "plan_id",
"in": "query",
"description": "套餐id",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/plan/update": {
"post": {
"summary": "更新商品套餐",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"good_id": {
"description": "商品id",
"example": "",
"type": "string"
},
"plan_id": {
"description": "套餐id",
"example": "",
"type": "string"
},
"name": {
"description": "名称",
"example": "",
"type": "string"
},
"note": {
"description": "说明",
"example": "",
"type": "string"
},
"args": {
"description": "参数 json\n{\n\"arg_id\": 参数id,\n\"name\": \"参数名称\"\n\"attr_id\": 参数值id,\n\"value\": \"参数值\"(如果是 select 或 string 类型),\n\"number\": 参数值(如果是 number 类型),\n}",
"example": "",
"type": "string"
},
"extra_arg_ids": {
"description": "额外参数 示例:1,2,3,4",
"example": "",
"type": "string"
},
"index": {
"description": "套餐排序索引",
"example": 0,
"type": "integer"
},
"disable": {
"type": "boolean",
"description": "是否禁用",
"example": ""
}
}
},
"examples": {}
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/plan/delete": {
"delete": {
"summary": "删除商品套餐",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "good_id",
"in": "query",
"description": "商品id",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "plan_id",
"in": "query",
"description": "套餐id",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/plan/disable": {
"post": {
"summary": "禁用商品套餐",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"good_id": {
"type": "integer",
"description": "商品id",
"example": 0
},
"plan_id": {
"type": "integer",
"description": "套餐id",
"example": 0
}
}
},
"examples": {}
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/plan/enable": {
"post": {
"summary": "启用商品套餐",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"good_id": {
"description": "商品id",
"example": 0,
"type": "integer"
},
"plan_id": {
"description": "套餐id",
"example": 0,
"type": "integer"
}
}
},
"examples": {}
}
},
"required": true
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
}
},
"components": {
"schemas": {},
"responses": {},
"securitySchemes": {}
},
"servers": [],
"security": []
}
{
"openapi": "3.0.1",
"info": {
"title": "默认模块",
"description": "",
"version": "1.0.0"
},
"tags": [],
"paths": {
"/api/v1/admin/good/group/list": {
"get": {
"summary": "获取商品分组列表",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "count",
"in": "query",
"description": "获取条数 默认 10",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "page",
"in": "query",
"description": "获取页码 默认 1",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "key",
"in": "query",
"description": "关键词筛选",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "disable",
"in": "query",
"description": "筛选 隐藏/显示 的分组",
"required": false,
"schema": {
"type": "boolean"
}
},
{
"name": "level",
"in": "query",
"description": "筛选分组层级",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "parent_id",
"in": "query",
"description": "筛选父级分组id",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "tag",
"in": "query",
"description": "筛选分组标签",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group/create": {
"post": {
"summary": "创建商品分组",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"name": {
"description": "名称",
"example": "",
"type": "string"
},
"note": {
"description": "备注",
"example": "",
"type": "string"
},
"disable": {
"description": "是否隐藏",
"example": "",
"type": "boolean"
},
"level": {
"description": "分组层级",
"example": "",
"type": "string"
},
"parent_id": {
"description": "父级分组id",
"example": 0,
"type": "integer"
},
"cover_id": {
"description": "分组封面id",
"example": 0,
"type": "integer"
},
"tag_id": {
"description": "分组标签id",
"example": 0,
"type": "integer"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group/update": {
"post": {
"summary": "更新商品分组",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"description": "ID 编号",
"example": "",
"type": "string"
},
"name": {
"description": "名称",
"example": "",
"type": "string"
},
"note": {
"description": "备注",
"example": "",
"type": "string"
},
"disable": {
"description": "是否隐藏",
"example": "",
"type": "boolean"
},
"level": {
"description": "分组层级",
"example": "",
"type": "string"
},
"parent_id": {
"description": "父级分组id",
"example": 0,
"type": "integer"
},
"cover_id": {
"description": "分组封面id",
"example": 0,
"type": "integer"
},
"tag_id": {
"description": "分组标签id",
"example": 0,
"type": "integer"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group/disable": {
"post": {
"summary": "隐藏商品组",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"example": "",
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group/enable": {
"post": {
"summary": "启用商品组",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"description": "ID 编号",
"example": "",
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group/delete": {
"delete": {
"summary": "删除商品分组",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"description": "ID 编号",
"example": "",
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
}
},
"components": {
"schemas": {},
"responses": {},
"securitySchemes": {}
},
"servers": [],
"security": []
}
1.http://localhost:5173/product/group分组页的table是需要分页的
2.点击商品分组页面的添加子级分组点击分组封面并没有弹出
3.添加顶级分组和添加子级分组失败,
curl ^"https://apiservertest.s1f.ren/api/v1/admin/good/group/create^" ^
-H ^"Accept: application/json, text/plain, */*^" ^
-H ^"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6^" ^
-H ^"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NzAwNTk3MzYsImlzX2FkbWluIjp0cnVlLCJrZXkiOiJSUkR2MFJmT2RZRXpXaXpPIiwidXNlcl9ncm91cCI6MTEsInVzZXJfaWQiOjQsInVzZXJfbmFtZSI6InNoaXJhbiJ9.R5aT8pnXiHb31raNWyOCd39sPz3voov-OtENWvWCjR0^" ^
-H ^"Connection: keep-alive^" ^
-H ^"Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryswFqovBifaqLkuBL^" ^
-H ^"Origin: http://localhost:5173^" ^
-H ^"Referer: http://localhost:5173/^" ^
-H ^"Sec-Fetch-Dest: empty^" ^
-H ^"Sec-Fetch-Mode: cors^" ^
-H ^"Sec-Fetch-Site: cross-site^" ^
-H ^"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0^" ^
-H ^"sec-ch-ua: ^\^"Not(A:Brand^\^";v=^\^"8^\^", ^\^"Chromium^\^";v=^\^"144^\^", ^\^"Microsoft Edge^\^";v=^\^"144^\^"^" ^
-H ^"sec-ch-ua-mobile: ?0^" ^
-H ^"sec-ch-ua-platform: ^\^"Windows^\^"^" ^
--data-raw ^"------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"name^\^"^
^
^ ^ ^ ^
------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"note^\^"^
^
^ ^ ^ ^
------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"disable^\^"^
^
false^
------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"level^\^"^
^
1^
------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"parent_id^\^"^
^
0^
------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"cover_id^\^"^
^
0^
------WebKitFormBoundaryswFqovBifaqLkuBL^
Content-Disposition: form-data; name=^\^"tag_id^\^"^
^
0^
------WebKitFormBoundaryswFqovBifaqLkuBL--^
^"
4.获取套餐列表失败
curl ^"https://apiservertest.s1f.ren/api/v1/admin/good/plan/list?good_id=29^" ^
-H ^"Accept: application/json, text/plain, */*^" ^
-H ^"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6^" ^
-H ^"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NzAwNTk3MzYsImlzX2FkbWluIjp0cnVlLCJrZXkiOiJSUkR2MFJmT2RZRXpXaXpPIiwidXNlcl9ncm91cCI6MTEsInVzZXJfaWQiOjQsInVzZXJfbmFtZSI6InNoaXJhbiJ9.R5aT8pnXiHb31raNWyOCd39sPz3voov-OtENWvWCjR0^" ^
-H ^"Connection: keep-alive^" ^
-H ^"Origin: http://localhost:5173^" ^
-H ^"Referer: http://localhost:5173/^" ^
-H ^"Sec-Fetch-Dest: empty^" ^
-H ^"Sec-Fetch-Mode: cors^" ^
-H ^"Sec-Fetch-Site: cross-site^" ^
-H ^"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0^" ^
-H ^"sec-ch-ua: ^\^"Not(A:Brand^\^";v=^\^"8^\^", ^\^"Chromium^\^";v=^\^"144^\^", ^\^"Microsoft Edge^\^";v=^\^"144^\^"^" ^
-H ^"sec-ch-ua-mobile: ?0^" ^
-H ^"sec-ch-ua-platform: ^\^"Windows^\^"^"
5.创建新套餐失败,为什么会发出两个请求一个是options一个是post
curl ^"https://apiservertest.s1f.ren/api/v1/admin/good/plan/create^" ^
-H ^"Accept: application/json, text/plain, */*^" ^
-H ^"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6^" ^
-H ^"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NzAwNTk3MzYsImlzX2FkbWluIjp0cnVlLCJrZXkiOiJSUkR2MFJmT2RZRXpXaXpPIiwidXNlcl9ncm91cCI6MTEsInVzZXJfaWQiOjQsInVzZXJfbmFtZSI6InNoaXJhbiJ9.R5aT8pnXiHb31raNWyOCd39sPz3voov-OtENWvWCjR0^" ^
-H ^"Connection: keep-alive^" ^
-H ^"Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKCGyplVDbP3o88BN^" ^
-H ^"Origin: http://localhost:5173^" ^
-H ^"Referer: http://localhost:5173/^" ^
-H ^"Sec-Fetch-Dest: empty^" ^
-H ^"Sec-Fetch-Mode: cors^" ^
-H ^"Sec-Fetch-Site: cross-site^" ^
-H ^"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0^" ^
-H ^"sec-ch-ua: ^\^"Not(A:Brand^\^";v=^\^"8^\^", ^\^"Chromium^\^";v=^\^"144^\^", ^\^"Microsoft Edge^\^";v=^\^"144^\^"^" ^
-H ^"sec-ch-ua-mobile: ?0^" ^
-H ^"sec-ch-ua-platform: ^\^"Windows^\^"^" ^
--data-raw ^"------WebKitFormBoundaryKCGyplVDbP3o88BN^
Content-Disposition: form-data; name=^\^"good_id^\^"^
^
29^
------WebKitFormBoundaryKCGyplVDbP3o88BN^
Content-Disposition: form-data; name=^\^"name^\^"^
^
adasd^
------WebKitFormBoundaryKCGyplVDbP3o88BN^
Content-Disposition: form-data; name=^\^"note^\^"^
^
adasd^
------WebKitFormBoundaryKCGyplVDbP3o88BN^
Content-Disposition: form-data; name=^\^"args^\^"^
^
^[^{^\^"arg_id^\^":1,^\^"name^\^":^\^"cpu^\^",^\^"attr_id^\^":1,^\^"value^\^":^\^"50BG^\^"^}^]^
------WebKitFormBoundaryKCGyplVDbP3o88BN^
Content-Disposition: form-data; name=^\^"extra_arg_ids^\^"^
^
1^
------WebKitFormBoundaryKCGyplVDbP3o88BN^
Content-Disposition: form-data; name=^\^"index^\^"^
^
1^
------WebKitFormBoundaryKCGyplVDbP3o88BN--^
^"
6.在商品列表的编辑商品的弹窗中的封面id的点击按钮需要切换为符合整体的样式参照其他选择id,封面的样式,这个使用AvatarSelector组件
7.创建新产品需要添加一个商品参数类型的选择,修改也是arg_type:商品参数类型 all 所有 / plan 套餐 / customize 自定义
8.新增商品分组标签管理,查看添加到什么位置比较合适
{
"openapi": "3.0.1",
"info": {
"title": "默认模块",
"description": "",
"version": "1.0.0"
},
"tags": [],
"paths": {
"/api/v1/admin/good/group_tag/list": {
"get": {
"summary": "获取商品分组标签列表",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "page",
"in": "query",
"description": "获取页码 默认 1",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "count",
"in": "query",
"description": "获取条数 默认 10",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "key",
"in": "query",
"description": "关键词筛选",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group_tag/detail": {
"get": {
"summary": "获取商品分组标签详情",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "id",
"in": "query",
"description": "",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group_tag/create": {
"post": {
"summary": "创建商品分组标签",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"name": {
"description": "名称",
"example": "",
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group_tag/update": {
"post": {
"summary": "更新商品分组标签",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"id": {
"description": "ID 编号",
"example": "",
"type": "string"
},
"name": {
"description": "名称",
"example": "",
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
},
"/api/v1/admin/good/group_tag/delete": {
"delete": {
"summary": "删除商品分组标签",
"deprecated": false,
"description": "",
"tags": [],
"parameters": [
{
"name": "id",
"in": "query",
"description": "ID 编号",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"description": "",
"example": "Bearer {{token}}",
"schema": {
"type": "string",
"default": "Bearer {{token}}"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
}
},
"components": {
"schemas": {},
"responses": {},
"securitySchemes": {}
},
"servers": [],
"security": []
}
-----------------------------------------------------------------------------------------------需要解决
规则限制:
1.在-------需要解决的中间进行写是否解决问题的判断也可以列todolist便于查看是否完成
2.不要将我原本的问题进行删除了,只需要在范围的最后面添加todolist判断对应问题是否完成就可以了
3.在以后只要有添加时间选择器就要遵循以下规则
时间选择器接受的是毫秒级时间戳,获取时的时间转换,将ISO格式转换为毫秒级时间戳
- 列表展示使用formatDate函数
- 时间选择器正确显示毫秒级时间戳
- 提交时转换为秒级时间戳
4.后续每次写的页面,组件都需要兼容移动端
5.只要是关于选择用户,文件,优惠卷,代金卷的都使用组件
6.只要是弹窗需要使用选择组件的都参照用户列表的编辑用户的推介人的选择样式在弹窗中
## 一、项目结构 ✅
```
src/
├── api/ # API接口层
│ ├── admin/ # 管理后台API (12个文件)
│ │ ├── activity.js ├── cdn.js ├── discount.js
│ │ ├── file.js ├── group.js ├── order.js
│ │ ├── Permission.js ├── product.js ├── product-test.js
│ │ ├── router.js ├── setting.js └── user.js
│ ├── domain.js ├── groupBuy.js
│ ├── login.js └── ticket.js
├── components/ # 公共组件 (14个)
│ ├── admin/
│ │ ├── AvatarSelector.vue # 头像选择组件
│ │ └── FileSelector.vue # 文件/封面选择组件 ✅新增
│ ├── Charts/ # 图表组件 (4个)
│ ├── layout/ # 布局组件 (4个)
│ ├── marketing/DiscountDetailDialog.vue
│ ├── UserSelector/index.vue # 用户选择组件(推荐人选择)
│ ├── Container.vue ├── MonacoEditor.vue
│ ├── Qrcode.vue └── TextTruncate.vue
├── views/ # 页面视图 (67个)
├── store/ # 状态管理 (2个)
├── router/index.js # 路由配置
├── utils/ # 工具函数
│ └── acs/ # ACS云服务工具 (12个)
├── config/menus.js # 菜单配置
├── assets/ # 静态资源
├── App.vue # 应用入口
├── main.js # 主入口
└── style.css # 全局样式
```
## 二、API接口统计 ✅ (约240+个)
| 模块 | 文件 | 接口数 |
|------|------|--------|
| 登录认证 | login.js | 2 |
| 工单管理 | ticket.js | 12 |
| 域名白名单 | domain.js | 3 |
| 拼团管理 | groupBuy.js | 18 |
| 用户管理 | admin/user.js | 28 |
| 商品管理 | admin/product.js | 19 |
| 订单管理 | admin/order.js | 5 |
| 优惠码/代金券 | admin/discount.js | 21 |
| 权限管理 | admin/Permission.js | 8 |
| 管理员组 | admin/group.js | 6 |
| 配置管理 | admin/setting.js | 11 |
| 文件管理 | admin/file.js | 7 |
| 活动管理 | admin/activity.js | 8 |
| 路由管理 | admin/router.js | 2 |
| CDN管理 | admin/cdn.js | 1 |
| ACS服务器 | utils/acs/server.js | 60+ |
| ACS镜像 | utils/acs/mirror.js | 11 |
| ACS消息 | utils/acs/message.js | 8 |
| ACS审计 | utils/acs/audit.js | 4 |
| ACS远程桌面 | utils/acs/guacamole.js | 5 |
## 三、页面视图统计 ✅ (67个)
| 分类 | 页面 | 数量 |
|------|------|------|
| 基础页面 | Login, Dashboard, NotFound, Redirect, About, Home | 6 |
| 用户管理 | UserList, UserDetail, UserBalance, UserGroup, AdminGroup | 5 |
| 商品管理 | ProductList, ProductGroup | 2 |
| 订单管理 | OrderList | 1 |
| 优惠营销 | DiscountCode, Voucher, VoucherManagement + 6个子页面 | 9 |
| 活动管理 | SigninActivity, GroupBuyActivity, GroupBuyType | 3 |
| 工单管理 | TicketList, TicketDetail, TicketChat | 3 |
| 系统管理 | PermissionRoute/Admin, SystemFile, DomainWhitelist, SettingGroup, Setting, OperationLog, Users | 8 |
| 站点审计 | AllSites, ViolationSites | 2 |
| 全局设置 | GlobalSetting | 1 |
| 个人中心 | UserInfo, ChangePassword | 2 |
| ACS消息 | Announcements, Policies, News | 3 |
| ACS镜像 | VmImages, ContainerImages, ImageCategories, ImageForm, ImageRequests | 5 |
| ACS节点 | Nodes, server, ServerForm, VmDetail, containDetail, containerConsole, containFile + 2组件 | 9 |
| ACS远程桌面 | Guacamole | 1 |
## 四、CSS样式统计 ✅
### style.css 全局样式
| 类型 | 内容 |
|------|------|
| 重置样式 | `* { margin:0; padding:0; box-sizing:border-box; }` |
| 文字颜色 | `.text-primary` `.text-success` `.text-warning` `.text-danger` `.text-info` |
| 文字对齐 | `.text-center` `.text-left` `.text-right` |
| Flex布局 | `.flex` `.flex-column` `.justify-center` `.justify-between` `.items-center` |
| 尺寸 | `.w-full` `.h-full` |
| 间距 | `.mb-10` `.mt-10` `.mr-10` `.ml-10` `.p-10` `.py-10` `.px-10` |
| 响应式 | `.hidden-xs` `.hidden-sm` `.hidden-md` `.hidden-lg` |
### App.vue 全局样式
| 类型 | 内容 |
|------|------|
| 过渡动画 | `.fade-enter-active` `.fade-leave-active` |
| 滚动条 | `::-webkit-scrollbar` 自定义滚动条 |
| 按钮扁平化 | `.el-button--primary/success/danger/default` 无圆角深蓝灰主题 |
| 输入框扁平化 | `.el-input__wrapper` 无圆角边框 |
| 标签扁平化 | `.el-tag--success/danger/info` 无圆角彩色背景 |
| 卡片扁平化 | `.el-card` 无圆角1px边框 |
| 表格扁平化 | `.el-table` 深蓝灰表头 |
| 分页扁平化 | `.el-pagination` 无圆角深蓝灰选中 |
| 下拉菜单 | `.el-dropdown-menu` 无圆角阴影边框 |
| 对话框 | `.el-dialog` 无圆角扁平化头部尾部 |
## 五、全局主题配置 ✅
### 主色调
| 颜色 | 值 | 用途 |
|------|------|------|
| 主色 | `#1890ff` | Element Plus主题色 |
| 深蓝灰 | `#2c3e50` | 按钮主色、表头、激活状态 |
| 次深蓝灰 | `#34495e` | 悬浮状态、文字 |
| 绿色 | `#27ae60` / `#52c41a` | 成功状态 |
| 红色 | `#e74c3c` / `#f5222d` | 危险/错误状态 |
| 橙色 | `#faad14` | 警告状态 |
| 蓝色 | `#3498db` | 链接、信息 |
| 紫色 | `#722ed1` | 转化率图表 |
| 背景灰 | `#f5f7fa` / `#f0f2f5` | 页面背景 |
| 边框灰 | `#e1e8ed` / `#d5d9e0` | 边框分割线 |
### 设计风格
| 特性 | 说明 |
|------|------|
| 圆角 | 全局0圆角扁平化设计 |
| 阴影 | 轻阴影 `0 2px 8px rgba(44,62,80,0.1)` |
| 字体 | Helvetica Neue, PingFang SC, Microsoft YaHei |
| 字号 | 基础14px |
## 六、Store状态管理 ✅
| Store | 功能 |
|-------|------|
| userStore.js | 用户信息存储 `userInfo` `setUserInfo()` |
| tagsViewStore.js | 多标签页管理 `visitedViews` `addVisitedView()` `delVisitedView()` `delOthersViews()` `delAllViews()` `delLeftViews()` `delRightViews()` |
## 七、技术栈 ✅
| 技术 | 版本 |
|------|------|
| Vue | ^3.5.13 |
| Vite | ^6.0.3 |
| Element Plus | ^2.9.1 |
| Vue Router | ^4.5.0 |
| Pinia | ^3.0.2 |
| Axios | ^1.7.9 |
| ECharts | ^5.6.0 |
| VueUse | ^13.1.0 |
| Monaco Editor | ^0.52.2 |
| Xterm.js | ^5.3.0 |
| qrcode | ^1.5.4 |
| dayjs | ^1.11.13 |
## 表单组件优化 ✅已完成
### 1. FileSelector 文件选择组件 ✅
位置: `src/components/admin/FileSelector.vue`
功能:
- 通用文件/封面选择器
- 支持文件列表分页、搜索
- 支持文件上传
- 支持图片预览
- 支持按文件类型筛选(image/document/video/audio)
- 已选文件信息显示
### 2. UserSelector 用户选择组件 ✅
位置: `src/components/UserSelector/index.vue`
功能:
- 用户列表搜索选择
- 用于推荐人ID等需要选择用户的场景
- 显示用户ID、用户名、邮箱
### 3. UserDetail 编辑表单优化 ✅
- 推荐人ID: 改为使用UserSelector组件,显示用户头像、用户名、ID
- 用户封面: 新增FileSelector组件,支持预览和选择图片
-----------------------------------------------------------------------------------------------需要解决
每次解决后的内容写在-需要解决之间,不要写在外面
我不要你解释,不是我主动告诉你解释需求,那么你就根据问题开始直接编写代码解决问题或者完善功能,问题都是用-需要解决隔开的
对应完成的部分在当前文档记录并且进行标记✅已完成、⚠️部分完成、❌未完成这样显示