diff --git a/src/modules/container-loading/pages/ContainerDetailView.vue b/src/modules/container-loading/pages/ContainerDetailView.vue index 5057d142..4d46581a 100644 --- a/src/modules/container-loading/pages/ContainerDetailView.vue +++ b/src/modules/container-loading/pages/ContainerDetailView.vue @@ -421,7 +421,7 @@ onMounted(async () => { await load(); if (route.query.action === 'documents') op 选择文件 - + diff --git a/src/modules/container-loading/pages/GlobalSmartLoadingView.vue b/src/modules/container-loading/pages/GlobalSmartLoadingView.vue index 008affe8..4a136ec5 100644 --- a/src/modules/container-loading/pages/GlobalSmartLoadingView.vue +++ b/src/modules/container-loading/pages/GlobalSmartLoadingView.vue @@ -740,7 +740,7 @@ onMounted(() => { void load(); void loadCustomers() }) - + @@ -759,7 +759,7 @@ onMounted(() => { void load(); void loadCustomers() }) diff --git a/src/modules/container-loading/pages/SmartLoadingWorkbenchView.vue b/src/modules/container-loading/pages/SmartLoadingWorkbenchView.vue index d25803a0..996b6205 100644 --- a/src/modules/container-loading/pages/SmartLoadingWorkbenchView.vue +++ b/src/modules/container-loading/pages/SmartLoadingWorkbenchView.vue @@ -358,7 +358,7 @@ onMounted(load) - + @@ -371,7 +371,7 @@ onMounted(load) -

{{ selectedCandidate.groupNo || selectedCandidate.inboundCode || '入仓码暂缺' }}

+

{{ selectedCandidate.groupNo || selectedCandidate.inboundCode || '入仓码暂缺' }}

diff --git a/src/modules/customers/CustomerOverseasStorageFeePanel.vue b/src/modules/customers/CustomerOverseasStorageFeePanel.vue index 8fae0919..cd9a6f3c 100644 --- a/src/modules/customers/CustomerOverseasStorageFeePanel.vue +++ b/src/modules/customers/CustomerOverseasStorageFeePanel.vue @@ -79,7 +79,7 @@ onMounted(load)
当前客户暂无海外仓费用配置
-

{{ groupIndex === 0 ? '仓租(CBM/天)' : '退货仓储费(托/天)' }} · {{ group.length }}档

新增阶梯
操作开始天数结束天数价格
删除以上
+

{{ groupIndex === 0 ? '仓租(CBM/天)' : '退货仓储费(托/天)' }} · {{ group.length }}档

新增阶梯
操作开始天数结束天数价格
删除以上
diff --git a/src/modules/customers/components/CustomerBillingRulesPanel.vue b/src/modules/customers/components/CustomerBillingRulesPanel.vue index 01cbf992..0129872a 100644 --- a/src/modules/customers/components/CustomerBillingRulesPanel.vue +++ b/src/modules/customers/components/CustomerBillingRulesPanel.vue @@ -337,11 +337,11 @@ onMounted(() => { void loadConfig(); void loadChargeRules() })
- +
箱规类型内径长(cm)内径宽(cm)内径高(cm)单边加宽(cm)备注
{{ row.boxTypeName }}
{{ row.boxTypeName }}
保存规则
-

箱规按权重系数计算

长、宽、高任一项超出当前挡位时进入下一挡;命中规格的一个系数统一应用于长、宽、高。

箱规类型内径长(cm)内径宽(cm)内径高(cm)权重系数重量(kg)备注
{{ BOX_NAMES[row.boxType] }}
保存系数规则
+

箱规按权重系数计算

长、宽、高任一项超出当前挡位时进入下一挡;命中规格的一个系数统一应用于长、宽、高。

箱规类型内径长(cm)内径宽(cm)内径高(cm)权重系数重量(kg)备注
{{ BOX_NAMES[row.boxType] }}
保存系数规则
diff --git a/src/modules/customers/pages/CustomersView.vue b/src/modules/customers/pages/CustomersView.vue index 0fa5c493..785aca13 100644 --- a/src/modules/customers/pages/CustomersView.vue +++ b/src/modules/customers/pages/CustomersView.vue @@ -1077,7 +1077,7 @@ onMounted(() => { void loadCustomers() }) -
+
@@ -1087,7 +1087,7 @@ onMounted(() => { void loadCustomers() }) - +
{{ statusMeta(editorStatus).label }}
diff --git a/src/modules/customers/pages/OverseasStorageFeesView.vue b/src/modules/customers/pages/OverseasStorageFeesView.vue index 6c729d1b..537aeca2 100644 --- a/src/modules/customers/pages/OverseasStorageFeesView.vue +++ b/src/modules/customers/pages/OverseasStorageFeesView.vue @@ -79,7 +79,7 @@ onMounted(() => { void load() }) -

{{ index === 0 ? '仓租(CBM/天)' : '退货仓储费(托/天)' }} · {{ group.length }}档

新增阶梯
+

{{ index === 0 ? '仓租(CBM/天)' : '退货仓储费(托/天)' }} · {{ group.length }}档

新增阶梯
diff --git a/src/modules/domestic-containers/pages/DomesticContainersView.vue b/src/modules/domestic-containers/pages/DomesticContainersView.vue index db22bc55..b879637f 100644 --- a/src/modules/domestic-containers/pages/DomesticContainersView.vue +++ b/src/modules/domestic-containers/pages/DomesticContainersView.vue @@ -73,6 +73,6 @@ watch([page, pageSize], load); onMounted(async () => { await Promise.all([loadWa + diff --git a/src/modules/finance/pages/FinanceCustomerAccountsView.vue b/src/modules/finance/pages/FinanceCustomerAccountsView.vue index ed5d0e39..652960d7 100644 --- a/src/modules/finance/pages/FinanceCustomerAccountsView.vue +++ b/src/modules/finance/pages/FinanceCustomerAccountsView.vue @@ -282,7 +282,7 @@ watch(() => [route.name, String(route.params.customerId || '')], ([name, custome
-
账期天数
天
+
账期天数
天
diff --git a/src/modules/finance/pages/FinanceCustomerArapView.vue b/src/modules/finance/pages/FinanceCustomerArapView.vue index 74046584..f6c10082 100644 --- a/src/modules/finance/pages/FinanceCustomerArapView.vue +++ b/src/modules/finance/pages/FinanceCustomerArapView.vue @@ -394,7 +394,7 @@ watch(() => [route.name, String(route.params.feeSourceId || '')], ([name, feeSou - + diff --git a/src/modules/finance/pages/FinanceCustomerStatementsView.vue b/src/modules/finance/pages/FinanceCustomerStatementsView.vue index 53f502fc..7f54c724 100644 --- a/src/modules/finance/pages/FinanceCustomerStatementsView.vue +++ b/src/modules/finance/pages/FinanceCustomerStatementsView.vue @@ -713,13 +713,13 @@ watch(detailRouteId, (statementId) => {
已选 {{ createForm.feeSourceIds.length }} 笔,合计 {{ selectedCreateAmount.toFixed(2) }} CNY
- + - - + + diff --git a/src/modules/finance/pages/FinanceFormalSettlementPage.vue b/src/modules/finance/pages/FinanceFormalSettlementPage.vue index 2eb75df6..d5b24d7e 100644 --- a/src/modules/finance/pages/FinanceFormalSettlementPage.vue +++ b/src/modules/finance/pages/FinanceFormalSettlementPage.vue @@ -654,13 +654,13 @@ onMounted(() => {
结算单号{{ detail.settlementNo }}
供应商{{ detailPartyName() }}
应付金额{{ money(detail.amount) }}
已付金额{{ money(detail.paidAmount) }}
当前余额{{ money(detail.outstandingAmount) }}
- 选择图片 + 选择图片
登记后剩余余额{{ remainingAfter(paymentForm.amount) }}
结算单号{{ detail.settlementNo }}
客户公司{{ detailPartyName() }}
应收金额{{ money(detail.amount) }}
已收金额{{ money(detail.paidAmount) }}
当前余额{{ money(detail.outstandingAmount) }}
- 选择图片 + 选择图片
登记后剩余余额{{ remainingAfter(receiptForm.amount) }}
diff --git a/src/modules/iam/pages/PermissionsView.vue b/src/modules/iam/pages/PermissionsView.vue index d1ad9005..9cc9b184 100644 --- a/src/modules/iam/pages/PermissionsView.vue +++ b/src/modules/iam/pages/PermissionsView.vue @@ -313,7 +313,7 @@ onMounted(loadPermissions) - +
权限编码约定

使用稳定的“业务域:资源:动作”编码;资源类型与后端 MENU、PAGE、BUTTON、API 契约一致。

diff --git a/src/modules/inbounds/fee/InboundFeePanel.vue b/src/modules/inbounds/fee/InboundFeePanel.vue index db29eef6..e05b3ed1 100644 --- a/src/modules/inbounds/fee/InboundFeePanel.vue +++ b/src/modules/inbounds/fee/InboundFeePanel.vue @@ -523,15 +523,15 @@ defineExpose({ reload: loadFee })
- + {{ chargeUnitLabel }} - + {{ snapshot?.currency }} / {{ chargeUnitLabel }} - + {{ snapshot?.currency }}
diff --git a/src/modules/inbounds/measurement/InboundMeasurementPanel.vue b/src/modules/inbounds/measurement/InboundMeasurementPanel.vue index 40f15a67..c649e0f7 100644 --- a/src/modules/inbounds/measurement/InboundMeasurementPanel.vue +++ b/src/modules/inbounds/measurement/InboundMeasurementPanel.vue @@ -726,8 +726,7 @@ defineExpose({ saveDraft, submitForReview, updateActualWeights, mayMaintain, may :max="1000000" :step="1" step-strictly - controls-position="right" - /> + controls-position="right" placeholder="请输入箱数" /> @@ -775,13 +774,13 @@ defineExpose({ saveDraft, submitForReview, updateActualWeights, mayMaintain, may
- - - - + + + + - - + +
diff --git a/src/modules/inbounds/weight/components/WeightOcrPanel.vue b/src/modules/inbounds/weight/components/WeightOcrPanel.vue index 2518c26a..50cfd923 100644 --- a/src/modules/inbounds/weight/components/WeightOcrPanel.vue +++ b/src/modules/inbounds/weight/components/WeightOcrPanel.vue @@ -644,8 +644,7 @@ defineExpose({ reload: loadWorkspace }) :max="maximumSafeWeight" :precision="3" :controls="false" - :disabled="Boolean(activeAction) || !previewInputEditable" - /> + :disabled="Boolean(activeAction) || !previewInputEditable" placeholder="请输入确认重量" /> { + const path = join(directory, entry.name) + if (entry.isDirectory()) return vueFiles(path) + return extname(entry.name) === '.vue' ? [path] : [] + }) +} + +function isPermanentlyReadOnly(tag: string): boolean { + return ( + /\s(?:disabled|readonly)(?=\s|\/>|>)/.test(tag) || + /\s(?:disabled|readonly)=(?:""|'')/.test(tag) || + /\s(?::|v-bind:)(?:disabled|readonly)=(?:"true"|'true')/.test(tag) + ) +} + +function hasMeaningfulPlaceholder(tag: string): boolean { + const value = tag.match(/\s(?::|v-bind:)?placeholder\s*=\s*(["'])(.*?)\1/)?.[2] + return Boolean(value?.trim()) +} + +describe('正式业务模块输入提示合同', () => { + it('所有可编辑 el-input 与 el-input-number 都提供 placeholder', () => { + const violations: string[] = [] + + for (const file of vueFiles(modulesRoot)) { + const source = readFileSync(file, 'utf8').replace(//g, (comment) => + comment.replace(/[^\n]/g, ' '), + ) + const openingTag = /])*>/g + + for (const match of source.matchAll(openingTag)) { + const tag = match[0] + if (isPermanentlyReadOnly(tag)) continue + if (hasMeaningfulPlaceholder(tag)) continue + + const line = source.slice(0, match.index).split('\n').length + violations.push( + `${relative(modulesRoot, file).replaceAll('\\', '/')}:${line} ${tag.replace(/\s+/g, ' ')}`, + ) + } + } + + expect(violations, `缺少 placeholder:\n${violations.join('\n')}`).toEqual([]) + }) +}) diff --git a/src/modules/loading-lists/components/ContainerFeesPanel.vue b/src/modules/loading-lists/components/ContainerFeesPanel.vue index f87c1f75..b2b9766f 100644 --- a/src/modules/loading-lists/components/ContainerFeesPanel.vue +++ b/src/modules/loading-lists/components/ContainerFeesPanel.vue @@ -412,19 +412,19 @@ onMounted(() => void load()) - +
{{ customerLabel(row.customerId || targetGroupRows[index]?.customerId || '') }}{{ row.orderNo }} · {{ row.inboundCode || '无入仓码' }} - +

已分摊 ¥{{ money(allocationSum) }} / 总额 ¥{{ money(form.amount) }}

diff --git a/src/modules/notifications/components/MessageComposerDialog.vue b/src/modules/notifications/components/MessageComposerDialog.vue index 9b10e4a7..f5ccddc9 100644 --- a/src/modules/notifications/components/MessageComposerDialog.vue +++ b/src/modules/notifications/components/MessageComposerDialog.vue @@ -68,7 +68,7 @@ async function submit() {
-
模板变量
+
模板变量
启用
diff --git a/src/modules/notifications/components/TemplateEditorDialog.vue b/src/modules/notifications/components/TemplateEditorDialog.vue index e8b8d604..0d6802e7 100644 --- a/src/modules/notifications/components/TemplateEditorDialog.vue +++ b/src/modules/notifications/components/TemplateEditorDialog.vue @@ -37,7 +37,7 @@ async function submit() { -
常用变量{{ name }}
内容预览

{{ preview }}

+
常用变量{{ name }}
内容预览

{{ preview }}

diff --git a/src/modules/ocean-bookings/pages/OceanBookingDetailView.vue b/src/modules/ocean-bookings/pages/OceanBookingDetailView.vue index 87fceebf..8e65973a 100644 --- a/src/modules/ocean-bookings/pages/OceanBookingDetailView.vue +++ b/src/modules/ocean-bookings/pages/OceanBookingDetailView.vue @@ -437,7 +437,7 @@ onMounted(() => { void load(); void loadOptions() }) - + {{ requirement.capacityCbm }} m³ {{ requirement.maxWeightKg }} kg {{ requirement.remainingQuantity ?? requirement.quantity }} diff --git a/src/modules/overseas-business/pages/PurchaseOrderEditView.vue b/src/modules/overseas-business/pages/PurchaseOrderEditView.vue index 354c9014..78ed2469 100644 --- a/src/modules/overseas-business/pages/PurchaseOrderEditView.vue +++ b/src/modules/overseas-business/pages/PurchaseOrderEditView.vue @@ -76,9 +76,9 @@ watch([purchaseId, customerId], () => { void loadWarehouses().then(load) }, { im
-
-
服务端仅允许已通过订单修改入库量{{ warehousesError }}
-
出库总量:{{ outboundQuantity }} / {{ form.inboundQuantity }}添加出库明细
暂无出库明细,可添加多条出库记录
+
+
服务端仅允许已通过订单修改入库量{{ warehousesError }}
+
出库总量:{{ outboundQuantity }} / {{ form.inboundQuantity }}添加出库明细
暂无出库明细,可添加多条出库记录
保存取消
diff --git a/src/modules/overseas-business/pages/TransportOrderFormView.vue b/src/modules/overseas-business/pages/TransportOrderFormView.vue index 245ae503..65b27e65 100644 --- a/src/modules/overseas-business/pages/TransportOrderFormView.vue +++ b/src/modules/overseas-business/pages/TransportOrderFormView.vue @@ -111,9 +111,9 @@ watch([orderId, routeCustomerId, isLooseboard], () => { void load(); void loadCu {{ customersError }}
{{ item.label }}是否
- {{ item.label }}
-
-
+ {{ item.label }}
+
+
取消{{ editing ? '保存修改' : '提交订单' }}
diff --git a/src/modules/overseas-master-data/pages/ExchangeRatesView.vue b/src/modules/overseas-master-data/pages/ExchangeRatesView.vue index 390e3bf2..6cab5fd5 100644 --- a/src/modules/overseas-master-data/pages/ExchangeRatesView.vue +++ b/src/modules/overseas-master-data/pages/ExchangeRatesView.vue @@ -53,6 +53,6 @@ watch([page, pageSize], load); onMounted(load)
-

汇率方向:1 USD = X CNY

+

汇率方向:1 USD = X CNY

diff --git a/src/modules/overseas-master-data/pages/OverseasQuotesView.vue b/src/modules/overseas-master-data/pages/OverseasQuotesView.vue index e97dd7e2..2f0b0e0b 100644 --- a/src/modules/overseas-master-data/pages/OverseasQuotesView.vue +++ b/src/modules/overseas-master-data/pages/OverseasQuotesView.vue @@ -61,6 +61,6 @@ watch([page,pageSize],load);onMounted(()=>{void Promise.all([load(),loadOptions(
{{item[0]}}{{item[1]}}

仓储作业费用

中转派送价格

-

仓储作业费用 + 添加费用

删除

中转派送价格 + 添加派送价格

删除
+

仓储作业费用 + 添加费用

删除

中转派送价格 + 添加派送价格

删除
diff --git a/src/modules/overseas-master-data/pages/VehiclesView.vue b/src/modules/overseas-master-data/pages/VehiclesView.vue index b109c4d5..ae8697d3 100644 --- a/src/modules/overseas-master-data/pages/VehiclesView.vue +++ b/src/modules/overseas-master-data/pages/VehiclesView.vue @@ -23,5 +23,5 @@ async function exportCsv(){exporting.value=true;try{const{page:_,size:__,...q}=p watch([page,pageSize],load);onMounted(load) +
diff --git a/src/modules/overseas-warehouse/pages/CartonsView.vue b/src/modules/overseas-warehouse/pages/CartonsView.vue index 7f8196e5..8e27e094 100644 --- a/src/modules/overseas-warehouse/pages/CartonsView.vue +++ b/src/modules/overseas-warehouse/pages/CartonsView.vue @@ -56,13 +56,13 @@ function openDetail(source: object) { const row = source as CartonListItem; void - - + + - + diff --git a/src/modules/overseas-warehouse/pages/DispatchesView.vue b/src/modules/overseas-warehouse/pages/DispatchesView.vue index 781c48fa..914d3a79 100644 --- a/src/modules/overseas-warehouse/pages/DispatchesView.vue +++ b/src/modules/overseas-warehouse/pages/DispatchesView.vue @@ -219,7 +219,7 @@ onMounted(load) -

派送信息

费用信息(USD)

-
+

派送信息

费用信息(USD)

+
diff --git a/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue b/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue index 12072d25..2b353b46 100644 --- a/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue +++ b/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue @@ -94,9 +94,9 @@ onMounted(load) - - - + + + diff --git a/src/modules/overseas-warehouse/pages/LastMileOrderDetailView.vue b/src/modules/overseas-warehouse/pages/LastMileOrderDetailView.vue index 6057758d..4c061148 100644 --- a/src/modules/overseas-warehouse/pages/LastMileOrderDetailView.vue +++ b/src/modules/overseas-warehouse/pages/LastMileOrderDetailView.vue @@ -176,7 +176,7 @@ onMounted(load) - + diff --git a/src/modules/overseas-warehouse/pages/ProductsView.vue b/src/modules/overseas-warehouse/pages/ProductsView.vue index a685d8bd..6cd80208 100644 --- a/src/modules/overseas-warehouse/pages/ProductsView.vue +++ b/src/modules/overseas-warehouse/pages/ProductsView.vue @@ -55,10 +55,10 @@ function openDetail(source: object) { const row = source as ProductListItem; voi - - - - + + + + diff --git a/src/modules/unified-orders/components/InboundFeeDetailManager.vue b/src/modules/unified-orders/components/InboundFeeDetailManager.vue index 71932c6b..f0b7c07e 100644 --- a/src/modules/unified-orders/components/InboundFeeDetailManager.vue +++ b/src/modules/unified-orders/components/InboundFeeDetailManager.vue @@ -336,14 +336,14 @@ onMounted(() => void load()) - - - + + + - + diff --git a/src/modules/unified-orders/components/OrderDeclarationEditorDialog.vue b/src/modules/unified-orders/components/OrderDeclarationEditorDialog.vue index 8f7b0fe9..da60eddc 100644 --- a/src/modules/unified-orders/components/OrderDeclarationEditorDialog.vue +++ b/src/modules/unified-orders/components/OrderDeclarationEditorDialog.vue @@ -250,9 +250,9 @@ async function save() { - + - + @@ -273,28 +273,28 @@ async function save() {
- - - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
diff --git a/src/modules/unified-orders/pages/UnifiedOrdersView.vue b/src/modules/unified-orders/pages/UnifiedOrdersView.vue index c5ffa007..70c7a839 100644 --- a/src/modules/unified-orders/pages/UnifiedOrdersView.vue +++ b/src/modules/unified-orders/pages/UnifiedOrdersView.vue @@ -1817,8 +1817,8 @@ onBeforeUnmount(() => { -
kg
-
m³
+
kg
+
m³

参考数据

diff --git a/src/modules/unified-orders/workflows/components/SmartLoadingWorkbench.vue b/src/modules/unified-orders/workflows/components/SmartLoadingWorkbench.vue index 915783b7..69a93b30 100644 --- a/src/modules/unified-orders/workflows/components/SmartLoadingWorkbench.vue +++ b/src/modules/unified-orders/workflows/components/SmartLoadingWorkbench.vue @@ -321,13 +321,13 @@ onMounted(() => { void load() })

{{ selectedCandidate?.inboundCode || '入仓码暂缺' }} · 最多可加入 {{ selectedCandidate ? fittingCount(selectedCandidate) : 0 }} 箱

- +

{{ selectedItem?.inboundCode || '入仓码暂缺' }} · 当前 {{ selectedItem?.packageCount || 0 }} 箱

- +
diff --git a/src/modules/unified-orders/workflows/components/UnifiedOrderWorkflowPanel.vue b/src/modules/unified-orders/workflows/components/UnifiedOrderWorkflowPanel.vue index cb694907..22099f6e 100644 --- a/src/modules/unified-orders/workflows/components/UnifiedOrderWorkflowPanel.vue +++ b/src/modules/unified-orders/workflows/components/UnifiedOrderWorkflowPanel.vue @@ -545,10 +545,10 @@ onMounted(() => { void refresh() })
- - + +
- + {{ preloadDraftError }} diff --git a/src/modules/warehouse-resources/pallets/pages/PalletsView.vue b/src/modules/warehouse-resources/pallets/pages/PalletsView.vue index 1834e193..c4bbe293 100644 --- a/src/modules/warehouse-resources/pallets/pages/PalletsView.vue +++ b/src/modules/warehouse-resources/pallets/pages/PalletsView.vue @@ -441,10 +441,10 @@ onMounted(() => {
- + - +