From fac91a81e2acc56d596ffb3c0eeaf483e75584d8 Mon Sep 17 00:00:00 2001 From: 97694731 <97694731@qq.com> Date: Mon, 29 Jun 2026 14:52:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node_modules/.vite/deps/_metadata.json | 26 ++-- src/api/dashboard.js | 8 +- src/api/product.js | 11 ++ src/api/purchaseOrder.js | 9 ++ src/api/shippingOrder.js | 23 ++- src/api/supplier.js | 8 + src/api/wangdian.js | 28 ++++ src/api/warehouse.js | 8 + src/components/AdminLayout.vue | 11 +- src/components/product/byGoods/index.vue | 18 ++- src/components/wareHouse/WarehouseList.vue | 16 +- src/router/index.js | 9 ++ src/utils/request.js | 4 +- src/views/admin/Dashboard.vue | 30 ++-- src/views/purchaseOrder/purchaseOrder.vue | 16 +- src/views/shippingOrder/shippingOrder.vue | 8 +- src/views/supplier/Supplier.vue | 14 +- src/views/wangdian/syncTaskList.vue | 162 +++++++++++++++++++++ vite.config.js | 4 +- 19 files changed, 359 insertions(+), 54 deletions(-) create mode 100644 src/api/wangdian.js create mode 100644 src/views/wangdian/syncTaskList.vue diff --git a/node_modules/.vite/deps/_metadata.json b/node_modules/.vite/deps/_metadata.json index d64e55eb..53555448 100644 --- a/node_modules/.vite/deps/_metadata.json +++ b/node_modules/.vite/deps/_metadata.json @@ -1,71 +1,71 @@ { - "hash": "780fd6b7", - "browserHash": "11a50aed", + "hash": "7466b81f", + "browserHash": "72dd502f", "optimized": { "@element-plus/icons-vue": { "src": "../../@element-plus/icons-vue/dist/index.js", "file": "@element-plus_icons-vue.js", - "fileHash": "e73a6617", + "fileHash": "a827a77d", "needsInterop": false }, "axios": { "src": "../../axios/index.js", "file": "axios.js", - "fileHash": "9ada0434", + "fileHash": "563efb6a", "needsInterop": false }, "crypto-js": { "src": "../../crypto-js/index.js", "file": "crypto-js.js", - "fileHash": "35b4399e", + "fileHash": "70871dfd", "needsInterop": true }, "dayjs": { "src": "../../dayjs/dayjs.min.js", "file": "dayjs.js", - "fileHash": "3c458ca9", + "fileHash": "330e0aa9", "needsInterop": true }, "element-plus": { "src": "../../element-plus/es/index.mjs", "file": "element-plus.js", - "fileHash": "65c76065", + "fileHash": "c8723d93", "needsInterop": false }, "element-plus/es/locale/lang/zh-cn": { "src": "../../element-plus/es/locale/lang/zh-cn.mjs", "file": "element-plus_es_locale_lang_zh-cn.js", - "fileHash": "05b5b909", + "fileHash": "5d10d7a9", "needsInterop": false }, "jsbarcode": { "src": "../../jsbarcode/bin/JsBarcode.js", "file": "jsbarcode.js", - "fileHash": "d60441c9", + "fileHash": "5b45d96a", "needsInterop": true }, "json-bigint": { "src": "../../json-bigint/index.js", "file": "json-bigint.js", - "fileHash": "4eb91e5f", + "fileHash": "43b512d4", "needsInterop": true }, "pinia": { "src": "../../pinia/dist/pinia.mjs", "file": "pinia.js", - "fileHash": "461b0d9b", + "fileHash": "9078f52d", "needsInterop": false }, "vue": { "src": "../../vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "aa9868f1", + "fileHash": "bd6fb29e", "needsInterop": false }, "vue-router": { "src": "../../vue-router/dist/vue-router.mjs", "file": "vue-router.js", - "fileHash": "010be937", + "fileHash": "d015433f", "needsInterop": false } }, diff --git a/src/api/dashboard.js b/src/api/dashboard.js index b9fb7399..ae35f793 100644 --- a/src/api/dashboard.js +++ b/src/api/dashboard.js @@ -15,10 +15,12 @@ export const fetchTodayStats = async () => { total_receiving_count: data?.total_receiving_count ?? 0, total_outbound_count: data?.total_outbound_count ?? 0, total_sale_count: data?.total_sale_count ?? 0, + today_sale_amount: data?.today_sale_amount ?? 0, yesterday_order_count: data?.yesterday_order_count ?? 0, yesterday_receiving_count: data?.yesterday_receiving_count ?? 0, yesterday_outbound_count: data?.yesterday_outbound_count ?? 0, - yesterday_sale_count: data?.yesterday_sale_count ?? 0 + yesterday_sale_count: data?.yesterday_sale_count ?? 0, + yesterday_sale_amount: data?.yesterday_sale_amount ?? 0 } } @@ -41,7 +43,7 @@ export const fetchEmployeeStats = async () => { /** * 获取店铺信息列表 * @param {Object} params - { time_range?: string, store_name?: string } - * @returns {Promise>} + * @returns {Promise>} */ export const fetchStoreInfo = async (params = {}) => { const response = await request.get(`${ADMIN_BASE}/store-info`, { params }) @@ -51,7 +53,7 @@ export const fetchStoreInfo = async (params = {}) => { return (data?.data ?? []).map(item => ({ store_name: item.store_name ?? '-', store_type: item.store_type ?? '-', - sale_count: item.sale_count ?? 0, + sale_amount: item.sale_amount ?? 0, outbound_count: item.outbound_count ?? 0, receiving_count: item.receiving_count ?? 0, order_count: item.order_count ?? 0, diff --git a/src/api/product.js b/src/api/product.js index 6e6850ae..c6805eb5 100644 --- a/src/api/product.js +++ b/src/api/product.js @@ -386,4 +386,15 @@ export const fetchDestroyLog = async ({ keyword, page, pageSize }) => { export const restoreProduct = async ({ destroy_log_id }) => { const response = await request.post(`${API_BASE}/restore`, { destroy_log_id }) return response.data +} + +/** + * 从旺店通同步商品 + * @param {Object} params + * @param {string} params.start_time - 开始时间 yyyy-MM-dd HH:mm:ss + * @param {string} params.end_time - 结束时间 yyyy-MM-dd HH:mm:ss + * @returns {Promise} + */ +export const syncGoodsFromWdt = async ({ start_time, end_time }) => { + return request.get('/wangdian/query-goods', { params: { start_time, end_time } }) } \ No newline at end of file diff --git a/src/api/purchaseOrder.js b/src/api/purchaseOrder.js index 98e9011a..9fc04832 100644 --- a/src/api/purchaseOrder.js +++ b/src/api/purchaseOrder.js @@ -122,3 +122,12 @@ export const releaseWave = async (data) => { export const exportPurchaseOrderToWdt = async (params) => { return request.get('/purchase-order/export-to-wdt', { params, responseType: 'blob' }) } + +/** + * 创建采购单(推送到旺店通) + * @param {number} purchase_order_id - 采购单ID + * @returns {Promise} 接口返回的 Promise 对象 + */ +export const pushPurchaseOrderToWdt = async (purchase_order_id) => { + return request.post('/wangdian/purchase-order-push', { purchase_order_id }) +} diff --git a/src/api/shippingOrder.js b/src/api/shippingOrder.js index 207a83d3..917b534c 100644 --- a/src/api/shippingOrder.js +++ b/src/api/shippingOrder.js @@ -224,16 +224,27 @@ export const fetchExpressInfo = async (waybillNo) => { } /** - * 回收快递单号 + * 回收快递单号(旧接口 /logistics/cancel) * @param {Object} params * @param {string|number} params.user_id - 用户ID * @param {string} params.logistics_no - 物流单号 * @returns {Promise} */ -export const recycleWaybillNo = async ({ user_id, logistics_no }) => { - const formData = new FormData() - formData.append('user_id', String(user_id)) - formData.append('logistics_no', logistics_no) - const res = await request.post(`/logistics/cancel`, formData) +// export const recycleWaybillNo = async ({ user_id, logistics_no }) => { +// const formData = new FormData() +// formData.append('user_id', String(user_id)) +// formData.append('logistics_no', logistics_no) +// const res = await request.post(`/logistics/cancel`, formData) +// return res.data +// } + +/** + * 回收快递单号(新接口 /print/cancelBmOrderApi) + * @param {Object} params + * @param {string} params.mailNo - 快递单号 + * @returns {Promise} + */ +export const recycleWaybillNo = async ({ mailNo }) => { + const res = await axios.post(`${PRINT_API_BASE}/api/print/cancelBmOrderApi`, { mailNo }) return res.data } \ No newline at end of file diff --git a/src/api/supplier.js b/src/api/supplier.js index 922c7f8c..53badbe0 100644 --- a/src/api/supplier.js +++ b/src/api/supplier.js @@ -83,4 +83,12 @@ export const updateSupplier = async (supplier) => { */ export const deleteSupplier = async (supplier) => { return request.post(`${API_BASE}/delete`, supplier) +} + +/** + * 同步供应商(从旺店通拉取) + * @returns {Promise} 接口返回的 Promise 对象 + */ +export const syncSupplierFromWdt = async () => { + return request.get('/wangdian/query-provider') } \ No newline at end of file diff --git a/src/api/wangdian.js b/src/api/wangdian.js new file mode 100644 index 00000000..09d789a0 --- /dev/null +++ b/src/api/wangdian.js @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +/** + * 标准化列表接口返回的数据格式 + */ +const normalizeListResponse = (payload) => { + const data = payload?.data + if (!data) return { list: [], total: 0 } + if (Array.isArray(data)) return { list: data, total: data.length } + return { + list: Array.isArray(data.list) ? data.list : [], + total: typeof data.total === 'number' ? data.total : 0 + } +} + +/** + * 获取旺店通同步任务列表 + * @param {Object} params + * @param {number} params.page - 当前页码 + * @param {number} params.pageSize - 每页条数 + * @returns {Promise<{list: Array, total: number}>} + */ +export const fetchSyncTaskList = async ({ page, pageSize }) => { + const response = await request.get('/wangdian/sync-task-list', { + params: { page, page_size: pageSize } + }) + return normalizeListResponse(response) +} diff --git a/src/api/warehouse.js b/src/api/warehouse.js index 9b179f7c..3c15ec8a 100644 --- a/src/api/warehouse.js +++ b/src/api/warehouse.js @@ -107,4 +107,12 @@ export const updateWarehouse = async (warehouse) => { */ export const deleteWarehouse = async (warehouse) => { return request.post(`${API_BASE}/delete`, warehouse) +} + +/** + * 同步仓库(从旺店通拉取) + * @returns {Promise} 接口返回的 Promise 对象 + */ +export const syncWarehouseFromWdt = async () => { + return request.get('/wangdian/query-warehouse') } \ No newline at end of file diff --git a/src/components/AdminLayout.vue b/src/components/AdminLayout.vue index 58457d0b..c4d3e94b 100644 --- a/src/components/AdminLayout.vue +++ b/src/components/AdminLayout.vue @@ -29,6 +29,15 @@ 账户类型 + + + + 同步列表 + +