From de22605535065aa6de41bcecafbeaa6d46b7c289 Mon Sep 17 00:00:00 2001 From: biybuy <1368735060@qq.com> Date: Mon, 23 Mar 2026 18:03:05 +0800 Subject: [PATCH] 2026032301 --- .eslintrc-auto-import.json | 1 + ...¾计20260316.md => oms表结构与接口设计20260323.md} | 68 -- docs/前端页面设计规范.md | 66 +- src/auto-imports.d.ts | 2 + src/components/HandsontablePro/index.vue | 54 +- src/components/PaginationPro/index.vue | 4 +- src/layout/default-layout.vue | 3 + src/layout/page-layout.vue | 2 +- src/locale/en-US.ts | 10 + src/locale/zh-CN.ts | 10 + src/views/api/callStatistics/index.vue | 235 ++++--- src/views/api/requestLog/index.vue | 3 +- src/views/channel/autoTrigger/index.vue | 598 +++++++++++++----- src/views/channel/labelDesign/index.vue | 72 ++- src/views/operation/inboundScan/index.vue | 36 +- src/views/operation/outboundScan/index.vue | 35 +- src/views/operation/printLabel/index.vue | 35 +- src/views/order/myOrders/index.vue | 35 +- src/views/order/placeOrder/index.vue | 21 +- src/views/order/priceCheck/index.vue | 27 +- src/views/system/organization/index.vue | 30 +- src/views/system/organization/user/index.vue | 21 +- src/views/system/permission/menu/index.vue | 28 +- src/views/system/permission/role/index.vue | 21 +- src/views/system/warehouseAddress/index.vue | 25 +- src/views/track/trackContent/index.vue | 25 +- src/views/track/trackFlag/index.vue | 25 +- src/views/track/trackOrder/index.vue | 22 +- src/views/track/trackState/index.vue | 26 +- src/views/user/customer/index.vue | 22 +- src/views/user/recharge/rechargeRecord.vue | 22 +- 31 files changed, 1037 insertions(+), 547 deletions(-) rename docs/{oms表结构与接口设计20260316.md => oms表结构与接口设计20260323.md} (98%) diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index e61e6f3..d1576a3 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -262,6 +262,7 @@ "useSwipe": true, "useSystemConfig": true, "useTabBarStore": true, + "useTableContainerHeight": true, "useTemplateRef": true, "useTemplateRefsList": true, "useTextDirection": true, diff --git a/docs/oms表结构与接口设计20260316.md b/docs/oms表结构与接口设计20260323.md similarity index 98% rename from docs/oms表结构与接口设计20260316.md rename to docs/oms表结构与接口设计20260323.md index f5b3010..5c9ae60 100644 --- a/docs/oms表结构与接口设计20260316.md +++ b/docs/oms表结构与接口设计20260323.md @@ -43,74 +43,6 @@ OMS(Order Management System,订单管理系统)作为独立服务运行和 4. **出库扫描**:订单发货时完成**出库扫描**,进入待发货/运输中。 5. **闭环完成**:出库扫描完成后,订单进入运输、派送环节,正常订单流程闭环结束。 ----------------------------------------------------------------------------------------- - -## 一、通用设计规范 - -### 1.1 接口设计规范 - -#### HTTP 方法约束(仅 POST / GET) - -| 方法 | 用途 | 说明 | -| --- | --- | --- | -| **GET** | 查询、详情、列表、导出 | 幂等、无副作用,参数放 Query String | -| **POST** | 新增、修改、删除、状态变更、提交 | 所有变更类操作统一用 POST,参数放 Request Body | - -> 因网关/代理/防火墙限制,仅支持 GET/POST 时,更新、删除等操作均通过 POST + 业务动作区分。 - -#### URL 设计规范 - -| 规范 | 说明 | 示例 | -| --- | --- | --- | -| 路径小写 | 使用小写字母,短横线分隔 | `/api/order/list`、`/api/sales-product/detail` | -| 资源名词 | URL 表示资源,不包含动词 | `/api/customer` 而非 `/api/getCustomer` | -| 层级清晰 | 最多 3 级,避免过深 | `/api/channel/sales-product/price/list` | -| 动作后缀 | POST 动作可用动词后缀 | `/api/order/delete`、`/api/recharge/approve` | - -#### 统一响应格式 - -```json -{ - "code": 0, // 0-成功,非0-业务错误码 - "msg": "success", // 提示信息 - "data": { } // 业务数据,可为 null -} -``` - -#### 分页规范 - -**请求**:`page`(页码,从 1 开始)、`pageSize`(每页条数,默认 20,最大 100) - -**响应**: - -```json -{ - "code": 0, // 0-成功,非0-业务错误码 - "msg": "success", // 提示信息 - "data": { - "items": [], // 数据列表 - "total": 100 // 总条数 - } -} -``` - -#### 错误码规范 - -| 错误码 | 说明 | -| --- | --- | -| 0 | 成功 | -| 401 | 未登录 | -| 403 | 无权限 | -| 400 | 参数错误 | -| 500 | 服务器内部错误 | -| 1xxxx | 业务错误码(按模块划分) | - -#### 其他规范 - -- **Content-Type**:`application/json`;文件上传用 `multipart/form-data` -- **时间格式**:`yyyy-MM-dd HH:mm:ss` 或 ISO 8601 -- **认证**:`Authorization: Bearer {token}` 或 Cookie -- **幂等**:涉及金额、库存等变更的接口需支持幂等(如传 `requestId`) ---------------------------------------------------------------------------------------- diff --git a/docs/前端页面设计规范.md b/docs/前端页面设计规范.md index a747a96..c70aecd 100644 --- a/docs/前端页面设计规范.md +++ b/docs/前端页面设计规范.md @@ -81,6 +81,57 @@ a-layout (垂直) @screen-xxl: 1600px; // 超大屏 ``` +### 2.5 页面壳、白卡片与列表区尺寸(列表 / Handsontable 类页面) + +以下约定与 `default-layout` + `page-layout`、`*-container` / `*-page` 等实现一致,避免「灰底大块留白、列表高度塌缩、内外边距叠成 32px/40px」等问题。 + +#### 2.5.1 页面层(灰底壳) + +| 项目 | 约定 | +|------|------| +| 背景色 | `#f0f3f4`(与布局主内容区一致) | +| 页面根容器 padding | **`16px 16px 24px`**:上/左/右 **16px**,**底 24px** —— 与视口底边留白,列表区随 flex 撑满后,整块内容与屏幕底边保持 **24px** 间距 | +| 参与主内容区高度 | `flex: 1; min-height: 0; display: flex; flex-direction: column;`,与 `PageLayout` 子节点 flex 链衔接 | +| 纵向滚动 | 页面根容器宜 `overflow-y: hidden`(或仅最外层允许滚动),**表格/Handsontable 在内部 `.list-wrap` / `.wtHolder` 滚动**,避免整页与表格双滚动条 | + +#### 2.5.2 白卡片(白色内容块) + +| 项目 | 约定 | +|------|------| +| 视觉 | 背景 `#fff`,`border-radius: 8px`,`box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08)`(可按页面微调透明度) | +| 撑满剩余高度 | `flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden` | +| 内边距(与列表区配合) | **二选一,避免与 `.list-wrap` 重复叠加**:
• **推荐**:白卡片 **`padding: 0`**,由 **页头/搜索行、`.table-toolbar`、`.list-wrap`** 分区控制留白(见下);
• **简化页**:白卡片统一 `padding: 16px`,则内部列表区不再重复加左右底 padding | + +#### 2.5.3 表格工具栏(`.table-toolbar`) + +| 项目 | 约定 | +|------|------| +| 与列表横向对齐 | `padding: 16px 16px 0`(上 16、左右 16,底由与列表的间距承担) | +| 与分页/标题间距 | `margin-bottom: 16px`(分页组件(`PaginationPro`)与列表区 `.list-wrap` 的固定间距) | +| 收缩 | `flex-shrink: 0` | + +分页组件放置约束:`PaginationPro` 放在 `.toolbar-right` 内,并与 `toolbar-left` 保持在同一行(同一个 `flex` 行中)展示;工具栏外层使用 `padding: 16px 16px 0` 以保证分页组件距上边/右边均为 16px,且不需要在 `PaginationPro` 外再额外套一层 padding。 + +有**独立搜索行**(如轨迹配置页)时:搜索框可用 `margin: 16px 16px 16px`,与工具栏、列表区 **左右 16px** 对齐。 + +#### 2.5.4 列表区(`.list-wrap`) + +用于包裹 **HandsontablePro** 或需 **固定测量高度** 的表格容器(配合 `useTableContainerHeight` 的 `tableContainerRef` **挂在本层**)。 + +| 项目 | 约定 | +|------|------| +| 与内容区四边距离 | **默认**:`padding: 16px`(上、右、下、左均为 **16px**,相对**白卡片内容边缘**或分区后的可用区域,勿与白卡片 padding 重复叠加)。
**与 `.list-toolbar` 联用**:当 `.list-toolbar` 使用 `margin-bottom: 16px` 作为“分页组件到列表”的固定间距时,为避免重复留白,建议 `.list-wrap` 使用 `padding: 0 16px 16px`(上 0、左右/下 16)。 | +| 布局 | `flex: 1; min-height: 0; width: 100%; box-sizing: border-box; overflow: hidden; display: flex; flex-direction: column` | +| 触摸/滚动冒泡 | 可选:`overscroll-behavior: contain; touch-action: pan-x pan-y` | +| 子级 Handsontable | 建议 `:deep(.handsontable-pro-container) { flex: 1; min-height: 0; display: flex; flex-direction: column; }`,保证纵向撑满 | + +分页组件同一行约束(列表工具栏场景):当页面存在 `.list-toolbar` / `table-toolbar` 时,`PaginationPro` 必须放在右侧同一行的工具栏区域(如 `.toolbar-right`),不要将分页组件单独再做成一行(避免“工具栏一行 + 分页下一行”的不一致布局)。 + +#### 2.5.5 与布局组件的关系 + +- `PageLayout` 下直接子节点(路由页根)需能被主内容区赋予高度:项目中通过 `flex: 1; min-height: 0` 等与 `a-layout-content` 链式配合。 +- `default-layout` 中对 `[class$='-container']` 的样式仅作用于布局模板内节点;**业务页根类名**(如 `xxx-page`、`track-order-container`)需在**页面自身样式**中按上表补齐 flex 与 padding。 + --- ## 三、色彩规范 @@ -426,8 +477,11 @@ const { t } = useI18n(); ### 13.2 容器类 -- 页面根容器:`xxx-container`(如 `role-page`、业务相关命名),保证 `padding: 16px` -- 表格工具栏:`table-toolbar`、`toolbar-left`、`toolbar-right` +- 页面根容器:`xxx-container` / `xxx-page`(如 `role-page`、`track-order-container`),**列表类页面**推荐 `padding: 16px 16px 24px`,详见 **§2.5 页面壳、白卡片与列表区尺寸** +- 白卡片:`*-page-card`、`*-section` 等,与 `.list-wrap` 的 padding **勿重复叠加** +- 列表区:`.list-wrap`,**四边 16px**(相对分区后的内容边缘) +- 表格工具栏:`table-toolbar`、`toolbar-left`、`toolbar-right`,工具栏 **`padding: 16px 16px 0`** 与列表对齐 +- Handsontable/列表分页工具栏:`.list-toolbar`(当页面没有标准 `table-toolbar` 时),与 `table-toolbar` 保持一致,使用 **`padding: 16px 16px 0`** 且 `margin-bottom: 16px`;`PaginationPro` 必须与 `toolbar-left` 同一行展示(放在 `.toolbar-right` 内,禁止分页另起行),同时 `.list-wrap` 在联用场景建议 `padding-top: 0`(例如 `padding: 0 16px 16px`),实现分页距上/右 16px、距列表 16px ### 13.3 按钮间距 @@ -438,8 +492,10 @@ const { t } = useI18n(); ## 十四、检查清单(新页面开发) -- [ ] 使用 `xxx-container` 或等效布局结构 -- [ ] 工具栏使用 `table-toolbar`、`toolbar-left`、`toolbar-right` +- [ ] 使用 `xxx-container` / `xxx-page` 或等效布局结构;列表页见 **§2.5**:灰底 **`padding: 16px 16px 24px`**、`flex: 1; min-height: 0` +- [ ] 白卡片与 **`.list-wrap`** 内边距勿重复叠加(推荐白卡片 `padding: 0` + 分区 padding) +- [ ] **`.list-wrap`**:`padding: 16px`、`flex: 1; min-height: 0`;需测高时 `ref` 挂在本层 +- [ ] 工具栏使用 `table-toolbar`、`toolbar-left`、`toolbar-right`,工具栏 **`padding: 16px 16px 0`** - [ ] 按钮、输入框符合全局样式(高度、圆角) - [ ] 使用主题色变量,不硬编码 `#2D8C8C` - [ ] 弹窗 / 抽屉使用 ModalPro / DrawerPro + useModal @@ -517,4 +573,4 @@ const { t } = useI18n(); --- -*文档版本:1.0 | 更新日期:2025-03-21* +*文档版本:1.1 | 更新日期:2026-03-23* diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts index f7733e0..f3da9d6 100644 --- a/src/auto-imports.d.ts +++ b/src/auto-imports.d.ts @@ -251,6 +251,7 @@ declare global { const useSwipe: typeof import('@vueuse/core')['useSwipe'] const useSystemConfig: typeof import('./composables/useSystemConfig')['useSystemConfig'] const useTabBarStore: typeof import('./store/index')['useTabBarStore'] + const useTableContainerHeight: typeof import('./composables/useTableContainerHeight')['useTableContainerHeight'] const useTemplateRef: typeof import('vue')['useTemplateRef'] const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] @@ -561,6 +562,7 @@ declare module 'vue' { readonly useSwipe: UnwrapRef readonly useSystemConfig: UnwrapRef readonly useTabBarStore: UnwrapRef + readonly useTableContainerHeight: UnwrapRef readonly useTemplateRef: UnwrapRef readonly useTemplateRefsList: UnwrapRef readonly useTextDirection: UnwrapRef diff --git a/src/components/HandsontablePro/index.vue b/src/components/HandsontablePro/index.vue index 41b1c30..3a46756 100644 --- a/src/components/HandsontablePro/index.vue +++ b/src/components/HandsontablePro/index.vue @@ -58,6 +58,10 @@ showCheckboxColumn?: boolean; // 复选框列表头文案(空则表头为空) checkboxColumnHeader?: string; + // 序号列表头文案 + serialNoHeader?: string; + // 操作列表头文案 + actionColumnHeader?: string; // 复选框变化回调 onCheckboxChange?: (row: any, checked: boolean, rowIndex: number) => void; // 操作列渲染器 @@ -105,6 +109,8 @@ actionColumnWidth: 60, showCheckboxColumn: false, checkboxColumnHeader: '', + serialNoHeader: '序号', + actionColumnHeader: '操作', readOnly: true, multiValueFields: () => [], height: undefined, @@ -176,16 +182,23 @@ // 计算表格高度 const calculatedHeight = computed(() => { - if (props.height) { + if (props.height != null && props.height > 0) { return props.height; } const headerHeight = 40; const rowHeight = 50; const maxRows = 20; - const minHeight = 1000; + const minHeight = 400; return Math.max(headerHeight + maxRows * rowHeight, minHeight); }); + /** 外部传入 height 为 0 时不能用 ?? 回退(0 非 nullish),需显式判断 */ + const resolveTableHeight = (containerH: number): number => { + if (props.height != null && props.height > 0) return props.height; + if (containerH > 0) return containerH; + return calculatedHeight.value; + }; + // 创建省略号渲染器 const createEllipsisRenderer = () => { return function(instance: any, td: any, row: number, col: number, prop: any, value: any) { @@ -241,7 +254,7 @@ // 操作列(在前面) if (props.showActionColumn && props.actionColumnPosition === 'start') { columns.push({ data: currentDataIndex, type: 'text', readOnly: true, width: props.actionColumnWidth, className: 'htCenter', headerClassName: 'htLeft' }); - headerTexts.push('操作'); + headerTexts.push(props.actionColumnHeader); currentDataIndex++; } @@ -255,7 +268,7 @@ headerClassName: 'htLeft', renderer: ellipsisRenderer }); - headerTexts.push('序号'); + headerTexts.push(props.serialNoHeader); currentDataIndex++; // 数据列(beforeLast 时最后一列在操作列之后) @@ -264,7 +277,7 @@ // beforeLast:在倒数第二列后插入操作列 if (props.showActionColumn && props.actionColumnPosition === 'beforeLast' && index === dataColCount - 1) { columns.push({ data: currentDataIndex, type: 'text', readOnly: true, width: props.actionColumnWidth, className: 'htCenter', headerClassName: 'htLeft' }); - headerTexts.push('操作'); + headerTexts.push(props.actionColumnHeader); currentDataIndex++; } columns.push({ @@ -282,7 +295,7 @@ // 操作列(在后面,非 beforeLast 时) if (props.showActionColumn && props.actionColumnPosition === 'end') { columns.push({ data: currentDataIndex, type: 'text', readOnly: true, width: props.actionColumnWidth, className: 'htCenter', headerClassName: 'htLeft' }); - headerTexts.push('操作'); + headerTexts.push(props.actionColumnHeader); currentDataIndex++; } @@ -343,7 +356,7 @@ try { // 未传 height 时使用容器实际高度,使列表高度与容器一致 const containerH = containerRef.value?.clientHeight ?? 0; - const tableHeight = props.height ?? (containerH > 0 ? containerH : calculatedHeight.value); + const tableHeight = resolveTableHeight(containerH); const hotConfig: any = { data: data, @@ -511,7 +524,7 @@ // 操作列、序号列:用极简表头替换,去除 div.relative/span.colHeader 等多余容器,确保 60px 下完整显示 if (col === actionColStartIndex || col === serialColIndex || col === actionColEndIndex) { - const label = col === serialColIndex ? '序号' : '操作'; + const label = col === serialColIndex ? props.serialNoHeader : props.actionColumnHeader; TH.innerHTML = ''; TH.classList.add('ht-header-simple'); const span = document.createElement('span'); @@ -1069,17 +1082,12 @@ }, 50); }; - // 初始化完成后再次刷新尺寸 + // 初始化完成后刷新尺寸(避免与 ResizeObserver 重复狂刷导致 stretchH 列宽错乱) const finalizeInit = () => { setTimeout(() => { if (hotInstance) { hotInstance.refreshDimensions(); - - setTimeout(() => { - if (hotInstance) { - hotInstance.refreshDimensions(); - } - }, 100); + setTimeout(() => hotInstance?.refreshDimensions(), 100); } }, 300); }; @@ -1193,13 +1201,15 @@ if (!containerRef.value) return; resizeObserver = new ResizeObserver((entries) => { const entry = entries[0]; - if (entry && hotInstance && entry.contentRect.height > 0) { - const h = Math.floor(entry.contentRect.height); - hotInstance.updateSettings({ height: h }); - nextTick(() => { - hotInstance?.refreshDimensions(); - }); - } + if (!entry || !hotInstance) return; + const h = entry.contentRect.height; + // 高度以本组件根容器实测为准;勿用外层 props.height 覆盖,否则与 flex 内真实高度不一致,stretchH 会把列压满导致横向条消失 + if (h <= 0) return; + const fh = Math.floor(h); + hotInstance.updateSettings({ height: fh }); + nextTick(() => { + hotInstance?.refreshDimensions(); + }); }); resizeObserver.observe(containerRef.value); }; diff --git a/src/components/PaginationPro/index.vue b/src/components/PaginationPro/index.vue index d67d03a..93def03 100644 --- a/src/components/PaginationPro/index.vue +++ b/src/components/PaginationPro/index.vue @@ -80,7 +80,7 @@ :model-value="props.pageSize" size="small" class="page-size-select" - :style="{ width: '110px' }" + :style="{ width: '85px' }" @update:model-value="handlePageSizeChange" > {{ t('common.pagination.page') }} diff --git a/src/layout/default-layout.vue b/src/layout/default-layout.vue index 6206a7a..93e2fd7 100644 --- a/src/layout/default-layout.vue +++ b/src/layout/default-layout.vue @@ -52,6 +52,9 @@ padding: 16px; width: 100%; height: 100%; + box-sizing: border-box; + min-height: 0; + max-width: 100%; } .layout { diff --git a/src/layout/page-layout.vue b/src/layout/page-layout.vue index 694d50d..6fddaf9 100644 --- a/src/layout/page-layout.vue +++ b/src/layout/page-layout.vue @@ -35,7 +35,7 @@ flex-direction: column; } - .page-layout-root > * { + .page-layout-root :deep(> *) { flex: 1; min-height: 0; } diff --git a/src/locale/en-US.ts b/src/locale/en-US.ts index 12dcb1e..8bc0c3e 100644 --- a/src/locale/en-US.ts +++ b/src/locale/en-US.ts @@ -109,6 +109,16 @@ export default { 'menu.api.apiDebugger': 'API Debugger', 'menu.api.apiLike': 'API LIKE', 'menu.api.apiTest': 'API Test', + + // API - Call Statistics + 'api.callStatistics.name.app': 'Application Name', + 'api.callStatistics.name.provider': 'Service Provider Name', + 'api.callStatistics.table.date': 'Date', + 'api.callStatistics.table.interfaceName': 'Interface Name', + 'api.callStatistics.table.total': 'Total Calls', + 'api.callStatistics.table.succeedCount': 'Successful Calls', + 'api.callStatistics.table.failCount': 'Failed Calls', + 'api.callStatistics.table.successRate': 'Success Rate', 'menu.system': 'System', 'menu.system.org': 'Organization', 'menu.system.organization': 'Organization', diff --git a/src/locale/zh-CN.ts b/src/locale/zh-CN.ts index f7749d5..32dbef3 100644 --- a/src/locale/zh-CN.ts +++ b/src/locale/zh-CN.ts @@ -109,6 +109,16 @@ export default { 'menu.api.apiDebugger': 'API调试', 'menu.api.apiLike': 'API LIKE', 'menu.api.apiTest': 'API测试', + + // API - 调用统计 + 'api.callStatistics.name.app': '应用名称', + 'api.callStatistics.name.provider': '服务商名称', + 'api.callStatistics.table.date': '日期', + 'api.callStatistics.table.interfaceName': '接口名称', + 'api.callStatistics.table.total': '总调用次数', + 'api.callStatistics.table.succeedCount': '成功调用次数', + 'api.callStatistics.table.failCount': '失败调用次数', + 'api.callStatistics.table.successRate': '成功率', 'menu.system': '系统', 'menu.system.org': '组织管理', 'menu.system.organization': '组织管理', diff --git a/src/views/api/callStatistics/index.vue b/src/views/api/callStatistics/index.vue index 7a409f9..b4ffaf6 100644 --- a/src/views/api/callStatistics/index.vue +++ b/src/views/api/callStatistics/index.vue @@ -6,14 +6,16 @@ import HandsontablePro from '@/components/HandsontablePro/index.vue'; import PaginationPro from '@/components/PaginationPro/index.vue'; import { useTableContainerHeight } from '@/composables/useTableContainerHeight'; + import { useI18n } from 'vue-i18n'; defineOptions({ name: 'CallStatistics' }); + const { t } = useI18n(); const activeName = ref('1'); // 1:应用,2:服务商 const { tableContainerRef, tableHeight } = useTableContainerHeight(); const tabList = [ - { key: '1', label: '应用' }, - { key: '2', label: '服务商' }, + { key: '1', label: t('system.log.options.app') }, + { key: '2', label: t('system.log.options.provider') }, ]; const tableData = ref([]); @@ -30,16 +32,16 @@ }); const typeParam = computed(() => (activeName.value === '2' ? 2 : 1)); - const nameLabel = computed(() => (activeName.value === '2' ? '服务商名称' : '应用名称')); + const nameLabel = computed(() => (activeName.value === '2' ? t('api.callStatistics.name.provider') : t('api.callStatistics.name.app'))); const columns = computed(() => [ - { key: 'date', label: '日期', width: 120, searchable: false }, + { key: 'date', label: t('api.callStatistics.table.date'), width: 120, searchable: false }, { key: 'name', label: nameLabel.value, width: 180, searchable: true, searchField: 'name' }, - { key: 'interfaceName', label: '接口名称', width: 180, searchable: true, searchField: 'interfaceName' }, - { key: 'total', label: '总调用次数', width: 120, searchable: false }, - { key: 'succeedCount', label: '成功调用次数', width: 140, searchable: false }, - { key: 'failCount', label: '失败调用次数', width: 140, searchable: false }, - { key: 'successRate', label: '成功率', width: 100, searchable: false }, + { key: 'interfaceName', label: t('api.callStatistics.table.interfaceName'), width: 180, searchable: true, searchField: 'interfaceName' }, + { key: 'total', label: t('api.callStatistics.table.total'), width: 120, searchable: false }, + { key: 'succeedCount', label: t('api.callStatistics.table.succeedCount'), width: 140, searchable: false }, + { key: 'failCount', label: t('api.callStatistics.table.failCount'), width: 140, searchable: false }, + { key: 'successRate', label: t('api.callStatistics.table.successRate'), width: 100, searchable: false }, ]); const processedTableData = computed(() => @@ -121,105 +123,122 @@ diff --git a/src/views/api/requestLog/index.vue b/src/views/api/requestLog/index.vue index 5408445..736e360 100644 --- a/src/views/api/requestLog/index.vue +++ b/src/views/api/requestLog/index.vue @@ -681,10 +681,11 @@ } .table-toolbar { - margin-bottom: 8px; + margin-bottom: 16px; display: flex; justify-content: space-between; align-items: center; + flex-wrap: nowrap; .toolbar-left { flex: 1; diff --git a/src/views/channel/autoTrigger/index.vue b/src/views/channel/autoTrigger/index.vue index 0ccfc3e..7c536cd 100644 --- a/src/views/channel/autoTrigger/index.vue +++ b/src/views/channel/autoTrigger/index.vue @@ -1,7 +1,13 @@ \ No newline at end of file diff --git a/src/views/channel/labelDesign/index.vue b/src/views/channel/labelDesign/index.vue index 57cdc86..8a5a3ef 100644 --- a/src/views/channel/labelDesign/index.vue +++ b/src/views/channel/labelDesign/index.vue @@ -1,16 +1,18 @@ @@ -43,35 +45,57 @@ function onSave(payload: { template: unknown; data: unknown }) { diff --git a/src/views/operation/inboundScan/index.vue b/src/views/operation/inboundScan/index.vue index 1760d45..006e37b 100644 --- a/src/views/operation/inboundScan/index.vue +++ b/src/views/operation/inboundScan/index.vue @@ -1,16 +1,5 @@