From 44b2df144c6cac463774eaefebaa345704b16cc5 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 8 Sep 2026 15:25:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=9B=B4=E6=94=B9=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 8 +- .gitignore | 8 +- src/api/hard/hard-invoice.ts | 24 +- src/api/hard/hard-order.ts | 106 + src/api/hard/hard-printer.ts | 62 + src/api/hard/hard-terminal-log-file.ts | 98 + src/api/hard/hard-xfj-log.ts | 40 + src/api/wallet/wallet-transaction.ts | 49 + src/components/DraggableDepTree/index.vue | 326 ++- src/components/SearchPanel/index.vue | 270 ++ .../UserIdentityInfo/identity-options.ts | 30 + src/components/UserIdentityInfo/index.vue | 162 ++ src/components/UserIdentityQuery/index.vue | 152 + src/components/UserIdentityQuery/types.ts | 62 + src/components/UserInfoCell/index.vue | 135 + src/components/index.ts | 8 + src/constants/autoRefund.ts | 98 + src/constants/userIdentity.ts | 8 + src/hooks/table.ts | 8 +- src/router/route.ts | 9 + src/views/admin/audit/index.vue | 19 +- src/views/admin/client/index.vue | 19 +- src/views/admin/i18n/index.vue | 116 +- src/views/admin/log/index.vue | 17 +- src/views/admin/param/index.vue | 19 +- src/views/admin/sensitive/index.vue | 17 +- src/views/admin/social/index.vue | 19 +- src/views/admin/sysArea/index.vue | 19 +- src/views/admin/sysUserCar/index.vue | 254 +- .../cmp/staffing-total-table.vue | 149 +- src/views/admin/system/dept/index.vue | 58 +- src/views/admin/system/menu/index.vue | 85 +- src/views/admin/system/post/index.vue | 19 +- src/views/admin/system/role/index.vue | 19 +- .../system/sys-user-transaction/index.vue | 111 +- src/views/admin/system/user/index.vue | 167 +- .../admin/system/userFaceApprove/index.vue | 81 +- src/views/admin/token/index.vue | 101 +- src/views/admin/userTrustedDevice/index.vue | 17 +- src/views/hard/components/hard-door-log.vue | 5 + .../hard/components/print-task-dialog.vue | 147 + src/views/hard/components/sale-table.vue | 6 +- src/views/hard/hard-after-sale/index.vue | 310 +- .../hard/hard-after-sale/order-refund.vue | 2572 +++++++++++++++-- .../hard/hard-door-manager/goods-putaway.vue | 28 +- src/views/hard/hard-door-manager/index.vue | 2 +- src/views/hard/hard-manager/details.vue | 2382 +++++++++++++++ src/views/hard/hard-manager/form.vue | 44 +- src/views/hard/hard-manager/index.vue | 711 ++++- .../hard/hard-manager/printer-dialog.vue | 289 ++ .../hard-terminal-log-file/device-panel.vue | 88 + .../file-tree-panel.vue | 88 + .../hard/hard-terminal-log-file/form.vue | 229 ++ .../hard/hard-terminal-log-file/index.vue | 521 ++++ .../hard-terminal-log-file/log-viewer.vue | 140 + .../hard-terminal-log-file/preview-panel.vue | 74 + src/views/hard/xfj/xfj-log/index.vue | 152 + .../thirdparty/third-key-manage/index.vue | 27 +- src/views/thirdparty/third-pay-log/index.vue | 81 +- .../thirdparty/third-pay-order/index.vue | 382 +-- .../wallet/components/code-use-table.vue | 26 +- .../components/transaction-info-form.vue | 88 + .../wallet/components/transaction-list.vue | 52 +- .../components/transaction-remark-form.vue | 93 + src/views/wallet/wallet-active/index.vue | 51 +- src/views/wallet/wallet-cz-total/index.vue | 350 ++- src/views/wallet/wallet-cz/index.vue | 195 +- src/views/wallet/wallet-foreign/index.vue | 25 +- src/views/wallet/wallet-freeze/index.vue | 31 +- src/views/wallet/wallet-inactive/index.vue | 80 +- src/views/wallet/wallet-jz/index.vue | 156 +- .../wallet/wallet-manage/change-balance.vue | 27 + src/views/wallet/wallet-manage/index.vue | 113 +- src/views/wallet/wallet-qb/index.vue | 101 +- .../wallet/wallet-recharge-apply/index.vue | 214 +- .../wallet/wallet-recharge-invoice/index.vue | 164 +- .../wallet/wallet-recharge-water/index.vue | 106 +- .../wallet/wallet-rule-transaction/index.vue | 82 +- src/views/wallet/wallet-stride/index.vue | 25 +- src/views/wallet/wallet-th/index.vue | 146 +- src/views/wallet/wallet-tk/index.vue | 146 +- .../components/wallet-rule-table-dialog.vue | 67 +- src/views/wallet/wallet-xf/index.vue | 174 +- 钱包流水标签备注-权限及字典配置.txt | 56 + 84 files changed, 11701 insertions(+), 2114 deletions(-) create mode 100644 src/api/hard/hard-printer.ts create mode 100644 src/api/hard/hard-terminal-log-file.ts create mode 100644 src/api/hard/hard-xfj-log.ts create mode 100644 src/components/SearchPanel/index.vue create mode 100644 src/components/UserIdentityInfo/identity-options.ts create mode 100644 src/components/UserIdentityInfo/index.vue create mode 100644 src/components/UserIdentityQuery/index.vue create mode 100644 src/components/UserIdentityQuery/types.ts create mode 100644 src/components/UserInfoCell/index.vue create mode 100644 src/constants/autoRefund.ts create mode 100644 src/constants/userIdentity.ts create mode 100644 src/views/hard/components/print-task-dialog.vue create mode 100644 src/views/hard/hard-manager/details.vue create mode 100644 src/views/hard/hard-manager/printer-dialog.vue create mode 100644 src/views/hard/hard-terminal-log-file/device-panel.vue create mode 100644 src/views/hard/hard-terminal-log-file/file-tree-panel.vue create mode 100644 src/views/hard/hard-terminal-log-file/form.vue create mode 100644 src/views/hard/hard-terminal-log-file/index.vue create mode 100644 src/views/hard/hard-terminal-log-file/log-viewer.vue create mode 100644 src/views/hard/hard-terminal-log-file/preview-panel.vue create mode 100644 src/views/hard/xfj/xfj-log/index.vue create mode 100644 src/views/wallet/components/transaction-info-form.vue create mode 100644 src/views/wallet/components/transaction-remark-form.vue create mode 100644 钱包流水标签备注-权限及字典配置.txt diff --git a/.env.development b/.env.development index 61ac088..5da1377 100644 --- a/.env.development +++ b/.env.development @@ -11,15 +11,15 @@ ENV = 'development' # VITE_ADMIN_PROXY_PATH = http://123.157.250.162:8089/api/ # 测试线上 # VITE_ADMIN_PROXY_PATH = http://123.156.230.15:8089/api/ # 测试线上-过期 # VITE_ADMIN_PROXY_PATH = http://localhost:9999/ -# VITE_ADMIN_PROXY_PATH = https://dzc-test-1.fy.takin.cc # 邓-本地 -VITE_ADMIN_PROXY_PATH = https://www.pjzhhq.cn/api # 正式环境线上 +VITE_ADMIN_PROXY_PATH = https://dzc-test-1.fy.takin.cc # 邓-本地 +# VITE_ADMIN_PROXY_PATH = https://www.pjzhhq.cn/api # 正式环境线上 # 图片访问基础地址 # VITE_IMAGE_BASE_PATH = http://123.157.250.162:8089/api/ # 测试线上 # VITE_IMAGE_BASE_PATH = http://123.156.230.15:8089/api/ # 测试线上-过期 # VITE_IMAGE_BASE_PATH = http://localhost:9999 -# VITE_IMAGE_BASE_PATH = https://dzc-test-1.fy.takin.cc # 邓-本地 -VITE_IMAGE_BASE_PATH = https://www.pjzhhq.cn/api # 正式环境线上 +VITE_IMAGE_BASE_PATH = https://dzc-test-1.fy.takin.cc # 邓-本地 +# VITE_IMAGE_BASE_PATH = https://www.pjzhhq.cn/api # 正式环境线上 # 代码生成服务地址 VITE_GEN_PROXY_PATH = http://192.168.110.156:5003 diff --git a/.gitignore b/.gitignore index 30119dd..66c5276 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,10 @@ coverage/ # 缓存文件 .cache/ -.parcel-cache/ \ No newline at end of file +.parcel-cache/ + +# AI 工具辅助目录 +.v2c/ +.video_agent/ +.mimosa/ +.zcode/ \ No newline at end of file diff --git a/src/api/hard/hard-invoice.ts b/src/api/hard/hard-invoice.ts index 7a9b8dc..1891790 100644 --- a/src/api/hard/hard-invoice.ts +++ b/src/api/hard/hard-invoice.ts @@ -1,10 +1,28 @@ import request from "/@/utils/request" -export function print(query?: Object) { +export function print(data?: Object) { return request({ url: "/hard/hard-invoice/print", - method: "get", - params: query, + method: "post", + data, + }) +} + +/** 失败任务按原打印序号重试。 */ +export function retry(data?: Object) { + return request({ + url: "/hard/hard-invoice/retry", + method: "post", + data, + }) +} + +/** 已打印兑换券创建下一打印序号并记录人工原因。 */ +export function reprint(data?: Object) { + return request({ + url: "/hard/hard-invoice/reprint", + method: "post", + data, }) } diff --git a/src/api/hard/hard-order.ts b/src/api/hard/hard-order.ts index df3be9b..2f627a8 100644 --- a/src/api/hard/hard-order.ts +++ b/src/api/hard/hard-order.ts @@ -1,5 +1,111 @@ import request from "/@/utils/request" +/** 订单详情中的单张识别证据,字段来自 HardOrderEvidenceImageVo。 */ +export interface HardOrderEvidenceImage { + /** 服务端证据主键。 */ + id: string | number + /** 证据类型稳定编码。 */ + evidenceType: "FACE_RECOGNITION" | "MENU_RECOGNITION" | string + /** 图片角色稳定编码。 */ + evidenceRole: "FACE_REFERENCE" | "FACE_LIVE" | "MENU_LIVE" | string + /** 图片角色中文名称。 */ + evidenceRoleName?: string + /** 同一角色下从零开始的图片序号。 */ + sequenceNo: number + /** 终端采集时间。 */ + capturedAt?: string + /** 人脸识别相似度快照。 */ + similarity?: number | string + /** 产生证据的设备主键。 */ + hardId?: string | number + /** 证据文件访问地址。 */ + imageUrl?: string + /** 证据状态稳定编码。 */ + status: "PENDING" | "AVAILABLE" | "UNAVAILABLE" | string + /** 永久缺失或复制失败原因。 */ + failureReason?: string +} + +/** 外卖订单的期望送达配置;非外卖或历史订单未记录时为空。 */ +export interface HardTakeOutAppointment { + /** 送达方式稳定编码:IMMEDIATE 表示立即送,SCHEDULED 表示预约时段。 */ + expectDeliveryType?: "IMMEDIATE" | "SCHEDULED" | string + /** 预约送达日期,仅预约时段模式使用。 */ + expectDeliveryDate?: string + /** 预约时段开始时间。 */ + expectDeliveryStart?: string + /** 预约时段结束时间。 */ + expectDeliveryEnd?: string + /** 立即送模式下计算出的预计送达时间点。 */ + expectArriveTime?: string +} + +/** 当前页面使用的订单详情扩展字段。 */ +export interface HardOrderDetail { + /** 订单主键。 */ + id: string | number + /** 设备名称。 */ + hardName?: string + /** 订单详情才返回的长期识别证据。 */ + evidenceImages?: HardOrderEvidenceImage[] + /** 外卖订单详情关联的期望送达配置。 */ + takeOutAppt?: HardTakeOutAppointment + /** 兼容订单详情其余历史字段。 */ + [key: string]: unknown +} + +/** 订单列表统计查询条件;字段与订单分页筛选保持一致。 */ +export type HardOrderStatisticsQuery = Record + +/** 订单按餐段汇总的统计,金额单位均为分。 */ +export interface HardOrderMealStatistics { + /** 餐段字典编码;历史订单未记录时为空。 */ + hourType?: string | null + /** 订单数。 */ + orderCount?: number + /** 购物车商品份数。 */ + productCount?: number + /** 商品总价。 */ + totalPrice?: number + /** 额外支付。 */ + extraPrice?: number + /** 配送费。 */ + deliveryPrice?: number + /** 实际支付。 */ + payPrice?: number + /** 已退款金额。 */ + refundPrice?: number + /** 订单实际金额,即实际支付减已退款。 */ + actualPrice?: number +} + +/** 订单统计通用汇总,金额单位均为分。 */ +export interface HardOrderStatisticsSummary { + orderCount?: number + productCount?: number + totalPrice?: number + extraPrice?: number + deliveryPrice?: number + payPrice?: number + refundPrice?: number + actualPrice?: number + meals?: HardOrderMealStatistics[] +} + +/** 订单按预计使用日期拆分的统计。 */ +export interface HardOrderDailyStatistics extends HardOrderStatisticsSummary { + date?: string +} + +/** 订单统计接口统一响应。 */ +export interface HardOrderStatisticsResponse { + data: { + total?: HardOrderStatisticsSummary + daily?: HardOrderDailyStatistics[] + } + msg?: string +} + /** * 离线订单手动支付 */ diff --git a/src/api/hard/hard-printer.ts b/src/api/hard/hard-printer.ts new file mode 100644 index 0000000..626babd --- /dev/null +++ b/src/api/hard/hard-printer.ts @@ -0,0 +1,62 @@ +import request from "/@/utils/request" + +/** 后端 Long/雪花主键在浏览器中必须以字符串传递,避免 Number 精度丢失。 */ +export type HardwareId = string + +/** 业务终端与无屏 USB 打印机资产的绑定详情。 */ +export interface HardPrinterBinding { + id?: HardwareId + sourceHardId: HardwareId + printerHardId: HardwareId + sourceHardName?: string + sourceHardType?: string + printerHardName?: string + printerConfig?: HardPrinterConfig +} + +/** 尔印 USB 打印机配置。VID/PID 尚未由业务终端回填时允许为空。 */ +export interface HardPrinterConfig { + id?: HardwareId + printerHardId: HardwareId + printerModel?: string + usbVendorId?: number + usbProductId?: number + paperWidth?: number + autoCut?: string + imageMode?: string +} + +/** 查询来源业务终端当前绑定的打印机资产。 */ +export function getBinding(hardId: HardwareId) { + return request({ url: `/hard/hard-printer/binding/${hardId}`, method: "get" }) +} + +/** 查询同商户同部门可绑定的空闲打印机资产。 */ +export function listAvailable(sourceHardId: HardwareId) { + return request({ url: "/hard/hard-printer/available", method: "get", params: { sourceHardId } }) +} + +/** 查询指定商户下已完成打印机绑定的业务终端。 */ +export function listBoundSources(merchantId: HardwareId) { + return request({ url: "/hard/hard-printer/sources", method: "get", params: { merchantId } }) +} + +/** 建立来源业务终端与 EY_PRINT 的一对一绑定。 */ +export function bind(data: { sourceHardId: HardwareId; printerHardId: HardwareId }) { + return request({ url: "/hard/hard-printer/binding", method: "post", data }) +} + +/** 解除来源业务终端绑定。 */ +export function unbind(sourceHardId: HardwareId) { + return request({ url: `/hard/hard-printer/binding/${sourceHardId}`, method: "delete" }) +} + +/** 查询无屏 USB 打印机资产配置。 */ +export function getConfig(printerHardId: HardwareId) { + return request({ url: `/hard/hard-printer/config/${printerHardId}`, method: "get" }) +} + +/** 保存无屏 USB 打印机资产配置。 */ +export function saveConfig(data: HardPrinterConfig) { + return request({ url: "/hard/hard-printer/config", method: "put", data }) +} diff --git a/src/api/hard/hard-terminal-log-file.ts b/src/api/hard/hard-terminal-log-file.ts new file mode 100644 index 0000000..caeea97 --- /dev/null +++ b/src/api/hard/hard-terminal-log-file.ts @@ -0,0 +1,98 @@ +import request from "/@/utils/request" + +export interface TerminalLogQuery { + current?: number + size?: number + hardId?: string | number + hardName?: string + uniqueCode?: string + merchantId?: string | number + deptId?: string | number + logDateStart?: string + logDateEnd?: string + uploadTimeStart?: string + uploadTimeEnd?: string +} + +export interface TerminalLogDevice { + hardId: string | number + hardName: string + uniqueCode: string + hardType?: string + merchantId?: string | number + deptId?: string | number + fileCount: number + latestUploadTime?: string +} + +export interface TerminalLogTreeNode { + key: string + label: string + relativePath: string + directory: boolean + fileId?: string | number + fileSize?: number + logDate?: string + uploadTime?: string + children?: TerminalLogTreeNode[] +} + +export interface TerminalLogPreview { + id: string | number + originalName: string + relativePath: string + content: string + lineCount: number + fileSize: number + truncated: boolean +} + +export function fetchList(query?: Object) { + return request({ + url: "/hard/hardTerminalLogFile/page", + method: "get", + params: query, + }) +} + +export function fetchDevicePage(query?: TerminalLogQuery) { + return request({ + url: "/hard/hardTerminalLogFile/device-page", + method: "get", + params: query, + }) +} + +export function fetchFileTree(query: TerminalLogQuery) { + return request({ + url: "/hard/hardTerminalLogFile/file-tree", + method: "get", + params: query, + }) +} + +export function fetchPreview(id: string | number) { + return request({ + url: `/hard/hardTerminalLogFile/${id}/preview`, + method: "get", + }) +} + +export function pullTerminalLog(hardId: string | number) { + return request({ + url: `/hard/hardTerminalLogFile/pull/${hardId}`, + method: "post", + }) +} + +export function downloadUrl(id: string | number) { + return `/hard/hardTerminalLogFile/${id}/download` +} + +export function downloadFile(id: string | number) { + return request({ + url: downloadUrl(id), + method: "get", + responseType: "blob", + }) +} diff --git a/src/api/hard/hard-xfj-log.ts b/src/api/hard/hard-xfj-log.ts new file mode 100644 index 0000000..a2e772e --- /dev/null +++ b/src/api/hard/hard-xfj-log.ts @@ -0,0 +1,40 @@ +import request from "/@/utils/request" + +export function fetchList(query?: Object) { + return request({ + url: "/hard/xfj-log/page", + method: "get", + params: query, + }) +} + +export function addObj(obj?: Object) { + return request({ + url: "/hard/xfj-log", + method: "post", + data: obj, + }) +} + +export function getObj(id?: string) { + return request({ + url: "/hard/xfj-log/" + id, + method: "get", + }) +} + +export function delObjs(ids?: Object) { + return request({ + url: "/hard/xfj-log", + method: "delete", + data: ids, + }) +} + +export function putObj(obj?: Object) { + return request({ + url: "/hard/xfj-log", + method: "put", + data: obj, + }) +} diff --git a/src/api/wallet/wallet-transaction.ts b/src/api/wallet/wallet-transaction.ts index 007514c..08a8859 100644 --- a/src/api/wallet/wallet-transaction.ts +++ b/src/api/wallet/wallet-transaction.ts @@ -1,5 +1,54 @@ import request from "/@/utils/request" +/** + * 流水备注的前后端统一字符上限,与 wallet_transaction.remark 字段长度保持一致。 + */ +export const WALLET_TRANSACTION_REMARK_MAX_LENGTH = 256 + +/** + * 钱包流水备注修改参数,只允许提交流水编号和备注。 + */ +export interface WalletTransactionRemarkParams { + /** 需要修改的钱包流水编号。 */ + id: string | number + /** 新备注;空字符串表示清除原备注。 */ + remark?: string +} + +/** + * 钱包流水信息修改参数,只允许提交流水编号、触发部门和创建时间。 + */ +export interface WalletTransactionUpdateInfoParams { + /** 需要修改的钱包流水编号。 */ + id: string | number + /** 流水触发事件归属的新部门编号。 */ + deptId: string | number + /** 流水新的创建时间,格式为 yyyy-MM-dd HH:mm:ss;用于更正流水归属统计周期。 */ + createTime: string +} + +/** + * 修改单笔钱包流水备注 + */ +export function updateRemark(data: WalletTransactionRemarkParams) { + return request({ + url: "/wallet/wallet-transaction/update-remark", + method: "put", + data, + }) +} + +/** + * 修改单笔钱包流水的归属部门和创建时间 + */ +export function updateInfo(data: WalletTransactionUpdateInfoParams) { + return request({ + url: "/wallet/wallet-transaction/update-info", + method: "put", + data, + }) +} + /** * 各自食堂退还记录 */ diff --git a/src/components/DraggableDepTree/index.vue b/src/components/DraggableDepTree/index.vue index c406799..ae0e629 100644 --- a/src/components/DraggableDepTree/index.vue +++ b/src/components/DraggableDepTree/index.vue @@ -1,25 +1,24 @@