diff --git a/klp-ui/src/components/ChinaAreaSelect/data.js b/klp-ui/src/components/ChinaAreaSelect/data.js index 915ed879..a478749c 100644 --- a/klp-ui/src/components/ChinaAreaSelect/data.js +++ b/klp-ui/src/components/ChinaAreaSelect/data.js @@ -3,7 +3,7 @@ // 行政区划的层级与一个国家的中央地方关系模式、国土面积的大小、政府与公众的关系状况等因素有关。 // 行政区划代码,也称行政代码,它是国家行政机关的识别符号,一般执行两项国家标准 -// :《中华人民共和国行政区划代码》(GB/T2260-2007)和《县以下行政区划代码编制规则》(GB/T10114-2003)。 +// 《中华人民共和国行政区划代码》(GB/T2260-2007)和《县以下行政区划代码编制规则》(GB/T10114-2003)。 // 由9位阿拉伯数字组成,相当于机关单位的身份号码。按照国务院《行政区划管理条例》规定,行政区划代码由民政部门确定、发布。 // 该标准对我国县以上行政区划的代码做了规定,用六位阿拉伯数字分层次代表我国的省(自治区、直辖市)、地区(市、州、盟)、县(区、市、旗)的名称。 diff --git a/klp-ui/src/components/ChinaAreaSelect/index.js b/klp-ui/src/components/ChinaAreaSelect/index.js new file mode 100644 index 00000000..283aa378 --- /dev/null +++ b/klp-ui/src/components/ChinaAreaSelect/index.js @@ -0,0 +1,85 @@ +import areaData from './data.js'; + +/** + * 辅助函数:将code数组/字符串转为name字符串 + * @param {String|Array} codeVal - 如 "110000/110101" 或 ["110000", "110101"] + * @returns {String} 如 "北京市/东城区" + */ +function convertCodeToName(codeVal) { + if (!codeVal) return ''; + const codeArr = Array.isArray(codeVal) ? codeVal : codeVal.split('/').filter(Boolean); + return codeArr.map(code => areaData[code] || '').filter(Boolean).join('/'); +} + +/** + * 格式化/解析区域地址文本(兼容「[标准地址](自定义地址)」格式) + * @param {String|Object} value - 输入值: + * - 字符串:如 "[北京市/东城区](XX街道1号)"、"北京市/东城区"、"" 等 + * - 对象:{ standard: '北京市/东城区', custom: 'XX街道1号' } + * @returns {Object|String} 输出规则: + * - 输入为字符串 → 返回结构化对象 { standard: '', custom: '' } + * - 输入为对象 → 返回格式化后的组合字符串 "[标准地址](自定义地址)" + * - 输入为空/非预期类型 → 返回空字符串(对象模式)或空结构(字符串模式) + */ +function formatAreaText(value) { + // 核心正则:匹配「[标准地址](自定义地址)」格式,分组提取标准地址和自定义地址 + const areaReg = /^\[([^\]]*)\]\(([^)]*)\)$/; + + // ========== 场景1:输入为空/非预期类型 → 容错返回 ========== + if (!value || (typeof value !== 'string' && typeof value !== 'object')) { + // 输入非字符串/对象 → 按类型返回默认值 + return typeof value === 'object' ? '' : { standard: '', custom: '' }; + } + + // ========== 场景2:输入是字符串 → 解析为结构化对象 ========== + if (typeof value === 'string') { + // 去除首尾空格 + const trimVal = value.trim(); + // 空字符串 → 返回空结构 + if (!trimVal) return { standard: '', custom: '' }; + + // 匹配「[标准地址](自定义地址)」格式 + const matchResult = trimVal.match(areaReg); + if (matchResult) { + // 提取分组值并去空格 + const standard = matchResult[1]?.trim() || ''; + const custom = matchResult[2]?.trim() || ''; + return { standard, custom }; + } + + // 非组合格式(纯标准地址/纯自定义地址)→ 默认归为standard + return { standard: trimVal, custom: '' }; + } + + // ========== 场景3:输入是对象 → 格式化为组合字符串 ========== + if (typeof value === 'object' && !Array.isArray(value)) { + const { standard = '', custom = '' } = value; + // 转字符串并去空格 + const standardStr = String(standard).trim(); + const customStr = String(custom).trim(); + + // 组合为「[标准地址](自定义地址)」格式 + return `[${standardStr}](${customStr})`; + } + + // 兜底:其他情况返回空(如数组输入) + return typeof value === 'object' ? '' : { standard: '', custom: '' }; +} + +/** + * 增强版:支持code自动转name的格式化函数 + */ +function formatAreaTextEnhanced(value, keyType = 'name') { + // 先调用基础版解析/格式化 + const result = formatAreaText(value); + + // 如果是解析模式(返回对象)且keyType为name,转换code为name + if (typeof result === 'object' && keyType === 'name') { + result.standard = convertCodeToName(result.standard); + } + + return result; +} + +// 输出:{ standard: "北京市/东城区", custom: "XX街道1号" } +export { formatAreaTextEnhanced }; \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/CategorySelect/index.vue b/klp-ui/src/components/KLPService/CategorySelect/index.vue deleted file mode 100644 index d97286d6..00000000 --- a/klp-ui/src/components/KLPService/CategorySelect/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/klp-ui/src/components/KLPService/WarehouseSelect/index.vue b/klp-ui/src/components/KLPService/WarehouseSelect/index.vue index 00de50e2..fba1f5da 100644 --- a/klp-ui/src/components/KLPService/WarehouseSelect/index.vue +++ b/klp-ui/src/components/KLPService/WarehouseSelect/index.vue @@ -13,7 +13,8 @@ v-for="item in warehouseOptions" :key="item.warehouseId" :label="item.warehouseName" - :value="item.warehouseId" + :value="item.warehouseId" + :disabled="item.isEnabled == 0" > {{ item.warehouseName }} @@ -88,7 +89,8 @@ export default { const option = { warehouseId: item.warehouseId, warehouseName: item.warehouseName, - level: level + level: level, + isEnabled: item.isEnabled, }; // 递归构建子节点 diff --git a/klp-ui/src/components/KLPService/formItems/ActualWarehouseSelect/index.vue b/klp-ui/src/components/KLPService/formItems/ActualWarehouseSelect/index.vue new file mode 100644 index 00000000..fb8fcf5a --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/ActualWarehouseSelect/index.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/klp-ui/src/components/KLPService/formItems/AmountSelect/index.vue b/klp-ui/src/components/KLPService/formItems/AmountSelect/index.vue new file mode 100644 index 00000000..0ae0c13f --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/AmountSelect/index.vue @@ -0,0 +1,49 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/CheckItemSelect/index.vue b/klp-ui/src/components/KLPService/formItems/CheckItemSelect/index.vue new file mode 100644 index 00000000..673262fc --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/CheckItemSelect/index.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/CraftSelect/index.vue b/klp-ui/src/components/KLPService/formItems/CraftSelect/index.vue new file mode 100644 index 00000000..91ecf0f7 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/CraftSelect/index.vue @@ -0,0 +1,45 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/CustomerSelect/index.vue b/klp-ui/src/components/KLPService/formItems/CustomerSelect/index.vue new file mode 100644 index 00000000..ed1dafc8 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/CustomerSelect/index.vue @@ -0,0 +1,48 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/MaterialSelect/index.vue b/klp-ui/src/components/KLPService/formItems/MaterialSelect/index.vue new file mode 100644 index 00000000..72691b82 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/MaterialSelect/index.vue @@ -0,0 +1,75 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/OrderDetailSelect/index.vue b/klp-ui/src/components/KLPService/formItems/OrderDetailSelect/index.vue new file mode 100644 index 00000000..9251caca --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/OrderDetailSelect/index.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/OrderSelect/index.vue b/klp-ui/src/components/KLPService/formItems/OrderSelect/index.vue new file mode 100644 index 00000000..4d2068ef --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/OrderSelect/index.vue @@ -0,0 +1,82 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/ProductSelect/index.vue b/klp-ui/src/components/KLPService/formItems/ProductSelect/index.vue new file mode 100644 index 00000000..e0a88820 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/ProductSelect/index.vue @@ -0,0 +1,395 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/RawMaterialSelect/index.vue b/klp-ui/src/components/KLPService/formItems/RawMaterialSelect/index.vue new file mode 100644 index 00000000..355e1216 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/RawMaterialSelect/index.vue @@ -0,0 +1,398 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/UserSelect/index.vue b/klp-ui/src/components/KLPService/formItems/UserSelect/index.vue new file mode 100644 index 00000000..8a39408f --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/UserSelect/index.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/klp-ui/src/components/KLPService/formItems/VendorSelect/index.vue b/klp-ui/src/components/KLPService/formItems/VendorSelect/index.vue new file mode 100644 index 00000000..02a6a853 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/VendorSelect/index.vue @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/formItems/WarehouseSelect/index.vue b/klp-ui/src/components/KLPService/formItems/WarehouseSelect/index.vue new file mode 100644 index 00000000..fba1f5da --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/WarehouseSelect/index.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/klp-ui/src/components/KLPService/formItems/index.js b/klp-ui/src/components/KLPService/formItems/index.js new file mode 100644 index 00000000..be3a99a5 --- /dev/null +++ b/klp-ui/src/components/KLPService/formItems/index.js @@ -0,0 +1,15 @@ +// 所有表单组件,查找该目录下的所有文件夹下的index.vue文件,并设置统一导出 +const req = require.context('./', true, /\/index\.vue$/) // 注意:第一个参数是当前目录,第二个参数改为true(递归查找子文件夹) + +const modules = {} +req.keys().forEach(key => { + // 提取文件夹名称作为组件名(比如 ./Input/index.vue → Input) + const componentName = key.replace(/^\.\/(.*)\/index\.vue$/, '$1') + modules[componentName] = req(key).default + + // 关键:为每个组件添加命名导出(支持按需导入) + module.exports[componentName] = req(key).default +}) + +// 保持默认导出(支持全部导入) +module.exports.default = modules \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/index.js b/klp-ui/src/components/KLPService/index.js index 36aeed07..68c7ddfb 100644 --- a/klp-ui/src/components/KLPService/index.js +++ b/klp-ui/src/components/KLPService/index.js @@ -1,4 +1,3 @@ -export { default as CategorySelect } from './CategorySelect/index.vue'; export { default as CheckItemSelect } from './CheckItemSelect/index.vue'; export { default as ProductSelect } from './ProductSelect/index.vue'; export { default as RawMaterialSelect } from './RawMaterialSelect/index.vue'; diff --git a/klp-ui/src/views/crm/components/CustomerInfo.vue b/klp-ui/src/views/crm/components/CustomerInfo.vue index 5c92bac0..77bf540b 100644 --- a/klp-ui/src/views/crm/components/CustomerInfo.vue +++ b/klp-ui/src/views/crm/components/CustomerInfo.vue @@ -16,11 +16,15 @@ - {{ customer.address || '-' }} + + {{ formattedAddress || '-' }} + \ No newline at end of file diff --git a/klp-ui/src/views/wms/coil/split.vue b/klp-ui/src/views/wms/coil/split.vue index 23d20e88..3ad6cd77 100644 --- a/klp-ui/src/views/wms/coil/split.vue +++ b/klp-ui/src/views/wms/coil/split.vue @@ -164,11 +164,11 @@ - - - + - - - + @@ -234,6 +234,7 @@ import { listProductWithBom } from '@/api/wms/product'; import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect"; import RawMaterialSelect from "@/components/KLPService/RawMaterialSelect"; import ProductSelect from "@/components/KLPService/ProductSelect"; +import WarehouseSelect from "@/components/KLPService/WarehouseSelect"; export default { name: 'TypingCoil', @@ -241,6 +242,7 @@ export default { ActualWarehouseSelect, RawMaterialSelect, ProductSelect, + WarehouseSelect, }, data() { return { diff --git a/klp-ui/src/views/wms/product/index.vue b/klp-ui/src/views/wms/product/index.vue index 95e66303..561f7998 100644 --- a/klp-ui/src/views/wms/product/index.vue +++ b/klp-ui/src/views/wms/product/index.vue @@ -136,8 +136,7 @@