liyu-pc-base 1.0.921 → 1.0.925

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/{FieldRender-BOg7nm5z.js → FieldRender-DnOLSXTl.js} +1 -1
  2. package/dist/{FieldRender2-_MtcDkI5.js → FieldRender2-CvxGe238.js} +2 -2
  3. package/dist/{FormRender3-BtY9d91e.js → FormRender3-CAxOQgue.js} +1 -1
  4. package/dist/{RemoteSelectPro-CcWTS4f6.js → RemoteSelectPro-CcL_vU1K.js} +1 -1
  5. package/dist/{SearchRender-ByarFel1.js → SearchRender-Dr_qnvZM.js} +1 -1
  6. package/dist/components/index.js +7 -7
  7. package/dist/{dbViewConfig-RGSyUx3F.js → dbViewConfig-BF0QZ_mT.js} +1 -1
  8. package/dist/{detailTablePro-CqcVbn8O.js → detailTablePro-DxgfGYN3.js} +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/liyu-pc-base.css +1 -1
  11. package/dist/{tableModal-DSKuV-hn.js → tableModal-DZE5wntG.js} +1 -1
  12. package/dist/{tablePageHost-B_BOlBNA.js → tablePageHost-hE_1hQv4.js} +82 -44
  13. package/dist/{tablePro-IAcxxAGI.js → tablePro-t2yDX9oW.js} +16 -11
  14. package/package.json +1 -1
  15. package/dist/AttributeNomTable-DHED22ju.js.map +0 -1
  16. package/dist/AttributeTable-muxdKpWW.js.map +0 -1
  17. package/dist/FieldRender-BOg7nm5z.js.map +0 -1
  18. package/dist/FieldRender2-_MtcDkI5.js.map +0 -1
  19. package/dist/FormRender3-BtY9d91e.js.map +0 -1
  20. package/dist/ImportExcelModal-Dds857L2.js.map +0 -1
  21. package/dist/JsonObj-CmylW4Or.js.map +0 -1
  22. package/dist/JsonStr-JwOPdAYW.js.map +0 -1
  23. package/dist/RemoteCascader-B2ytkZp7.js.map +0 -1
  24. package/dist/RemoteFilterSelect-BthY6Fyt.js.map +0 -1
  25. package/dist/RemoteModal-Dqy32RFN.js.map +0 -1
  26. package/dist/RemoteSelect-27xLYvyg.js.map +0 -1
  27. package/dist/RemoteSelectPro-CcWTS4f6.js.map +0 -1
  28. package/dist/RemoteTable-D_12PvNS.js.map +0 -1
  29. package/dist/RemoteTable2-DF7gWHYf.js.map +0 -1
  30. package/dist/RemoteText-DwRLI0xq.js.map +0 -1
  31. package/dist/RemoteTreeSelectPro-CXMOariR.js.map +0 -1
  32. package/dist/SearchRender-ByarFel1.js.map +0 -1
  33. package/dist/TinymceEditor-waI-dlC5.js.map +0 -1
  34. package/dist/aiGenModel-C9E1ahu8.js.map +0 -1
  35. package/dist/api/api-model.js.map +0 -1
  36. package/dist/api/typing.js.map +0 -1
  37. package/dist/batchCreateUser-B4zAXSR6.js.map +0 -1
  38. package/dist/boldenText-Bv8Zo7Vh.js.map +0 -1
  39. package/dist/components/FormRender/utils.js.map +0 -1
  40. package/dist/components/gridPage/utils.js.map +0 -1
  41. package/dist/components/index.js.map +0 -1
  42. package/dist/components/remotePages/utils.js.map +0 -1
  43. package/dist/dbDataSourceConfig-Hj90tvTR.js.map +0 -1
  44. package/dist/dbViewConfig-RGSyUx3F.js.map +0 -1
  45. package/dist/default-DmCqrYQi.js.map +0 -1
  46. package/dist/detailTablePro-CqcVbn8O.js.map +0 -1
  47. package/dist/exceljs.min-BPhBd8yF.js.map +0 -1
  48. package/dist/function-BhYSb8ls.js.map +0 -1
  49. package/dist/index.js.map +0 -1
  50. package/dist/init-plugin-CvgtEpwY.js.map +0 -1
  51. package/dist/lodash-CMVwnWxD.js.map +0 -1
  52. package/dist/md5-WIoeWMjT.js.map +0 -1
  53. package/dist/modal-tools-CrXdI5sg.js.map +0 -1
  54. package/dist/props-util-D7nkeN4W.js.map +0 -1
  55. package/dist/remotePages-CvjMLjTh.js.map +0 -1
  56. package/dist/role-manage-C7O8b2SF.js.map +0 -1
  57. package/dist/syncDataSourceConfig-OZ2mJCJs.js.map +0 -1
  58. package/dist/syncExportRawData-Dpi-VJuu.js.map +0 -1
  59. package/dist/syncModelTypeConfig-B2vV_kKb.js.map +0 -1
  60. package/dist/tableModal-DSKuV-hn.js.map +0 -1
  61. package/dist/tablePageHost-B_BOlBNA.js.map +0 -1
  62. package/dist/tablePro-IAcxxAGI.js.map +0 -1
  63. package/dist/utils/excel.js.map +0 -1
  64. package/dist/utils/hooks/useFetchData.js.map +0 -1
  65. package/dist/utils/hooks/useTableColumn.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormRender3-BtY9d91e.js","names":[],"sources":["../src/components/FormRender/FieldCol.vue","../src/components/FormRender/FieldCol.vue","../src/components/FormRender/FormRender3.vue","../src/components/FormRender/FormRender3.vue"],"sourcesContent":["<template>\n <a-col\n :span=\"is_show_field ? (field_item.span !== undefined ? field_item.span : 24) : 0\"\n :offset=\"field_item.offset\"\n :push=\"field_item.push\"\n :pull=\"field_item.pull\"\n >\n <field-render-2\n v-model:value=\"model[field_item.name]\"\n v-model:label=\"model[field_item.name + '.label']\"\n v-model:is_show_field=\"is_show_field\"\n :field=\"field_item\"\n :formModel=\"model\"\n :outModel=\"outModel\"\n :key=\"field_item.name\"\n :validateInfos=\"validateInfos\"\n :options=\"options[field_item.datasource ? field_item.datasource : field_item.name]\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :context=\"context\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n />\n </a-col>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\n\nexport default defineComponent({\n name: 'FieldCol',\n components: {\n FieldRender2,\n },\n props: {\n model: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n options: {\n type: Object,\n required: true,\n default: () => {},\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n field_item: {\n type: Object,\n default: () => {},\n },\n context: {\n type: Object,\n default: null,\n },\n innerModel: {\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update_model', 'update_name2'],\n setup(props, { emit }) {\n const is_show_field = ref(true);\n const onUpdateModel = params => {\n emit('update_model', params);\n };\n const onUpdateName2 = params => {\n emit('update_name2', params);\n };\n return { is_show_field, onUpdateModel, onUpdateName2 };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.cards {\n ::v-deep(.ant-card-head) {\n padding: 0 8px;\n min-height: 44px;\n background-color: rgba(0, 0, 0, 0.02);\n }\n}\n</style>\n","<template>\n <a-col\n :span=\"is_show_field ? (field_item.span !== undefined ? field_item.span : 24) : 0\"\n :offset=\"field_item.offset\"\n :push=\"field_item.push\"\n :pull=\"field_item.pull\"\n >\n <field-render-2\n v-model:value=\"model[field_item.name]\"\n v-model:label=\"model[field_item.name + '.label']\"\n v-model:is_show_field=\"is_show_field\"\n :field=\"field_item\"\n :formModel=\"model\"\n :outModel=\"outModel\"\n :key=\"field_item.name\"\n :validateInfos=\"validateInfos\"\n :options=\"options[field_item.datasource ? field_item.datasource : field_item.name]\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :context=\"context\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n />\n </a-col>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\n\nexport default defineComponent({\n name: 'FieldCol',\n components: {\n FieldRender2,\n },\n props: {\n model: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n options: {\n type: Object,\n required: true,\n default: () => {},\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n field_item: {\n type: Object,\n default: () => {},\n },\n context: {\n type: Object,\n default: null,\n },\n innerModel: {\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update_model', 'update_name2'],\n setup(props, { emit }) {\n const is_show_field = ref(true);\n const onUpdateModel = params => {\n emit('update_model', params);\n };\n const onUpdateName2 = params => {\n emit('update_name2', params);\n };\n return { is_show_field, onUpdateModel, onUpdateName2 };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.cards {\n ::v-deep(.ant-card-head) {\n padding: 0 8px;\n min-height: 44px;\n background-color: rgba(0, 0, 0, 0.02);\n }\n}\n</style>\n","<template>\n <a-form\n autocomplete=\"off\"\n :model=\"model\"\n :rules=\"form.rules\"\n :layout=\"form.settings.layout\"\n scrollToFirstError\n class=\"cards\"\n :validateTrigger=\"false\"\n >\n <template\n v-for=\"(row, index) in form.dynamicFieldList\"\n :key=\"index\"\n >\n <a-card\n :body-style=\"{ padding: '10px 10px 0' }\"\n style=\"margin-bottom: 5px\"\n >\n <template\n v-if=\"row.group_name && (form.dynamicFieldList.length > 1 || alwaysShowGroup)\"\n #title\n >\n {{ row.group_name }}\n </template>\n <template #extra>\n <div\n class=\"group-custom-btn-list\"\n v-if=\"row.custom_btn_list && row.custom_btn_list.length > 0\"\n >\n <template v-for=\"btn in row.custom_btn_list\">\n <debug-code\n :action_code_id=\"btn.action_code_id\"\n v-model:code=\"btn.code\"\n >\n <a-button\n v-if=\"!lockStructure || btn.show_on_modify\"\n size=\"small\"\n :type=\"btn.type\"\n :danger=\"btn.danger\"\n @click=\"handleCustomBtnClick(btn)\"\n >\n {{ btn.label }}\n </a-button>\n </debug-code>\n </template>\n </div>\n </template>\n <a-row\n :gutter=\"5\"\n type=\"flex\"\n >\n <template v-if=\"getColFieldList(row?.children).length > 0\">\n <a-col\n v-for=\"col in getColFieldList(row?.children)\"\n :key=\"col[0]\"\n :xl=\"24 / getColFieldList(row?.children).length\"\n :lg=\"24\"\n :md=\"24\"\n :sm=\"24\"\n :xs=\"24\"\n >\n <field-col\n v-for=\"(field_item, i) in row?.children.slice(col[0], col[1])\"\n :key=\"i\"\n :model=\"model\"\n :out-model=\"outModel\"\n :options=\"options\"\n :validate-infos=\"validateInfos\"\n :always-show-group=\"alwaysShowGroup\"\n :field_item=\"field_item\"\n :context=\"context\"\n :inner-model=\"_innerModel\"\n :global-inner-model=\"_globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n ></field-col>\n </a-col>\n </template>\n <field-col\n v-else\n v-for=\"(field_item, i) in row?.children\"\n :key=\"i\"\n :model=\"model\"\n :out-model=\"outModel\"\n :options=\"options\"\n :validate-infos=\"validateInfos\"\n :always-show-group=\"alwaysShowGroup\"\n :field_item=\"field_item\"\n :context=\"context\"\n :inner-model=\"_innerModel\"\n :global-inner-model=\"_globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n ></field-col>\n </a-row>\n </a-card>\n </template>\n </a-form>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, watch, reactive, PropType, provide, computed } from 'vue';\nimport FieldCol from './FieldCol.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport { message } from 'ant-design-vue';\nimport debugCode from 'liyu-pc-base/components/FormRender/debugCode.vue';\n\nexport default defineComponent({\n name: 'FormRender3',\n components: {\n FieldCol,\n debugCode,\n },\n props: {\n model: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n form: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n required: true,\n default: () => {},\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n default: null,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n // 修改模式传入 true:深层 FormTemplate/FormItem 隐藏系统按钮与行删除(provide 给子组件)\n lockStructure: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update_model'],\n setup(props, { emit }) {\n // 向深层子组件(FieldCol → FormTemplate/FormItem 等)提供 lockStructure,避免逐层透传\n provide('FORM_LOCK_STRUCTURE', computed(() => props.lockStructure));\n // 解决传入非响应式数据时,动态增加is_show_field无用正常相应问题\n if (props.form.watch) {\n for (let k in props.form.watch) {\n watch(\n () => props.model[k],\n () => {\n props.form.watch[k](props.model, props.form);\n },\n );\n }\n }\n const _globalInnerModel = props.globalInnerModel || reactive({});\n const _innerModel = props.innerModel || _globalInnerModel;\n\n // 支持 form.settings.col 分列(与 FormRender fields 模式一致):\n // settings.col 数组每项表示该列容纳的字段个数,如 [11, 11, 12] 表示三列,分别放 11/11/12 个字段\n // 返回每列的 [start, end) 区间;未配置 col 或 children 为空时返回 [](保持单列原逻辑)\n const getColFieldList = (children: any[]): Array<[number, number]> => {\n const col = props.form?.settings?.col;\n if (!col || col.length === 0 || !children || children.length === 0) {\n return [];\n }\n const list: Array<[number, number]> = [];\n let a = 0;\n col.forEach((item: number, i: number) => {\n a = a + item;\n if (i === 0) {\n list.push([0, a]);\n } else {\n list.push([a - item, a]);\n }\n });\n return list;\n };\n\n const validate = () => {\n return (props.form as any).validate();\n };\n const onUpdateModel = params => {\n emit('update_model', params);\n };\n const onUpdateName2 = params => {\n emit('update_model', params);\n };\n const handleCustomBtnClick = async btn => {\n if (btn.code) {\n let res;\n try {\n res = await executeScriptInWorker(\n btn.code,\n {\n context: props.context,\n formModel: props.model,\n keyPath: [...props.baseKeyPath, btn.group_name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (res) {\n Object.assign(props.model, res);\n }\n }\n };\n return {\n validate,\n onUpdateModel,\n onUpdateName2,\n _globalInnerModel,\n _innerModel,\n handleCustomBtnClick,\n getColFieldList,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.cards {\n ::v-deep(.ant-card-head) {\n padding: 0 8px;\n min-height: 44px;\n background-color: rgba(0, 0, 0, 0.02);\n }\n}\n.group-custom-btn-list {\n display: inline-flex;\n gap: 5px;\n flex-wrap: wrap;\n margin-right: 2px;\n}\n</style>\n","<template>\n <a-form\n autocomplete=\"off\"\n :model=\"model\"\n :rules=\"form.rules\"\n :layout=\"form.settings.layout\"\n scrollToFirstError\n class=\"cards\"\n :validateTrigger=\"false\"\n >\n <template\n v-for=\"(row, index) in form.dynamicFieldList\"\n :key=\"index\"\n >\n <a-card\n :body-style=\"{ padding: '10px 10px 0' }\"\n style=\"margin-bottom: 5px\"\n >\n <template\n v-if=\"row.group_name && (form.dynamicFieldList.length > 1 || alwaysShowGroup)\"\n #title\n >\n {{ row.group_name }}\n </template>\n <template #extra>\n <div\n class=\"group-custom-btn-list\"\n v-if=\"row.custom_btn_list && row.custom_btn_list.length > 0\"\n >\n <template v-for=\"btn in row.custom_btn_list\">\n <debug-code\n :action_code_id=\"btn.action_code_id\"\n v-model:code=\"btn.code\"\n >\n <a-button\n v-if=\"!lockStructure || btn.show_on_modify\"\n size=\"small\"\n :type=\"btn.type\"\n :danger=\"btn.danger\"\n @click=\"handleCustomBtnClick(btn)\"\n >\n {{ btn.label }}\n </a-button>\n </debug-code>\n </template>\n </div>\n </template>\n <a-row\n :gutter=\"5\"\n type=\"flex\"\n >\n <template v-if=\"getColFieldList(row?.children).length > 0\">\n <a-col\n v-for=\"col in getColFieldList(row?.children)\"\n :key=\"col[0]\"\n :xl=\"24 / getColFieldList(row?.children).length\"\n :lg=\"24\"\n :md=\"24\"\n :sm=\"24\"\n :xs=\"24\"\n >\n <field-col\n v-for=\"(field_item, i) in row?.children.slice(col[0], col[1])\"\n :key=\"i\"\n :model=\"model\"\n :out-model=\"outModel\"\n :options=\"options\"\n :validate-infos=\"validateInfos\"\n :always-show-group=\"alwaysShowGroup\"\n :field_item=\"field_item\"\n :context=\"context\"\n :inner-model=\"_innerModel\"\n :global-inner-model=\"_globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n ></field-col>\n </a-col>\n </template>\n <field-col\n v-else\n v-for=\"(field_item, i) in row?.children\"\n :key=\"i\"\n :model=\"model\"\n :out-model=\"outModel\"\n :options=\"options\"\n :validate-infos=\"validateInfos\"\n :always-show-group=\"alwaysShowGroup\"\n :field_item=\"field_item\"\n :context=\"context\"\n :inner-model=\"_innerModel\"\n :global-inner-model=\"_globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n ></field-col>\n </a-row>\n </a-card>\n </template>\n </a-form>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, watch, reactive, PropType, provide, computed } from 'vue';\nimport FieldCol from './FieldCol.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport { message } from 'ant-design-vue';\nimport debugCode from 'liyu-pc-base/components/FormRender/debugCode.vue';\n\nexport default defineComponent({\n name: 'FormRender3',\n components: {\n FieldCol,\n debugCode,\n },\n props: {\n model: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n form: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n required: true,\n default: () => {},\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n default: null,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n // 修改模式传入 true:深层 FormTemplate/FormItem 隐藏系统按钮与行删除(provide 给子组件)\n lockStructure: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update_model'],\n setup(props, { emit }) {\n // 向深层子组件(FieldCol → FormTemplate/FormItem 等)提供 lockStructure,避免逐层透传\n provide('FORM_LOCK_STRUCTURE', computed(() => props.lockStructure));\n // 解决传入非响应式数据时,动态增加is_show_field无用正常相应问题\n if (props.form.watch) {\n for (let k in props.form.watch) {\n watch(\n () => props.model[k],\n () => {\n props.form.watch[k](props.model, props.form);\n },\n );\n }\n }\n const _globalInnerModel = props.globalInnerModel || reactive({});\n const _innerModel = props.innerModel || _globalInnerModel;\n\n // 支持 form.settings.col 分列(与 FormRender fields 模式一致):\n // settings.col 数组每项表示该列容纳的字段个数,如 [11, 11, 12] 表示三列,分别放 11/11/12 个字段\n // 返回每列的 [start, end) 区间;未配置 col 或 children 为空时返回 [](保持单列原逻辑)\n const getColFieldList = (children: any[]): Array<[number, number]> => {\n const col = props.form?.settings?.col;\n if (!col || col.length === 0 || !children || children.length === 0) {\n return [];\n }\n const list: Array<[number, number]> = [];\n let a = 0;\n col.forEach((item: number, i: number) => {\n a = a + item;\n if (i === 0) {\n list.push([0, a]);\n } else {\n list.push([a - item, a]);\n }\n });\n return list;\n };\n\n const validate = () => {\n return (props.form as any).validate();\n };\n const onUpdateModel = params => {\n emit('update_model', params);\n };\n const onUpdateName2 = params => {\n emit('update_model', params);\n };\n const handleCustomBtnClick = async btn => {\n if (btn.code) {\n let res;\n try {\n res = await executeScriptInWorker(\n btn.code,\n {\n context: props.context,\n formModel: props.model,\n keyPath: [...props.baseKeyPath, btn.group_name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (res) {\n Object.assign(props.model, res);\n }\n }\n };\n return {\n validate,\n onUpdateModel,\n onUpdateName2,\n _globalInnerModel,\n _innerModel,\n handleCustomBtnClick,\n getColFieldList,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.cards {\n ::v-deep(.ant-card-head) {\n padding: 0 8px;\n min-height: 44px;\n background-color: rgba(0, 0, 0, 0.02);\n }\n}\n.group-custom-btn-list {\n display: inline-flex;\n gap: 5px;\n flex-wrap: wrap;\n margin-right: 2px;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImportExcelModal-Dds857L2.js","names":[],"sources":["../src/utils/dateUtil.ts","../src/components/form-modal/ImportExcelModal/ImportExcelModal.vue","../src/components/form-modal/ImportExcelModal/ImportExcelModal.vue"],"sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\n\n/**\n * 解析Excel日期/时间值\n * 支持的格式:\n * 1. Excel数字格式(1-5位数字,表示从1900-01-01开始的天数)\n * 2. Excel时间小数格式(0.508472222222222,表示一天中的比例)\n * 3. Excel日期时间混合格式(42716.5084722222,整数部分是日期,小数部分是时间)\n * 4. 字符串日期格式:2026-01-01, 2026-1-1, 2026/01/01, 2026/1/1, 等\n * 5. 字符串时间格式:14:30:00, 14:30, 2026-01-01 14:30:00, 等\n * 6. dayjs对象\n * \n * @param value - 需要解析的值\n * @param type - 字段类型:'datepicker' 或 'timepicker'\n * @param format - 输出格式,默认日期'YYYY-MM-DD',时间'HH:mm:ss'\n * @returns { value: string, isValid: boolean, error?: string }\n */\nexport function parseExcelDate(\n value: any,\n type: 'datepicker' | 'timepicker' = 'datepicker',\n format?: string,\n): { value: string; isValid: boolean; error?: string } {\n if (value === undefined || value === null || value === '') {\n return { value: '', isValid: true };\n }\n\n const defaultFormat = type === 'datepicker' ? 'YYYY-MM-DD' : 'HH:mm:ss';\n const outputFormat = format || defaultFormat;\n\n try {\n let parsedDate: Dayjs | null = null;\n\n // 情况1:纯数字格式(Excel序列号或时间小数)- 仅处理真正的数字类型\n // 字符串格式的纯数字会放在字符串解析流程中\n if (typeof value === 'number') {\n // 检查是否为小数(时间格式或日期+时间)\n if (value > 0 && value < 1) {\n // Excel时间小数格式:0.508472222222222 表示一天中的时间比例\n const totalSeconds = Math.round(value * 24 * 60 * 60);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n \n // 创建一个基准日期,然后设置时间\n parsedDate = dayjs()\n .hour(hours)\n .minute(minutes)\n .second(seconds);\n } else if (value >= 1) {\n // 检查是否包含小数部分(日期+时间混合)\n const decimalPart = value - Math.floor(value);\n \n if (decimalPart > 0) {\n // 日期+时间混合格式:42716.5084722222\n const excelEpoch = dayjs('1900-01-01');\n const datePart = Math.floor(value);\n \n // 处理Excel的1900年闰年bug\n let dateResult: Dayjs;\n if (datePart <= 60) {\n dateResult = excelEpoch.add(datePart - 1, 'day');\n } else {\n dateResult = excelEpoch.add(datePart - 2, 'day');\n }\n \n // 处理时间部分\n const totalSeconds = Math.round(decimalPart * 24 * 60 * 60);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n \n parsedDate = dateResult\n .hour(hours)\n .minute(minutes)\n .second(seconds);\n } else {\n // 纯日期序列号:1表示1900-01-01\n const excelEpoch = dayjs('1900-01-01');\n const daysSinceEpoch = Math.floor(value);\n \n // 有效的Excel日期范围检查(1-60000)\n if (daysSinceEpoch >= 1 && daysSinceEpoch <= 60000) {\n // 处理Excel的1900年闰年bug\n if (daysSinceEpoch <= 60) {\n // 1-60号之间直接处理(包括虚拟的2月29日)\n parsedDate = excelEpoch.add(daysSinceEpoch - 1, 'day');\n } else {\n // 61及以后减1来跳过虚拟的2月29日\n parsedDate = excelEpoch.add(daysSinceEpoch - 2, 'day');\n }\n } else {\n // 如果数字不在有效范围内,作为普通字符串再尝试解析\n parsedDate = null;\n }\n }\n }\n }\n \n // 情况2:字符串格式(包括字符串格式的纯数字和小数)\n if (!parsedDate && typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // 检查是否为小数字符串(时间或日期+时间格式)\n // 例如:\\\"0.508472222222222\\\" 表示时间,\\\"42716.5084722222\\\" 表示日期+时间\n if (/^\\d+\\.\\d+$/.test(trimmedValue)) {\n const decimalValue = parseFloat(trimmedValue);\n \n if (decimalValue >= 0 && decimalValue < 1) {\n // 纯时间小数格式:0-0.99999 对应 00:00:00-23:59:59\n const totalSeconds = Math.round(decimalValue * 24 * 60 * 60);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n \n // 创建一个基准日期,然后设置时间\n parsedDate = dayjs()\n .hour(hours)\n .minute(minutes)\n .second(seconds);\n } else if (decimalValue >= 1) {\n // 日期+时间混合格式:42716.5084722222 = 42716天 + 0.5084722222天的时间\n const excelEpoch = dayjs('1900-01-01');\n const datePart = Math.floor(decimalValue);\n const timePart = decimalValue - datePart;\n \n // 处理Excel的1900年闰年bug\n let dateResult: Dayjs;\n if (datePart <= 60) {\n dateResult = excelEpoch.add(datePart - 1, 'day');\n } else {\n dateResult = excelEpoch.add(datePart - 2, 'day');\n }\n \n // 处理时间部分\n const totalSeconds = Math.round(timePart * 24 * 60 * 60);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n \n parsedDate = dateResult\n .hour(hours)\n .minute(minutes)\n .second(seconds);\n }\n }\n\n // 检查是否为纯数字字符串,如果是则作为Excel序列号处理\n if (!parsedDate && /^\\d+$/.test(trimmedValue)) {\n const excelEpoch = dayjs('1900-01-01');\n const daysSinceEpoch = parseInt(trimmedValue, 10);\n \n // 有效的Excel日期范围检查(1-60000)\n if (daysSinceEpoch >= 1 && daysSinceEpoch <= 60000) {\n // 处理Excel的1900年闰年bug\n if (daysSinceEpoch <= 60) {\n parsedDate = excelEpoch.add(daysSinceEpoch - 1, 'day');\n } else {\n parsedDate = excelEpoch.add(daysSinceEpoch - 2, 'day');\n }\n }\n }\n\n // 如果不是纯数字或解析失败,尝试作为日期字符串解析\n if (!parsedDate) {\n // 尝试多种日期格式\n const formats = [\n 'YYYY-MM-DD HH:mm:ss', // 2026-01-01 14:30:00\n 'YYYY-MM-DD HH:mm', // 2026-01-01 14:30\n 'YYYY-MM-DD', // 2026-01-01\n 'YYYY/MM/DD HH:mm:ss', // 2026/01/01 14:30:00\n 'YYYY/MM/DD HH:mm', // 2026/01/01 14:30\n 'YYYY/MM/DD', // 2026/01/01\n 'HH:mm:ss', // 14:30:00\n 'HH:mm', // 14:30\n ];\n\n // 特殊处理格式如 \"2026-1-1\" 或 \"2026/1/1\"\n let normalizedValue = trimmedValue;\n \n // 检测是否为 YYYY-M-D 或 YYYY/M/D 格式并转换为 YYYY-MM-DD\n const singleDigitDateMatch = trimmedValue.match(/^(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})(.*)$/);\n if (singleDigitDateMatch) {\n const [, year, month, day, rest] = singleDigitDateMatch;\n const paddedMonth = month.padStart(2, '0');\n const paddedDay = day.padStart(2, '0');\n normalizedValue = `${year}-${paddedMonth}-${paddedDay}${rest}`;\n }\n\n // 尝试解析\n for (const fmt of formats) {\n const parsed = dayjs(normalizedValue, fmt, true);\n if (parsed.isValid()) {\n parsedDate = parsed;\n break;\n }\n }\n\n // 如果仍未解析,尝试dayjs的智能解析(作为最后手段)\n if (!parsedDate) {\n const fallbackParsed = dayjs(trimmedValue);\n if (fallbackParsed.isValid()) {\n parsedDate = fallbackParsed;\n }\n }\n }\n }\n \n // 情况3:dayjs对象\n if (!parsedDate && dayjs.isDayjs(value)) {\n parsedDate = value;\n }\n\n // 验证解析结果\n if (!parsedDate || !parsedDate.isValid()) {\n return {\n value: String(value),\n isValid: false,\n error: `值 \"${value}\" 无法解析为${type === 'datepicker' ? '日期' : '时间'}`,\n };\n }\n\n // 根据类型格式化输出\n let formattedValue: string;\n if (type === 'datepicker') {\n formattedValue = parsedDate.format(outputFormat);\n } else {\n // timepicker:仅提取时间部分\n formattedValue = parsedDate.format(outputFormat);\n }\n\n return {\n value: formattedValue,\n isValid: true,\n };\n } catch (err) {\n return {\n value: String(value),\n isValid: false,\n error: `值 \"${value}\" 解析失败`,\n };\n }\n}\n\n/**\n * 批量解析日期数组\n */\nexport function parseExcelDateArray(\n values: any[],\n type: 'datepicker' | 'timepicker' = 'datepicker',\n format?: string,\n) {\n return values.map(v => parseExcelDate(v, type, format));\n}\n","<template>\n <a-modal\n :title=\"title\"\n width=\"800px\"\n :open=\"true\"\n :maskClosable=\"false\"\n :confirmLoading=\"loading\"\n centered\n :footer=\"null\"\n @cancel=\"\n () => {\n // resetFields();\n $emit('cancel');\n }\n \"\n >\n <a-upload\n :multiple=\"false\"\n v-model:file-list=\"fileList\"\n @remove=\"handleRemove\"\n :customRequest=\"customRequestFun\"\n >\n <a-button\n type=\"primary\"\n v-if=\"fileList.length == 0\"\n >\n <plus-outlined />\n 选择文件\n </a-button>\n </a-upload>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { PlusOutlined } from '@ant-design/icons-vue';\nimport { defineComponent, ref } from 'vue';\nimport { message } from 'ant-design-vue';\nimport { read, utils } from 'xlsx';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport dayjs from 'dayjs';\nimport { parseExcelDate } from 'liyu-pc-base/utils/dateUtil';\n\ninterface FileItem {\n uid: string;\n fid?: number;\n name?: string;\n status?: string;\n response?: Response;\n percent?: number;\n url: string;\n preview?: string;\n originFileObj?: any;\n}\n\nexport default defineComponent({\n name: 'ImportExcelModal',\n components: { PlusOutlined },\n props: {\n title: {\n type: String,\n required: true,\n },\n configList: {\n type: Array,\n required: true,\n default: () => [],\n },\n },\n emits: ['ok', 'cancel'],\n setup(props, { emit }) {\n const fileList = ref<FileItem[]>([]);\n const loading = ref(false);\n const normalizeExcelHeader = (header: any) => {\n return header ? String(header).trim().replace(/\\s*\\[必填\\]\\s*$/, '') : '';\n };\n\n const customRequest = async (options: any) => {\n const { file, onSuccess, onError } = options;\n loading.value = true;\n const reader = new FileReader();\n reader.onload = async (e: any) => {\n try {\n const data = new Uint8Array(e.target.result);\n const workbook = read(data, { type: 'array' });\n const firstSheetName = workbook.SheetNames[0];\n const worksheet = workbook.Sheets[firstSheetName];\n\n // 获取表头以确定列索引\n const sheetData: any[][] = utils.sheet_to_json(worksheet, { header: 1 });\n const headers = (sheetData[0] || []).map(h => normalizeExcelHeader(h));\n const jsonData: any[] = utils.sheet_to_json(worksheet);\n const normalizedJsonData = jsonData.map((row: any) => {\n const normalizedRow: any = {};\n Object.keys(row).forEach(key => {\n normalizedRow[normalizeExcelHeader(key)] = row[key];\n });\n return normalizedRow;\n });\n\n console.log('Excel Headers:', headers);\n console.log('Excel JSON Data:', normalizedJsonData);\n\n const apiCache: any = {};\n const remoteSelectCols = props.configList.filter(\n (col: any) => col.type === 'remoteselectpro' && col.postUrl,\n );\n if (remoteSelectCols.length > 0) {\n for (const col of remoteSelectCols as any[]) {\n const targetLabel = col.label ? String(col.label).trim() : '';\n const fieldLabels = normalizedJsonData\n .map((row: any) => {\n return row[targetLabel] != null ? String(row[targetLabel]).trim() : null;\n })\n .filter(v => v !== null && v !== '');\n const uniqueLabels = [...new Set(fieldLabels)];\n\n if (uniqueLabels.length > 0) {\n apiCache[col.name] = {};\n const lKey = col.labelKey || 'name';\n const vKey = col.valueKey || 'id';\n\n await Promise.all(\n uniqueLabels.map(async label => {\n const getLabel = (opt: any) => {\n if (\n col.labelKeyList &&\n col.labelKeyList.length > 0 &&\n col.labelKeyType !== 1\n ) {\n return col.labelKeyList\n .map(k => (opt[k] !== undefined && opt[k] !== null ? String(opt[k]) : ''))\n .join(col.labelSpace || '-');\n }\n return opt[lKey] !== undefined && opt[lKey] !== null ? String(opt[lKey]) : '';\n };\n if (col.options && col.options.find(opt => getLabel(opt) === label)) {\n return;\n }\n\n try {\n const conditions = [];\n if (col.labelKeyList && col.labelKeyList.length > 0 && col.labelSpace) {\n const lableValue = label.split(col.labelSpace);\n if (lableValue.length === col.labelKeyList.length) {\n const conditionItem = [];\n col.labelKeyList.forEach((key: any, index: any) => {\n conditionItem.push({\n field_name: key,\n operator: 'eq',\n value: [lableValue[index]],\n format: 'choices',\n class_name: 'str',\n });\n });\n conditions.push(conditionItem);\n }\n } else {\n conditions.push([\n {\n field_name: lKey,\n operator: 'eq',\n value: [label],\n format: 'choices',\n class_name: 'str',\n },\n ]);\n }\n const params: any = {\n current: 1,\n pageSize: 50,\n is_pagination: true,\n conditions: conditions,\n };\n const res = await getApiData(params, col.postUrl, false, {\n skip_error: true,\n });\n if (res && res.data && res.data.length > 0) {\n const matched = res.data.find(opt => getLabel(opt) === label);\n if (matched) {\n apiCache[col.name][label] = matched;\n }\n }\n } catch (err) {\n console.error('Fetch remote select error', err);\n }\n }),\n );\n }\n }\n }\n\n if (normalizedJsonData.length === 0) {\n message.info('Excel文件中未检测到数据行(除表头外),请检查文件');\n loading.value = false;\n if (onSuccess) onSuccess();\n return;\n }\n\n let matchCount = 0;\n const result = normalizedJsonData.map((row: any, rowIndex: number) => {\n const mappedRow: any = {};\n props.configList.forEach((col: any) => {\n const targetLabel = col.label ? String(col.label).trim() : '';\n let excelValue = row[targetLabel];\n if (excelValue !== undefined && excelValue !== null) {\n excelValue = String(excelValue).trim();\n }\n const name = col.name;\n\n if (excelValue !== undefined && excelValue !== null && excelValue !== '')\n matchCount++;\n\n // 查找列索引用于 excel_position\n const colIndex = headers.indexOf(targetLabel);\n const excel_position =\n colIndex !== -1 ? `${utils.encode_col(colIndex)}${rowIndex + 2}` : '';\n\n let value = excelValue;\n let raw_value = excelValue;\n let error = null;\n\n const selectTypes = [\n 'select',\n 'radio',\n 'checkbox',\n 'treeselect',\n 'cascader',\n 'remoteselectpro',\n ];\n if (selectTypes.includes(col.type)) {\n const vKey = col.valueKey || (col.type === 'remoteselectpro' ? 'id' : 'value');\n const lKey = col.labelKey || (col.type === 'remoteselectpro' ? 'name' : 'label');\n const getLabel = (opt: any) => {\n if (col.labelKeyList && col.labelKeyList.length > 0 && col.labelKeyType !== 1) {\n return col.labelKeyList\n .map(k => (opt[k] !== undefined && opt[k] !== null ? String(opt[k]) : ''))\n .join(col.labelSpace || '-');\n }\n return opt[lKey] !== undefined && opt[lKey] !== null ? String(opt[lKey]) : '';\n };\n let option = null;\n if (col.options && col.options.length > 0) {\n option = col.options.find((opt: any) => getLabel(opt) === excelValue);\n }\n if (!option && col.type === 'remoteselectpro' && apiCache[col.name]) {\n option = apiCache[col.name][excelValue];\n }\n\n if (option) {\n value = option[vKey];\n raw_value = getLabel(option);\n } else if (excelValue !== undefined && excelValue !== null && excelValue !== '') {\n let valueOption = null;\n if (col.options && col.options.length > 0) {\n valueOption = col.options.find((opt: any) => String(opt[vKey]) === excelValue);\n }\n if (valueOption) {\n value = valueOption[vKey];\n raw_value = getLabel(valueOption);\n } else {\n error = `选项 \"${excelValue}\" 不存在`;\n }\n }\n }\n if (['number', 'money', 'volume', 'weight'].includes(col.type)) {\n try {\n value = Number(value);\n if (!Number.isFinite(value) || Number.isNaN(value)) {\n error = `值 \"${excelValue}\" 不是数字`;\n }\n } catch (e) {\n error = `值 \"${excelValue}\" 不是数字`;\n }\n }\n if (['timepicker'].includes(col.type)) {\n const result = parseExcelDate(excelValue, 'timepicker', col.format);\n if (result.isValid) {\n value = result.value;\n } else {\n error = result.error || `值 \"${excelValue}\" 不是时间`;\n }\n }\n if (['datepicker'].includes(col.type)) {\n const result = parseExcelDate(excelValue, 'datepicker', col.format);\n if (result.isValid) {\n value = result.value;\n } else {\n error = result.error || `值 \"${excelValue}\" 不是日期`;\n }\n }\n mappedRow[name] = {\n value: value === undefined ? null : value,\n raw_value: raw_value === undefined ? null : raw_value,\n excel_position: excel_position,\n error: error,\n };\n });\n return mappedRow;\n });\n\n if (matchCount === 0) {\n message.warning('Excel表头与配置不匹配,请检查表头名称是否正确');\n if (onError) onError();\n return;\n }\n\n if (result.length > 0) {\n emit('ok', result);\n if (onSuccess) onSuccess();\n } else {\n message.info('未识别到Excel文件中数据,请确认文件是否正确');\n if (onError) onError();\n }\n } catch (err) {\n console.error(err);\n message.error('解析Excel失败');\n try {\n if (onError) onError();\n } catch (e) {}\n } finally {\n loading.value = false;\n }\n };\n reader.onerror = () => {\n loading.value = false;\n message.error('文件读取失败');\n try {\n if (onError) onError();\n } catch (e) {}\n };\n reader.readAsArrayBuffer(file);\n };\n\n const customRequestFun = (options: any) => {\n customRequest(options);\n return false;\n };\n\n const handleRemove = (file: any) => {\n const index = fileList.value.indexOf(file);\n fileList.value.splice(index, 1);\n };\n\n return {\n props,\n loading,\n handleRemove,\n customRequest,\n customRequestFun,\n fileList,\n };\n },\n});\n</script>\n","<template>\n <a-modal\n :title=\"title\"\n width=\"800px\"\n :open=\"true\"\n :maskClosable=\"false\"\n :confirmLoading=\"loading\"\n centered\n :footer=\"null\"\n @cancel=\"\n () => {\n // resetFields();\n $emit('cancel');\n }\n \"\n >\n <a-upload\n :multiple=\"false\"\n v-model:file-list=\"fileList\"\n @remove=\"handleRemove\"\n :customRequest=\"customRequestFun\"\n >\n <a-button\n type=\"primary\"\n v-if=\"fileList.length == 0\"\n >\n <plus-outlined />\n 选择文件\n </a-button>\n </a-upload>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { PlusOutlined } from '@ant-design/icons-vue';\nimport { defineComponent, ref } from 'vue';\nimport { message } from 'ant-design-vue';\nimport { read, utils } from 'xlsx';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport dayjs from 'dayjs';\nimport { parseExcelDate } from 'liyu-pc-base/utils/dateUtil';\n\ninterface FileItem {\n uid: string;\n fid?: number;\n name?: string;\n status?: string;\n response?: Response;\n percent?: number;\n url: string;\n preview?: string;\n originFileObj?: any;\n}\n\nexport default defineComponent({\n name: 'ImportExcelModal',\n components: { PlusOutlined },\n props: {\n title: {\n type: String,\n required: true,\n },\n configList: {\n type: Array,\n required: true,\n default: () => [],\n },\n },\n emits: ['ok', 'cancel'],\n setup(props, { emit }) {\n const fileList = ref<FileItem[]>([]);\n const loading = ref(false);\n const normalizeExcelHeader = (header: any) => {\n return header ? String(header).trim().replace(/\\s*\\[必填\\]\\s*$/, '') : '';\n };\n\n const customRequest = async (options: any) => {\n const { file, onSuccess, onError } = options;\n loading.value = true;\n const reader = new FileReader();\n reader.onload = async (e: any) => {\n try {\n const data = new Uint8Array(e.target.result);\n const workbook = read(data, { type: 'array' });\n const firstSheetName = workbook.SheetNames[0];\n const worksheet = workbook.Sheets[firstSheetName];\n\n // 获取表头以确定列索引\n const sheetData: any[][] = utils.sheet_to_json(worksheet, { header: 1 });\n const headers = (sheetData[0] || []).map(h => normalizeExcelHeader(h));\n const jsonData: any[] = utils.sheet_to_json(worksheet);\n const normalizedJsonData = jsonData.map((row: any) => {\n const normalizedRow: any = {};\n Object.keys(row).forEach(key => {\n normalizedRow[normalizeExcelHeader(key)] = row[key];\n });\n return normalizedRow;\n });\n\n console.log('Excel Headers:', headers);\n console.log('Excel JSON Data:', normalizedJsonData);\n\n const apiCache: any = {};\n const remoteSelectCols = props.configList.filter(\n (col: any) => col.type === 'remoteselectpro' && col.postUrl,\n );\n if (remoteSelectCols.length > 0) {\n for (const col of remoteSelectCols as any[]) {\n const targetLabel = col.label ? String(col.label).trim() : '';\n const fieldLabels = normalizedJsonData\n .map((row: any) => {\n return row[targetLabel] != null ? String(row[targetLabel]).trim() : null;\n })\n .filter(v => v !== null && v !== '');\n const uniqueLabels = [...new Set(fieldLabels)];\n\n if (uniqueLabels.length > 0) {\n apiCache[col.name] = {};\n const lKey = col.labelKey || 'name';\n const vKey = col.valueKey || 'id';\n\n await Promise.all(\n uniqueLabels.map(async label => {\n const getLabel = (opt: any) => {\n if (\n col.labelKeyList &&\n col.labelKeyList.length > 0 &&\n col.labelKeyType !== 1\n ) {\n return col.labelKeyList\n .map(k => (opt[k] !== undefined && opt[k] !== null ? String(opt[k]) : ''))\n .join(col.labelSpace || '-');\n }\n return opt[lKey] !== undefined && opt[lKey] !== null ? String(opt[lKey]) : '';\n };\n if (col.options && col.options.find(opt => getLabel(opt) === label)) {\n return;\n }\n\n try {\n const conditions = [];\n if (col.labelKeyList && col.labelKeyList.length > 0 && col.labelSpace) {\n const lableValue = label.split(col.labelSpace);\n if (lableValue.length === col.labelKeyList.length) {\n const conditionItem = [];\n col.labelKeyList.forEach((key: any, index: any) => {\n conditionItem.push({\n field_name: key,\n operator: 'eq',\n value: [lableValue[index]],\n format: 'choices',\n class_name: 'str',\n });\n });\n conditions.push(conditionItem);\n }\n } else {\n conditions.push([\n {\n field_name: lKey,\n operator: 'eq',\n value: [label],\n format: 'choices',\n class_name: 'str',\n },\n ]);\n }\n const params: any = {\n current: 1,\n pageSize: 50,\n is_pagination: true,\n conditions: conditions,\n };\n const res = await getApiData(params, col.postUrl, false, {\n skip_error: true,\n });\n if (res && res.data && res.data.length > 0) {\n const matched = res.data.find(opt => getLabel(opt) === label);\n if (matched) {\n apiCache[col.name][label] = matched;\n }\n }\n } catch (err) {\n console.error('Fetch remote select error', err);\n }\n }),\n );\n }\n }\n }\n\n if (normalizedJsonData.length === 0) {\n message.info('Excel文件中未检测到数据行(除表头外),请检查文件');\n loading.value = false;\n if (onSuccess) onSuccess();\n return;\n }\n\n let matchCount = 0;\n const result = normalizedJsonData.map((row: any, rowIndex: number) => {\n const mappedRow: any = {};\n props.configList.forEach((col: any) => {\n const targetLabel = col.label ? String(col.label).trim() : '';\n let excelValue = row[targetLabel];\n if (excelValue !== undefined && excelValue !== null) {\n excelValue = String(excelValue).trim();\n }\n const name = col.name;\n\n if (excelValue !== undefined && excelValue !== null && excelValue !== '')\n matchCount++;\n\n // 查找列索引用于 excel_position\n const colIndex = headers.indexOf(targetLabel);\n const excel_position =\n colIndex !== -1 ? `${utils.encode_col(colIndex)}${rowIndex + 2}` : '';\n\n let value = excelValue;\n let raw_value = excelValue;\n let error = null;\n\n const selectTypes = [\n 'select',\n 'radio',\n 'checkbox',\n 'treeselect',\n 'cascader',\n 'remoteselectpro',\n ];\n if (selectTypes.includes(col.type)) {\n const vKey = col.valueKey || (col.type === 'remoteselectpro' ? 'id' : 'value');\n const lKey = col.labelKey || (col.type === 'remoteselectpro' ? 'name' : 'label');\n const getLabel = (opt: any) => {\n if (col.labelKeyList && col.labelKeyList.length > 0 && col.labelKeyType !== 1) {\n return col.labelKeyList\n .map(k => (opt[k] !== undefined && opt[k] !== null ? String(opt[k]) : ''))\n .join(col.labelSpace || '-');\n }\n return opt[lKey] !== undefined && opt[lKey] !== null ? String(opt[lKey]) : '';\n };\n let option = null;\n if (col.options && col.options.length > 0) {\n option = col.options.find((opt: any) => getLabel(opt) === excelValue);\n }\n if (!option && col.type === 'remoteselectpro' && apiCache[col.name]) {\n option = apiCache[col.name][excelValue];\n }\n\n if (option) {\n value = option[vKey];\n raw_value = getLabel(option);\n } else if (excelValue !== undefined && excelValue !== null && excelValue !== '') {\n let valueOption = null;\n if (col.options && col.options.length > 0) {\n valueOption = col.options.find((opt: any) => String(opt[vKey]) === excelValue);\n }\n if (valueOption) {\n value = valueOption[vKey];\n raw_value = getLabel(valueOption);\n } else {\n error = `选项 \"${excelValue}\" 不存在`;\n }\n }\n }\n if (['number', 'money', 'volume', 'weight'].includes(col.type)) {\n try {\n value = Number(value);\n if (!Number.isFinite(value) || Number.isNaN(value)) {\n error = `值 \"${excelValue}\" 不是数字`;\n }\n } catch (e) {\n error = `值 \"${excelValue}\" 不是数字`;\n }\n }\n if (['timepicker'].includes(col.type)) {\n const result = parseExcelDate(excelValue, 'timepicker', col.format);\n if (result.isValid) {\n value = result.value;\n } else {\n error = result.error || `值 \"${excelValue}\" 不是时间`;\n }\n }\n if (['datepicker'].includes(col.type)) {\n const result = parseExcelDate(excelValue, 'datepicker', col.format);\n if (result.isValid) {\n value = result.value;\n } else {\n error = result.error || `值 \"${excelValue}\" 不是日期`;\n }\n }\n mappedRow[name] = {\n value: value === undefined ? null : value,\n raw_value: raw_value === undefined ? null : raw_value,\n excel_position: excel_position,\n error: error,\n };\n });\n return mappedRow;\n });\n\n if (matchCount === 0) {\n message.warning('Excel表头与配置不匹配,请检查表头名称是否正确');\n if (onError) onError();\n return;\n }\n\n if (result.length > 0) {\n emit('ok', result);\n if (onSuccess) onSuccess();\n } else {\n message.info('未识别到Excel文件中数据,请确认文件是否正确');\n if (onError) onError();\n }\n } catch (err) {\n console.error(err);\n message.error('解析Excel失败');\n try {\n if (onError) onError();\n } catch (e) {}\n } finally {\n loading.value = false;\n }\n };\n reader.onerror = () => {\n loading.value = false;\n message.error('文件读取失败');\n try {\n if (onError) onError();\n } catch (e) {}\n };\n reader.readAsArrayBuffer(file);\n };\n\n const customRequestFun = (options: any) => {\n customRequest(options);\n return false;\n };\n\n const handleRemove = (file: any) => {\n const index = fileList.value.indexOf(file);\n fileList.value.splice(index, 1);\n };\n\n return {\n props,\n loading,\n handleRemove,\n customRequest,\n customRequestFun,\n fileList,\n };\n },\n});\n</script>\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonObj-CmylW4Or.js","names":[],"sources":["../src/components/FormRender/JsonObj/index.vue","../src/components/FormRender/JsonObj/index.vue"],"sourcesContent":["<template>\n <JsonEditor\n v-model:value=\"value\"\n @change=\"handleChangeValue\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\nimport JsonEditor from 'vue3-ts-jsoneditor';\nimport { debounce } from 'lodash-es';\n\nexport default defineComponent({\n name: 'JsonObj',\n props: {\n value: {\n type: Object,\n required: false,\n default: () => null,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const modelValue = ref('');\n if (props.value) {\n try {\n modelValue.value = JSON.stringify(modelValue);\n } catch (e) {\n modelValue.value = null;\n }\n }\n const handleChangeValue = debounce(value => {\n try {\n console.log(value);\n if (value.json) {\n emit('update:value', value.json);\n } else if (value.text) {\n const new_value = JSON.parse(value.text);\n emit('update:value', new_value);\n }\n } catch (e) {\n console.error(e);\n }\n }, 200);\n return {\n props,\n modelValue,\n handleChangeValue,\n };\n },\n components: {\n JsonEditor,\n },\n});\n</script>\n","<template>\n <JsonEditor\n v-model:value=\"value\"\n @change=\"handleChangeValue\"\n />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue';\nimport JsonEditor from 'vue3-ts-jsoneditor';\nimport { debounce } from 'lodash-es';\n\nexport default defineComponent({\n name: 'JsonObj',\n props: {\n value: {\n type: Object,\n required: false,\n default: () => null,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const modelValue = ref('');\n if (props.value) {\n try {\n modelValue.value = JSON.stringify(modelValue);\n } catch (e) {\n modelValue.value = null;\n }\n }\n const handleChangeValue = debounce(value => {\n try {\n console.log(value);\n if (value.json) {\n emit('update:value', value.json);\n } else if (value.text) {\n const new_value = JSON.parse(value.text);\n emit('update:value', new_value);\n }\n } catch (e) {\n console.error(e);\n }\n }, 200);\n return {\n props,\n modelValue,\n handleChangeValue,\n };\n },\n components: {\n JsonEditor,\n },\n});\n</script>\n"],"mappings":";;;;;;AAYA,IAAA,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO,EACL,OAAO;EACL,MAAM;EACN,UAAU;EACV,eAAe;CACjB,EACF;CACA,OAAO,CAAC,cAAc;CACtB,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,IAAa,EAAI,EAAE;EACzB,IAAI,EAAM,OACR,IAAI;GACF,EAAW,QAAQ,KAAK,UAAU,CAAU;EAC9C,QAAY;GACV,EAAW,QAAQ;EACrB;EAeF,OAAO;GACL;GACA;GACA,mBAhBwB,GAAS,MAAS;IAC1C,IAAI;KAEF,AADA,QAAQ,IAAI,CAAK,GACb,EAAM,OACR,EAAK,gBAAgB,EAAM,IAAI,IACtB,EAAM,QAEf,EAAK,gBADa,KAAK,MAAM,EAAM,IACd,CAAS;IAElC,SAAS,GAAG;KACV,QAAQ,MAAM,CAAC;IACjB;GACF,GAAG,GAID;EACF;CACF;CACA,YAAY,EACV,cACF;AACF,CAAC;;;aCpDC,EAGE,GAAA;EAFQ,OAAO,EAAA;EAFnB,kBAAA,AAAA,EAAA,QAAA,MAAA,EAEmB,QAAK;EACnB,UAAQ,EAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonStr-JwOPdAYW.js","names":[],"sources":["../src/components/FormRender/JsonStr/index.vue","../src/components/FormRender/JsonStr/index.vue"],"sourcesContent":["<template>\n <div class=\"json-str-group\">\n <a-textarea\n :value=\"modelValue\"\n @input=\"handleChangeValue\"\n :state=\"errFormat ? 'error' : ''\"\n ></a-textarea>\n <a-tag\n v-if=\"errFormat\"\n color=\"red\"\n >\n {{ $t('JSON格式错误') }}\n </a-tag>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\nimport { debounce } from 'lodash-es';\n\nexport default defineComponent({\n name: 'JsonStr',\n props: {\n value: {\n type: Object,\n required: false,\n default: () => null,\n },\n },\n emits: [],\n setup(props, { emit }) {\n const errFormat = ref(false);\n const errorValue = ref('');\n const modelValue = computed(() => {\n if (errFormat.value) {\n return errorValue.value;\n }\n if (props.value) {\n try {\n if (typeof props.value === 'object') {\n return JSON.stringify(props.value);\n } else {\n return props.value;\n }\n } catch (e) {}\n }\n return null;\n });\n const handleChangeValue = debounce(e => {\n try {\n if (e.target.value) {\n const new_value = JSON.parse(e.target.value);\n emit('update:value', new_value);\n } else {\n emit('update:value', null);\n }\n errFormat.value = false;\n } catch (err) {\n errorValue.value = e.target.value;\n errFormat.value = true;\n }\n }, 200);\n return {\n props,\n modelValue,\n handleChangeValue,\n errFormat,\n };\n },\n components: {},\n});\n</script>\n<style scoped>\n.json-str-group {\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n align-items: flex-end;\n gap: 4px;\n}\n</style>\n","<template>\n <div class=\"json-str-group\">\n <a-textarea\n :value=\"modelValue\"\n @input=\"handleChangeValue\"\n :state=\"errFormat ? 'error' : ''\"\n ></a-textarea>\n <a-tag\n v-if=\"errFormat\"\n color=\"red\"\n >\n {{ $t('JSON格式错误') }}\n </a-tag>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\nimport { debounce } from 'lodash-es';\n\nexport default defineComponent({\n name: 'JsonStr',\n props: {\n value: {\n type: Object,\n required: false,\n default: () => null,\n },\n },\n emits: [],\n setup(props, { emit }) {\n const errFormat = ref(false);\n const errorValue = ref('');\n const modelValue = computed(() => {\n if (errFormat.value) {\n return errorValue.value;\n }\n if (props.value) {\n try {\n if (typeof props.value === 'object') {\n return JSON.stringify(props.value);\n } else {\n return props.value;\n }\n } catch (e) {}\n }\n return null;\n });\n const handleChangeValue = debounce(e => {\n try {\n if (e.target.value) {\n const new_value = JSON.parse(e.target.value);\n emit('update:value', new_value);\n } else {\n emit('update:value', null);\n }\n errFormat.value = false;\n } catch (err) {\n errorValue.value = e.target.value;\n errFormat.value = true;\n }\n }, 200);\n return {\n props,\n modelValue,\n handleChangeValue,\n errFormat,\n };\n },\n components: {},\n});\n</script>\n<style scoped>\n.json-str-group {\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n align-items: flex-end;\n gap: 4px;\n}\n</style>\n"],"mappings":";;;;;AAoBA,IAAA,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO,EACL,OAAO;EACL,MAAM;EACN,UAAU;EACV,eAAe;CACjB,EACF;CACA,OAAO,CAAC;CACR,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,IAAY,EAAI,EAAK,GACrB,IAAa,EAAI,EAAE;EA8BzB,OAAO;GACL;GACA,YA/BiB,QAAe;IAChC,IAAI,EAAU,OACZ,OAAO,EAAW;IAEpB,IAAI,EAAM,OACR,IAAI;KAIA,OAHE,OAAO,EAAM,SAAU,WAClB,KAAK,UAAU,EAAM,KAAK,IAE1B,EAAM;IAEjB,QAAY,CAAC;IAEf,OAAO;GACT,CAiBE;GACA,mBAjBwB,GAAS,MAAK;IACtC,IAAI;KAOF,AANI,EAAE,OAAO,QAEX,EAAK,gBADa,KAAK,MAAM,EAAE,OAAO,KACjB,CAAS,IAE9B,EAAK,gBAAgB,IAAI,GAE3B,EAAU,QAAQ;IACpB,QAAc;KAEZ,AADA,EAAW,QAAQ,EAAE,OAAO,OAC5B,EAAU,QAAQ;IACpB;GACF,GAAG,GAID;GACA;EACF;CACF;CACA,YAAY,CAAC;AACf,CAAC,sDCrEM,OAAM,iBAAgB;;;aAA3B,EAYM,OAZN,GAYM,CAXJ,EAIc,GAAA;EAHX,OAAO,EAAA;EACP,SAAO,EAAA;EACP,OAAO,EAAA,YAAS,UAAA;;;;;KAGX,EAAA,aAAA,EAAA,GADR,EAKQ,GAAA;EAZZ,KAAA;EASM,OAAM;;EATZ,SAAA,QAW0B,CAX1B,EAAA,EAWS,EAAA,GAAE,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA;EAXX,GAAA;OAAA,EAAA,IAAA,EAAA,CAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RemoteCascader-B2ytkZp7.js","names":[],"sources":["../src/components/FormRender/RemoteCascader/index.ts","../src/components/FormRender/RemoteCascader/RemoteCascader.vue","../src/components/FormRender/RemoteCascader/RemoteCascader.vue"],"sourcesContent":["import type { RemoteSelect } from 'liyu-pc-base/components/FormRender/RemoteCascader/typing';\nimport { useGlobMap } from 'liyu-pc-base/init-plugin';\nconst res_components: { [key: string]: any } = {};\nconst init = () => {\n if (Object.keys(res_components).length > 0) {\n return;\n }\n const allComponents = useGlobMap('remoteCascader');\n Object.keys(allComponents).forEach(full_file_name => {\n const file_name_list = full_file_name.split('/');\n const file_name = file_name_list[file_name_list.length - 1].replace('.ts', '');\n res_components[file_name] = allComponents[full_file_name].default;\n });\n};\n\nexport default (modalType: string): RemoteSelect => {\n init();\n if (res_components[modalType] == undefined) {\n console.error('remotecascader没有组件:' + modalType);\n return {\n getData: undefined,\n searchConfig: undefined,\n };\n }\n return {\n ...res_components[modalType](`remotecascader_${modalType}`),\n };\n};\n","<template>\n <a-layout\n style=\"min-width: 190px\"\n width=\"100%\"\n >\n <a-cascader\n v-model:value=\"modalRef.selectedRows\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :expandTrigger=\"field.expandTrigger ? field.expandTrigger : 'click'\"\n :changeOnSelect=\"field.changeOnSelect ? field.expandTrigger : false\"\n :options=\"modalRef.datasource\"\n :multiple=\"field.mode === 'multiple'\"\n :maxTagCount=\"1\"\n :placeholder=\"field.placeholder ? field.placeholder : '请选择' + field.label\"\n size=\"small\"\n @change=\"handleChange\"\n />\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, onMounted, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteCascader/index';\n\ntype Field = {\n mode: 'multiple' | 'default';\n modalType: string;\n default: string;\n name: string;\n};\n\nexport default defineComponent({\n name: 'RemoteCascader',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: [],\n datasource: [],\n });\n if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n ...props.init_model,\n });\n if (searchConfig.model.pageSize == undefined) {\n search_modelRef.pageSize = 2000;\n }\n const old_obj: { [key: string]: any } = {};\n const get_value_key = () => {\n return props.valueKey ? (props.valueKey as string) : 'value';\n };\n const get_label_key = () => {\n return props.labelKey ? (props.labelKey as string) : 'label';\n };\n const allDataList = [];\n const allParentDataList = [];\n const setAllDataList = () => {\n allDataList.length = 0;\n const flatten_fun = (obj_list: any) => {\n obj_list.forEach((item: any) => {\n if (item.children) {\n allParentDataList.push({\n label: item.label,\n value: item.value,\n });\n flatten_fun(item.children);\n } else {\n allDataList.push({\n label: item.label,\n value: item.value,\n });\n }\n });\n };\n flatten_fun(modalRef.datasource);\n };\n const datasource = computed(() => {\n return modalRef.datasource;\n // return modalRef.datasource.map(item => {\n // if (props.labelKeyList) {\n // const label = [];\n // for (const key of props.labelKeyList) {\n // label.push(item[key as string]);\n // }\n // return {\n // value: item[get_value_key()],\n // label: label.join(props.labelSpace),\n // };\n // } else {\n // return {\n // value: item[get_value_key()],\n // label: item[get_label_key()],\n // };\n // }\n // });\n });\n const getDefaultValue = (list: any) => {\n const label = [];\n const value = props.formModel[props.field.name];\n if (props.field.mode === 'default') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n const f = alDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n const last_index = props.field.field_name_list.length - 1;\n value.forEach((v, v_index) => {\n if (v_index === last_index) {\n const f = allDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n } else {\n const f = allParentDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n } else if (props.field.mode === 'multiple') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n value.forEach(value_list => {\n if (value_list.length == 1) {\n const [first] = value_list;\n const f = allParentDataList.find(item => item.value == first);\n if (f) {\n label.push(f.label);\n }\n } else if (value_list.length > 1) {\n const [last] = [...value_list].reverse();\n const f = allDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n }\n emit('update:label', label);\n };\n\n const check_params_need_request = () => {\n let is_ok = true;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n if (\n (props.formModel[k] === null || props.formModel[k] === undefined) &&\n props.init_model &&\n (props.init_model[k] === null || props.init_model[k] === undefined)\n ) {\n is_ok = false;\n }\n }\n }\n }\n return is_ok;\n };\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name] || props.formModel[props.field.name] === 0) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else if (props.field.mode === 'multiple') {\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n } else {\n modalRef.selectedRows = [];\n }\n }\n\n const label = [];\n const value = props.formModel[props.field.name];\n if (props.field.mode === 'default') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n const f = alDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n const last_index = props.field.field_name_list.length - 1;\n value.forEach((v, v_index) => {\n if (v_index === last_index) {\n const f = allDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n } else {\n const f = allParentDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n } else if (props.field.mode === 'multiple') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n value.forEach(value_list => {\n if (value_list.length == 1) {\n const [first] = value_list;\n const f = allParentDataList.find(item => item.value == first);\n if (f) {\n label.push(f.label);\n }\n } else if (value_list.length > 1) {\n const [last] = [...value_list].reverse();\n const f = allDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n }\n emit('update:label', label);\n },\n );\n\n onMounted(() => {\n let is_use = false;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n old_obj[k] = props.formModel[k];\n }\n }\n }\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n search_modelRef[k] = props.formModel[k];\n watch(\n () => props.formModel[k],\n () => {\n let change = false;\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n if (old_obj[k] != props.formModel[k] && props.formModel[k]) {\n change = true;\n search_modelRef[k] = props.formModel[k];\n }\n }\n }\n if (change && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n const data: any = res.data || res;\n modalRef.datasource = data;\n setAllDataList();\n getDefaultValue(data);\n });\n }\n },\n { immediate: true },\n );\n }\n }\n if (searchConfig.attr_use && searchConfig.attr_use.length > 0) {\n for (const k of searchConfig.attr_use) {\n if (props.formModel && props.formModel[k]) {\n is_use = true;\n } else {\n is_use = false;\n break;\n }\n }\n } else {\n if (check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n const data: any = res.data || res;\n modalRef.datasource = data;\n setAllDataList();\n getDefaultValue(data);\n });\n }\n }\n if (is_use && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n const data: any = res.data || res;\n modalRef.datasource = data;\n setAllDataList();\n getDefaultValue(data);\n });\n }\n });\n\n const handleChange = () => {\n emit('update:value', modalRef.selectedRows);\n const label = [];\n const value = props.formModel[props.field.name];\n if (props.field.mode === 'default') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n const f = alDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n const last_index = props.field.field_name_list.length - 1;\n value.forEach((v, v_index) => {\n if (v_index === last_index) {\n const f = allDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n } else {\n const f = allParentDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n } else if (props.field.mode === 'multiple') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n value.forEach(value_list => {\n if (value_list.length == 1) {\n const [first] = value_list;\n const f = allParentDataList.find(item => item.value == first);\n if (f) {\n label.push(f.label);\n }\n } else if (value_list.length > 1) {\n const [last] = [...value_list].reverse();\n const f = allDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n }\n emit('update:label', label);\n };\n\n return {\n props,\n modalRef,\n search_modelRef,\n searchConfig,\n handleChange,\n datasource,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: {},\n});\n</script>\n","<template>\n <a-layout\n style=\"min-width: 190px\"\n width=\"100%\"\n >\n <a-cascader\n v-model:value=\"modalRef.selectedRows\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :expandTrigger=\"field.expandTrigger ? field.expandTrigger : 'click'\"\n :changeOnSelect=\"field.changeOnSelect ? field.expandTrigger : false\"\n :options=\"modalRef.datasource\"\n :multiple=\"field.mode === 'multiple'\"\n :maxTagCount=\"1\"\n :placeholder=\"field.placeholder ? field.placeholder : '请选择' + field.label\"\n size=\"small\"\n @change=\"handleChange\"\n />\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, onMounted, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteCascader/index';\n\ntype Field = {\n mode: 'multiple' | 'default';\n modalType: string;\n default: string;\n name: string;\n};\n\nexport default defineComponent({\n name: 'RemoteCascader',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: [],\n datasource: [],\n });\n if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n ...props.init_model,\n });\n if (searchConfig.model.pageSize == undefined) {\n search_modelRef.pageSize = 2000;\n }\n const old_obj: { [key: string]: any } = {};\n const get_value_key = () => {\n return props.valueKey ? (props.valueKey as string) : 'value';\n };\n const get_label_key = () => {\n return props.labelKey ? (props.labelKey as string) : 'label';\n };\n const allDataList = [];\n const allParentDataList = [];\n const setAllDataList = () => {\n allDataList.length = 0;\n const flatten_fun = (obj_list: any) => {\n obj_list.forEach((item: any) => {\n if (item.children) {\n allParentDataList.push({\n label: item.label,\n value: item.value,\n });\n flatten_fun(item.children);\n } else {\n allDataList.push({\n label: item.label,\n value: item.value,\n });\n }\n });\n };\n flatten_fun(modalRef.datasource);\n };\n const datasource = computed(() => {\n return modalRef.datasource;\n // return modalRef.datasource.map(item => {\n // if (props.labelKeyList) {\n // const label = [];\n // for (const key of props.labelKeyList) {\n // label.push(item[key as string]);\n // }\n // return {\n // value: item[get_value_key()],\n // label: label.join(props.labelSpace),\n // };\n // } else {\n // return {\n // value: item[get_value_key()],\n // label: item[get_label_key()],\n // };\n // }\n // });\n });\n const getDefaultValue = (list: any) => {\n const label = [];\n const value = props.formModel[props.field.name];\n if (props.field.mode === 'default') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n const f = alDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n const last_index = props.field.field_name_list.length - 1;\n value.forEach((v, v_index) => {\n if (v_index === last_index) {\n const f = allDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n } else {\n const f = allParentDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n } else if (props.field.mode === 'multiple') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n value.forEach(value_list => {\n if (value_list.length == 1) {\n const [first] = value_list;\n const f = allParentDataList.find(item => item.value == first);\n if (f) {\n label.push(f.label);\n }\n } else if (value_list.length > 1) {\n const [last] = [...value_list].reverse();\n const f = allDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n }\n emit('update:label', label);\n };\n\n const check_params_need_request = () => {\n let is_ok = true;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n if (\n (props.formModel[k] === null || props.formModel[k] === undefined) &&\n props.init_model &&\n (props.init_model[k] === null || props.init_model[k] === undefined)\n ) {\n is_ok = false;\n }\n }\n }\n }\n return is_ok;\n };\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name] || props.formModel[props.field.name] === 0) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else if (props.field.mode === 'multiple') {\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n } else {\n modalRef.selectedRows = [];\n }\n }\n\n const label = [];\n const value = props.formModel[props.field.name];\n if (props.field.mode === 'default') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n const f = alDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n const last_index = props.field.field_name_list.length - 1;\n value.forEach((v, v_index) => {\n if (v_index === last_index) {\n const f = allDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n } else {\n const f = allParentDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n } else if (props.field.mode === 'multiple') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n value.forEach(value_list => {\n if (value_list.length == 1) {\n const [first] = value_list;\n const f = allParentDataList.find(item => item.value == first);\n if (f) {\n label.push(f.label);\n }\n } else if (value_list.length > 1) {\n const [last] = [...value_list].reverse();\n const f = allDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n }\n emit('update:label', label);\n },\n );\n\n onMounted(() => {\n let is_use = false;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n old_obj[k] = props.formModel[k];\n }\n }\n }\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n search_modelRef[k] = props.formModel[k];\n watch(\n () => props.formModel[k],\n () => {\n let change = false;\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n if (old_obj[k] != props.formModel[k] && props.formModel[k]) {\n change = true;\n search_modelRef[k] = props.formModel[k];\n }\n }\n }\n if (change && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n const data: any = res.data || res;\n modalRef.datasource = data;\n setAllDataList();\n getDefaultValue(data);\n });\n }\n },\n { immediate: true },\n );\n }\n }\n if (searchConfig.attr_use && searchConfig.attr_use.length > 0) {\n for (const k of searchConfig.attr_use) {\n if (props.formModel && props.formModel[k]) {\n is_use = true;\n } else {\n is_use = false;\n break;\n }\n }\n } else {\n if (check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n const data: any = res.data || res;\n modalRef.datasource = data;\n setAllDataList();\n getDefaultValue(data);\n });\n }\n }\n if (is_use && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n const data: any = res.data || res;\n modalRef.datasource = data;\n setAllDataList();\n getDefaultValue(data);\n });\n }\n });\n\n const handleChange = () => {\n emit('update:value', modalRef.selectedRows);\n const label = [];\n const value = props.formModel[props.field.name];\n if (props.field.mode === 'default') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n const f = alDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n const last_index = props.field.field_name_list.length - 1;\n value.forEach((v, v_index) => {\n if (v_index === last_index) {\n const f = allDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n } else {\n const f = allParentDataList.find(item => item.value == v);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n } else if (props.field.mode === 'multiple') {\n if (props.field.field_name_list.length == 1) {\n if (value instanceof Array) {\n value.forEach(x_list => {\n const [last] = [...x_list].reverse();\n label.push(last);\n });\n }\n } else if (props.field.field_name_list.length > 1) {\n if (value instanceof Array) {\n // props.field.field_name_list.forEach(()=>{\n value.forEach(value_list => {\n if (value_list.length == 1) {\n const [first] = value_list;\n const f = allParentDataList.find(item => item.value == first);\n if (f) {\n label.push(f.label);\n }\n } else if (value_list.length > 1) {\n const [last] = [...value_list].reverse();\n const f = allDataList.find(item => item.value == last);\n if (f) {\n label.push(f.label);\n }\n }\n });\n // });\n }\n }\n }\n emit('update:label', label);\n };\n\n return {\n props,\n modalRef,\n search_modelRef,\n searchConfig,\n handleChange,\n datasource,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: {},\n});\n</script>\n"],"mappings":";;;;;AAEA,IAAM,IAAyC,CAAC,GAC1C,UAAa;CACjB,IAAI,OAAO,KAAK,CAAc,CAAC,CAAC,SAAS,GACvC;CAEF,IAAM,IAAgB,EAAW,gBAAgB;CACjD,OAAO,KAAK,CAAa,CAAC,CAAC,SAAQ,MAAkB;EACnD,IAAM,IAAiB,EAAe,MAAM,GAAG,GACzC,IAAY,EAAe,EAAe,SAAS,EAAE,CAAC,QAAQ,OAAO,EAAE;EAC7E,EAAe,KAAa,EAAc,EAAe,CAAC;CAC5D,CAAC;AACH,GAEA,KAAgB,OACd,EAAK,GACD,EAAe,MAAc,QAC/B,QAAQ,MAAM,wBAAwB,CAAS,GACxC;CACL,SAAS,KAAA;CACT,cAAc,KAAA;AAChB,KAEK,EACL,GAAG,EAAe,EAAU,CAAC,kBAAkB,GAAW,EAC5D,ICSF,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,OAAO;GACL,MAAM;GACN,UAAU;EACZ;EACA,UAAU,EACR,MAAM,OACR;EACA,UAAU,EACR,MAAM,OACR;EACA,YAAY;GACV,MAAM;GACN,SAAS;EACX;EACA,cAAc,EACZ,MAAM,MACR;EACA,OAAO;GACL,MAAM;IAAC;IAAO;IAAQ;GAAM;GAC5B,UAAU;GACV,eAAe;EACjB;EACA,OAAO;GACL,MAAM,CAAC,OAAO,MAAM;GACpB,UAAU;GACV,eAAe,CAAC;EAClB;EACA,WAAW;GACT,MAAM;GACN,UAAU;EACZ;EACA,YAAY;GACV,MAAM;GACN,eAAe,CAAC;EAClB;CACF;CACA,OAAO,CAAC,gBAAgB,cAAc;CACtC,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,IAAW,EAAS;GACxB,cAAc,CAAC;GACf,YAAY,CAAC;EACf,CAAC;EACD,AAAI,EAAM,SAAS,QACjB,EAAS,aAAa,KAAK,EAAM,KAAK;EAExC,IAAM,EAAE,iBAAc,eAAY,EAAc,EAAM,MAAM,SAAS,GAC/D,IAAkB,EAAS;GAC/B,GAAG,EAAa;GAChB,GAAG,EAAM;EACX,CAAC;EACD,AAAI,EAAa,MAAM,aACrB,EAAgB,WAAW;EAE7B,IAAM,IAAkC,CAAC,GAOnC,IAAc,CAAC,GACf,IAAoB,CAAC,GACrB,UAAuB;GAC3B,EAAY,SAAS;GACrB,IAAM,KAAe,MAAkB;IACrC,EAAS,SAAS,MAAc;KAC9B,AAAI,EAAK,YACP,EAAkB,KAAK;MACrB,OAAO,EAAK;MACZ,OAAO,EAAK;KACd,CAAC,GACD,EAAY,EAAK,QAAQ,KAEzB,EAAY,KAAK;MACf,OAAO,EAAK;MACZ,OAAO,EAAK;KACd,CAAC;IAEL,CAAC;GACH;GACA,EAAY,EAAS,UAAU;EACjC,GACM,IAAa,QACV,EAAS,UAkBjB,GACK,KAAmB,MAAc;GACrC,IAAM,IAAQ,CAAC,GACT,IAAQ,EAAM,UAAU,EAAM,MAAM;GAC1C,IAAI,EAAM,MAAM,SAAS;QACnB,EAAM,MAAM,gBAAgB,UAAU,GACpC,aAAiB,SACnB,EAAM,SAAQ,MAAU;KACtB,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAM,CAAC,CAAC,QAAQ,GAC7B,IAAI,WAAW,MAAK,MAAQ,EAAK,SAAS,CAAI;KAIpD,AAHI,KACF,EAAM,KAAK,EAAE,KAAK,GAEpB,EAAM,KAAK,CAAI;IACjB,CAAC;SAEE,IAAI,EAAM,MAAM,gBAAgB,SAAS,KAC1C,aAAiB,OAAO;KAE1B,IAAM,IAAa,EAAM,MAAM,gBAAgB,SAAS;KACxD,EAAM,SAAS,GAAG,MAAY;MAC5B,IAAI,MAAY,GAAY;OAC1B,IAAM,IAAI,EAAY,MAAK,MAAQ,EAAK,SAAS,CAAC;OAClD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;MAEtB,OAAO;OACL,IAAM,IAAI,EAAkB,MAAK,MAAQ,EAAK,SAAS,CAAC;OACxD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;MAEtB;KACF,CAAC;IAEH;UAEG,AAAI,EAAM,MAAM,SAAS,eAC1B,EAAM,MAAM,gBAAgB,UAAU,IACpC,aAAiB,SACnB,EAAM,SAAQ,MAAU;IACtB,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAM,CAAC,CAAC,QAAQ;IACnC,EAAM,KAAK,CAAI;GACjB,CAAC,IAEM,EAAM,MAAM,gBAAgB,SAAS,KAC1C,aAAiB,SAEnB,EAAM,SAAQ,MAAc;IAC1B,IAAI,EAAW,UAAU,GAAG;KAC1B,IAAM,CAAC,KAAS,GACV,IAAI,EAAkB,MAAK,MAAQ,EAAK,SAAS,CAAK;KAC5D,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;IAEtB,OAAO,IAAI,EAAW,SAAS,GAAG;KAChC,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAU,CAAC,CAAC,QAAQ,GACjC,IAAI,EAAY,MAAK,MAAQ,EAAK,SAAS,CAAI;KACrD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;IAEtB;GACF,CAAC;GAKP,EAAK,gBAAgB,CAAK;EAC5B,GAEM,UAAkC;GACtC,IAAI,IAAQ;GACZ,IAAI,EAAa,YACV,IAAM,KAAK,EAAa,OAC3B,AAAI,EAAM,cAEL,EAAM,UAAU,OAAO,QAAQ,EAAM,UAAU,OAAO,KAAA,MACvD,EAAM,eACL,EAAM,WAAW,OAAO,QAAQ,EAAM,WAAW,OAAO,KAAA,OAEzD,IAAQ;GAKhB,OAAO;EACT;EA+NA,OA9NA,QACQ,EAAM,UAAU,EAAM,MAAM,aAC5B;GACJ,AAAI,EAAM,MAAM,SAAS,YACnB,EAAM,UAAU,EAAM,MAAM,SAAS,EAAM,UAAU,EAAM,MAAM,UAAU,IAC7E,EAAS,eAAe,CAAC,EAAM,UAAU,EAAM,MAAM,KAAK,IAE1D,EAAS,eAAe,CAAC,IAElB,EAAM,MAAM,SAAS,eAC1B,EAAM,UAAU,EAAM,MAAM,SAAS,EAAM,UAAU,EAAM,MAAM,KAAK,CAAC,SAAS,IAClF,EAAS,eAAe,EAAM,UAAU,EAAM,MAAM,KAAK,CAAC,KAAK,MACtD,CACR,IAED,EAAS,eAAe,CAAC;GAI7B,IAAM,IAAQ,CAAC,GACT,IAAQ,EAAM,UAAU,EAAM,MAAM;GAC1C,IAAI,EAAM,MAAM,SAAS;QACnB,EAAM,MAAM,gBAAgB,UAAU,GACpC,aAAiB,SACnB,EAAM,SAAQ,MAAU;KACtB,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAM,CAAC,CAAC,QAAQ,GAC7B,IAAI,WAAW,MAAK,MAAQ,EAAK,SAAS,CAAI;KAIpD,AAHI,KACF,EAAM,KAAK,EAAE,KAAK,GAEpB,EAAM,KAAK,CAAI;IACjB,CAAC;SAEE,IAAI,EAAM,MAAM,gBAAgB,SAAS,KAC1C,aAAiB,OAAO;KAE1B,IAAM,IAAa,EAAM,MAAM,gBAAgB,SAAS;KACxD,EAAM,SAAS,GAAG,MAAY;MAC5B,IAAI,MAAY,GAAY;OAC1B,IAAM,IAAI,EAAY,MAAK,MAAQ,EAAK,SAAS,CAAC;OAClD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;MAEtB,OAAO;OACL,IAAM,IAAI,EAAkB,MAAK,MAAQ,EAAK,SAAS,CAAC;OACxD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;MAEtB;KACF,CAAC;IAEH;UAEG,AAAI,EAAM,MAAM,SAAS,eAC1B,EAAM,MAAM,gBAAgB,UAAU,IACpC,aAAiB,SACnB,EAAM,SAAQ,MAAU;IACtB,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAM,CAAC,CAAC,QAAQ;IACnC,EAAM,KAAK,CAAI;GACjB,CAAC,IAEM,EAAM,MAAM,gBAAgB,SAAS,KAC1C,aAAiB,SAEnB,EAAM,SAAQ,MAAc;IAC1B,IAAI,EAAW,UAAU,GAAG;KAC1B,IAAM,CAAC,KAAS,GACV,IAAI,EAAkB,MAAK,MAAQ,EAAK,SAAS,CAAK;KAC5D,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;IAEtB,OAAO,IAAI,EAAW,SAAS,GAAG;KAChC,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAU,CAAC,CAAC,QAAQ,GACjC,IAAI,EAAY,MAAK,MAAQ,EAAK,SAAS,CAAI;KACrD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;IAEtB;GACF,CAAC;GAKP,EAAK,gBAAgB,CAAK;EAC5B,CACF,GAEA,QAAgB;GACd,IAAI,IAAS;GACb,IAAI,EAAa,YACV,IAAM,KAAK,EAAa,OAC3B,AAAI,EAAM,cACR,EAAQ,KAAK,EAAM,UAAU;GAInC,IAAI,EAAa,SAAS,EAAM,WAC9B,KAAK,IAAM,KAAK,EAAa,OAE3B,AADA,EAAgB,KAAK,EAAM,UAAU,IACrC,QACQ,EAAM,UAAU,UAChB;IACJ,IAAI,IAAS;IACb,IAAI,EAAa,SAAS,EAAM,gBACzB,IAAM,KAAK,EAAa,OAC3B,AAAI,EAAQ,MAAM,EAAM,UAAU,MAAM,EAAM,UAAU,OACtD,IAAS,IACT,EAAgB,KAAK,EAAM,UAAU;IAI3C,AAAI,KAAU,EAA0B,KACtC,EAAQ,EAAE,GAAG,EAAgB,CAAC,CAAC,CAAC,KAAK,SAAU,GAAuB;KACpE,IAAM,IAAY,EAAI,QAAQ;KAG9B,AAFA,EAAS,aAAa,GACtB,EAAe,GACf,EAAgB,CAAI;IACtB,CAAC;GAEL,GACA,EAAE,WAAW,GAAK,CACpB;GAGJ,IAAI,EAAa,YAAY,EAAa,SAAS,SAAS,GAC1D,KAAK,IAAM,KAAK,EAAa,UAC3B,IAAI,EAAM,aAAa,EAAM,UAAU,IACrC,IAAS;QACJ;IACL,IAAS;IACT;GACF;QAGF,AAAI,EAA0B,KAC5B,EAAQ,EAAE,GAAG,EAAgB,CAAC,CAAC,CAAC,KAAK,SAAU,GAAuB;IACpE,IAAM,IAAY,EAAI,QAAQ;IAG9B,AAFA,EAAS,aAAa,GACtB,EAAe,GACf,EAAgB,CAAI;GACtB,CAAC;GAGL,AAAI,KAAU,EAA0B,KACtC,EAAQ,EAAE,GAAG,EAAgB,CAAC,CAAC,CAAC,KAAK,SAAU,GAAuB;IACpE,IAAM,IAAY,EAAI,QAAQ;IAG9B,AAFA,EAAS,aAAa,GACtB,EAAe,GACf,EAAgB,CAAI;GACtB,CAAC;EAEL,CAAC,GAuEM;GACL;GACA;GACA;GACA;GACA,oBA1EyB;IACzB,EAAK,gBAAgB,EAAS,YAAY;IAC1C,IAAM,IAAQ,CAAC,GACT,IAAQ,EAAM,UAAU,EAAM,MAAM;IAC1C,IAAI,EAAM,MAAM,SAAS;SACnB,EAAM,MAAM,gBAAgB,UAAU,GACpC,aAAiB,SACnB,EAAM,SAAQ,MAAU;MACtB,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAM,CAAC,CAAC,QAAQ,GAC7B,IAAI,WAAW,MAAK,MAAQ,EAAK,SAAS,CAAI;MAIpD,AAHI,KACF,EAAM,KAAK,EAAE,KAAK,GAEpB,EAAM,KAAK,CAAI;KACjB,CAAC;UAEE,IAAI,EAAM,MAAM,gBAAgB,SAAS,KAC1C,aAAiB,OAAO;MAE1B,IAAM,IAAa,EAAM,MAAM,gBAAgB,SAAS;MACxD,EAAM,SAAS,GAAG,MAAY;OAC5B,IAAI,MAAY,GAAY;QAC1B,IAAM,IAAI,EAAY,MAAK,MAAQ,EAAK,SAAS,CAAC;QAClD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;OAEtB,OAAO;QACL,IAAM,IAAI,EAAkB,MAAK,MAAQ,EAAK,SAAS,CAAC;QACxD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;OAEtB;MACF,CAAC;KAEH;WAEG,AAAI,EAAM,MAAM,SAAS,eAC1B,EAAM,MAAM,gBAAgB,UAAU,IACpC,aAAiB,SACnB,EAAM,SAAQ,MAAU;KACtB,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAM,CAAC,CAAC,QAAQ;KACnC,EAAM,KAAK,CAAI;IACjB,CAAC,IAEM,EAAM,MAAM,gBAAgB,SAAS,KAC1C,aAAiB,SAEnB,EAAM,SAAQ,MAAc;KAC1B,IAAI,EAAW,UAAU,GAAG;MAC1B,IAAM,CAAC,KAAS,GACV,IAAI,EAAkB,MAAK,MAAQ,EAAK,SAAS,CAAK;MAC5D,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;KAEtB,OAAO,IAAI,EAAW,SAAS,GAAG;MAChC,IAAM,CAAC,KAAQ,CAAC,GAAG,CAAU,CAAC,CAAC,QAAQ,GACjC,IAAI,EAAY,MAAK,MAAQ,EAAK,SAAS,CAAI;MACrD,AAAI,KACF,EAAM,KAAK,EAAE,KAAK;KAEtB;IACF,CAAC;IAKP,EAAK,gBAAgB,CAAK;GAC5B;GAQE;EACF;CACF;CAEA,OAAO;EACL,OAAO,EACL,OAAO,KAAK,MACd;CACF;CACA,YAAY,CAAC;AACf,CAAC;;;aC9cC,EAkBW,GAAA;EAjBT,OAAA,EAAA,aAAA,QAAA;EACA,OAAM;;EAHV,SAAA,QAkBM,CAbF,EAaE,GAAA;GAZQ,OAAO,EAAA,SAAS;GAN9B,kBAAA,AAAA,EAAA,QAAA,MAAA,EAMqB,SAAS,eAAY;GACnC,eAAa,EAAA,MAAM;GACnB,iBAAe,EAAA,MAAM;GACrB,UAAU,EAAA,MAAM;GAChB,eAAe,EAAA,MAAM,gBAAgB,EAAA,MAAM,gBAAa;GACxD,gBAAgB,EAAA,MAAM,iBAAiB,EAAA,MAAM,gBAAa;GAC1D,SAAS,EAAA,SAAS;GAClB,UAAU,EAAA,MAAM,SAAI;GACpB,aAAa;GACb,aAAa,EAAA,MAAM,cAAc,EAAA,MAAM,cAAW,QAAW,EAAA,MAAM;GACpE,MAAK;GACJ,UAAQ,EAAA;;;;;;;;;;;;;EAjBf,GAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RemoteFilterSelect-BthY6Fyt.js","names":[],"sources":["../src/components/FormRender/RemoteFilterSelect/index.ts","../src/components/FormRender/RemoteFilterSelect/RemoteFilterSelect.vue","../src/components/FormRender/RemoteFilterSelect/RemoteFilterSelect.vue"],"sourcesContent":["import type { RemoteSelect } from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/typing';\nimport { useGlobMap } from 'liyu-pc-base/init-plugin';\n\nconst res_components: { [key: string]: any } = {};\nconst init = () => {\n if (Object.keys(res_components).length > 0) {\n return;\n }\n const allComponents = useGlobMap('remoteFilterSelect');\n Object.keys(allComponents).forEach(full_file_name => {\n const file_name_list = full_file_name.split('/');\n const file_name = file_name_list[file_name_list.length - 1].replace('.ts', '');\n res_components[file_name] = allComponents[full_file_name].default;\n });\n};\n\nexport default (modalType: string): RemoteSelect => {\n init();\n if (res_components[modalType] == undefined) {\n console.error('remoteselect没有组件:' + modalType);\n return {\n getData: undefined,\n searchConfig: undefined,\n };\n }\n return {\n ...res_components[modalType](`remotefilterselect_${modalType}`),\n };\n};\n","<template>\n <a-layout\n width=\"100%\"\n style=\"min-width: 190px\"\n >\n <a-layout-content>\n <a-select\n :mode=\"field.mode == 'default' ? null : field.mode\"\n v-model:value=\"modalRef.selectedRows\"\n :show-search=\"field.show_search == undefined ? true : field.show_search\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :default-value=\"field.defaultValue\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n @change=\"handleChange\"\n @search=\"handleSearch\"\n size=\"small\"\n :allow-clear=\"field.allowClear\"\n :filter-option=\"filterOption\"\n >\n <a-select-option\n v-for=\"option in datasource\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-select-option>\n </a-select>\n </a-layout-content>\n <a-layout-sider\n width=\"30px\"\n style=\"background: rgba(0, 0, 0, 0)\"\n >\n <a-button\n size=\"small\"\n style=\"width: 30px\"\n @click=\"btnClick\"\n type=\"text\"\n >\n <template #icon>\n <reload-outlined />\n </template>\n </a-button>\n </a-layout-sider>\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, onMounted, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/index';\nimport { message } from 'ant-design-vue';\nimport { debounce } from 'lodash-es';\n\ntype Field = {\n mode: 'multiple' | 'tags' | 'combobox' | 'default';\n modalType: string;\n cb?: any;\n select_style: any;\n default: string;\n name: string;\n};\n\nexport default defineComponent({\n name: 'RemoteFilterSelect',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: new Array<number | any>(),\n datasource: new Array<any>(),\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n ...props.init_model,\n });\n if (searchConfig.model.pageSize == undefined) {\n search_modelRef.pageSize = 2000;\n }\n const old_obj: { [key: string]: any } = {};\n // const button_style = computed(() => {\n // return props.field.cb ? 'width: 14%;min-width:30px;' : 'width: 100%;min-width:30px;';\n // });\n // const select_style = computed(() => {\n // return 'width:80%; min-width: calc(100%-35px);';\n // });\n\n const get_value_key = () => {\n return props.valueKey ? (props.valueKey as string) : 'id';\n };\n const get_label_key = () => {\n return props.labelKey ? (props.labelKey as string) : 'name';\n };\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n if (props.labelKeyList) {\n let label = [];\n for (let key of props.labelKeyList) {\n label.push(item[key as string]);\n }\n return {\n value: item[get_value_key()],\n label: label.join(props.labelSpace),\n };\n } else {\n return {\n value: item[get_value_key()],\n label: item[get_label_key()],\n };\n }\n });\n });\n const getDefaultValue = (list: any) => {\n if (\n props.field.default &&\n !props.formModel[props.field.name] &&\n props.field.mode == 'default' &&\n list.length > 0\n ) {\n props.formModel[props.field.name] = list[0][get_value_key()];\n emit('update:label', list[0][get_label_key()]);\n // modalRef.selectedRows.length = 0;\n // modalRef.selectedRows.push(list[0][get_value_key()]);\n }\n if (props.field.mode == 'default') {\n const selectItems: any = datasource.value\n .filter((item: any) => modalRef.selectedRows == item.value)\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => modalRef.selectedRows.includes(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n\n const check_params_need_request = () => {\n let is_ok = true;\n if (searchConfig.watch) {\n for (let k of searchConfig.watch) {\n if (props.formModel) {\n if (\n (props.formModel[k] === null || props.formModel[k] === undefined) &&\n props.init_model &&\n (props.init_model[k] === null || props.init_model[k] === undefined)\n ) {\n is_ok = false;\n }\n }\n }\n }\n return is_ok;\n };\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name]) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else {\n //modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n }\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => modalRef.selectedRows.includes(item.value))\n .map((item: any) => item.label),\n );\n },\n );\n\n onMounted(() => {\n let is_use = false;\n if (searchConfig.watch) {\n for (let k of searchConfig.watch) {\n if (props.formModel) {\n old_obj[k] = props.formModel[k];\n }\n }\n }\n if (searchConfig.watch && props.formModel) {\n for (let k of searchConfig.watch) {\n search_modelRef[k] = props.formModel[k];\n watch(\n () => props.formModel[k],\n () => {\n let change = false;\n if (searchConfig.watch && props.formModel) {\n for (let k of searchConfig.watch) {\n if (old_obj[k] != props.formModel[k] && props.formModel[k]) {\n change = true;\n search_modelRef[k] = props.formModel[k];\n }\n }\n }\n if (change && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n });\n }\n },\n { immediate: true },\n );\n }\n }\n if (searchConfig.attr_use && searchConfig.attr_use.length > 0) {\n for (let k of searchConfig.attr_use) {\n if (props.formModel && props.formModel[k]) {\n is_use = true;\n } else {\n is_use = false;\n break;\n }\n }\n } else {\n if (check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n });\n }\n }\n if (is_use && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n });\n }\n });\n\n if (props.field.mode === 'default') {\n if (props.value) {\n if (isNaN(Number(props.value))) {\n modalRef.selectedRows.push(props.value);\n } else {\n modalRef.selectedRows.push(Number(props.value));\n }\n }\n } else {\n if (typeof props.value == 'string') {\n (props.value as string).split(',').map((item: any) => {\n modalRef.selectedRows.push(Number(item));\n });\n } else if (props.value instanceof Array) {\n props.value.map((item: any) => {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n });\n } else if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n }\n const btnClick = () => {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n getData({ ...search_modelRef }, true)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n };\n const debounce1: any = debounce(() => {\n getData({ ...search_modelRef }, true)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n }, 300);\n\n const handleSearch = (str: any) => {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n search_modelRef[searchConfig.search_field] = str;\n debounce1();\n };\n\n const handleChange = () => {\n if (props.field.mode == 'default') {\n emit('update:value', modalRef.selectedRows);\n const selectItems: any = datasource.value\n .filter((item: any) => {\n return modalRef.selectedRows == item.value;\n })\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n if (modalRef.selectedRows.length > 1) {\n emit('update:value', modalRef.selectedRows);\n } else {\n emit('update:value', modalRef.selectedRows);\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => modalRef.selectedRows.includes(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const filterOption = (val: string, option: any) => {\n if (datasource.value instanceof Array) {\n let f: any = datasource.value.find(item => {\n return item['value'] == option.key;\n });\n if (f) {\n return f['label'].toLowerCase().indexOf(val.toLowerCase()) >= 0;\n } else {\n return false;\n }\n }\n };\n\n return {\n props,\n modalRef,\n search_modelRef,\n searchConfig,\n handleChange,\n handleSearch,\n filterOption,\n datasource,\n btnClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: {},\n});\n</script>\n","<template>\n <a-layout\n width=\"100%\"\n style=\"min-width: 190px\"\n >\n <a-layout-content>\n <a-select\n :mode=\"field.mode == 'default' ? null : field.mode\"\n v-model:value=\"modalRef.selectedRows\"\n :show-search=\"field.show_search == undefined ? true : field.show_search\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :default-value=\"field.defaultValue\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n @change=\"handleChange\"\n @search=\"handleSearch\"\n size=\"small\"\n :allow-clear=\"field.allowClear\"\n :filter-option=\"filterOption\"\n >\n <a-select-option\n v-for=\"option in datasource\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </a-select-option>\n </a-select>\n </a-layout-content>\n <a-layout-sider\n width=\"30px\"\n style=\"background: rgba(0, 0, 0, 0)\"\n >\n <a-button\n size=\"small\"\n style=\"width: 30px\"\n @click=\"btnClick\"\n type=\"text\"\n >\n <template #icon>\n <reload-outlined />\n </template>\n </a-button>\n </a-layout-sider>\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, onMounted, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/index';\nimport { message } from 'ant-design-vue';\nimport { debounce } from 'lodash-es';\n\ntype Field = {\n mode: 'multiple' | 'tags' | 'combobox' | 'default';\n modalType: string;\n cb?: any;\n select_style: any;\n default: string;\n name: string;\n};\n\nexport default defineComponent({\n name: 'RemoteFilterSelect',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: new Array<number | any>(),\n datasource: new Array<any>(),\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n ...props.init_model,\n });\n if (searchConfig.model.pageSize == undefined) {\n search_modelRef.pageSize = 2000;\n }\n const old_obj: { [key: string]: any } = {};\n // const button_style = computed(() => {\n // return props.field.cb ? 'width: 14%;min-width:30px;' : 'width: 100%;min-width:30px;';\n // });\n // const select_style = computed(() => {\n // return 'width:80%; min-width: calc(100%-35px);';\n // });\n\n const get_value_key = () => {\n return props.valueKey ? (props.valueKey as string) : 'id';\n };\n const get_label_key = () => {\n return props.labelKey ? (props.labelKey as string) : 'name';\n };\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n if (props.labelKeyList) {\n let label = [];\n for (let key of props.labelKeyList) {\n label.push(item[key as string]);\n }\n return {\n value: item[get_value_key()],\n label: label.join(props.labelSpace),\n };\n } else {\n return {\n value: item[get_value_key()],\n label: item[get_label_key()],\n };\n }\n });\n });\n const getDefaultValue = (list: any) => {\n if (\n props.field.default &&\n !props.formModel[props.field.name] &&\n props.field.mode == 'default' &&\n list.length > 0\n ) {\n props.formModel[props.field.name] = list[0][get_value_key()];\n emit('update:label', list[0][get_label_key()]);\n // modalRef.selectedRows.length = 0;\n // modalRef.selectedRows.push(list[0][get_value_key()]);\n }\n if (props.field.mode == 'default') {\n const selectItems: any = datasource.value\n .filter((item: any) => modalRef.selectedRows == item.value)\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => modalRef.selectedRows.includes(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n\n const check_params_need_request = () => {\n let is_ok = true;\n if (searchConfig.watch) {\n for (let k of searchConfig.watch) {\n if (props.formModel) {\n if (\n (props.formModel[k] === null || props.formModel[k] === undefined) &&\n props.init_model &&\n (props.init_model[k] === null || props.init_model[k] === undefined)\n ) {\n is_ok = false;\n }\n }\n }\n }\n return is_ok;\n };\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name]) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else {\n //modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n }\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => modalRef.selectedRows.includes(item.value))\n .map((item: any) => item.label),\n );\n },\n );\n\n onMounted(() => {\n let is_use = false;\n if (searchConfig.watch) {\n for (let k of searchConfig.watch) {\n if (props.formModel) {\n old_obj[k] = props.formModel[k];\n }\n }\n }\n if (searchConfig.watch && props.formModel) {\n for (let k of searchConfig.watch) {\n search_modelRef[k] = props.formModel[k];\n watch(\n () => props.formModel[k],\n () => {\n let change = false;\n if (searchConfig.watch && props.formModel) {\n for (let k of searchConfig.watch) {\n if (old_obj[k] != props.formModel[k] && props.formModel[k]) {\n change = true;\n search_modelRef[k] = props.formModel[k];\n }\n }\n }\n if (change && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n });\n }\n },\n { immediate: true },\n );\n }\n }\n if (searchConfig.attr_use && searchConfig.attr_use.length > 0) {\n for (let k of searchConfig.attr_use) {\n if (props.formModel && props.formModel[k]) {\n is_use = true;\n } else {\n is_use = false;\n break;\n }\n }\n } else {\n if (check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n });\n }\n }\n if (is_use && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n });\n }\n });\n\n if (props.field.mode === 'default') {\n if (props.value) {\n if (isNaN(Number(props.value))) {\n modalRef.selectedRows.push(props.value);\n } else {\n modalRef.selectedRows.push(Number(props.value));\n }\n }\n } else {\n if (typeof props.value == 'string') {\n (props.value as string).split(',').map((item: any) => {\n modalRef.selectedRows.push(Number(item));\n });\n } else if (props.value instanceof Array) {\n props.value.map((item: any) => {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n });\n } else if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n }\n const btnClick = () => {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n getData({ ...search_modelRef }, true)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n };\n const debounce1: any = debounce(() => {\n getData({ ...search_modelRef }, true)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n getDefaultValue(res.data);\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n }, 300);\n\n const handleSearch = (str: any) => {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n search_modelRef[searchConfig.search_field] = str;\n debounce1();\n };\n\n const handleChange = () => {\n if (props.field.mode == 'default') {\n emit('update:value', modalRef.selectedRows);\n const selectItems: any = datasource.value\n .filter((item: any) => {\n return modalRef.selectedRows == item.value;\n })\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n if (modalRef.selectedRows.length > 1) {\n emit('update:value', modalRef.selectedRows);\n } else {\n emit('update:value', modalRef.selectedRows);\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => modalRef.selectedRows.includes(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const filterOption = (val: string, option: any) => {\n if (datasource.value instanceof Array) {\n let f: any = datasource.value.find(item => {\n return item['value'] == option.key;\n });\n if (f) {\n return f['label'].toLowerCase().indexOf(val.toLowerCase()) >= 0;\n } else {\n return false;\n }\n }\n };\n\n return {\n props,\n modalRef,\n search_modelRef,\n searchConfig,\n handleChange,\n handleSearch,\n filterOption,\n datasource,\n btnClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: {},\n});\n</script>\n"],"mappings":"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"}