From 37e08a5a14a7806de0ee5f353779b36ff4d4ebcc Mon Sep 17 00:00:00 2001 From: AriadenCaseblg Date: Sun, 12 Apr 2026 08:05:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(mer=5Fplat=5Fadmin):=20=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E7=AB=AF=E9=85=8D=E9=80=81=E4=BA=BA=E5=91=98=E3=80=81=E7=89=A9?= =?UTF-8?q?=E6=B5=81=E7=AE=A1=E7=90=86=E4=B8=8E=E9=85=8D=E5=A5=97=E8=83=BD?= =?UTF-8?q?=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增配送人员/员工接口与页面、物流创建页、Detail 基础组件与 useRefundOrder;增加 FullCalendar、moment 依赖并升级 Vue 至 2.6.12;补充变更说明文档;README 仅保留远程仓库地址,避免将凭据写入仓库。 Made-with: Cursor --- README.md | 7 + docs/change-0410.md | 13 ++ mer_plat_admin/package.json | 7 +- mer_plat_admin/src/api/deliveryPersonnel.js | 54 ++++++ mer_plat_admin/src/api/staff.js | 173 ++++++++++++++++++ .../src/components/base/DetailHeader.vue | 64 +++++++ .../src/components/base/DetailInfo.vue | 37 ++++ mer_plat_admin/src/libs/useRefundOrder.js | 57 ++++++ .../deliveryPersonnel/creatPersonnel.vue | 116 ++++++++++++ .../deliveryPersonnel/default.js | 6 + .../logisticsManagement/creatExpress.vue | 96 ++++++++++ 11 files changed, 628 insertions(+), 2 deletions(-) create mode 100644 docs/change-0410.md create mode 100644 mer_plat_admin/src/api/deliveryPersonnel.js create mode 100644 mer_plat_admin/src/api/staff.js create mode 100644 mer_plat_admin/src/components/base/DetailHeader.vue create mode 100644 mer_plat_admin/src/components/base/DetailInfo.vue create mode 100644 mer_plat_admin/src/libs/useRefundOrder.js create mode 100644 mer_plat_admin/src/views/systemSetting/deliveryPersonnel/creatPersonnel.vue create mode 100644 mer_plat_admin/src/views/systemSetting/deliveryPersonnel/default.js create mode 100644 mer_plat_admin/src/views/systemSetting/logisticsManagement/creatExpress.vue diff --git a/README.md b/README.md index 4c62eff..6f55ff9 100644 --- a/README.md +++ b/README.md @@ -299,6 +299,13 @@ bash test_integration_consumer.sh # 验证多商户消费结果 mysql -u root -p < test_verify_e2e.sql # 端到端数据确认 ``` +--- + +## git 仓库 + +远程地址:(凭据请使用个人访问令牌或本地凭据管理,勿写入文档。) + + --- ## 已知问题与修复记录 diff --git a/docs/change-0410.md b/docs/change-0410.md new file mode 100644 index 0000000..a948509 --- /dev/null +++ b/docs/change-0410.md @@ -0,0 +1,13 @@ +# 补充修改 + +## 商户端管理后台中订单管理的功能移植到平台端管理后台 + +- **已修复**功能说明文档:https://doc.crmeb.com/crmebjavalandmer/mer_v2_2/34068 +- **已修复**移植过来的功能菜单名称加商户的前缀,区别于平台端管理后台原有的订单管理功能页 +- **已修复**不改变平台端管理后台原有的订单管理功能页 +- **已修复**在平台端管理后台左侧的订单目录下加入移植过来的功能页面菜单 + +## 订单相关 + +- **已修复**1. 新增“订单打印”功能,点击订单打印按钮(不同于打印小票),新打开一个订单详情(含商品信息,收货信息)的单独页面(不需要页面layout),点击页面上的“打印”按钮,可以直接使用浏览器打印 +- **已修复**2. 订单打印详情页中的商品相关信息使用eb_sync_order_detail_staging中的product_name,info字段的商品详细信息 diff --git a/mer_plat_admin/package.json b/mer_plat_admin/package.json index 99fa64d..9cd1556 100644 --- a/mer_plat_admin/package.json +++ b/mer_plat_admin/package.json @@ -42,6 +42,8 @@ }, "dependencies": { "@babel/parser": "^7.9.6", + "@fullcalendar/resource-timeline": "^6.1.20", + "@fullcalendar/vue": "^6.1.20", "@riophae/vue-treeselect": "0.4.0", "async-validator": "^1.11.2", "axios": "^0.24.0", @@ -57,6 +59,7 @@ "js-cookie": "2.2.0", "jsonlint": "1.6.3", "jszip": "3.2.1", + "moment": "^2.30.1", "mpvue-calendar": "^2.3.7", "normalize.css": "7.0.0", "nprogress": "0.2.0", @@ -68,7 +71,7 @@ "script-loader": "0.7.2", "throttle-debounce": "^2.1.0", "vconsole": "^3.3.2", - "vue": "2.6.10", + "vue": "2.6.12", "vue-awesome-swiper": "^3.1.3", "vue-cropper": "^0.5.8", "vue-echarts": "^4.0.3", @@ -109,7 +112,7 @@ "svg-sprite-loader": "4.1.3", "svgo": "1.2.0", "vue-lazyload": "^1.3.3", - "vue-template-compiler": "2.6.10" + "vue-template-compiler": "2.6.12" }, "engines": { "node": ">=8.9", diff --git a/mer_plat_admin/src/api/deliveryPersonnel.js b/mer_plat_admin/src/api/deliveryPersonnel.js new file mode 100644 index 0000000..2ae4b06 --- /dev/null +++ b/mer_plat_admin/src/api/deliveryPersonnel.js @@ -0,0 +1,54 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- + +import request from '@/utils/request'; + +/** + * @description 商户配送人员分页列表 + */ +export function personnelListApi(params) { + return request({ + url: '/admin/merchant/delivery/personnel/page', + method: 'get', + params, + }); +} + +/** + * @description 新增商户配送人员 + */ +export function personnelSaveApi(data) { + return request({ + url: '/admin/merchant/delivery/personnel/save', + method: 'post', + data, + }); +} + +/** + * @description 编辑商户配送人员 + */ +export function personnelEditApi(data) { + return request({ + url: '/admin/merchant/delivery/personnel/edit', + method: 'post', + data, + }); +} + +/** + * @description 删除商户配送人员 + */ +export function personnelDeleteApi(id) { + return request({ + url: `admin/merchant/delivery/personnel/delete/${id}`, + method: 'post', + }); +} diff --git a/mer_plat_admin/src/api/staff.js b/mer_plat_admin/src/api/staff.js new file mode 100644 index 0000000..edc7bd7 --- /dev/null +++ b/mer_plat_admin/src/api/staff.js @@ -0,0 +1,173 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- + +import request from '@/utils/request'; + +/** + * 分页列表 + * @param + */ +export function employeeRoleList(pram) { + const data = { + page: pram.page, + limit: pram.limit, + keywords: pram.keywords, + status: pram.status, + }; + return request({ + url: '/admin/merchant/employee/list', + method: 'get', + params: data, + }); +} +/** + * 删除 + * @param + */ +export function employeeDelRole(id) { + const data = { + id: id, + }; + return request({ + url: 'admin/merchant/employee/delete', + method: 'get', + params: data, + }); +} +/** + * 详情 + * @param + */ +export function employeeGetInfo(pram) { + return request({ + url: `/admin/merchant/employee/info/${pram}`, + method: 'GET', + }); +} +/** + * 新增 + * @param + */ +export function employeeAddRole(pram) { + const data = { + avatar: pram.avatar, + name: pram.name, + phone: pram.phone, + role: pram.role, + status: pram.status, + uid: pram.uid, + id: pram.id, + }; + return request({ + url: '/admin/merchant/employee/save', + method: 'POST', + data: data, + }); +} +/** + * 修改 + * @param + */ +export function employeeUpdateRole(pram) { + const data = { + avatar: pram.avatar, + name: pram.name, + phone: pram.phone, + role: pram.role, + status: pram.status, + uid: pram.uid, + id: pram.id, + }; + return request({ + url: '/admin/merchant/employee/update', + method: 'post', + data: data, + }); +} + +/** + * 员工服务分页列表 + * @param + */ +export function serviceStaffListApi(pram) { + const data = { + page: pram.page, + limit: pram.limit, + keywords: pram.keywords, + status: pram.status, + }; + return request({ + url: '/admin/merchant/service/staff/list', + method: 'get', + params: data, + }); +} +/** + * 员工服务删除 + * @param + */ +export function serviceStaffDelRoleApi(id) { + return request({ + url: `/admin/merchant/service/staff/delete/${id}`, + method: 'post', + }); +} + +/** + * 员工服务新增 + * @param + */ +export function serviceStaffAddApi(pram) { + const data = { + idPhoto: pram.idPhoto, + name: pram.name, + phone: pram.phone, + sort: pram.sort, + status: pram.status, + userId: pram.userId, + id: pram.id, + }; + return request({ + url: '/admin/merchant/service/staff/save', + method: 'POST', + data: data, + }); +} +/** + * 员工服务修改 + * @param + */ +export function serviceStaffUpdateApi(pram) { + const data = { + idPhoto: pram.idPhoto, + name: pram.name, + phone: pram.phone, + sort: pram.sort, + status: pram.status, + userId: pram.userId, + id: pram.id, + }; + return request({ + url: '/admin/merchant/service/staff/update', + method: 'post', + data: data, + }); +} + +/** + * 员工服务修改状态 + * @param + */ +export function serviceStaffStatusApi(id) { + return request({ + url: `/admin/merchant/service/staff/status/${id}`, + method: 'post', + }); +} \ No newline at end of file diff --git a/mer_plat_admin/src/components/base/DetailHeader.vue b/mer_plat_admin/src/components/base/DetailHeader.vue new file mode 100644 index 0000000..193f2ed --- /dev/null +++ b/mer_plat_admin/src/components/base/DetailHeader.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/mer_plat_admin/src/components/base/DetailInfo.vue b/mer_plat_admin/src/components/base/DetailInfo.vue new file mode 100644 index 0000000..5208d08 --- /dev/null +++ b/mer_plat_admin/src/components/base/DetailInfo.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/mer_plat_admin/src/libs/useRefundOrder.js b/mer_plat_admin/src/libs/useRefundOrder.js new file mode 100644 index 0000000..60d06b7 --- /dev/null +++ b/mer_plat_admin/src/libs/useRefundOrder.js @@ -0,0 +1,57 @@ +import { couponDeleteApi } from '@/api/product'; +import { orderAuditApi, refundOrderReceivingApi } from '@/api/order'; +import modalSure from '@/libs/modal-sure'; +import { MessageBox, Message } from 'element-ui'; +export default function useRefundOrder() { + //商家确认收货 + const onConfirmReceipt = (refundOrderNo) => { + return new Promise((resolve, reject) => { + MessageBox.confirm('确定已经收到所有退款商品吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(async () => { + await refundOrderReceivingApi(refundOrderNo).then(() => { + Message.success('确认收货成功'); + return resolve(); + }); + }) + .catch(() => { + reject(); + Message({ + type: 'info', + message: '已取消', + }); + }); + }); + }; + + //审核通过到店退款 + const onApprovedReview = (data) => { + return new Promise((resolve, reject) => { + MessageBox.confirm('您确定同意此退款单吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(async () => { + await orderAuditApi(data).then(() => { + Message.success('审核成功'); + return resolve(); + }); + }) + .catch(() => { + reject(); + Message({ + type: 'info', + message: '已取消', + }); + }); + }); + }; + return { + onConfirmReceipt, + onApprovedReview, + }; +} diff --git a/mer_plat_admin/src/views/systemSetting/deliveryPersonnel/creatPersonnel.vue b/mer_plat_admin/src/views/systemSetting/deliveryPersonnel/creatPersonnel.vue new file mode 100644 index 0000000..ca0680b --- /dev/null +++ b/mer_plat_admin/src/views/systemSetting/deliveryPersonnel/creatPersonnel.vue @@ -0,0 +1,116 @@ + + + + diff --git a/mer_plat_admin/src/views/systemSetting/deliveryPersonnel/default.js b/mer_plat_admin/src/views/systemSetting/deliveryPersonnel/default.js new file mode 100644 index 0000000..da9b8f7 --- /dev/null +++ b/mer_plat_admin/src/views/systemSetting/deliveryPersonnel/default.js @@ -0,0 +1,6 @@ +export const defaultData = { + id: 0, + personnelName: '', + personnelPhone: '', + sort: 0, +}; diff --git a/mer_plat_admin/src/views/systemSetting/logisticsManagement/creatExpress.vue b/mer_plat_admin/src/views/systemSetting/logisticsManagement/creatExpress.vue new file mode 100644 index 0000000..90f2cfd --- /dev/null +++ b/mer_plat_admin/src/views/systemSetting/logisticsManagement/creatExpress.vue @@ -0,0 +1,96 @@ + + + +