From cf4d2c4a3f1863f8fbd63005839350b79b85983f Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Sun, 30 Aug 2026 17:46:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=209610=20=E7=94=B3?= =?UTF-8?q?=E6=8A=A5=E9=A1=B5=E4=B8=8E=E6=89=B9=E9=87=8F=E6=B8=85=E5=8D=95?= =?UTF-8?q?/=E6=8A=A5=E5=85=B3=E5=8D=95=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同步 SPA 回退、权限目录、拣货绑定组件及相关系统页调整。 Co-authored-by: Cursor --- IDE官网/assets/img/favicon.png | Bin 0 -> 17000 bytes IDE官网/assets/js/ai-advisor.js | 2 +- IDE官网/assets/js/main.js | 4 +- IDE官网/index.html | 6 +- generate-menu-excel.js | 11 + nginx-default.conf | 17 + nginx-docker.conf | 15 + package.json | 1 + pnpm-lock.yaml | 8 + scripts/postbuild-cleanup-dist.js | 6 + src/api/order/customs9610.ts | 37 + src/api/order/pickupOrder.ts | 3 + src/components/RbacSplit/RbacDetailShell.vue | 101 +- src/constants/pageButtonCatalog.ts | 13 + src/locale/en-US.ts | 246 +++- src/locale/zh-CN.ts | 203 ++- src/router/routes/newModules/order.ts | 11 + .../routes/newModules/system-management.ts | 4 +- src/store/modules/rbac-user.ts | 2 + src/styles/list-action.less | 10 +- src/utils/menu-i18n.ts | 1 + src/utils/menu-icon.ts | 1 + src/utils/rbac-permission.ts | 76 +- src/utils/rbacPermissionAssignRows.ts | 11 +- .../customer-center/components/AppTabBar.vue | 3 +- src/views/h5/customer-center/orders/index.vue | 13 - .../h5/customer-center/styles/tokens.less | 4 +- src/views/order/customs9610Order/index.vue | 1036 +++++++++++++ .../components/BindableOrderPicker.vue | 315 ++++ .../components/CreatePickupSheetModal.vue | 738 ++++++++++ src/views/order/pickupOrder/index.vue | 1294 ++++++++++++++--- src/views/system/dataPerm/audit/index.vue | 2 + .../dataPerm/components/TemplateItemForm.vue | 5 +- src/views/system/dataPerm/templates/index.vue | 20 +- src/views/system/dict/index.vue | 13 + src/views/system/mcpTools/index.vue | 2 +- src/views/system/permission/role/index.vue | 307 ++-- vite.config.ts | 3 + 38 files changed, 4066 insertions(+), 478 deletions(-) create mode 100644 IDE官网/assets/img/favicon.png create mode 100644 src/api/order/customs9610.ts create mode 100644 src/views/order/customs9610Order/index.vue create mode 100644 src/views/order/pickupOrder/components/BindableOrderPicker.vue create mode 100644 src/views/order/pickupOrder/components/CreatePickupSheetModal.vue diff --git a/IDE官网/assets/img/favicon.png b/IDE官网/assets/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3f851af07973ccdd397f1e565f0c4ca723fb9894 GIT binary patch literal 17000 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 { const languageStorageKey = 'ide-language'; const pageTitleMap = { - 'IDE|Faster & Simpler': 'IDE|更快 · 更简单', - 'IDE|Immediate Delivery Express — Cross-Border Logistics': 'IDE|Immediate Delivery Express — 跨境物流', + 'IDE | Global Digital One-Stop Cross-Border Logistics': 'IDE | 全球数字化一站式跨境物流服务商', + 'IDE|Immediate Delivery Express — Cross-Border Logistics': 'IDE | 全球数字化一站式跨境物流服务商', 'Faster & Simpler': '更快 · 更简单', '|Faster & Simpler': '更快 · 更简单', 'IDE - About': 'IDE - 关于我们', diff --git a/IDE官网/index.html b/IDE官网/index.html index fdc5cf5..5d80eb9 100644 --- a/IDE官网/index.html +++ b/IDE官网/index.html @@ -5,12 +5,12 @@ - IDE|Immediate Delivery Express — 跨境物流 + IDE | 全球数字化一站式跨境物流服务商 - - + + diff --git a/generate-menu-excel.js b/generate-menu-excel.js index ecbca4d..1e97c56 100644 --- a/generate-menu-excel.js +++ b/generate-menu-excel.js @@ -370,6 +370,17 @@ const menuData = [ hideInMenu: false, parentRoute: '/order', }, + { + level: 2, + name: '9610订单', + permissionCode: 'Order.Customs9610', + route: '/order/customs9610Order', + component: 'views/order/customs9610Order/index', + icon: null, + order: 5, + hideInMenu: false, + parentRoute: '/order', + }, // 一级菜单 - 渠道 { diff --git a/nginx-default.conf b/nginx-default.conf index 36b250b..7814ccf 100644 --- a/nginx-default.conf +++ b/nginx-default.conf @@ -73,6 +73,20 @@ server { access_log off; } + location = /favicon.ico { + try_files /favicon.png =404; + expires 7d; + add_header Cache-Control "public"; + access_log off; + } + + location = /favicon.png { + try_files /favicon.png =404; + expires 7d; + add_header Cache-Control "public"; + access_log off; + } + # ============ 客户 / 管理端登录入口 ============ location = /login { try_files /index.html =200; @@ -166,6 +180,9 @@ server { location ^~ /order/pickupOrder { try_files /index.html =200; } + location ^~ /order/customs9610Order { + try_files /index.html =200; + } location ^~ /order/batchJobs { try_files /index.html =200; } diff --git a/nginx-docker.conf b/nginx-docker.conf index 5ea76fb..075a684 100644 --- a/nginx-docker.conf +++ b/nginx-docker.conf @@ -39,6 +39,20 @@ server { access_log off; } + location = /favicon.ico { + try_files /favicon.png =404; + expires 7d; + add_header Cache-Control "public"; + access_log off; + } + + location = /favicon.png { + try_files /favicon.png =404; + expires 7d; + add_header Cache-Control "public"; + access_log off; + } + location = /login { try_files /index.html =200; } @@ -85,6 +99,7 @@ server { location ^~ /order/fulfillOrders { try_files /index.html =200; } location ^~ /order/waybillManage { try_files /index.html =200; } location ^~ /order/pickupOrder { try_files /index.html =200; } + location ^~ /order/customs9610Order { try_files /index.html =200; } location ^~ /order/batchJobs { try_files /index.html =200; } location ^~ /order/templateMapping { try_files /index.html =200; } location ^~ /order/platformStore { try_files /index.html =200; } diff --git a/package.json b/package.json index 0a9dcae..2026724 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@codemirror/state": "^6.5.4", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.39.17", + "@fontsource/zcool-qingke-huangyou": "^5.3.0", "@handsontable/vue3": "^16.2.0", "@types/lodash-es": "^4.17.12", "@vueuse/core": "^9.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52db08d..cb50e42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: '@codemirror/view': specifier: ^6.39.17 version: 6.39.17 + '@fontsource/zcool-qingke-huangyou': + specifier: ^5.3.0 + version: 5.3.0 '@handsontable/vue3': specifier: ^16.2.0 version: 16.2.0(handsontable@16.2.0)(vue@3.5.18(typescript@4.9.5)) @@ -922,6 +925,9 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@fontsource/zcool-qingke-huangyou@5.3.0': + resolution: {integrity: sha512-6/ld8x/knq1NjDQxLSyg9pDnBPOmtWDb30ZTFk+n8OxfkBoUvPAxh3aV/6+UFGmA5CekJfcgpUwd2/x/weLvSQ==} + '@handsontable/pikaday@1.0.0': resolution: {integrity: sha512-1VN6N38t5/DcjJ7y7XUYrDx1LuzvvzlrFdBdMG90Qo1xc8+LXHqbWbsTEm5Ec5gXTEbDEO53vUT35R+2COmOyg==} @@ -7893,6 +7899,8 @@ snapshots: '@floating-ui/utils@0.2.10': {} + '@fontsource/zcool-qingke-huangyou@5.3.0': {} + '@handsontable/pikaday@1.0.0': {} '@handsontable/vue3@16.2.0(handsontable@16.2.0)(vue@3.5.18(typescript@4.9.5))': diff --git a/scripts/postbuild-cleanup-dist.js b/scripts/postbuild-cleanup-dist.js index de2f8d0..bbff6fc 100644 --- a/scripts/postbuild-cleanup-dist.js +++ b/scripts/postbuild-cleanup-dist.js @@ -74,6 +74,12 @@ function copyOfficialSite() { fs.copyFileSync(src9610, path.join(dist, '9610.html')); } + const faviconSrc = path.join(siteDir, 'assets', 'img', 'logo1.png'); + if (fs.existsSync(faviconSrc)) { + fs.copyFileSync(faviconSrc, path.join(siteDir, 'assets', 'img', 'favicon.png')); + fs.copyFileSync(faviconSrc, path.join(dist, 'favicon.png')); + } + console.log('[postbuild] copied official site to dist/site (assets under /site/assets)'); } diff --git a/src/api/order/customs9610.ts b/src/api/order/customs9610.ts new file mode 100644 index 0000000..ead6e52 --- /dev/null +++ b/src/api/order/customs9610.ts @@ -0,0 +1,37 @@ +import { axiosInstance } from '@/api/rbac' +import { assertBusinessOk, omsUrl, parseListPayload, unwrapData } from '@/api/oms/common' + +function postOk(path: string, body: Record) { + return axiosInstance.post(omsUrl(path), body).then((res) => { + assertBusinessOk(res.data) + return unwrapData(res.data) + }) +} + +function getData(path: string, params?: Record) { + return axiosInstance.get(omsUrl(path), { params }).then((res) => unwrapData(res.data)) +} + +export const getCustoms9610List = (body: Record) => + axiosInstance.post(omsUrl('/order/customs-9610/list'), body).then((res) => parseListPayload(res.data)) + +export const getCustoms9610StatusCounts = (params?: { customerId?: number }) => + getData('/order/customs-9610/status-counts', params as Record | undefined) + +export const getCustoms9610Detail = (id: number | string) => + getData('/order/customs-9610/detail', { id }) + +export const updateCustoms9610 = (body: Record) => + postOk('/order/customs-9610/update', body) + +export const declareCustoms9610 = (id: number | string) => + postOk('/order/customs-9610/declare', { id }) + +export const declareCustoms9610Batch = (ids: Array) => + postOk('/order/customs-9610/declare-batch', { ids }) + +export const fetchCustoms9610ManifestBatch = (ids: Array) => + postOk('/order/customs-9610/fetch-manifest-batch', { ids }) + +export const fetchCustoms9610DeclarationFormBatch = (ids: Array) => + postOk('/order/customs-9610/fetch-declaration-form-batch', { ids }) diff --git a/src/api/order/pickupOrder.ts b/src/api/order/pickupOrder.ts index 6272f01..ca84ef9 100644 --- a/src/api/order/pickupOrder.ts +++ b/src/api/order/pickupOrder.ts @@ -30,6 +30,9 @@ export const createPickupOrderV2 = (body: PickupOrderCreateBody) => export const getPickupOrderList = (body: Record) => axiosInstance.post(omsUrl('/order/pickup-order/list'), body).then((res) => parseListPayload(res.data)) +export const getPickupOrderStatusCounts = (params?: { customerId?: number }) => + getData('/order/pickup-order/status-counts', params as Record | undefined) + export const getPickupOrderDetail = (id: number | string) => getData('/order/pickup-order/detail', { id }) diff --git a/src/components/RbacSplit/RbacDetailShell.vue b/src/components/RbacSplit/RbacDetailShell.vue index 9cf33dc..0757566 100644 --- a/src/components/RbacSplit/RbacDetailShell.vue +++ b/src/components/RbacSplit/RbacDetailShell.vue @@ -12,33 +12,38 @@ @@ -1011,21 +1760,36 @@ onMounted(async () => { } } -.page-hint { - display: flex; +.status-tab-title { + display: inline-flex; align-items: center; - gap: 6px; - color: var(--color-text-3); - font-size: 13px; - line-height: 1.5; + gap: 4px; + + .tab-count { + font-style: normal; + font-size: 12px; + color: var(--color-text-3); + font-weight: 400; + } +} + +.page-hint { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + border-radius: 4px; + color: var(--app-primary-color); + cursor: help; flex-shrink: 0; - max-width: 360px; - text-align: right; :deep(svg) { - color: var(--app-primary-color); - font-size: 14px; - flex-shrink: 0; + font-size: 16px; + } + + &:hover { + background: var(--color-fill-2); } } @@ -1061,10 +1825,15 @@ onMounted(async () => { justify-content: space-between; gap: 16px; margin-bottom: 16px; - padding-bottom: 12px; + padding-bottom: 14px; border-bottom: 1px solid var(--color-border-2); } +.pk-detail-header__main { + min-width: 0; + flex: 1; +} + .pk-detail-title { display: flex; align-items: center; @@ -1078,9 +1847,19 @@ onMounted(async () => { color: var(--color-text-1); } +.pk-detail-sub { + margin-top: 6px; + font-size: 12px; + color: var(--color-text-3); + line-height: 1.4; +} + .pk-detail-amount { text-align: right; flex-shrink: 0; + padding: 8px 12px; + border-radius: 4px; + background: color-mix(in srgb, var(--app-primary-color) 8%, #fff); span { display: block; @@ -1089,28 +1868,85 @@ onMounted(async () => { } b { - font-size: 18px; + font-size: 20px; font-weight: 600; color: var(--app-primary-color); + line-height: 1.3; + } +} + +.pk-detail-section { + margin-bottom: 16px; + + &:last-child { + margin-bottom: 0; + } +} + +.pk-detail-section__title { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 10px; + font-size: 14px; + font-weight: 500; + color: var(--color-text-1); + + em { + font-style: normal; + min-width: 18px; + height: 18px; + padding: 0 6px; + border-radius: 9px; + background: var(--color-fill-2); + color: var(--color-text-3); + font-size: 12px; + line-height: 18px; + text-align: center; + } +} + +.pk-copy-btn { + margin-left: auto; + height: 24px; + color: var(--app-primary-color); +} + +.pk-link { + color: var(--app-primary-color); + text-decoration: none; + + &:hover { + text-decoration: underline; } } .pk-detail-grid { display: grid; grid-template-columns: 1fr 1fr; - gap: 10px 16px; - margin-bottom: 16px; + gap: 12px 16px; + padding: 12px; + border-radius: 4px; + background: var(--color-fill-1); +} + +.pk-detail-field { + min-width: 0; span { display: block; + margin-bottom: 4px; font-size: 12px; color: var(--color-text-3); } b { + display: block; font-size: 14px; - font-weight: 600; + font-weight: 500; color: var(--color-text-1); + line-height: 1.4; + word-break: break-all; } } @@ -1118,19 +1954,109 @@ onMounted(async () => { grid-column: 1 / -1; } -.pk-detail-actions { - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 16px; - padding: 12px; - background: var(--color-fill-2); - border-radius: 4px; +.pk-timeline { + padding: 4px 0 4px 4px; } -.pk-detail-orders-title { - font-weight: 600; +.pk-timeline__item { + display: flex; + gap: 12px; + position: relative; + padding-bottom: 14px; + + &:last-child { + padding-bottom: 0; + + .pk-timeline__dot::after { + display: none; + } + } +} + +.pk-timeline__dot { + position: relative; + flex-shrink: 0; + width: 10px; + height: 10px; + margin-top: 4px; + border-radius: 50%; + background: var(--app-primary-color); + + &::after { + content: ''; + position: absolute; + left: 4px; + top: 12px; + width: 2px; + bottom: -14px; + background: var(--color-border-2); + } +} + +.pk-timeline__body { + min-width: 0; +} + +.pk-timeline__label { + font-size: 13px; + color: var(--color-text-1); + font-weight: 500; +} + +.pk-timeline__time { + margin-top: 2px; + font-size: 12px; + color: var(--color-text-3); +} + +.pk-detail-footer { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + width: 100%; +} + +.pk-detail-footer__left, +.pk-detail-footer__right { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px; +} + +.pk-detail-footer__right { + margin-left: auto; + justify-content: flex-end; +} + +.pk-rebind-modal { + padding-top: 4px; +} + +.pk-rebind-section__title { margin-bottom: 8px; + font-size: 14px; + font-weight: 500; + color: var(--color-text-1); +} + +.pk-rebind-hint { + margin: 0 0 10px; + font-size: 12px; + color: var(--color-text-3); + line-height: 1.5; +} + +.pk-rebind-remove { + width: 100%; + max-height: 140px; + overflow: auto; + padding: 4px 0; +} + +.pk-rebind-divider { + margin: 16px 0; } .pk-rebind-empty { diff --git a/src/views/system/dataPerm/audit/index.vue b/src/views/system/dataPerm/audit/index.vue index c051056..7681171 100644 --- a/src/views/system/dataPerm/audit/index.vue +++ b/src/views/system/dataPerm/audit/index.vue @@ -79,10 +79,12 @@