From 1d95b134d85c3c60cf0e72739888c9741a0bb1ee Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期五, 10 四月 2026 13:20:39 +0800
Subject: [PATCH] #页面优化

---
 rsf-design/src/views/basic-info/wh-mat/whMatPage.helpers.js |  446 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 387 insertions(+), 59 deletions(-)

diff --git a/rsf-design/src/views/basic-info/wh-mat/whMatPage.helpers.js b/rsf-design/src/views/basic-info/wh-mat/whMatPage.helpers.js
index 5930c2f..c433717 100644
--- a/rsf-design/src/views/basic-info/wh-mat/whMatPage.helpers.js
+++ b/rsf-design/src/views/basic-info/wh-mat/whMatPage.helpers.js
@@ -1,5 +1,13 @@
 import { $t } from '@/locales'
 
+export const WH_MAT_REPORT_TITLE = '鐗╂枡鎶ヨ〃'
+export const WH_MAT_REPORT_STYLE = {
+  orientation: 'landscape',
+  titleAlign: 'center',
+  titleLevel: 'h2'
+}
+export const WH_MAT_DYNAMIC_FIELD_PREFIX = 'extendField__'
+
 function normalizeText(value) {
   return String(value ?? '').trim()
 }
@@ -20,33 +28,137 @@
   return Number.isFinite(numericValue) ? numericValue : null
 }
 
+function normalizeNullableInteger(value) {
+  const numericValue = normalizeNullableNumber(value)
+  return numericValue === null ? null : Math.trunc(numericValue)
+}
+
+function normalizeBooleanLikeText(value, t = $t) {
+  if (value === 1 || value === '1') return t('common.status.yes')
+  if (value === 0 || value === '0') return t('common.status.no')
+  return t('common.placeholder.empty')
+}
+
 export function createWhMatSearchState() {
   return {
     condition: '',
     code: '',
     name: '',
+    platCode: '',
     spec: '',
     model: '',
-    barcode: ''
+    color: '',
+    size: '',
+    unit: '',
+    purUnit: '',
+    stockUnit: '',
+    barcode: '',
+    describle: '',
+    groupId: '',
+    rglarId: '',
+    weight: null,
+    nromNum: null,
+    stockLevel: '',
+    flagLabelMange: '',
+    safeQty: null,
+    minQty: null,
+    maxQty: null,
+    stagn: null,
+    valid: null,
+    status: '',
+    flagCheck: '',
+    validWarn: null,
+    memo: '',
+    orderBy: 'create_time desc'
+  }
+}
+
+export function createWhMatFormState() {
+  return {
+    id: void 0,
+    code: '',
+    name: '',
+    groupId: '',
+    useOrgName: '',
+    spec: '',
+    model: '',
+    color: '',
+    size: '',
+    weight: void 0,
+    unit: '',
+    purUnit: '',
+    describle: '',
+    safeQty: void 0,
+    minQty: void 0,
+    maxQty: void 0,
+    stagn: void 0,
+    valid: void 0,
+    validWarn: void 0,
+    flagCheck: 0,
+    rglarId: ''
   }
 }
 
 export function buildWhMatPageQueryParams(params = {}) {
   const result = {
     current: params.current || 1,
-    pageSize: params.pageSize || params.size || 20
+    pageSize: params.pageSize || params.size || 20,
+    orderBy: normalizeText(params.orderBy) || 'create_time desc'
   }
 
-  ;['condition', 'code', 'name', 'spec', 'model', 'barcode'].forEach((key) => {
+  ;[
+    'condition',
+    'code',
+    'name',
+    'platCode',
+    'spec',
+    'model',
+    'color',
+    'size',
+    'unit',
+    'purUnit',
+    'stockUnit',
+    'barcode',
+    'describle',
+    'memo'
+  ].forEach((key) => {
     const value = normalizeText(params[key])
     if (value) {
       result[key] = value
     }
   })
+  ;[
+    'groupId',
+    'rglarId',
+    'weight',
+    'nromNum',
+    'stockLevel',
+    'flagLabelMange',
+    'safeQty',
+    'minQty',
+    'maxQty',
+    'stagn',
+    'valid',
+    'status',
+    'flagCheck',
+    'validWarn'
+  ].forEach((key) => {
+    const value = params[key]
+    if (value !== '' && value !== null && value !== undefined) {
+      const numericValue = Number(value)
+      result[key] = Number.isFinite(numericValue) ? numericValue : value
+    }
+  })
 
-  if (params.groupId !== undefined && params.groupId !== null && params.groupId !== '') {
-    result.groupId = String(params.groupId)
-  }
+  Object.entries(params).forEach(([key, value]) => {
+    if (!key.startsWith(WH_MAT_DYNAMIC_FIELD_PREFIX)) {
+      return
+    }
+    const normalizedValue = normalizeText(value)
+    if (normalizedValue) {
+      result[key.slice(WH_MAT_DYNAMIC_FIELD_PREFIX.length)] = normalizedValue
+    }
+  })
 
   return result
 }
@@ -63,7 +175,7 @@
   }
 
   return records.map((item) => {
-    const children = normalizeWhMatGroupTreeRows(item?.children || [])
+    const children = normalizeWhMatGroupTreeRows(item?.children || [], t)
     const id = normalizeNullableNumber(item?.id)
     const code = normalizeText(item?.code)
     const name = normalizeText(item?.name)
@@ -77,8 +189,12 @@
       name,
       label,
       displayLabel: label,
+      value: id,
       status: normalizeNullableNumber(item?.status),
-      statusText: normalizeNumber(item?.status, 1) === 1 ? t('common.status.normal') : t('common.status.frozen'),
+      statusText:
+        normalizeNumber(item?.status, 1) === 1
+          ? t('common.status.normal')
+          : t('common.status.frozen'),
       statusType: normalizeNumber(item?.status, 1) === 1 ? 'success' : 'danger',
       memo: normalizeText(item?.memo) || t('common.placeholder.empty'),
       children
@@ -86,62 +202,241 @@
   })
 }
 
