From 930f48bfa33f02f903879e2f7ec96b5b9dff888f Mon Sep 17 00:00:00 2001 From: zc <2064281269@qq.com> Date: Fri, 21 Nov 2025 21:43:28 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=8D=96=E5=AE=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/api/order.ts | 9 +- src/config/menuList.ts | 15 +- src/views/order/list/index.vue | 12 +- src/views/order/list/pack-dialog.vue | 36 ++++- src/views/seller-manage/list/config.ts | 45 ++++++ src/views/seller-manage/list/index.vue | 214 +++++++++++++++++++++++++ yarn.lock | 12 ++ 8 files changed, 324 insertions(+), 20 deletions(-) create mode 100644 src/views/seller-manage/list/config.ts create mode 100644 src/views/seller-manage/list/index.vue diff --git a/package.json b/package.json index 4806080..c7ba53c 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.6.8", + "element-china-area-data": "^6.1.0", "element-plus": "^2.11.5", "lz-utils-lib": "^1.0.51", "pinia": "^2.1.7", diff --git a/src/api/order.ts b/src/api/order.ts index b470b0c..e2c29e6 100644 --- a/src/api/order.ts +++ b/src/api/order.ts @@ -14,7 +14,14 @@ const order = { */ getUserReviews: ['/comment/list'], // 获取用户评论 agreeComment: ['/comment/agree'], // 同意 - rejectComment: ['/comment/reject'] // 拒绝 + rejectComment: ['/comment/reject'], // 拒绝 + + /** + * 卖家管理 + */ + getSellerList: ['/seller/list'], // 卖家列表 + updateSeller: ['/seller/insertOrUpdate'], // 添加卖家 + updateAddress: ['/warehouse/insertOrUpdate'] // 添加仓库 } export default order diff --git a/src/config/menuList.ts b/src/config/menuList.ts index 8997efd..202bd2b 100644 --- a/src/config/menuList.ts +++ b/src/config/menuList.ts @@ -452,13 +452,13 @@ export default [ childList: [] } */ ] - } - /* { + }, + { id: 60, - resourceName: '渠道管理', + resourceName: '卖家管理', resourceType: 0, resourceCode: null, - path: '/channel', + path: '/seller-manage', pid: 0, resourceDesc: null, tenantId: 2, @@ -472,10 +472,10 @@ export default [ childList: [ { id: 61, - resourceName: '渠道配置', + resourceName: '卖家列表', resourceType: 1, resourceCode: null, - path: '/channel/config/index', + path: '/seller-manage/list/index', pid: 60, resourceDesc: null, tenantId: 2, @@ -489,7 +489,8 @@ export default [ childList: [] } ] - }, + } + /* { id: 110, resourceName: '产品管理', diff --git a/src/views/order/list/index.vue b/src/views/order/list/index.vue index b256a3a..63716b1 100644 --- a/src/views/order/list/index.vue +++ b/src/views/order/list/index.vue @@ -266,13 +266,13 @@ interface Order { const tabs = reactive([ { name: 'all', label: '全部' }, - { name: 'wait_shipping', label: '待发货', count: 3544 }, + { name: 'wait_shipping', label: '待发货', count: '' }, { name: 'shipping', label: '已发货' }, { name: 'shipped', label: '已投递' }, - { name: 'delivered', label: '已妥投' }, + { name: 'delivered', label: '确认收货' }, { name: 'apply_cancel', label: '买家取消' }, { name: 'cancel', label: '卖家取消' }, - { name: 'close', label: '已取消' }, + { name: 'close', label: '已关闭' }, { name: 'delete', label: '已删除' }, { name: 'refund', label: '已退款' } ]) @@ -285,7 +285,7 @@ const statusShortcuts = reactive([ ]) */ const summary = reactive({ - totalOrders: 3544 + totalOrders: 0 }) const orders = ref([]) @@ -590,6 +590,10 @@ const handleGetOrderList = async (searchData: any = {}) => { }) */ return item }) + summary.totalOrders = res.data.total + if (activeTab.value === 'wait_shipping') { + tabs.find((item) => item.name === 'wait_shipping')!.count = res.data.total + } } handleGetOrderList() diff --git a/src/views/order/list/pack-dialog.vue b/src/views/order/list/pack-dialog.vue index 74ca2c8..9c49048 100644 --- a/src/views/order/list/pack-dialog.vue +++ b/src/views/order/list/pack-dialog.vue @@ -55,12 +55,15 @@ 物流信息 - - + + + + + ([]) // 表单相关 const formRef = ref() const formData = ref({ - trackingNumber: '', + trackNumber: '', logisticsCompany: '', shippingAmount: '', - packageImageUrls: [] + packageImageUrls: [], + sellerId: [] }) const formRules: FormRules = { - trackingNumber: [{ required: true, message: '请输入物流单号', trigger: 'blur' }], + trackNumber: [{ required: true, message: '请输入物流单号', trigger: 'blur' }], logisticsCompany: [{ required: true, message: '请输入物流公司', trigger: 'blur' }], shippingAmount: [{ required: true, message: '请输入运费', trigger: 'blur' }], packageImageUrls: [{ required: true, message: '请上传照片', trigger: 'blur' }] @@ -217,7 +222,9 @@ const handleSubmit = async () => { try { const submitData = { tradeOrderLineIds: selectedRows.value.map((row) => row.orderLineId), - ...formData.value + ...formData.value, + sellerId: formData.value.sellerId[0], + sellerWarehouseId: formData.value.sellerId[1] } await api.order.packOrder.post!(submitData) ElMessage.success('打包成功') @@ -247,7 +254,7 @@ const handleClose = (isClose = true) => { // 重置数据 selectedRows.value = [] formData.value = { - trackingNumber: '', + trackNumber: '', logisticsCompany: '', shippingAmount: '', packageImageUrls: [] @@ -257,11 +264,24 @@ const handleClose = (isClose = true) => { isClose && emit('close') } +const sellerList = ref([]) + // 监听弹窗打开和 id 变化 watch( () => dialogVisible.value, (visible) => { if (visible) { + api.order.getSellerList.post!<{ rows: any[] }>().then((res) => { + sellerList.value = res.data.rows.map((item) => ({ + label: item.sellerName, + value: item.id, + children: + item.sellerWarehouseList?.map((child) => ({ + label: `${child.province},${child.city},${child.district},${child.warehouseDetailAddress}:${child.warehousePhone}`, + value: child.id + })) || [] + })) + }) tableData.value = [] ;(props.orderLineData || []).forEach((item: OrderItem) => { tableData.value.push( diff --git a/src/views/seller-manage/list/config.ts b/src/views/seller-manage/list/config.ts new file mode 100644 index 0000000..50d0a22 --- /dev/null +++ b/src/views/seller-manage/list/config.ts @@ -0,0 +1,45 @@ +export const orderStatusOptions = [ + { label: '待支付', value: 'wait_pay' }, + { label: '待发货', value: 'wait_shipping' }, + { label: '已经发货', value: 'shipping' }, + { label: '已接收', value: 'delivered' }, + { label: '全部退款', value: 'all_refund' }, + { label: '部分退款', value: 'part_refund' } +] + +const configData = ref() +export const initConfig = () => { + configData.value = pageConfig({ + search: { + id: { label: '卖家ID' }, + sellerName: { label: '卖家名称' } + }, + table: { + index: { label: '序号' }, + id: { label: '卖家ID' }, + sellerName: { label: '卖家名称' }, + sellerCount: { label: '卖出订单数量' }, + refundCount: { label: '退款数量' }, + sellerOriginGmv: { label: '卖家原始销售金额', width: 120 }, + sellerSaleGmv: { label: '已经销售金额' }, + refundOriginGmv: { label: '退款原始金额' }, + refundSaleGmv: { label: '退款销售金额' }, + createTimestamp: { label: '创建时间' }, + btn: { + types: ['primary', 'success', 'danger'], + names: ['编辑', '编辑仓库', '删除'], + width: 170 + } + }, + dialog: [ + { + sellerName: { label: '卖家名称' } + }, + { + sellerName: { label: '卖家名称', disabled: true }, + addresses: { label: '仓库地址', slot: 'addresses', class: '!w-full' } + } + ] + }) + return configData +} diff --git a/src/views/seller-manage/list/index.vue b/src/views/seller-manage/list/index.vue new file mode 100644 index 0000000..86e5c11 --- /dev/null +++ b/src/views/seller-manage/list/index.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/yarn.lock b/yarn.lock index b344215..2f8dcc0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1560,6 +1560,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +china-division@^2.7.0: + version "2.7.0" + resolved "https://registry.npmmirror.com/china-division/-/china-division-2.7.0.tgz#4060a4d243be66c7833dea64a48a4038f3e53e74" + integrity sha512-4uUPAT+1WfqDh5jytq7omdCmHNk3j+k76zEG/2IqaGcYB90c2SwcixttcypdsZ3T/9tN1TTpBDoeZn+Yw/qBEA== + chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -1964,6 +1969,13 @@ electron-to-chromium@^1.5.204: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.208.tgz#609c29502fd7257b4d721e3446f3ae391a0ca1b3" integrity sha512-ozZyibehoe7tOhNaf16lKmljVf+3npZcJIEbJRVftVsmAg5TeA1mGS9dVCZzOwr2xT7xK15V0p7+GZqSPgkuPg== +element-china-area-data@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/element-china-area-data/-/element-china-area-data-6.1.0.tgz#f14b90c0762b21432e097ed5be8423514a0b57e3" + integrity sha512-IkpcjwQv2A/2AxFiSoaISZ+oMw1rZCPUSOg5sOCwT5jKc96TaawmKZeY81xfxXsO0QbKxU5LLc6AirhG52hUmg== + dependencies: + china-division "^2.7.0" + element-plus@^2.11.5: version "2.11.5" resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.11.5.tgz#752c2c4f70e86d615e577686c2f08054860a0902"