From 4eb17ece4ff531194362e05a9693b312a4a4f99d Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Fri, 18 Sep 2026 18:50:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8cc4b3f..88d2dda 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,12 +1,15 @@ -def sendProductionWeComNotification(String status, String color, String detail) { +def sendProductionWeComNotification(String title, String status, String color, String detail) { withCredentials([string(credentialsId: 'wecom-prod-webhook', variable: 'WECOM_WEBHOOK')]) { - String sourceVersion = env.SOURCE_TAG ?: env.GIT_COMMIT ?: '—' - String content = """## 生产部署通知 -> 项目:${env.JOB_NAME} + String sourceVersion = env.SOURCE_TAG ?: env.GIT_COMMIT ?: '未解析' + String duration = currentBuild.durationString?.replace(' and counting', '') ?: '—' + String content = """## ${title} +> 应用:客户工作台 +> Job:${env.JOB_NAME} > 构建:[#${env.BUILD_NUMBER}](${env.BUILD_URL}) > 提交:${sourceVersion} > 状态:${status} -> 详情:${detail} +${detail} +> 耗时:${duration} > 时间:${new Date().format('yyyy-MM-dd HH:mm:ss', TimeZone.getTimeZone('Asia/Shanghai'))} """ String payloadFile = 'wecom-production-notification.json' @@ -123,13 +126,6 @@ pipeline { } } - stage('确认部署生产前端') { - when { expression { env.IS_PRODUCTION == 'true' } } - steps { - input message: "确认将 main 提交 ${env.SOURCE_TAG} 部署到 app.buggoglobal.com?", ok: '确认部署' - } - } - stage('部署生产前端') { when { expression { env.IS_PRODUCTION == 'true' } } steps { @@ -199,7 +195,12 @@ pipeline { script { if (env.JOB_BASE_NAME?.endsWith('-prod')) { try { - sendProductionWeComNotification('部署成功', 'info', 'Client 生产前端已完成发布和部署检查') + sendProductionWeComNotification( + '✅ 生产部署成功', + '成功', + 'info', + '> 结果:Client 生产前端已完成发布和部署流程' + ) } catch (Exception error) { echo "企业微信通知失败,不影响原构建结果:${error.message}" } @@ -219,7 +220,12 @@ pipeline { script { if (env.JOB_BASE_NAME?.endsWith('-prod')) { try { - sendProductionWeComNotification('部署失败', 'warning', '请打开 Jenkins 构建日志查看失败阶段') + sendProductionWeComNotification( + '❌ 生产发布失败', + '失败', + 'warning', + '> 说明:请打开 Jenkins 构建日志查看失败阶段' + ) } catch (Exception error) { echo "企业微信通知失败,不影响原构建结果:${error.message}" } @@ -230,7 +236,12 @@ pipeline { script { if (env.JOB_BASE_NAME?.endsWith('-prod')) { try { - sendProductionWeComNotification('部署已取消', 'comment', '生产部署流程被人工取消或中止') + sendProductionWeComNotification( + '⏹ 生产部署已取消', + '已取消', + 'comment', + '> 说明:生产部署流程被人工取消或中止' + ) } catch (Exception error) { echo "企业微信通知失败,不影响原构建结果:${error.message}" } From 514abf6eda282a138fc44ec7258ed53d82edcdf8 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 19 Sep 2026 17:02:11 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ClientSidebarMenu.vue | 2 - src/components/common/DataTable.test.mjs | 11 ++ src/components/common/DataTable.vue | 5 +- src/core/staticAssetRecovery.test.mjs | 24 +++ src/core/staticAssetRecovery.ts | 91 +++++++++++ src/layouts/AppLayout.test.mjs | 3 +- src/main.ts | 3 + .../components/BusinessOrdersView.vue | 1 - src/modules/finance/api/account.ts | 12 +- .../finance/views/FinanceAccountView.test.mjs | 25 +-- .../finance/views/FinanceAccountView.vue | 147 ++++++++--------- .../finance/views/FinanceBillsView.test.mjs | 19 ++- .../finance/views/FinanceBillsView.vue | 106 +++++++------ .../InboundCodeAssociationDialog.vue | 1 - src/modules/first-leg/routes.ts | 6 +- .../views/FirstLegOrderCreateHubView.vue | 41 +++++ .../views/FirstLegOrdersView.test.mjs | 8 +- .../first-leg/views/FirstLegOrdersView.vue | 7 +- .../first-leg/views/QuickOrderView.test.mjs | 11 +- .../first-leg/views/QuickOrderView.vue | 2 +- .../notifications/notifications.test.mjs | 17 +- .../notifications/views/NotificationsView.vue | 148 ++++++++++++++---- .../order-management/deliveryOrders.test.mjs | 4 +- src/modules/order-management/routes.ts | 4 +- .../views/DeliveryOrdersView.vue | 3 +- .../views/InboundOrdersView.vue | 1 - .../overseas-warehouse/permissions.test.mjs | 8 + src/modules/overseas-warehouse/routes.ts | 4 +- .../views/ReturnInventoryView.vue | 1 - .../views/ReturnOrdersView.vue | 1 - .../views/WarehouseServiceView.vue | 1 - src/navigation/clientNavigation.test.mjs | 26 +-- src/navigation/clientNavigation.ts | 5 - 33 files changed, 525 insertions(+), 223 deletions(-) create mode 100644 src/components/common/DataTable.test.mjs create mode 100644 src/core/staticAssetRecovery.test.mjs create mode 100644 src/core/staticAssetRecovery.ts create mode 100644 src/modules/first-leg/views/FirstLegOrderCreateHubView.vue diff --git a/src/components/ClientSidebarMenu.vue b/src/components/ClientSidebarMenu.vue index 9fb3e6e..4c66e7f 100644 --- a/src/components/ClientSidebarMenu.vue +++ b/src/components/ClientSidebarMenu.vue @@ -22,8 +22,6 @@ const activeParentKeys = computed(() => new Set(getNavigationParentKeys(visibleN const openedKeys = ref>(new Set(activeParentKeys.value)) function handleToggle(key: string) { - if (activeParentKeys.value.has(key)) return - const next = new Set(openedKeys.value) if (next.has(key)) next.delete(key) else next.add(key) diff --git a/src/components/common/DataTable.test.mjs b/src/components/common/DataTable.test.mjs new file mode 100644 index 0000000..4466aa9 --- /dev/null +++ b/src/components/common/DataTable.test.mjs @@ -0,0 +1,11 @@ +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import test from 'node:test' + +const source = readFileSync(new URL('./DataTable.vue', import.meta.url), 'utf8') + +test('keeps action-only table toolbars on the left', () => { + assert.match(source, /'data-table__toolbar--actions-only': !\$slots\.toolbar/) + assert.match(source, /v-if="\$slots\.toolbar" class="data-table__toolbar-heading"/) + assert.match(source, /\.data-table__toolbar--actions-only \{ justify-content: flex-start; \}/) +}) diff --git a/src/components/common/DataTable.vue b/src/components/common/DataTable.vue index 815b751..3ef382c 100644 --- a/src/components/common/DataTable.vue +++ b/src/components/common/DataTable.vue @@ -143,8 +143,8 @@ function setPage(value: number) {