-export function normalizeWhMatRow(record = {}, t = $t) {
-  const statusValue = normalizeNullableNumber(record?.status)
+export function resolveWhMatGroupOptions(treeRows = []) {
+  if (!Array.isArray(treeRows)) {
+    return []
+  }
+
+  return treeRows.map((item) => ({
+    id: item.id,
+    value: item.id,
+    label:
+      item.displayLabel || item.label || [item.name, item.code].filter(Boolean).join(' 路 ') || '-',
+    displayLabel:
+      item.displayLabel || item.label || [item.name, item.code].filter(Boolean).join(' 路 ') || '-',
+    children: resolveWhMatGroupOptions(item.children || [])
+  }))
+}
+
+export function resolveWhMatSerialRuleOptions(records = []) {
+  if (!Array.isArray(records)) {
+    return []
+  }
+  return records
+    .map((item) => ({
+      value: normalizeNullableNumber(item?.id),
+      label: normalizeText(item?.name || item?.code || item?.description)
+    }))
+    .filter((item) => item.value !== null && item.label)
+}
+
+export function getWhMatStatusOptions(t = $t) {
+  return [
+    { value: 1, label: t('common.status.normal') },
+    { value: 0, label: t('common.status.frozen') }
+  ]
+}
+
+export function getWhMatFlagCheckOptions(t = $t) {
+  return [
+    { value: 0, label: t('common.status.no') },
+    { value: 1, label: t('common.status.yes') }
+  ]
+}
+
+export function getWhMatStockLevelOptions() {
+  return [
+    { value: 0, label: 'A' },
+    { value: 1, label: 'B' },
+    { value: 2, label: 'C' }
+  ]
+}
+
+export function getWhMatFlagLabelManageOptions(t = $t) {
+  return [
+    { value: 0, label: t('common.status.no') },
+    { value: 1, label: t('common.status.yes') }
+  ]
+}
+
+export function getWhMatDynamicFieldKey(fieldName) {
+  return `${WH_MAT_DYNAMIC_FIELD_PREFIX}${fieldName}`
+}
+
+export function normalizeWhMatEnabledFields(fields = []) {
+  if (!Array.isArray(fields)) {
+    return []
+  }
+
+  return fields
+    .map((item) => ({
+      fields: normalizeText(item?.fields),
+      fieldsAlise: normalizeText(item?.fieldsAlise || item?.fieldsAlias || item?.fields)
+    }))
+    .filter((item) => item.fields)
+}
+
+export function attachWhMatDynamicFields(record = {}, enabledFields = []) {
+  const extendFields =
+    record?.extendFields &&
+    typeof record.extendFields === 'object' &&
+    !Array.isArray(record.extendFields)
+      ? record.extendFields
+      : {}
+  const dynamicValues = {}
+
+  enabledFields.forEach((field) => {
+    dynamicValues[getWhMatDynamicFieldKey(field.fields)] = extendFields[field.fields] || ''
+  })
+
   return {
     ...record,
-    code: normalizeText(record?.code) || t('common.placeholder.empty'),
-    name: normalizeText(record?.name) || t('common.placeholder.empty'),
-    groupName: normalizeText(record?.groupId$ || record?.groupCode) || t('common.placeholder.empty'),
-    shipperName: normalizeText(record?.shipperId$ || record?.shipperName) || t('common.placeholder.empty'),
-    barcode: normalizeText(record?.barcode) || t('common.placeholder.empty'),
-    spec: normalizeText(record?.spec) || t('common.placeholder.empty'),
-    model: normalizeText(record?.model) || t('common.placeholder.empty'),
-    color: normalizeText(record?.color) || t('common.placeholder.empty'),
-    size: normalizeText(record?.size) || t('common.placeholder.empty'),
-    unit: normalizeText(record?.unit) || t('common.placeholder.empty'),
-    purUnit: normalizeText(record?.purUnit) || t('common.placeholder.empty'),
-    stockUnit: normalizeText(record?.stockUnit) || t('common.placeholder.empty'),
-    stockLevelText: normalizeText(record?.stockLeval$) || t('common.placeholder.empty'),
-    flagLabelManageText: normalizeText(record?.flagLabelMange$) || t('common.placeholder.empty'),
-    flagCheckText:
-      record?.flagCheck === 1 || record?.flagCheck === '1'
-        ? t('common.status.yes')
-        : record?.flagCheck === 0 || record?.flagCheck === '0'
-          ? t('common.status.no')
-          : t('common.placeholder.empty'),
-    statusText:
-      normalizeText(record?.status$) ||
-      (statusValue === 1
-        ? t('common.status.normal')
-        : statusValue === 0
-          ? t('common.status.frozen')
-          : t('common.placeholder.empty')),
-    statusType: statusValue === 1 ? 'success' : statusValue === 0 ? 'danger' : 'info',
-    safeQty: record?.safeQty ?? t('common.placeholder.empty'),
-    minQty: record?.minQty ?? t('common.placeholder.empty'),
-    maxQty: record?.maxQty ?? t('common.placeholder.empty'),
-    valid: record?.valid ?? t('common.placeholder.empty'),
-    validWarn: record?.validWarn ?? t('common.placeholder.empty'),
-    stagn: record?.stagn ?? t('common.placeholder.empty'),
-    describle: normalizeText(record?.describle) || t('common.placeholder.empty'),
-    baseUnit: normalizeText(record?.baseUnit) || t('common.placeholder.empty'),
-    useOrgName: normalizeText(record?.useOrgName) || t('common.placeholder.empty'),
-    erpClsId: normalizeText(record?.erpClsId) || t('common.placeholder.empty'),
-    memo: normalizeText(record?.memo) || t('common.placeholder.empty'),
-    updateByText: normalizeText(record?.updateBy$) || t('common.placeholder.empty'),
-    createByText: normalizeText(record?.createBy$) || t('common.placeholder.empty'),
-    updateTimeText: normalizeText(record?.updateTime$ || record?.updateTime) || t('common.placeholder.empty'),
-    createTimeText: normalizeText(record?.createTime$ || record?.createTime) || t('common.placeholder.empty'),
-    extendFields:
-      record?.extendFields && typeof record.extendFields === 'object' && !Array.isArray(record.extendFields)
-        ? record.extendFields
-        : {}
+    ...dynamicValues,
+    extendFields
   }
 }
 
-export function normalizeWhMatDetail(record = {}, t = $t) {
-  return normalizeWhMatRow(record, t)
+export function normalizeWhMatRow(record = {}, t = $t, enabledFields = []) {
+  const statusValue = normalizeNullableNumber(record?.status)
+  const validWarn = record?.validWarn ?? record?.valid_warn
+  const purUnit = record?.purUnit ?? record?.purchaseUnit
+  const stockLevelLabel =
+    getWhMatStockLevelOptions().find(
+      (item) => item.value === normalizeNullableNumber(record?.stockLevel)
+    )?.label || ''
+  const flagLabelManageLabel =
+    getWhMatFlagLabelManageOptions(t).find(
+      (item) => item.value === normalizeNullableNumber(record?.flagLabelMange)
+    )?.label || ''
+
+  return attachWhMatDynamicFields(
+    {
+      ...record,
+      id: normalizeNullableNumber(record?.id),
+      code: normalizeText(record?.code) || t('common.placeholder.empty'),
+      name: normalizeText(record?.name) || t('common.placeholder.empty'),
+      groupId: normalizeNullableNumber(record?.groupId),
+      groupName:
+        normalizeText(record?.groupId$ || record?.groupCode || record?.groupName) ||
+        t('common.placeholder.empty'),
+      shipperName:
+        normalizeText(record?.shipperId$ || record?.shipperName) || t('common.placeholder.empty'),
+      barcode: normalizeText(record?.barcode) || t('common.placeholder.empty'),
+      platCode: normalizeText(record?.platCode) || t('common.placeholder.empty'),
+      spec: normalizeText(record?.spec) || t('common.placeholder.empty'),
+      model: normalizeText(record?.model) || t('common.placeholder.empty'),
+      color: normalizeText(record?.color) || t('common.placeholder.empty'),
+      size: normalizeText(record?.size) || t('common.placeholder.empty'),
+      weight: record?.weight ?? t('common.placeholder.empty'),
+      nromNum: record?.nromNum ?? t('common.placeholder.empty'),
+      unit: normalizeText(record?.unit) || t('common.placeholder.empty'),
+      purUnit: normalizeText(purUnit) || t('common.placeholder.empty'),
+      stockUnit: normalizeText(record?.stockUnit) || t('common.placeholder.empty'),
+      stockLevelText:
+        normalizeText(record?.stockLeval$ || record?.stockLevel$ || stockLevelLabel) ||
+        t('common.placeholder.empty'),
+      flagLabelManageText:
+        normalizeText(record?.flagLabelMange$ || record?.isLabelMange$ || flagLabelManageLabel) ||
+        t('common.placeholder.empty'),
+      flagCheckText: normalizeBooleanLikeText(record?.flagCheck, t),
+      statusText:
+        normalizeText(record?.status$) ||
+        (statusValue === 1
+          ? t('common.status.normal')
+          : statusValue === 0
+            ? t('common.status.frozen')
+            : t('common.placeholder.empty')),
+      statusType: statusValue === 1 ? 'success' : statusValue === 0 ? 'danger' : 'info',
+      safeQty: record?.safeQty ?? t('common.placeholder.empty'),
+      minQty: record?.minQty ?? t('common.placeholder.empty'),
+      maxQty: record?.maxQty ?? t('common.placeholder.empty'),
+      valid: record?.valid ?? t('common.placeholder.empty'),
+      validWarn: validWarn ?? t('common.placeholder.empty'),
+      stagn: record?.stagn ?? t('common.placeholder.empty'),
+      describle: normalizeText(record?.describle) || t('common.placeholder.empty'),
+      baseUnit: normalizeText(record?.baseUnit) || t('common.placeholder.empty'),
+      useOrgName: normalizeText(record?.useOrgName) || t('common.placeholder.empty'),
+      erpClsId: normalizeText(record?.erpClsId) || t('common.placeholder.empty'),
+      rglarId: normalizeNullableNumber(record?.rglarId),
+      rglarName:
+        normalizeText(record?.rglarId$ || record?.rglarName || record?.rglarCode) ||
+        t('common.placeholder.empty'),
+      memo: normalizeText(record?.memo) || t('common.placeholder.empty'),
+      updateByText: normalizeText(record?.updateBy$) || t('common.placeholder.empty'),
+      createByText: normalizeText(record?.createBy$) || t('common.placeholder.empty'),
+      updateTimeText:
+        normalizeText(record?.updateTime$ || record?.updateTime) || t('common.placeholder.empty'),
+      createTimeText:
+        normalizeText(record?.createTime$ || record?.createTime) || t('common.placeholder.empty')
+    },
+    enabledFields
+  )
+}
+
+export function normalizeWhMatDetail(record = {}, t = $t, enabledFields = []) {
+  return normalizeWhMatRow(record, t, enabledFields)
+}
+
+export function buildWhMatDialogModel(record = {}) {
+  const source = normalizeWhMatRow(record)
+  return {
+    ...createWhMatFormState(),
+    id: source.id ?? void 0,
+    code: normalizeText(record?.code),
+    name: normalizeText(record?.name),
+    groupId: source.groupId ?? '',
+    useOrgName: normalizeText(record?.useOrgName),
+    spec: normalizeText(record?.spec),
+    model: normalizeText(record?.model),
+    color: normalizeText(record?.color),
+    size: normalizeText(record?.size),
+    weight: normalizeNullableNumber(record?.weight),
+    unit: normalizeText(record?.unit),
+    purUnit: normalizeText(record?.purUnit || record?.purchaseUnit),
+    describle: normalizeText(record?.describle),
+    safeQty: normalizeNullableNumber(record?.safeQty),
+    minQty: normalizeNullableNumber(record?.minQty),
+    maxQty: normalizeNullableNumber(record?.maxQty),
+    stagn: normalizeNullableInteger(record?.stagn),
+    valid: normalizeNullableInteger(record?.valid),
+    validWarn: normalizeNullableInteger(record?.validWarn),
+    flagCheck: normalizeNullableInteger(record?.flagCheck) ?? 0,
+    rglarId: normalizeNullableNumber(record?.rglarId) ?? ''
+  }
+}
+
+export function buildWhMatSavePayload(formData = {}) {
+  const payload = {
+    ...(formData.id !== undefined && formData.id !== null ? { id: Number(formData.id) } : {}),
+    code: normalizeText(formData.code),
+    name: normalizeText(formData.name),
+    groupId:
+      formData.groupId !== undefined && formData.groupId !== null && formData.groupId !== ''
+        ? Number(formData.groupId)
+        : void 0,
+    useOrgName: normalizeText(formData.useOrgName),
+    spec: normalizeText(formData.spec),
+    model: normalizeText(formData.model),
+    color: normalizeText(formData.color),
+    size: normalizeText(formData.size),
+    weight: normalizeNullableNumber(formData.weight),
+    unit: normalizeText(formData.unit),
+    purUnit: normalizeText(formData.purUnit),
+    describle: normalizeText(formData.describle),
+    safeQty: normalizeNullableNumber(formData.safeQty),
+    minQty: normalizeNullableNumber(formData.minQty),
+    maxQty: normalizeNullableNumber(formData.maxQty),
+    stagn: normalizeNullableInteger(formData.stagn),
+    valid: normalizeNullableInteger(formData.valid),
+    validWarn: normalizeNullableInteger(formData.validWarn),
+    flagCheck: normalizeNullableInteger(formData.flagCheck),
+    rglarId:
+      formData.rglarId !== undefined && formData.rglarId !== null && formData.rglarId !== ''
+        ? Number(formData.rglarId)
+        : void 0
+  }
+
+  return Object.fromEntries(Object.entries(payload).filter(([, value]) => value !== undefined))
 }
 
 export function getWhMatTreeNodeLabel(node = {}) {
@@ -150,6 +445,39 @@
   return [name, code].filter(Boolean).join(' 路 ') || $t('common.placeholder.empty')
 }
 
+export function buildWhMatPrintRows(records = [], t = $t) {
+  return records.map((record) => {
+    const normalizedRecord = normalizeWhMatRow(record, t)
+    return {
+      鐗╂枡缂栫爜: normalizedRecord.code,
+      鐗╂枡鍚嶇О: normalizedRecord.name,
+      鐗╂枡鍒嗙粍: normalizedRecord.groupName,
+      瑙勬牸: normalizedRecord.spec,
+      鍨嬪彿: normalizedRecord.model,
+      鍗曚綅: normalizedRecord.unit,
+      鐘舵��: normalizedRecord.statusText,
+      鏇存柊鏃堕棿: normalizedRecord.updateTimeText
+    }
+  })
+}
+
+export function buildWhMatReportMeta({
+  previewMeta = {},
+  count = 0,
+  orientation = WH_MAT_REPORT_STYLE.orientation
+} = {}) {
+  return {
+    reportTitle: WH_MAT_REPORT_TITLE,
+    count,
+    ...previewMeta,
+    reportStyle: {
+      ...WH_MAT_REPORT_STYLE,
+      ...(previewMeta.reportStyle || {}),
+      orientation
+    }
+  }
+}
+
 export const buildMatnrPageQueryParams = buildWhMatPageQueryParams
 export const buildMatnrGroupTreeQueryParams = buildWhMatGroupTreeQueryParams
 export const normalizeMatnrGroupTreeRows = normalizeWhMatGroupTreeRows

--
Gitblit v1.9.1