diff --git a/src/components/tableComponent.vue b/src/components/tableComponent.vue index 7392864..7d6f66b 100644 --- a/src/components/tableComponent.vue +++ b/src/components/tableComponent.vue @@ -190,7 +190,7 @@ const props = defineProps({ // 自定义表头类名函数 headerCellClassName: { type: Function, - default: () => "", + default: () => "custom-header", }, // 自定义单元格类名函数 cellClassName: { diff --git a/src/router/index.js b/src/router/index.js index ab1c73b..7e11391 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -311,6 +311,18 @@ export const constantRoutes = [ title: "电商交易", }, children: [ + { + path: 'trade/dataBoard', + component: () => import('@/views/trade/dataBoard'), + name: 'dataBoard', + hidden: false, + meta: { + title: "电商数据看板", + icon: "", + noCache: false, + link: null, + }, + }, { path: 'trade/agriculturalinputstrading', component: () => import('@/views/trade/agriculturalinputstrading'), @@ -361,7 +373,7 @@ export const constantRoutes = [ }, ], }, -{ + { path: '/brand', name: "brand", component: Layout, diff --git a/src/views/customer/customerCategory.vue b/src/views/customer/customerCategory.vue index 9320a1b..6be82f2 100644 --- a/src/views/customer/customerCategory.vue +++ b/src/views/customer/customerCategory.vue @@ -233,7 +233,7 @@ const generateMockData = () => { "id|+1": 10000, nickname: () => generateFoodNickname(), //昵称 userName: "@cname", //姓名 - accountNumber: Mock.mock("@id").toString().slice(0, 10), //账号 + accountNumber: "@integer(1000000000, 9999999999)", //账号 phoneNumber: "@integer(13000000000, 18999999999)", //手机号 sex: '@pick(["男", "女"])', //性别 "userStatus|1": [0, 1], //0异常 1正常 diff --git a/src/views/customer/customerManage.vue b/src/views/customer/customerManage.vue index 597898a..1d7eebd 100644 --- a/src/views/customer/customerManage.vue +++ b/src/views/customer/customerManage.vue @@ -218,7 +218,7 @@ const generateMockData = () => { "id|+1": 10000, nickname: () => generateFoodNickname(), //昵称 userName: "@cname", //姓名 - accountNumber: Mock.mock("@id").toString().slice(0, 10), //账号 + accountNumber: "@integer(1000000000, 9999999999)", //账号 phoneNumber: "@integer(13000000000, 18999999999)", //手机号 sex: '@pick(["男", "女"])', //性别 "userStatus|1": [0, 1], //0异常 1正常 diff --git a/src/views/goods/goodsCategory/index.vue b/src/views/goods/goodsCategory/index.vue index ee1653b..7dcd167 100644 --- a/src/views/goods/goodsCategory/index.vue +++ b/src/views/goods/goodsCategory/index.vue @@ -147,7 +147,6 @@ const onSubmit = () => { ElMessage.warning("请选择开始日期!"); return; } - console.log(formInline); loadData(); }; const resetForm = () => { @@ -268,12 +267,24 @@ const enableAndDisable = async (row, num) => { tableLoading.value = false; } }; -// 编辑操作 -const handleEdit = (row) => { - nowClickRow.value = row; - console.log("要编辑的行:", row); - dialogTitle.value = "编辑分类"; +// 添加分类 +const addCategory = () => { + dialogTitle.value = "添加分类"; + getGoodTypeList(); + Object.assign(dialogForm, { // 保持响应性,手动清空字段 + id: "", + type: 1, + name: "", + level: "", + parentId: "", + status: "1", + }); dialogFormVisible.value = true; +}; +// 编辑操作 +const handleEdit = async (row) => { + nowClickRow.value = row; + dialogTitle.value = "编辑分类"; getGoodTypeList(); dialogForm.id = row.id; dialogForm.type = row.type; @@ -281,15 +292,16 @@ const handleEdit = (row) => { dialogForm.level = row.level; dialogForm.parentId = row.parentId; dialogForm.status = row.status?.toString() ?? '1'; + + dialogForm.selectedNode = findNodeById(goodsOptions.value, row.parentId); + dialogFormVisible.value = true; }; // 删除操作 const handleDelete = (row) => { - console.log("要删除的行:", row); deleteGoods(row.id); }; // 批量删除 const batchDelete = () => { - console.log("要删除的行:", selectedIds.value); deleteGoods(selectedIds.value.join(",")); }; const deleteGoods = async (ids) => { @@ -371,22 +383,22 @@ const onSaveCategory = () => { try { proxy.$modal.loading("正在保存..."); let param = { ...dialogForm }; - param.level = dialogForm.selectedNode.level; - param.type = dialogForm.selectedNode.type; + param.level = dialogForm.selectedNode.level ?? ""; + param.type = dialogForm.selectedNode.type ?? ""; let response; - if (dialogTitle.value == "编辑分类") { - response = await categoryEdit(param); - } else { + if (dialogTitle.value == "添加分类") { response = await categoryAdd(param); + } else { + response = await categoryEdit(param); } proxy.$modal.closeLoading(); if (response.code == 200) { cancelDialog(); onSubmit(); - if (dialogTitle.value == "编辑分类") { - ElMessage.success("编辑成功!"); - } else { + if (dialogTitle.value == "添加分类") { ElMessage.success("添加成功!"); + } else { + ElMessage.success("编辑成功!"); } } else { ElMessage.error(response.msg); @@ -397,20 +409,6 @@ const onSaveCategory = () => { } }); }; -// 添加分类 -const addCategory = () => { - dialogTitle.value = "添加分类"; - getGoodTypeList(); - Object.assign(dialogForm, { // 保持响应性,手动清空字段 - id: "", - type: 1, - name: "", - level: "", - parentId: "", - status: "1", - }); - dialogFormVisible.value = true; -}; const cancelDialog = () => { Object.assign(dialogForm, { // 保持响应性,手动清空字段 id: "", diff --git a/src/views/goods/goodsManage/addGoods.vue b/src/views/goods/goodsManage/addGoods.vue index df0b064..ef4d629 100644 --- a/src/views/goods/goodsManage/addGoods.vue +++ b/src/views/goods/goodsManage/addGoods.vue @@ -54,7 +54,7 @@
- + @@ -219,6 +219,9 @@ import { getRegion } from "@/api/common"; import { ElMessage } from "element-plus"; import areaList from "./areaList"; +const route = useRoute() +const router = useRouter() + const formRef = ref(null) const formInline = reactive({ goodName: "", @@ -232,6 +235,7 @@ const formInline = reactive({ traceCode: "", //溯源码 specStyle: "1",//规格样式 1单规格 2多规格 + goodSpecs: "", salePrice: 1,//销售价格-单规格 stock: 1,//库存数量-单规格 netContent: 1,//净含量-单规格 @@ -324,6 +328,24 @@ const rules = reactive({ specStyle: [ { required: true, message: '请选择规格样式', trigger: 'change' } ], + goodSpecs: formInline.specStyle == '1' ? [ + { + required: true, + message: '请输入规格名称', + trigger: ['blur', 'change'] + }, + { + validator: (rule, value, callback) => { + console.log(value); + if (value == "" || value.trim() === "" ) { + callback(new Error('请输入规格名称')) + } else { + callback() + } + }, + trigger: ['blur', 'change'] + }, + ] : [], salePrice: formInline.specStyle == '1' ? [ { validator: (rule, value, callback) => { diff --git a/src/views/goods/goodsManage/editGoods.vue b/src/views/goods/goodsManage/editGoods.vue index e629540..644dba4 100644 --- a/src/views/goods/goodsManage/editGoods.vue +++ b/src/views/goods/goodsManage/editGoods.vue @@ -235,6 +235,7 @@ const formInline = reactive({ traceCode: "", //溯源码 specStyle: "1",//规格样式 1单规格 2多规格 + goodSpecs: "", salePrice: 1,//销售价格-单规格 stock: 1,//库存数量-单规格 netContent: 1,//净含量-单规格 @@ -327,6 +328,24 @@ const rules = reactive({ specStyle: [ { required: true, message: '请选择规格样式', trigger: 'change' } ], + goodSpecs: formInline.specStyle == '1' ? [ + { + required: true, + message: '请输入规格名称', + trigger: ['blur', 'change'] + }, + { + validator: (rule, value, callback) => { + console.log(value); + if (value == "" || value.trim() === "" ) { + callback(new Error('请输入规格名称')) + } else { + callback() + } + }, + trigger: ['blur', 'change'] + }, + ] : [], salePrice: formInline.specStyle == '1' ? [ { validator: (rule, value, callback) => { diff --git a/src/views/goods/goodsManage/seeDetails.vue b/src/views/goods/goodsManage/seeDetails.vue index 184bdd2..d991dc2 100644 --- a/src/views/goods/goodsManage/seeDetails.vue +++ b/src/views/goods/goodsManage/seeDetails.vue @@ -43,7 +43,7 @@
- +
@@ -88,9 +88,9 @@
- +
@@ -223,6 +223,7 @@ import { getRegion } from "@/api/common"; import { ElMessage } from "element-plus"; import areaList from "./areaList"; import useOperateStore from "@/store/modules/operate"; +import { computed } from "vue"; const operateStore = useOperateStore(); const route = useRoute() @@ -426,6 +427,7 @@ const rules = reactive({ { required: true, message: '请输入详细地址', trigger: 'blur' } ], }) + const addSpecs = () => { formInline.netWeight.push({ goodSpecs: "", @@ -613,15 +615,19 @@ const getGoodsInfo = async (goodId) => { } }; +let goodurls = computed(() => { + return formInline.goodUrl.split(",") +}) + watch(() => route.query, (newVal) => { - console.log("watch商品id:", newVal.goodId); + // console.log("watch商品id:", newVal.goodId); if (newVal.goodId) { getGoodsInfo(newVal.goodId); } }) onMounted(async () => { const { edit, goodId } = route.query; - console.log("onMounted商品id:", goodId); + // console.log("onMounted商品id:", goodId); getActiveInfo(); await getGoodTypeList(); getArea(); diff --git a/src/views/goods/goodsReview/auditGoods.vue b/src/views/goods/goodsReview/auditGoods.vue index 7b5b0b9..a9f79ca 100644 --- a/src/views/goods/goodsReview/auditGoods.vue +++ b/src/views/goods/goodsReview/auditGoods.vue @@ -43,7 +43,7 @@
- +
@@ -653,6 +653,10 @@ const getGoodsInfo = async (goodId) => { } }; +let goodurls = computed(() => { + return formInline.goodUrl.split(",") +}) + watch(() => route.query, (newVal) => { console.log("watch商品id:", newVal.goodId); if (newVal.goodId) { diff --git a/src/views/trade/dataBoard.vue b/src/views/trade/dataBoard.vue new file mode 100644 index 0000000..6fd0a46 --- /dev/null +++ b/src/views/trade/dataBoard.vue @@ -0,0 +1,416 @@ + + +