liyu-pc-base 1.0.415 → 1.0.417
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.
- package/dist/{FieldRender-B_bleF9R.js → FieldRender-44cOKb7R.js} +1 -1
- package/dist/{FieldRender-B_bleF9R.js.map → FieldRender-44cOKb7R.js.map} +1 -1
- package/dist/FieldRender-Dfb5rZf1.js +2 -0
- package/dist/{FieldRender2-DyioRqtF.js → FieldRender2-BlJ1ULbs.js} +2 -2
- package/dist/{FieldRender2-DyioRqtF.js.map → FieldRender2-BlJ1ULbs.js.map} +1 -1
- package/dist/FormRender3-CGnjNyiM.js +2 -0
- package/dist/{FormRender3-DLSNuRB8.js → FormRender3-gGUxnz5g.js} +1 -1
- package/dist/{FormRender3-DLSNuRB8.js.map → FormRender3-gGUxnz5g.js.map} +1 -1
- package/dist/{RemoteSelectPro-DJG_-Ant.js → RemoteSelectPro-Dn2Haf4J.js} +1 -1
- package/dist/{RemoteSelectPro-DJG_-Ant.js.map → RemoteSelectPro-Dn2Haf4J.js.map} +1 -1
- package/dist/SearchRender-BCalGVOt.js +2 -0
- package/dist/{SearchRender-C-2F42TF.js → SearchRender-BncNezo6.js} +1 -1
- package/dist/{SearchRender-C-2F42TF.js.map → SearchRender-BncNezo6.js.map} +1 -1
- package/dist/components/index.js +6 -6
- package/dist/index.js +1 -1
- package/dist/liyu-pc-base.css +1 -1
- package/dist/{tableModal-CbenuZp5.js → tableModal-CDsG1snn.js} +1 -1
- package/dist/{tableModal-CbenuZp5.js.map → tableModal-CDsG1snn.js.map} +1 -1
- package/dist/{tablePro-CIGaVrpO.js → tablePro-CXU7yV5L.js} +814 -812
- package/dist/{tablePro-CIGaVrpO.js.map → tablePro-CXU7yV5L.js.map} +1 -1
- package/dist/tablePro-CiBaggrq.js +2 -0
- package/package.json +1 -1
- package/dist/FieldRender-BpRv5Ovx.js +0 -2
- package/dist/FormRender3-CEtenBff.js +0 -2
- package/dist/SearchRender-CgXnaJHm.js +0 -2
- package/dist/tablePro-C_Fkq-JI.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldRender2-DyioRqtF.js","names":[],"sources":["../src/components/FormRender/FormTemplate/FormItem.vue","../src/components/FormRender/FormTemplate/FormItem.vue","../src/components/FormRender/FormTemplate/TableCell.vue","../src/components/FormRender/FormTemplate/TableCell.vue","../src/components/FormRender/FormTemplate/TableSummary.vue","../src/components/FormRender/FormTemplate/TableSummary.vue","../src/components/FormRender/FormTemplate/FormTemplateTable.vue","../src/components/FormRender/FormTemplate/FormTemplateTable.vue","../src/components/FormRender/FormTemplate/FormTemplate.vue","../src/components/FormRender/FormTemplate/FormTemplate.vue","../src/components/FormRender/DynamicValueField/DynamicValueField.vue","../src/components/FormRender/DynamicValueField/DynamicValueField.vue","../src/components/FormRender/FormButton/FormButton.vue","../src/components/FormRender/FormButton/FormButton.vue","../src/components/FormRender/InputNumberPro/InputNumberPro.vue","../src/components/FormRender/InputNumberPro/InputNumberPro.vue","../src/components/FormRender/InputPro/InputPro.vue","../src/components/FormRender/InputPro/InputPro.vue","../src/components/FormRender/FieldRender2.vue","../src/components/FormRender/FieldRender2.vue"],"sourcesContent":["\n<template>\n <div class=\"form-wrap\">\n <div class=\"form-content\">\n <component\n :is=\"FormRender3Async\"\n :form=\"field.form\"\n v-model:model=\"value\"\n :options=\"field.form?.options\"\n :validateInfos=\"validateInfos\"\n @update_model=\"onUpdateModel\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :context=\"context\"\n :modalType=\"modalType\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </div>\n <div\n v-if=\"field.max_count !== min_count\"\n class=\"form-action\"\n >\n <a-button\n @click=\"removeFormItem\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"listLength <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n watch,\n} from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n value: {\n type: Object,\n default: null,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n listLength: {\n type: Number,\n default: 0,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'remove'],\n setup(props, { emit }) {\n const rulesRef = reactive({ ...props.field.form.rules });\n const validateInfos = ref({});\n const FormRender3Async = defineAsyncComponent(\n () => import('liyu-pc-base/components/FormRender/FormRender3.vue'),\n );\n let validate;\n const genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n };\n // 记录需要忽略校验的字段\n const removeRulKeys = ref([]);\n const valite_id = genID();\n const syncValidate = ([_modelRef, _removeRulKeys]: any[]) => {\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in _modelRef && !_removeRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n const newRes: any = useForm(_modelRef, new_rules_obj);\n validate = newRes.validate;\n validateInfos.value = newRes.validateInfos;\n if (props.nestValidate) {\n props.nestValidate[valite_id] = validate;\n }\n };\n const onUpdateModel = async params => {\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeys.value[params.add_key];\n syncValidate([props.value, removeRulKeys.value]);\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeys.value[params.remove_key] = true;\n syncValidate([props.value, removeRulKeys.value]);\n }\n };\n watch(\n () => props.value,\n newValue => {\n syncValidate([newValue, removeRulKeys.value]);\n },\n { deep: true, immediate: true },\n );\n\n const removeFormItem = () => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n emit('remove');\n };\n onMounted(() => {});\n onUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n });\n return {\n FormRender3Async,\n validateInfos,\n onUpdateModel,\n removeFormItem,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","\n<template>\n <div class=\"form-wrap\">\n <div class=\"form-content\">\n <component\n :is=\"FormRender3Async\"\n :form=\"field.form\"\n v-model:model=\"value\"\n :options=\"field.form?.options\"\n :validateInfos=\"validateInfos\"\n @update_model=\"onUpdateModel\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :context=\"context\"\n :modalType=\"modalType\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </div>\n <div\n v-if=\"field.max_count !== min_count\"\n class=\"form-action\"\n >\n <a-button\n @click=\"removeFormItem\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"listLength <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n watch,\n} from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n value: {\n type: Object,\n default: null,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n listLength: {\n type: Number,\n default: 0,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'remove'],\n setup(props, { emit }) {\n const rulesRef = reactive({ ...props.field.form.rules });\n const validateInfos = ref({});\n const FormRender3Async = defineAsyncComponent(\n () => import('liyu-pc-base/components/FormRender/FormRender3.vue'),\n );\n let validate;\n const genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n };\n // 记录需要忽略校验的字段\n const removeRulKeys = ref([]);\n const valite_id = genID();\n const syncValidate = ([_modelRef, _removeRulKeys]: any[]) => {\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in _modelRef && !_removeRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n const newRes: any = useForm(_modelRef, new_rules_obj);\n validate = newRes.validate;\n validateInfos.value = newRes.validateInfos;\n if (props.nestValidate) {\n props.nestValidate[valite_id] = validate;\n }\n };\n const onUpdateModel = async params => {\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeys.value[params.add_key];\n syncValidate([props.value, removeRulKeys.value]);\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeys.value[params.remove_key] = true;\n syncValidate([props.value, removeRulKeys.value]);\n }\n };\n watch(\n () => props.value,\n newValue => {\n syncValidate([newValue, removeRulKeys.value]);\n },\n { deep: true, immediate: true },\n );\n\n const removeFormItem = () => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n emit('remove');\n };\n onMounted(() => {});\n onUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n });\n return {\n FormRender3Async,\n validateInfos,\n onUpdateModel,\n removeFormItem,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","<template>\n <a-form\n :model=\"model\"\n layout=\"inline\"\n class=\"table-cell-form\"\n >\n <div\n v-show=\"is_show_field\"\n class=\"field-cell-item\"\n :class=\"{ editable: editable, 'item-required': has_reqrired }\"\n >\n <field-render-2\n :is_show_label=\"false\"\n v-model:value=\"model[field.name]\"\n v-model:label=\"model[field.name + '.label']\"\n v-model:is_show_field=\"is_show_field\"\n :field=\"field\"\n :formModel=\"model\"\n :key=\"field.name\"\n :validateInfos=\"validateInfos\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\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 :is_form_design=\"is_form_design\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n />\n </div>\n </a-form>\n</template>\n<script setup lang=\"ts\">\nimport { computed, PropType, ref } from 'vue';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\n\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n model: {\n type: Object,\n required: true,\n },\n validateInfos: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n default: () => {\n return {};\n },\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n has_reqrired: {\n type: Boolean,\n default: false,\n },\n});\nconst emit = defineEmits(['update_model', 'update_name2']);\nconst is_show_field = ref(true);\nconst onUpdateModel = params => {\n emit('update_model', params);\n};\nconst onUpdateName2 = params => {\n emit('update_name2', params);\n};\nconst editable = computed(() => {\n return is_show_field.value && !props.field.disabled && props.field.type !== 'dynamicvaluefield';\n});\n</script>\n<style lang=\"less\" scoped>\n.table-cell-form {\n display: block;\n}\n.field-cell-item {\n padding: 8px;\n box-sizing: border-box;\n height: 100%;\n\n :deep(.ant-input-clear-icon) {\n display: none;\n }\n &:has(:focus),\n &:hover {\n :deep(.ant-input-clear-icon) {\n display: block;\n }\n }\n}\n:deep(.ant-form-item) {\n margin: 0 !important;\n}\n:deep(.ant-input-affix-wrapper) {\n border: 0 !important;\n background-color: transparent !important;\n padding: 0 !important;\n outline: none !important;\n box-shadow: none !important;\n}\n:deep(.ant-input) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n:deep(.ant-select-selector) {\n border: 0 !important;\n box-shadow: none !important;\n padding: 0 !important;\n}\n:deep(.ant-select-selector) {\n background: none !important;\n}\n:deep(.ant-input-number) {\n background-color: transparent !important;\n outline: none !important;\n box-shadow: none !important;\n border: 0 !important;\n}\n:deep(.ant-input-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-affix-wrapper) {\n border: none !important;\n\n background: none !important;\n}\n:deep(.ant-input-number-input) {\n padding: 0 !important;\n}\n:deep(.ant-input-number-handler-wrap) {\n display: none !important;\n}\n:deep(.ant-form-item-control-input-content) {\n .ant-layout {\n background: none;\n }\n}\n.editable.item-required {\n :deep(.ant-form-item::before) {\n display: inline-block;\n position: absolute;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n }\n}\n:deep(.ant-picker) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n</style>\n","<template>\n <a-form\n :model=\"model\"\n layout=\"inline\"\n class=\"table-cell-form\"\n >\n <div\n v-show=\"is_show_field\"\n class=\"field-cell-item\"\n :class=\"{ editable: editable, 'item-required': has_reqrired }\"\n >\n <field-render-2\n :is_show_label=\"false\"\n v-model:value=\"model[field.name]\"\n v-model:label=\"model[field.name + '.label']\"\n v-model:is_show_field=\"is_show_field\"\n :field=\"field\"\n :formModel=\"model\"\n :key=\"field.name\"\n :validateInfos=\"validateInfos\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\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 :is_form_design=\"is_form_design\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n />\n </div>\n </a-form>\n</template>\n<script setup lang=\"ts\">\nimport { computed, PropType, ref } from 'vue';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\n\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n model: {\n type: Object,\n required: true,\n },\n validateInfos: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n default: () => {\n return {};\n },\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n has_reqrired: {\n type: Boolean,\n default: false,\n },\n});\nconst emit = defineEmits(['update_model', 'update_name2']);\nconst is_show_field = ref(true);\nconst onUpdateModel = params => {\n emit('update_model', params);\n};\nconst onUpdateName2 = params => {\n emit('update_name2', params);\n};\nconst editable = computed(() => {\n return is_show_field.value && !props.field.disabled && props.field.type !== 'dynamicvaluefield';\n});\n</script>\n<style lang=\"less\" scoped>\n.table-cell-form {\n display: block;\n}\n.field-cell-item {\n padding: 8px;\n box-sizing: border-box;\n height: 100%;\n\n :deep(.ant-input-clear-icon) {\n display: none;\n }\n &:has(:focus),\n &:hover {\n :deep(.ant-input-clear-icon) {\n display: block;\n }\n }\n}\n:deep(.ant-form-item) {\n margin: 0 !important;\n}\n:deep(.ant-input-affix-wrapper) {\n border: 0 !important;\n background-color: transparent !important;\n padding: 0 !important;\n outline: none !important;\n box-shadow: none !important;\n}\n:deep(.ant-input) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n:deep(.ant-select-selector) {\n border: 0 !important;\n box-shadow: none !important;\n padding: 0 !important;\n}\n:deep(.ant-select-selector) {\n background: none !important;\n}\n:deep(.ant-input-number) {\n background-color: transparent !important;\n outline: none !important;\n box-shadow: none !important;\n border: 0 !important;\n}\n:deep(.ant-input-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-affix-wrapper) {\n border: none !important;\n\n background: none !important;\n}\n:deep(.ant-input-number-input) {\n padding: 0 !important;\n}\n:deep(.ant-input-number-handler-wrap) {\n display: none !important;\n}\n:deep(.ant-form-item-control-input-content) {\n .ant-layout {\n background: none;\n }\n}\n.editable.item-required {\n :deep(.ant-form-item::before) {\n display: inline-block;\n position: absolute;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n }\n}\n:deep(.ant-picker) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n</style>\n","<template>\n <span v-if=\"summaryParams?.column?.field?.addonBefore\">\n {{ summaryParams.column.field.addonBefore }}\n </span>\n {{ value }}\n <span v-if=\"summaryParams?.column?.field?.addonAfter\">\n {{ summaryParams.column.field.addonAfter }}\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps({\n summaryParams: {\n type: Object,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.summaryParams.pageData) {\n let itemValue = item[props.summaryParams.column.dataIndex];\n if (props.summaryParams.column.field.type === 'number') {\n itemValue = getValue(props.summaryParams.column.field, itemValue);\n } else {\n itemValue = parseFloat(itemValue);\n }\n if (isNaN(itemValue) || itemValue == null) {\n itemValue = 0;\n }\n totla = add(totla, itemValue);\n }\n if (props.summaryParams.column.field.type === 'number') {\n const precision = props.summaryParams.column.field.precision;\n if (precision) {\n totla = totla.toFixed(precision);\n }\n }\n return totla;\n});\nfunction replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\nfunction replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction add(a, b) {\n const precision = Math.max(\n (a.toString().split('.')[1] || '').length,\n (b.toString().split('.')[1] || '').length,\n );\n return parseFloat((a + b).toFixed(precision));\n}\nconst getValue = (field: any, value: any) => {\n if (typeof value === 'string') {\n if (field.addonAfter) {\n value = replaceEnd(value, field.addonAfter, '');\n }\n if (field.addonBefore) {\n value = replaceStart(value, field.addonBefore, '');\n }\n value = parseFloat(value);\n }\n return value;\n};\n</script>\n<style lang=\"less\" scoped></style>\n","<template>\n <span v-if=\"summaryParams?.column?.field?.addonBefore\">\n {{ summaryParams.column.field.addonBefore }}\n </span>\n {{ value }}\n <span v-if=\"summaryParams?.column?.field?.addonAfter\">\n {{ summaryParams.column.field.addonAfter }}\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps({\n summaryParams: {\n type: Object,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.summaryParams.pageData) {\n let itemValue = item[props.summaryParams.column.dataIndex];\n if (props.summaryParams.column.field.type === 'number') {\n itemValue = getValue(props.summaryParams.column.field, itemValue);\n } else {\n itemValue = parseFloat(itemValue);\n }\n if (isNaN(itemValue) || itemValue == null) {\n itemValue = 0;\n }\n totla = add(totla, itemValue);\n }\n if (props.summaryParams.column.field.type === 'number') {\n const precision = props.summaryParams.column.field.precision;\n if (precision) {\n totla = totla.toFixed(precision);\n }\n }\n return totla;\n});\nfunction replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\nfunction replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction add(a, b) {\n const precision = Math.max(\n (a.toString().split('.')[1] || '').length,\n (b.toString().split('.')[1] || '').length,\n );\n return parseFloat((a + b).toFixed(precision));\n}\nconst getValue = (field: any, value: any) => {\n if (typeof value === 'string') {\n if (field.addonAfter) {\n value = replaceEnd(value, field.addonAfter, '');\n }\n if (field.addonBefore) {\n value = replaceStart(value, field.addonBefore, '');\n }\n value = parseFloat(value);\n }\n return value;\n};\n</script>\n<style lang=\"less\" scoped></style>\n","<template>\n <debug-code v-model:dynamic-title=\"field.dynamicTitle\">\n <!-- 设置:key=\"tableColumns.length\"是为了在列个数发生变化时,重新实例化table,从而重新计算列宽 -->\n <s-table\n :dataSource=\"tableDataSource\"\n :columns=\"tableColumns\"\n :pagination=\"false\"\n :autoRowHeight=\"true\"\n :bordered=\"true\"\n stripe\n summary-fixed\n :scroll=\"{ x: totalWidth }\"\n size=\"small\"\n row-key=\"_key\"\n :key=\"tableColumns.length\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ text, column, record, index, recordIndexs }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(index)\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"value.length <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </template>\n <template v-else-if=\"column.key === 'index'\">\n <div class=\"cell-item\">\n {{ index + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${index}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[index]\"\n :validateInfos=\"validateInfosList[index] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[index]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, index]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(index, params)\"\n />\n </template>\n <template\n #summary\n v-if=\"summaryColumns.length > 0\"\n >\n <s-table-summary-row>\n <s-table-summary-cell :index=\"0\">合计</s-table-summary-cell>\n <s-table-summary-cell\n v-for=\"item in summaryColumns\"\n :key=\"item.index\"\n :index=\"item.index\"\n >\n <template #default=\"vars\">\n <TableSummary :summary-params=\"vars\"></TableSummary>\n </template>\n </s-table-summary-cell>\n </s-table-summary-row>\n </template>\n </s-table>\n </debug-code>\n</template>\n<script setup lang=\"ts\">\nimport TableCell from './TableCell.vue';\nimport TableSummary from './TableSummary.vue';\nimport { computed, PropType, ref, reactive, watch, onUnmounted, onMounted } from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\n\nconst props = defineProps({\n value: {\n type: Array,\n required: true,\n },\n field: {\n type: Object,\n required: true,\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n formModel: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['remove']);\n\nconst rulesRef = reactive({ ...(props.field.form?.rules || {}) });\nconst validateInfosList = ref<any[]>([]);\nconst validateFunctions = ref<any[]>([]);\nconst removeRulKeysList = ref<any[]>([]);\n\nconst genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n};\nconst valite_id = genID();\nconst tableColumns = ref([]);\n\nconst syncValidate = () => {\n const newValidateInfosList: any[] = [];\n const newValidateFunctions: any[] = [];\n\n (props.value || []).forEach((item: any, index: number) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n const rowRemoveRulKeys = removeRulKeysList.value[index];\n\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in item && !rowRemoveRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n\n const { validate, validateInfos } = useForm(item, new_rules_obj);\n newValidateInfosList[index] = validateInfos;\n newValidateFunctions[index] = validate;\n });\n\n validateInfosList.value = newValidateInfosList;\n validateFunctions.value = newValidateFunctions;\n\n if (props.nestValidate) {\n props.nestValidate[valite_id] = async () => {\n const promises = newValidateFunctions.map(v => v());\n return Promise.all(promises);\n };\n }\n};\n\nconst onUpdateModel = (index: number, params: any) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeysList.value[index][params.add_key];\n syncValidate();\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeysList.value[index][params.remove_key] = true;\n syncValidate();\n }\n};\n\nwatch(\n () => props.value,\n () => {\n syncValidate();\n },\n { deep: true, immediate: true },\n);\nwatch(\n () => props.field,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.formModel,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.context,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nonMounted(() => {\n genTableColumns();\n});\nonUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n});\nconst totalWidth = computed(() => {\n let width = 0;\n tableColumns.value.forEach(col => {\n width += col._width || 150;\n });\n return width;\n});\nconst tableDataSource = computed(() => {\n const value = props.value || [];\n return value.map((item: any, index: number) => {\n return { ...item, _key: index };\n });\n});\nconst hasReqrired = fieldName => {\n if (props.field?.form?.rules) {\n const rule = props.field?.form?.rules[fieldName];\n if (rule) {\n for (const item of rule) {\n if (item.required) {\n return true;\n }\n }\n }\n }\n return false;\n};\nconst genTableColumns = async () => {\n let columns = [];\n const keys = {};\n columns.push({\n title: '序号',\n dataIndex: 'index',\n key: 'index',\n maxWidth: 50,\n });\n props.field?.form?.dynamicFieldList?.forEach(group_item => {\n if (group_item.children instanceof Array) {\n group_item.children.forEach(item => {\n if (item.is_table_hide_column) return;\n if (keys[item.name]) return;\n keys[item.name] = true;\n let is_table_auto_width = item.is_table_auto_width;\n if (is_table_auto_width == null || is_table_auto_width === '') {\n is_table_auto_width = true;\n }\n const obj: any = {\n title: item.label,\n dataIndex: item.name,\n key: item.name,\n _width: item.table_column_width || 150,\n checked: true,\n autoWidth: is_table_auto_width,\n resizable: true,\n autoHeight: true,\n field: item,\n is_summary: item.is_table_summary,\n has_reqrired: hasReqrired(item.name),\n };\n if (is_table_auto_width) {\n obj.minWidth = obj._width;\n } else {\n obj.width = obj._width;\n }\n columns.push(obj);\n });\n }\n });\n if (props.field.max_count !== props.min_count) {\n columns.push({\n title: '操作',\n key: 'action',\n dataIndex: 'action',\n width: 60,\n _width: 60,\n fixed: 'right',\n });\n }\n if (props.field.dynamicTitle?.enable) {\n const code = props.field.dynamicTitle.code;\n try {\n const newColumns = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: props.field,\n value: props.value,\n formModel: props.formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, props.field.name],\n columns: columns,\n },\n props.workerHostFunctions || {},\n );\n if (newColumns) {\n columns = newColumns;\n }\n } catch (e) {\n console.error(e);\n }\n }\n tableColumns.value = columns;\n};\nconst onDeleteRow = (index: number) => {\n removeRulKeysList.value.splice(index, 1);\n emit('remove', index);\n};\nconst _innerModel = computed(() => {\n if (props.innerModel) {\n const fieldInnerModel = props.innerModel[props.field.name] || [];\n return (props.value || []).map((_, i) => fieldInnerModel[i] || {});\n }\n return [];\n});\nconst summaryColumns = computed(() => {\n const list = [];\n let index = 0;\n for (const item of tableColumns.value) {\n if (item.is_summary) {\n list.push({\n index: index,\n });\n }\n index++;\n }\n return list;\n});\n</script>\n<style lang=\"less\" scoped>\n:deep(.surely-table-cell) {\n .surely-table-cell-inner {\n height: 100%;\n &:has(.editable) {\n border: 1px solid transparent !important;\n background-color: rgba(248, 232, 53, 0.214);\n\n input {\n text-overflow: ellipsis;\n &:focus {\n text-overflow: clip;\n }\n }\n }\n &:has(.editable:hover),\n &:has(.editable:focus),\n &:has(.editable input:focus),\n &:has(.editable textarea:focus) {\n border-color: #40a9ff !important;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n background-color: rgba(252, 238, 85, 0.738);\n border-radius: 6px;\n }\n &:has(.ant-form-item-has-error) {\n border: 1px solid transparent !important;\n border-color: #ff4d4f !important;\n border-radius: 6px;\n }\n .surely-table-cell-content {\n padding: 0 !important;\n }\n }\n .ant-form-item-explain-error {\n font-size: 10px;\n }\n}\n\n.cell-item {\n padding: 8px;\n}\n</style>\n","<template>\n <debug-code v-model:dynamic-title=\"field.dynamicTitle\">\n <!-- 设置:key=\"tableColumns.length\"是为了在列个数发生变化时,重新实例化table,从而重新计算列宽 -->\n <s-table\n :dataSource=\"tableDataSource\"\n :columns=\"tableColumns\"\n :pagination=\"false\"\n :autoRowHeight=\"true\"\n :bordered=\"true\"\n stripe\n summary-fixed\n :scroll=\"{ x: totalWidth }\"\n size=\"small\"\n row-key=\"_key\"\n :key=\"tableColumns.length\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ text, column, record, index, recordIndexs }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(index)\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"value.length <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </template>\n <template v-else-if=\"column.key === 'index'\">\n <div class=\"cell-item\">\n {{ index + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${index}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[index]\"\n :validateInfos=\"validateInfosList[index] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[index]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, index]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(index, params)\"\n />\n </template>\n <template\n #summary\n v-if=\"summaryColumns.length > 0\"\n >\n <s-table-summary-row>\n <s-table-summary-cell :index=\"0\">合计</s-table-summary-cell>\n <s-table-summary-cell\n v-for=\"item in summaryColumns\"\n :key=\"item.index\"\n :index=\"item.index\"\n >\n <template #default=\"vars\">\n <TableSummary :summary-params=\"vars\"></TableSummary>\n </template>\n </s-table-summary-cell>\n </s-table-summary-row>\n </template>\n </s-table>\n </debug-code>\n</template>\n<script setup lang=\"ts\">\nimport TableCell from './TableCell.vue';\nimport TableSummary from './TableSummary.vue';\nimport { computed, PropType, ref, reactive, watch, onUnmounted, onMounted } from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\n\nconst props = defineProps({\n value: {\n type: Array,\n required: true,\n },\n field: {\n type: Object,\n required: true,\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n formModel: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['remove']);\n\nconst rulesRef = reactive({ ...(props.field.form?.rules || {}) });\nconst validateInfosList = ref<any[]>([]);\nconst validateFunctions = ref<any[]>([]);\nconst removeRulKeysList = ref<any[]>([]);\n\nconst genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n};\nconst valite_id = genID();\nconst tableColumns = ref([]);\n\nconst syncValidate = () => {\n const newValidateInfosList: any[] = [];\n const newValidateFunctions: any[] = [];\n\n (props.value || []).forEach((item: any, index: number) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n const rowRemoveRulKeys = removeRulKeysList.value[index];\n\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in item && !rowRemoveRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n\n const { validate, validateInfos } = useForm(item, new_rules_obj);\n newValidateInfosList[index] = validateInfos;\n newValidateFunctions[index] = validate;\n });\n\n validateInfosList.value = newValidateInfosList;\n validateFunctions.value = newValidateFunctions;\n\n if (props.nestValidate) {\n props.nestValidate[valite_id] = async () => {\n const promises = newValidateFunctions.map(v => v());\n return Promise.all(promises);\n };\n }\n};\n\nconst onUpdateModel = (index: number, params: any) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeysList.value[index][params.add_key];\n syncValidate();\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeysList.value[index][params.remove_key] = true;\n syncValidate();\n }\n};\n\nwatch(\n () => props.value,\n () => {\n syncValidate();\n },\n { deep: true, immediate: true },\n);\nwatch(\n () => props.field,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.formModel,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.context,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nonMounted(() => {\n genTableColumns();\n});\nonUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n});\nconst totalWidth = computed(() => {\n let width = 0;\n tableColumns.value.forEach(col => {\n width += col._width || 150;\n });\n return width;\n});\nconst tableDataSource = computed(() => {\n const value = props.value || [];\n return value.map((item: any, index: number) => {\n return { ...item, _key: index };\n });\n});\nconst hasReqrired = fieldName => {\n if (props.field?.form?.rules) {\n const rule = props.field?.form?.rules[fieldName];\n if (rule) {\n for (const item of rule) {\n if (item.required) {\n return true;\n }\n }\n }\n }\n return false;\n};\nconst genTableColumns = async () => {\n let columns = [];\n const keys = {};\n columns.push({\n title: '序号',\n dataIndex: 'index',\n key: 'index',\n maxWidth: 50,\n });\n props.field?.form?.dynamicFieldList?.forEach(group_item => {\n if (group_item.children instanceof Array) {\n group_item.children.forEach(item => {\n if (item.is_table_hide_column) return;\n if (keys[item.name]) return;\n keys[item.name] = true;\n let is_table_auto_width = item.is_table_auto_width;\n if (is_table_auto_width == null || is_table_auto_width === '') {\n is_table_auto_width = true;\n }\n const obj: any = {\n title: item.label,\n dataIndex: item.name,\n key: item.name,\n _width: item.table_column_width || 150,\n checked: true,\n autoWidth: is_table_auto_width,\n resizable: true,\n autoHeight: true,\n field: item,\n is_summary: item.is_table_summary,\n has_reqrired: hasReqrired(item.name),\n };\n if (is_table_auto_width) {\n obj.minWidth = obj._width;\n } else {\n obj.width = obj._width;\n }\n columns.push(obj);\n });\n }\n });\n if (props.field.max_count !== props.min_count) {\n columns.push({\n title: '操作',\n key: 'action',\n dataIndex: 'action',\n width: 60,\n _width: 60,\n fixed: 'right',\n });\n }\n if (props.field.dynamicTitle?.enable) {\n const code = props.field.dynamicTitle.code;\n try {\n const newColumns = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: props.field,\n value: props.value,\n formModel: props.formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, props.field.name],\n columns: columns,\n },\n props.workerHostFunctions || {},\n );\n if (newColumns) {\n columns = newColumns;\n }\n } catch (e) {\n console.error(e);\n }\n }\n tableColumns.value = columns;\n};\nconst onDeleteRow = (index: number) => {\n removeRulKeysList.value.splice(index, 1);\n emit('remove', index);\n};\nconst _innerModel = computed(() => {\n if (props.innerModel) {\n const fieldInnerModel = props.innerModel[props.field.name] || [];\n return (props.value || []).map((_, i) => fieldInnerModel[i] || {});\n }\n return [];\n});\nconst summaryColumns = computed(() => {\n const list = [];\n let index = 0;\n for (const item of tableColumns.value) {\n if (item.is_summary) {\n list.push({\n index: index,\n });\n }\n index++;\n }\n return list;\n});\n</script>\n<style lang=\"less\" scoped>\n:deep(.surely-table-cell) {\n .surely-table-cell-inner {\n height: 100%;\n &:has(.editable) {\n border: 1px solid transparent !important;\n background-color: rgba(248, 232, 53, 0.214);\n\n input {\n text-overflow: ellipsis;\n &:focus {\n text-overflow: clip;\n }\n }\n }\n &:has(.editable:hover),\n &:has(.editable:focus),\n &:has(.editable input:focus),\n &:has(.editable textarea:focus) {\n border-color: #40a9ff !important;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n background-color: rgba(252, 238, 85, 0.738);\n border-radius: 6px;\n }\n &:has(.ant-form-item-has-error) {\n border: 1px solid transparent !important;\n border-color: #ff4d4f !important;\n border-radius: 6px;\n }\n .surely-table-cell-content {\n padding: 0 !important;\n }\n }\n .ant-form-item-explain-error {\n font-size: 10px;\n }\n}\n\n.cell-item {\n padding: 8px;\n}\n</style>\n","<template>\n <div class=\"top_btn\">\n <a-button\n v-if=\"is_form_design\"\n type=\"primary\"\n size=\"small\"\n @click=\"openModelConfig\"\n :ghost=\"true\"\n >\n 编辑表单\n </a-button>\n <a-button\n v-if=\"hasDownloadBtn\"\n size=\"small\"\n type=\"primary\"\n :loading=\"exportExcelLoading\"\n @click=\"handleExportExcel\"\n >\n 下载导入模版\n </a-button>\n <a-button\n v-if=\"hasImportBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleImportExcel\"\n >\n 导入Excel数据\n </a-button>\n <a-button\n v-if=\"hasAddBtn && (!field.custom_btn_list?.length || field.max_count !== min_count)\"\n type=\"primary\"\n size=\"small\"\n @click=\"addFormItem\"\n :disabled=\"field.max_count && value.length >= field.max_count\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n {{ field.btn_title || '添加' }}\n </a-button>\n <template v-for=\"btn in field.custom_btn_list\">\n <debug-code\n :action_code_id=\"btn.action_code_id\"\n v-model:code=\"btn.code\"\n v-model:action=\"btn.action\"\n :options=\"actionTypes\"\n >\n <a-button\n size=\"small\"\n :type=\"btn.type\"\n :danger=\"btn.danger\"\n @click=\"handleCustomBtnClick(btn)\"\n :disabled=\"field.max_count && value.length >= field.max_count && btn.action === 'add'\"\n >\n {{ btn.label }}\n </a-button>\n </debug-code>\n </template>\n </div>\n <template v-if=\"field.showType === 'table'\">\n <FormTemplateTable\n :value=\"value\"\n :field=\"field\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n :min_count=\"min_count\"\n :formModel=\"formModel\"\n @remove=\"removeFormItem\"\n />\n </template>\n <template v-else>\n <template v-for=\"(item, index) in value\">\n <FormItem\n :form=\"field.form\"\n :field=\"field\"\n v-model:value=\"value[index]\"\n :options=\"field.form?.options\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"_innerModel[index]\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :modalType=\"modalType\"\n :nestValidate=\"nestValidate\"\n :min_count=\"min_count\"\n :listLength=\"value.length\"\n :context=\"context\"\n @remove=\"removeFormItem(index)\"\n :base-key-path=\"[...baseKeyPath, field.name, index]\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </template>\n </template>\n</template>\n\n<script lang=\"ts\">\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport {\n computed,\n watch,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n h,\n defineAsyncComponent,\n createVNode,\n} from 'vue';\nimport mitt from 'mitt';\nimport { cloneDeep, debounce } from 'lodash';\nimport { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';\nimport { Modal } from 'ant-design-vue';\nimport { exportJsonToExcel } from 'liyu-pc-base/utils/excel';\nimport FormItem from './FormItem.vue';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport { message } from 'ant-design-vue';\nimport FormTemplateTable from './FormTemplateTable.vue';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {\n FormItem,\n debugCode,\n FormTemplateTable,\n },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const height = ref(0);\n const eventBus = mitt();\n const actionTypes = [\n {\n label: '添加(add)',\n value: 'add',\n },\n {\n label: '整体更新(update)',\n value: 'update',\n },\n ];\n\n const ImportExcelModal = defineAsyncComponent(\n () => import('liyu-pc-base/components/form-modal/ImportExcelModal/ImportExcelModal.vue'),\n );\n\n const hasDownloadBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('download')) {\n return true;\n }\n return false;\n });\n const hasImportBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('import')) {\n return true;\n }\n return false;\n });\n const hasAddBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('add')) {\n return true;\n }\n return false;\n });\n\n const name2Obj: any = {};\n const handleImportExcel = () => {\n const configList: any = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n const col = { ...item1 };\n if (item1?.name2) {\n name2Obj[item1.name] = item1?.name2;\n }\n if (['select', 'radio', 'checkbox', 'treeselect', 'cascader'].includes(item1.type)) {\n col.options = props.field.form?.options?.[item1.name] || item1.options;\n }\n configList.push(col);\n });\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n component: ImportExcelModal,\n title: '导入Excel数据',\n configList: configList,\n ok: (data: any) => {\n const err = [];\n const list = [];\n\n data.forEach((item: any) => {\n const obj: any = cloneDeep(props.field.form.model || {});\n Object.keys(item).forEach((key: any) => {\n if (item[key].error) {\n err.push(h('li', item[key].error + '(' + item[key].excel_position + ')'));\n }\n obj[key] = item[key].value;\n if (name2Obj[key]) {\n obj[name2Obj[key]] = item[key].raw_value;\n }\n });\n list.push(obj);\n });\n if (err.length > 0) {\n Modal.warning({\n title: `导入Excel报错, 请改正后再尝试导入`,\n content: h('ol', err),\n icon: createVNode(ExclamationCircleOutlined),\n });\n } else {\n const newValue = [...(props.value || []), ...list];\n emit('update:value', newValue);\n }\n tempModal.open = false;\n },\n onCancel: () => {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n };\n\n const exportExcelLoading = ref(false);\n const handleExportExcel = () => {\n exportExcelLoading.value = true;\n const header = [];\n const data = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n if (item1.is_hide) return;\n header.push(item1.label);\n if (props.value && props.value.length > 0) {\n data.push(props.value[0][item1.name] ? props.value[0][item1.name].toString() : '');\n } else {\n data.push('');\n }\n });\n }\n });\n\n const percent = ref(100);\n exportJsonToExcel({\n data: [data],\n autoWidth: true,\n bookType: 'xlsx',\n filename: props.field.label || '导入模板',\n header: header,\n merges: [],\n multiHeader: [],\n percent: percent,\n });\n setTimeout(() => {\n exportExcelLoading.value = false;\n }, 1500);\n };\n\n const min_count = computed(() => {\n if (props.field.min_count || props.field.min_count === 0) {\n return props.field.min_count;\n } else {\n return 1;\n }\n });\n const _innerModel = computed(() => {\n if (props.innerModel) {\n if (!props.innerModel[props.field.name]) {\n props.innerModel[props.field.name] = [];\n }\n for (let i = 0; i < props.value.length; i++) {\n if (!props.innerModel[props.field.name][i]) {\n props.innerModel[props.field.name][i] = {};\n }\n }\n return props.innerModel[props.field.name];\n }\n return [];\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 value: props.value,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (btn.action == 'add') {\n if (res) {\n const temp = cloneDeep(props.field.form.model || {});\n Object.assign(temp, res);\n const new_list = JSON.parse(JSON.stringify(props.value)) || [];\n new_list.push(temp);\n emit('update:value', new_list);\n }\n } else if (btn.action == 'update') {\n if (res instanceof Array) {\n const temp = [];\n for (const item of res) {\n const newItem = cloneDeep(props.field.form.model || {});\n Object.assign(newItem, item);\n temp.push(newItem);\n }\n emit('update:value', temp);\n }\n }\n }\n };\n const addFormItem = () => {\n const dataList = props.value || [];\n dataList.push(cloneDeep(props.field.form.model || {}));\n emit('update:value', dataList);\n };\n\n const removeFormItem = index => {\n const dataList = props.value || [];\n dataList.splice(index, 1);\n emit('update:value', dataList);\n };\n\n const onresize: any = debounce(() => {\n height.value = window.innerHeight - 165;\n }, 200);\n const openModelConfig = () => {\n const tempModal = reactive({\n open: true,\n loading: false,\n component: 'InnerFormDesignModal',\n record: { value: props.field.form || {} },\n height: height.value,\n enableBatchAdd: true,\n modalTypeList: props.modalTypeList,\n modalType: props.modalType,\n eventBus: eventBus,\n ok: (data: any) => {\n props.field.form = data;\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n watch(\n () => props.value,\n newValue => {\n if (!(newValue instanceof Array) || newValue.length < min_count.value) {\n const res = [...(newValue || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n },\n );\n onMounted(() => {\n window.addEventListener('resize', onresize);\n onresize();\n if (!(props.value instanceof Array) || props.value.length < min_count.value) {\n const res = [...(props.value || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n });\n onUnmounted(() => {\n window.removeEventListener('resize', onresize);\n });\n return {\n openModelConfig,\n addFormItem,\n removeFormItem,\n min_count,\n _innerModel,\n actionTypes,\n handleCustomBtnClick,\n hasDownloadBtn,\n hasImportBtn,\n hasAddBtn,\n handleImportExcel,\n handleExportExcel,\n exportExcelLoading,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n flex-wrap: wrap;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","<template>\n <div class=\"top_btn\">\n <a-button\n v-if=\"is_form_design\"\n type=\"primary\"\n size=\"small\"\n @click=\"openModelConfig\"\n :ghost=\"true\"\n >\n 编辑表单\n </a-button>\n <a-button\n v-if=\"hasDownloadBtn\"\n size=\"small\"\n type=\"primary\"\n :loading=\"exportExcelLoading\"\n @click=\"handleExportExcel\"\n >\n 下载导入模版\n </a-button>\n <a-button\n v-if=\"hasImportBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleImportExcel\"\n >\n 导入Excel数据\n </a-button>\n <a-button\n v-if=\"hasAddBtn && (!field.custom_btn_list?.length || field.max_count !== min_count)\"\n type=\"primary\"\n size=\"small\"\n @click=\"addFormItem\"\n :disabled=\"field.max_count && value.length >= field.max_count\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n {{ field.btn_title || '添加' }}\n </a-button>\n <template v-for=\"btn in field.custom_btn_list\">\n <debug-code\n :action_code_id=\"btn.action_code_id\"\n v-model:code=\"btn.code\"\n v-model:action=\"btn.action\"\n :options=\"actionTypes\"\n >\n <a-button\n size=\"small\"\n :type=\"btn.type\"\n :danger=\"btn.danger\"\n @click=\"handleCustomBtnClick(btn)\"\n :disabled=\"field.max_count && value.length >= field.max_count && btn.action === 'add'\"\n >\n {{ btn.label }}\n </a-button>\n </debug-code>\n </template>\n </div>\n <template v-if=\"field.showType === 'table'\">\n <FormTemplateTable\n :value=\"value\"\n :field=\"field\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n :min_count=\"min_count\"\n :formModel=\"formModel\"\n @remove=\"removeFormItem\"\n />\n </template>\n <template v-else>\n <template v-for=\"(item, index) in value\">\n <FormItem\n :form=\"field.form\"\n :field=\"field\"\n v-model:value=\"value[index]\"\n :options=\"field.form?.options\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"_innerModel[index]\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :modalType=\"modalType\"\n :nestValidate=\"nestValidate\"\n :min_count=\"min_count\"\n :listLength=\"value.length\"\n :context=\"context\"\n @remove=\"removeFormItem(index)\"\n :base-key-path=\"[...baseKeyPath, field.name, index]\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </template>\n </template>\n</template>\n\n<script lang=\"ts\">\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport {\n computed,\n watch,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n h,\n defineAsyncComponent,\n createVNode,\n} from 'vue';\nimport mitt from 'mitt';\nimport { cloneDeep, debounce } from 'lodash';\nimport { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';\nimport { Modal } from 'ant-design-vue';\nimport { exportJsonToExcel } from 'liyu-pc-base/utils/excel';\nimport FormItem from './FormItem.vue';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport { message } from 'ant-design-vue';\nimport FormTemplateTable from './FormTemplateTable.vue';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {\n FormItem,\n debugCode,\n FormTemplateTable,\n },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const height = ref(0);\n const eventBus = mitt();\n const actionTypes = [\n {\n label: '添加(add)',\n value: 'add',\n },\n {\n label: '整体更新(update)',\n value: 'update',\n },\n ];\n\n const ImportExcelModal = defineAsyncComponent(\n () => import('liyu-pc-base/components/form-modal/ImportExcelModal/ImportExcelModal.vue'),\n );\n\n const hasDownloadBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('download')) {\n return true;\n }\n return false;\n });\n const hasImportBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('import')) {\n return true;\n }\n return false;\n });\n const hasAddBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('add')) {\n return true;\n }\n return false;\n });\n\n const name2Obj: any = {};\n const handleImportExcel = () => {\n const configList: any = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n const col = { ...item1 };\n if (item1?.name2) {\n name2Obj[item1.name] = item1?.name2;\n }\n if (['select', 'radio', 'checkbox', 'treeselect', 'cascader'].includes(item1.type)) {\n col.options = props.field.form?.options?.[item1.name] || item1.options;\n }\n configList.push(col);\n });\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n component: ImportExcelModal,\n title: '导入Excel数据',\n configList: configList,\n ok: (data: any) => {\n const err = [];\n const list = [];\n\n data.forEach((item: any) => {\n const obj: any = cloneDeep(props.field.form.model || {});\n Object.keys(item).forEach((key: any) => {\n if (item[key].error) {\n err.push(h('li', item[key].error + '(' + item[key].excel_position + ')'));\n }\n obj[key] = item[key].value;\n if (name2Obj[key]) {\n obj[name2Obj[key]] = item[key].raw_value;\n }\n });\n list.push(obj);\n });\n if (err.length > 0) {\n Modal.warning({\n title: `导入Excel报错, 请改正后再尝试导入`,\n content: h('ol', err),\n icon: createVNode(ExclamationCircleOutlined),\n });\n } else {\n const newValue = [...(props.value || []), ...list];\n emit('update:value', newValue);\n }\n tempModal.open = false;\n },\n onCancel: () => {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n };\n\n const exportExcelLoading = ref(false);\n const handleExportExcel = () => {\n exportExcelLoading.value = true;\n const header = [];\n const data = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n if (item1.is_hide) return;\n header.push(item1.label);\n if (props.value && props.value.length > 0) {\n data.push(props.value[0][item1.name] ? props.value[0][item1.name].toString() : '');\n } else {\n data.push('');\n }\n });\n }\n });\n\n const percent = ref(100);\n exportJsonToExcel({\n data: [data],\n autoWidth: true,\n bookType: 'xlsx',\n filename: props.field.label || '导入模板',\n header: header,\n merges: [],\n multiHeader: [],\n percent: percent,\n });\n setTimeout(() => {\n exportExcelLoading.value = false;\n }, 1500);\n };\n\n const min_count = computed(() => {\n if (props.field.min_count || props.field.min_count === 0) {\n return props.field.min_count;\n } else {\n return 1;\n }\n });\n const _innerModel = computed(() => {\n if (props.innerModel) {\n if (!props.innerModel[props.field.name]) {\n props.innerModel[props.field.name] = [];\n }\n for (let i = 0; i < props.value.length; i++) {\n if (!props.innerModel[props.field.name][i]) {\n props.innerModel[props.field.name][i] = {};\n }\n }\n return props.innerModel[props.field.name];\n }\n return [];\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 value: props.value,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (btn.action == 'add') {\n if (res) {\n const temp = cloneDeep(props.field.form.model || {});\n Object.assign(temp, res);\n const new_list = JSON.parse(JSON.stringify(props.value)) || [];\n new_list.push(temp);\n emit('update:value', new_list);\n }\n } else if (btn.action == 'update') {\n if (res instanceof Array) {\n const temp = [];\n for (const item of res) {\n const newItem = cloneDeep(props.field.form.model || {});\n Object.assign(newItem, item);\n temp.push(newItem);\n }\n emit('update:value', temp);\n }\n }\n }\n };\n const addFormItem = () => {\n const dataList = props.value || [];\n dataList.push(cloneDeep(props.field.form.model || {}));\n emit('update:value', dataList);\n };\n\n const removeFormItem = index => {\n const dataList = props.value || [];\n dataList.splice(index, 1);\n emit('update:value', dataList);\n };\n\n const onresize: any = debounce(() => {\n height.value = window.innerHeight - 165;\n }, 200);\n const openModelConfig = () => {\n const tempModal = reactive({\n open: true,\n loading: false,\n component: 'InnerFormDesignModal',\n record: { value: props.field.form || {} },\n height: height.value,\n enableBatchAdd: true,\n modalTypeList: props.modalTypeList,\n modalType: props.modalType,\n eventBus: eventBus,\n ok: (data: any) => {\n props.field.form = data;\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n watch(\n () => props.value,\n newValue => {\n if (!(newValue instanceof Array) || newValue.length < min_count.value) {\n const res = [...(newValue || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n },\n );\n onMounted(() => {\n window.addEventListener('resize', onresize);\n onresize();\n if (!(props.value instanceof Array) || props.value.length < min_count.value) {\n const res = [...(props.value || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n });\n onUnmounted(() => {\n window.removeEventListener('resize', onresize);\n });\n return {\n openModelConfig,\n addFormItem,\n removeFormItem,\n min_count,\n _innerModel,\n actionTypes,\n handleCustomBtnClick,\n hasDownloadBtn,\n hasImportBtn,\n hasAddBtn,\n handleImportExcel,\n handleExportExcel,\n exportExcelLoading,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n flex-wrap: wrap;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","<template>\n <debug-code\n :value-code=\"field\"\n :show-debug-code=\"field.watchType === 'code'\"\n >\n <a-input\n :value=\"value\"\n readonly\n size=\"small\"\n style=\"background-color: #f5f5f5\"\n ></a-input>\n </debug-code>\n <span\n v-if=\"errorMsg\"\n class=\"error-msg\"\n >\n {{ errorMsg }}\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { debounce } from 'lodash';\n\nexport default defineComponent({\n name: 'DynamicValueField',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: String,\n default: () => undefined,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n formModel: {\n type: Object,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const errorMsg = ref(null);\n const syncValue = debounce(async (innerModel, globalInnerModel, field, formModel) => {\n const code = field.code;\n if (field.watchType === 'scoped') {\n if (field.valueType === 'single') {\n let value = innerModel?.[field.fieldName];\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = innerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item] !== undefined) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'global') {\n if (field.valueType === 'single') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item]) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'code') {\n try {\n const value = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: field,\n formModel: formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, field.name],\n },\n props.workerHostFunctions || {},\n );\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n errorMsg.value = null;\n } catch (e) {\n console.error(e);\n emit('update:value', '');\n errorMsg.value = e.message;\n }\n }\n }, 200);\n watch(\n () => [props.innerModel, props.globalInnerModel, props.field, props.formModel, props.context],\n ([innerModel, globalInnerModel, field, formModel]) => {\n syncValue(innerModel, globalInnerModel, field, formModel);\n },\n {\n immediate: true,\n deep: true,\n },\n );\n return {\n errorMsg,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.error-msg {\n color: #ff4d4f;\n}\n</style>\n","<template>\n <debug-code\n :value-code=\"field\"\n :show-debug-code=\"field.watchType === 'code'\"\n >\n <a-input\n :value=\"value\"\n readonly\n size=\"small\"\n style=\"background-color: #f5f5f5\"\n ></a-input>\n </debug-code>\n <span\n v-if=\"errorMsg\"\n class=\"error-msg\"\n >\n {{ errorMsg }}\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { debounce } from 'lodash';\n\nexport default defineComponent({\n name: 'DynamicValueField',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: String,\n default: () => undefined,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n formModel: {\n type: Object,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const errorMsg = ref(null);\n const syncValue = debounce(async (innerModel, globalInnerModel, field, formModel) => {\n const code = field.code;\n if (field.watchType === 'scoped') {\n if (field.valueType === 'single') {\n let value = innerModel?.[field.fieldName];\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = innerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item] !== undefined) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'global') {\n if (field.valueType === 'single') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item]) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'code') {\n try {\n const value = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: field,\n formModel: formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, field.name],\n },\n props.workerHostFunctions || {},\n );\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n errorMsg.value = null;\n } catch (e) {\n console.error(e);\n emit('update:value', '');\n errorMsg.value = e.message;\n }\n }\n }, 200);\n watch(\n () => [props.innerModel, props.globalInnerModel, props.field, props.formModel, props.context],\n ([innerModel, globalInnerModel, field, formModel]) => {\n syncValue(innerModel, globalInnerModel, field, formModel);\n },\n {\n immediate: true,\n deep: true,\n },\n );\n return {\n errorMsg,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.error-msg {\n color: #ff4d4f;\n}\n</style>\n","<template>\n <debug-code\n :action_code_id=\"field.action_code_id\"\n v-model:code=\"field.code\"\n >\n <a-button\n :danger=\"field.danger\"\n :type=\"field.btn_type\"\n :disabled=\"field.disabled\"\n size=\"small\"\n @click=\"handlClick\"\n >\n {{ field.label }}\n </a-button>\n </debug-code>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'FormButton',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: [],\n setup(props, { emit }) {\n const handlClick = async () => {\n if (props.field.code) {\n let res;\n try {\n res = await executeScriptInWorker(\n props.field.code,\n {\n context: props.context,\n formModel: props.formModel,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (res) {\n Object.assign(props.formModel, res);\n }\n }\n };\n return {\n handlClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped></style>\n","<template>\n <debug-code\n :action_code_id=\"field.action_code_id\"\n v-model:code=\"field.code\"\n >\n <a-button\n :danger=\"field.danger\"\n :type=\"field.btn_type\"\n :disabled=\"field.disabled\"\n size=\"small\"\n @click=\"handlClick\"\n >\n {{ field.label }}\n </a-button>\n </debug-code>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'FormButton',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: [],\n setup(props, { emit }) {\n const handlClick = async () => {\n if (props.field.code) {\n let res;\n try {\n res = await executeScriptInWorker(\n props.field.code,\n {\n context: props.context,\n formModel: props.formModel,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (res) {\n Object.assign(props.formModel, res);\n }\n }\n };\n return {\n handlClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped></style>\n","<template>\n <a-input-number\n :value=\"innerValue\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision == null || field.precision === '' ? undefined : field.precision\"\n :step=\"field.step\"\n size=\"small\"\n @update:value=\"update\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'InputNumberPro',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: Number,\n required: false,\n default: () => null,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const update = value => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n value = `${value}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n value = `${props.field.addonBefore}${value}`;\n }\n emit('update:value', value);\n };\n function replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n }\n function replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n }\n const innerValue = computed(() => {\n let value = props.value as any;\n if (typeof value === 'string') {\n if (props.field.addonAfter) {\n value = replaceEnd(value, props.field.addonAfter, '');\n }\n if (props.field.addonBefore) {\n value = replaceStart(value, props.field.addonBefore, '');\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n }\n }\n return value;\n });\n return { update, innerValue };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.head_btn {\n display: flex;\n gap: 4px;\n justify-content: end;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n</style>\n","<template>\n <a-input-number\n :value=\"innerValue\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision == null || field.precision === '' ? undefined : field.precision\"\n :step=\"field.step\"\n size=\"small\"\n @update:value=\"update\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'InputNumberPro',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: Number,\n required: false,\n default: () => null,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const update = value => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n value = `${value}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n value = `${props.field.addonBefore}${value}`;\n }\n emit('update:value', value);\n };\n function replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n }\n function replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n }\n const innerValue = computed(() => {\n let value = props.value as any;\n if (typeof value === 'string') {\n if (props.field.addonAfter) {\n value = replaceEnd(value, props.field.addonAfter, '');\n }\n if (props.field.addonBefore) {\n value = replaceStart(value, props.field.addonBefore, '');\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n }\n }\n return value;\n });\n return { update, innerValue };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.head_btn {\n display: flex;\n gap: 4px;\n justify-content: end;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n</style>\n","<template>\n <a-input\n v-model:value=\"innerValue\"\n :allow-clear=\"field.allowClear == undefined ? true : field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :readonly=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请输入') + field.label\"\n :type=\"field.inputType ? field.inputType : 'text'\"\n size=\"small\"\n @change=\"update($event.target.value)\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.suffix || field?.suffixIcon\"\n #suffix\n >\n <span v-if=\"field?.suffix\">{{ field.suffix }}</span>\n <component\n v-if=\"field?.suffixIcon\"\n :is=\"field?.suffixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input>\n</template>\n<script setup lang=\"ts\" name=\"InputPro\">\nimport { debounce } from 'lodash';\nimport { ref, watch } from 'vue';\n\nconst value = defineModel('value');\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n});\nconst innerValue = ref('');\nwatch(\n () => value.value,\n newValue => {\n let tmp = newValue;\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n tmp = replaceEnd(tmp, props.field.addonAfter, '');\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n tmp = replaceStart(tmp, props.field.addonBefore, '');\n }\n innerValue.value = tmp;\n },\n { immediate: true },\n);\n\nconst update = debounce(inValue => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n inValue = `${inValue}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n inValue = `${props.field.addonBefore}${inValue}`;\n }\n value.value = inValue;\n}, 300);\nfunction replaceStart(str, target, replacement) {\n if (str?.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction replaceEnd(str, target, replacement) {\n if (str?.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\n</script>\n<style scoped lang=\"less\">\n:deep(.ant-input[readonly]) {\n background-color: #f5f5f5;\n}\n.ant-input-affix-wrapper-readonly {\n background-color: #f5f5f5;\n}\n:deep(.ant-input-affix-wrapper-readonly) {\n background-color: #f5f5f5;\n}\n</style>\n","<template>\n <a-input\n v-model:value=\"innerValue\"\n :allow-clear=\"field.allowClear == undefined ? true : field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :readonly=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请输入') + field.label\"\n :type=\"field.inputType ? field.inputType : 'text'\"\n size=\"small\"\n @change=\"update($event.target.value)\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.suffix || field?.suffixIcon\"\n #suffix\n >\n <span v-if=\"field?.suffix\">{{ field.suffix }}</span>\n <component\n v-if=\"field?.suffixIcon\"\n :is=\"field?.suffixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input>\n</template>\n<script setup lang=\"ts\" name=\"InputPro\">\nimport { debounce } from 'lodash';\nimport { ref, watch } from 'vue';\n\nconst value = defineModel('value');\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n});\nconst innerValue = ref('');\nwatch(\n () => value.value,\n newValue => {\n let tmp = newValue;\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n tmp = replaceEnd(tmp, props.field.addonAfter, '');\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n tmp = replaceStart(tmp, props.field.addonBefore, '');\n }\n innerValue.value = tmp;\n },\n { immediate: true },\n);\n\nconst update = debounce(inValue => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n inValue = `${inValue}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n inValue = `${props.field.addonBefore}${inValue}`;\n }\n value.value = inValue;\n}, 300);\nfunction replaceStart(str, target, replacement) {\n if (str?.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction replaceEnd(str, target, replacement) {\n if (str?.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\n</script>\n<style scoped lang=\"less\">\n:deep(.ant-input[readonly]) {\n background-color: #f5f5f5;\n}\n.ant-input-affix-wrapper-readonly {\n background-color: #f5f5f5;\n}\n:deep(.ant-input-affix-wrapper-readonly) {\n background-color: #f5f5f5;\n}\n</style>\n","<template>\n <a-form-item\n v-if=\"\n field.type !== 'divider' &&\n field.type !== 'button' &&\n (field?.is_search_show !== false || field_render_show)\n \"\n :extra=\"field.extra\"\n :name=\"field.name\"\n v-bind=\"validateInfos ? validateInfos[field.name] : null\"\n >\n <template\n #label\n v-if=\"is_show_label\"\n >\n {{\n is_show_label ? (field.label_i18n == undefined ? field.label : t(field.label_i18n)) : null\n }}\n <a-switch\n v-if=\"is_show_edit\"\n v-model:checked=\"self_is_edit\"\n style=\"margin: 0 5px\"\n @change=\"handleToggleEdit\"\n checked-children=\"表单\"\n un-checked-children=\"列表\"\n />\n <a-button\n v-if=\"is_show_edit && self_is_edit\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleAdd\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n 添加分组\n </a-button>\n </template>\n <slot />\n <div\n v-if=\"field.type === 'kong'\"\n style=\"height: 62px; width: 100%\"\n ></div>\n <!-- 展示内容-->\n <div v-if=\"field.type === 'tag'\">\n <a-tag\n :color=\"field.color ? field.color(field, model) : 'green'\"\n :style=\"field.style\"\n v-if=\"(field.content && field.content(field, model)) || model\"\n @click=\"field.cb ? field.cb(field, model) : ''\"\n >\n <span v-if=\"field.content\">\n {{ field.content(field, model) }}\n </span>\n <span v-else>{{ model }}</span>\n </a-tag>\n </div>\n <!-- 表单占位组件-->\n <!-- 默认 【表单空位 高62px; 名称空位 高30px;】 如遇个别特殊表单,根据实际情况自行调节 高度-->\n <!-- height 属性必填-->\n <div\n v-if=\"field.type === 'kong_title'\"\n :style=\"'height: ' + field.height + 'px'\"\n ></div>\n <div\n v-if=\"field.type === 'title'\"\n style=\"height: 30px; position: relative\"\n >\n <span\n style=\"\n position: absolute;\n bottom: 0;\n padding: 0;\n margin: 0;\n font-weight: bolder;\n font-size: 17px;\n \"\n >\n {{ field.name }}\n </span>\n </div>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n allow-half\n />\n <InputPro\n v-if=\"field.type === 'input'\"\n :field=\"field\"\n v-model:value=\"model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputPro>\n <a-input-number\n v-if=\"field.type === 'money'\"\n size=\"small\"\n v-model:value=\"model\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :min=\"field.min\"\n :max=\"field.max\"\n :formatter=\"value => `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :placeholder=\"\n field.placeholder_i18n == undefined ? field.placeholder : t(field.placeholder_i18n)\n \"\n style=\"width: 100%\"\n />\n <InputNumberPro\n v-if=\"field.type === 'number'\"\n v-model:value=\"model\"\n :field=\"field\"\n style=\"width: 100%\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputNumberPro>\n\n <a-input\n v-if=\"field.type === 'volume'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"L\"\n size=\"small\"\n type=\"number\"\n />\n <a-input\n v-if=\"field.type === 'weight'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"Kg\"\n size=\"small\"\n type=\"number\"\n />\n <attribute-table\n v-if=\"field.type === 'attributetable'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n size=\"small\"\n />\n <attribute-nom-table\n v-if=\"field.type === 'attributenomtable'\"\n size=\"small\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n\n <a-textarea\n v-if=\"field.type === 'textarea'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autoSize=\"{\n minRows: field.minRows ? field.minRows : 5,\n maxRows: field.maxRows ? field.maxRows : null,\n }\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-str\n v-if=\"field.type === 'jsonstr'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :disabled=\"field.disabled\"\n :rows=\"field.rows\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-obj\n v-if=\"field.type === 'jsonobj'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :mainMenuBar=\"field.mainMenuBar\"\n :mode=\"field.mode\"\n :fullWidthButton=\"field.fullWidthButton\"\n :darkTheme=\"field.darkTheme\"\n />\n <rich-text-editor\n v-if=\"field.type === 'richtexteditor'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <a-input-password\n v-if=\"field.type === 'password'\"\n v-model:value=\"model\"\n v-model:visible=\"field.visible\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :visibilityToggle=\"field.visibilityToggle\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <template v-if=\"field.type === 'select'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"width: 100%\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n >\n <a-select-option\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n </template>\n <template v-if=\"field.type === 'groupselect'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n </template>\n\n <a-cascader\n v-if=\"field.type === 'cascader'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :multiple=\"field.multiple\"\n :show-search=\"field.show_search\"\n :changeOnSelect=\"field.changeOnSelect ? field.changeOnSelect : false\"\n :options=\"field.getOptionsData ? field.getOptionsData(options, model) : options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n />\n <!-- <template #displayRender=\"{ labels, selectedOptions }\">-->\n <!-- <span-->\n <!-- v-for=\"(label, index) in labels\"-->\n <!-- :key=\"selectedOptions[index].value\"-->\n <!-- >-->\n <!-- <span v-if=\"index === labels.length - 1\">-->\n <!-- {{ label }}-->\n <!-- </span>-->\n <!-- <span v-else>{{ label }} /</span>-->\n <!-- </span>-->\n <!-- </template>-->\n <!-- </a-cascader>-->\n <remote-cascader\n v-if=\"field.type === 'remotecascader'\"\n v-model:value=\"model\"\n v-model:label=\"labelModel\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-cascader-pro\n v-if=\"field.type === 'remotecascaderpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :show_search=\"field.show_search\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n\n <month-picker\n v-if=\"field.type === 'monthpicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n <a-date-picker\n v-if=\"field.type === 'datepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :picker=\"field.picker\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <a-range-picker\n v-if=\"field.type === 'rangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n :picker=\"field.picker ? field.picker : 'date'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <month-range-picker\n v-if=\"field.type === 'monthrangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n\n <a-time-picker\n v-if=\"field.type === 'timepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-time-range-picker\n v-if=\"field.type === 'timerangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-radio>\n </a-radio-group>\n\n <a-checkbox-group\n v-if=\"field.type === 'checkbox'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-checkbox\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-checkbox>\n </a-checkbox-group>\n\n <a-tree-select\n v-if=\"field.type === 'treeselect'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :multiple=\"field.multiple\"\n :tree-checkable=\"field.treeCheckable\"\n :tree-data=\"options\"\n :tree-label-prop=\"field.labelKey\"\n :tree-node-filter-prop=\"field.valueKey\"\n size=\"small\"\n />\n <remote-filter-select\n v-if=\"field.type === 'remotefilterselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select\n v-if=\"field.type === 'remoteselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select-pro\n v-if=\"field.type === 'remoteselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-complete\n v-if=\"field.type === 'remotecomplete'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :maxlength=\"field.maxlength\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-tree-select\n v-if=\"field.type === 'remotetreeselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-tree-select-pro\n v-if=\"field.type === 'remotetreeselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :search_config=\"field.search_config\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-modal\n v-if=\"field.type === 'remotemodal'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <remote-table\n v-if=\"field.type === 'remotetable'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <remote-table-pro\n v-if=\"field.type === 'remotetablepro' && !self_is_edit\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :context=\"context\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <FormTemplate\n v-if=\"field.type === 'formtemplate'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"modalType\"\n :modalTypeList=\"modalTypeList\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\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 ></FormTemplate>\n <DynamicValueField\n v-if=\"field.type === 'dynamicvaluefield'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></DynamicValueField>\n\n <remote-text\n v-if=\"field.type === 'remotetext'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <upload\n v-if=\"field.type === 'upload'\"\n v-model:value=\"model\"\n :access_type=\"field.access_type\"\n :group=\"field.group\"\n :listType=\"field.listType\"\n :maxCount=\"field.maxCount\"\n :acceptList=\"field.acceptList\"\n ></upload>\n <code-editor\n v-if=\"field.type === 'codeeditor'\"\n v-model:editorValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n :lineWrapping=\"field.lineWrapping\"\n />\n <TinymceEditor\n v-if=\"field.type === 'tinymceeditor'\"\n v-model:modelValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n />\n <icon-select\n v-if=\"field.type === 'iconselect'\"\n v-model:value=\"model\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n ></icon-select>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :count=\"field.count ? field.count : 5\"\n :allow-half=\"field.allowHalf\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio-color'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n <div\n :style=\"{\n width: '20px',\n height: '20px',\n backgroundColor: option[field.valueKey ? field.valueKey : 'value'],\n }\"\n ></div>\n </a-radio>\n </a-radio-group>\n <component\n v-if=\"field.type?.startsWith('CustomField')\"\n :is=\"field.type\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n </a-form-item>\n\n <a-divider\n v-if=\"field.type === 'divider'\"\n :orientation=\"field.orientation\"\n >\n {{ field.label }}\n </a-divider>\n <FormButton\n v-if=\"field.type === 'button'\"\n v-model:value=\"model\"\n :formModel=\"formModel\"\n :field=\"field\"\n :modalType=\"field.modalType\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></FormButton>\n</template>\n<script lang=\"ts\">\nimport RemoteSelect from 'liyu-pc-base/components/FormRender/RemoteSelect/RemoteSelect.vue';\nimport RemoteCascader from 'liyu-pc-base/components/FormRender/RemoteCascader/RemoteCascader.vue';\nimport RemoteModal from 'liyu-pc-base/components/FormRender/RemoteModal/RemoteModal.vue';\nimport RemoteTreeSelect from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue';\nimport RemoteTable from 'liyu-pc-base/components/FormRender/RemoteTable/RemoteTable.vue';\nimport { defineComponent, watch, onMounted, ref, computed, PropType } from 'vue';\nimport RemoteFilterSelect from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/RemoteFilterSelect.vue';\nimport AttributeNomTable from 'liyu-pc-base/components/FormRender/AttributeNomTable/index.vue';\nimport AttributeTable from 'liyu-pc-base/components/FormRender/AttributeTable/index.vue';\nimport JsonStr from 'liyu-pc-base/components/FormRender/JsonStr/index.vue';\nimport JsonObj from 'liyu-pc-base/components/FormRender/JsonObj/index.vue';\nimport RemoteText from 'liyu-pc-base/components/FormRender/RemoteText/RemoteText.vue';\nimport RemoteTablePro from 'liyu-pc-base/components/FormRender/RemoteTablePro/RemoteTablePro.vue';\nimport FormTemplate from './FormTemplate/FormTemplate.vue';\nimport DynamicValueField from 'liyu-pc-base/components/FormRender/DynamicValueField/DynamicValueField.vue';\nimport FormButton from './FormButton/FormButton.vue';\nimport { debounce, isArray } from 'lodash-es';\nimport moment from 'moment';\nimport { isEmpty, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport { PlusOutlined } from '@ant-design/icons-vue';\nimport RemoteSelectPro from 'liyu-pc-base/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue';\nimport RemoteComplete from 'liyu-pc-base/components/FormRender/RemoteComplete/RemoteComplete.vue';\nimport RemoteTreeSelectPro from 'liyu-pc-base/components/FormRender/RemoteTreeSelectPro/RemoteTreeSelectPro.vue';\nimport RemoteCascaderPro from 'liyu-pc-base/components/FormRender/RemoteCascaderPro/RemoteCascaderPro.vue';\nimport Upload from 'liyu-pc-base/components/FormRender/Upload/upload.vue';\nimport RichTextEditor from 'liyu-pc-base/components/FormRender/RichTextEditor/index.vue';\nimport { useI18n } from 'vue-i18n';\nimport IconSelect from 'liyu-pc-base/components/FormRender/iconSelect/index.vue';\nimport MonthPicker from 'liyu-pc-base/components/FormRender/MonthPicker/index.vue';\nimport MonthRangePicker from 'liyu-pc-base/components/FormRender/MonthRangePicker/index.vue';\nimport CodeEditor from 'liyu-pc-base/components/code/CodeEditor.vue';\nimport TinymceEditor from 'liyu-pc-base/components/tinymce/TinymceEditor.vue';\nimport InputNumberPro from './InputNumberPro/InputNumberPro.vue';\nimport InputPro from './InputPro/InputPro.vue';\n\nconst isValidDate = (dateString, format = 'YYYY-MM-DD') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidDateTime = (dateString, format = 'YYYY-MM-DD HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidTime = (dateString, format = 'HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nexport default defineComponent({\n name: 'FieldRender2',\n methods: { isArray },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n required: true,\n },\n label: {\n required: false,\n },\n options: {\n type: Array,\n default: () => [],\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n formModel: {\n type: Object,\n default: () => {},\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n field_render_show: {\n type: Boolean,\n default: true,\n },\n is_show_label: {\n type: Boolean,\n default: true,\n },\n isUseConditions: {\n type: Boolean,\n default: true,\n },\n is_show_field: {\n type: Boolean,\n default: true,\n },\n is_edit: {\n type: Boolean,\n default: true,\n },\n conditionsVisibleNum: {\n type: Number,\n default: 0,\n },\n is_form_design: {\n type: Boolean,\n default: false,\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 type: Object,\n default: null,\n },\n modalType: {\n type: String,\n required: false,\n default: () => '',\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\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: [\n 'add',\n 'update:value',\n 'update:label',\n 'update_model',\n 'update:is_show_field',\n 'update:is_edit',\n 'update_name2',\n ],\n setup(props, { emit }) {\n const newModel = ref({ ...props.formModel });\n const rangeDate = (v: any) => {\n if (typeof v == 'string' && v.indexOf(',') >= 0) {\n return v.split(',');\n }\n return v;\n };\n const convertValueByClassName = (value, class_name) => {\n //class_name 'int','float',str','bool','date','datetime','time'\n let new_value;\n if (class_name == 'int') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'str') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'number') {\n new_value.push(item.toString());\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'number') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'date') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDate(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDate(value) && typeof value === 'string') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'datetime') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDateTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDateTime(value) && typeof value === 'string') {\n new_value = moment(value, 'YYYY-MM-DD HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'time') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidTime(value) && typeof value === 'string') {\n new_value = moment(value, 'HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'float') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'bool') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Boolean(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Boolean(value);\n } else {\n new_value = value;\n }\n }\n return new_value;\n };\n const is_show_field = ref(props.is_show_field);\n const self_is_edit = ref(false);\n const is_show_edit = computed(() => {\n return props.is_form_design && props.field.type === 'remotetablepro';\n });\n const handleToggleEdit = () => {\n emit('update:is_edit', self_is_edit.value);\n };\n const handleAdd = () => {\n emit('add');\n };\n const check_visible_field_fun = debounce(() => {\n const old_is_show_field = is_show_field.value;\n if (props.field?.is_hide) {\n is_show_field.value = false;\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }\n const condition_result_list: any = [];\n for (const i in props.field?.conditions) {\n const group_list = props.field?.conditions[i];\n const group_results = [];\n for (const j in group_list) {\n const item = group_list[j];\n const value = props.formModel[item.watchKey];\n let new_value;\n if (item.class_name) {\n new_value = convertValueByClassName(item.value, item.class_name);\n } else {\n new_value = item.value;\n }\n let first, second;\n if (new_value instanceof Array) {\n [first, second] = new_value;\n }\n if (item.operator == 'lt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isBefore(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'lte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value <= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value > first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isAfter(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isAfter(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'between') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first && value <= second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n (moment(value).isAfter(moment(first)) || moment(value).isSame(moment(first))) &&\n (moment(value).isBefore(moment(second)) || moment(value).isSame(moment(second)))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notbetween') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first || value > second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isAfter(moment(second))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'in') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'eq') {\n if (value === first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'contains') {\n if (value.toString().indexOf(first) > -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'startswith') {\n if (value.toString().startsWith(first)) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'notin') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (!f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notcontains') {\n if (value.toString().indexOf(first) == -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == '_eq') {\n //todo\n } else if (item.operator == 'json_list_not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'json_list_is_blank_is_null') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_eq') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n }\n condition_result_list.push(group_results);\n }\n const con_list = [];\n condition_result_list.forEach(item => {\n const find_false_list = item.filter(x => x === false);\n if (find_false_list && find_false_list.length > 0) {\n con_list.push(false);\n } else {\n con_list.push(true);\n }\n });\n\n const find_true_list = con_list.filter(x => x === true);\n if (find_true_list && find_true_list.length > 0) {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n } else {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n }\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }, 300);\n const model = ref<any>('');\n const labelModel = ref(props.label);\n watch(\n () => model.value,\n newValue => {\n emit('update:value', newValue);\n if (props.field.name2) {\n let label: any;\n if (props.field.type === 'radio') {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n } else if (props.field.type === 'checkbox' && newValue && newValue.length >= 0) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else if (props.field.type === 'select') {\n if (isArray(newValue)) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n }\n }\n if (label !== undefined) {\n emit('update_name2', {\n key: props.field.name2,\n value: label,\n });\n }\n }\n },\n { deep: true },\n );\n watch(\n () => props.value,\n newValue => {\n let value = newValue;\n if (props.field.type === 'rangepicker' && value) {\n value = rangeDate(value);\n } else if (props.field.type === 'input' && value) {\n value = value.toString().replace(/(^\\s*)|(\\s*$)/g, '');\n }\n if (is_show_field.value) {\n //当该表单项显示时,才做向上的数据绑定,避免把undefined向上传递,影响rules字段的有效过滤\n model.value = value;\n }\n },\n { immediate: true },\n );\n watch(\n () => labelModel.value,\n newValue => {\n emit('update:label', newValue);\n if ('name2' in props.field) {\n emit('update_name2', { key: props.field.name2, value: newValue.toString() });\n }\n },\n { deep: true },\n );\n watch(\n () => props.label,\n newValue => {\n labelModel.value = newValue;\n },\n );\n watch(\n () => props.formModel,\n newValue => {\n newModel.value = { ...newValue };\n },\n { deep: true },\n );\n watch(\n () => newModel.value,\n (newValue, oldValue) => {\n if (props.field?.conditions) {\n props.field?.conditions.forEach(condition_list => {\n condition_list.forEach(item => {\n if (oldValue[item.watchKey] != newValue[item.watchKey]) {\n check_visible_field_fun();\n }\n });\n });\n }\n },\n { deep: true },\n );\n watch(\n () => [props.conditionsVisibleNum, props.isUseConditions],\n () => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions) {\n if (props.isUseConditions) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n },\n );\n onMounted(() => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions instanceof Array && props.field?.conditions.length > 0) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n if (!is_show_field.value) {\n // 表单项所见即所得,如果有隐藏的字段,那么model的key也要清除\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n } else {\n let newValue = newModel.value[props.field.name];\n if (newValue === undefined) {\n newValue = null;\n }\n emit('update_model', {\n add_key: props.field.name,\n value: newValue,\n });\n }\n if (is_show_edit.value) {\n emit('update:is_edit', self_is_edit.value);\n }\n });\n const { t } = useI18n();\n return {\n t,\n is_show_field,\n self_is_edit,\n handleToggleEdit,\n rangeDate,\n handleAdd,\n model,\n labelModel,\n is_show_edit,\n };\n },\n components: {\n IconSelect,\n RichTextEditor,\n Upload,\n RemoteCascaderPro,\n RemoteTreeSelectPro,\n RemoteSelectPro,\n RemoteComplete,\n AttributeTable,\n AttributeNomTable,\n RemoteFilterSelect,\n RemoteModal,\n RemoteSelect,\n RemoteCascader,\n RemoteTreeSelect,\n RemoteTable,\n JsonStr,\n JsonObj,\n RemoteText,\n RemoteTablePro,\n FormTemplate,\n DynamicValueField,\n FormButton,\n PlusOutlined,\n MonthPicker,\n MonthRangePicker,\n CodeEditor,\n TinymceEditor,\n InputNumberPro,\n InputPro,\n },\n});\n</script>\n\n<style scoped>\n.ant-calendar-picker {\n width: 100% !important;\n}\n</style>\n","<template>\n <a-form-item\n v-if=\"\n field.type !== 'divider' &&\n field.type !== 'button' &&\n (field?.is_search_show !== false || field_render_show)\n \"\n :extra=\"field.extra\"\n :name=\"field.name\"\n v-bind=\"validateInfos ? validateInfos[field.name] : null\"\n >\n <template\n #label\n v-if=\"is_show_label\"\n >\n {{\n is_show_label ? (field.label_i18n == undefined ? field.label : t(field.label_i18n)) : null\n }}\n <a-switch\n v-if=\"is_show_edit\"\n v-model:checked=\"self_is_edit\"\n style=\"margin: 0 5px\"\n @change=\"handleToggleEdit\"\n checked-children=\"表单\"\n un-checked-children=\"列表\"\n />\n <a-button\n v-if=\"is_show_edit && self_is_edit\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleAdd\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n 添加分组\n </a-button>\n </template>\n <slot />\n <div\n v-if=\"field.type === 'kong'\"\n style=\"height: 62px; width: 100%\"\n ></div>\n <!-- 展示内容-->\n <div v-if=\"field.type === 'tag'\">\n <a-tag\n :color=\"field.color ? field.color(field, model) : 'green'\"\n :style=\"field.style\"\n v-if=\"(field.content && field.content(field, model)) || model\"\n @click=\"field.cb ? field.cb(field, model) : ''\"\n >\n <span v-if=\"field.content\">\n {{ field.content(field, model) }}\n </span>\n <span v-else>{{ model }}</span>\n </a-tag>\n </div>\n <!-- 表单占位组件-->\n <!-- 默认 【表单空位 高62px; 名称空位 高30px;】 如遇个别特殊表单,根据实际情况自行调节 高度-->\n <!-- height 属性必填-->\n <div\n v-if=\"field.type === 'kong_title'\"\n :style=\"'height: ' + field.height + 'px'\"\n ></div>\n <div\n v-if=\"field.type === 'title'\"\n style=\"height: 30px; position: relative\"\n >\n <span\n style=\"\n position: absolute;\n bottom: 0;\n padding: 0;\n margin: 0;\n font-weight: bolder;\n font-size: 17px;\n \"\n >\n {{ field.name }}\n </span>\n </div>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n allow-half\n />\n <InputPro\n v-if=\"field.type === 'input'\"\n :field=\"field\"\n v-model:value=\"model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputPro>\n <a-input-number\n v-if=\"field.type === 'money'\"\n size=\"small\"\n v-model:value=\"model\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :min=\"field.min\"\n :max=\"field.max\"\n :formatter=\"value => `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :placeholder=\"\n field.placeholder_i18n == undefined ? field.placeholder : t(field.placeholder_i18n)\n \"\n style=\"width: 100%\"\n />\n <InputNumberPro\n v-if=\"field.type === 'number'\"\n v-model:value=\"model\"\n :field=\"field\"\n style=\"width: 100%\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputNumberPro>\n\n <a-input\n v-if=\"field.type === 'volume'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"L\"\n size=\"small\"\n type=\"number\"\n />\n <a-input\n v-if=\"field.type === 'weight'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"Kg\"\n size=\"small\"\n type=\"number\"\n />\n <attribute-table\n v-if=\"field.type === 'attributetable'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n size=\"small\"\n />\n <attribute-nom-table\n v-if=\"field.type === 'attributenomtable'\"\n size=\"small\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n\n <a-textarea\n v-if=\"field.type === 'textarea'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autoSize=\"{\n minRows: field.minRows ? field.minRows : 5,\n maxRows: field.maxRows ? field.maxRows : null,\n }\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-str\n v-if=\"field.type === 'jsonstr'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :disabled=\"field.disabled\"\n :rows=\"field.rows\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-obj\n v-if=\"field.type === 'jsonobj'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :mainMenuBar=\"field.mainMenuBar\"\n :mode=\"field.mode\"\n :fullWidthButton=\"field.fullWidthButton\"\n :darkTheme=\"field.darkTheme\"\n />\n <rich-text-editor\n v-if=\"field.type === 'richtexteditor'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <a-input-password\n v-if=\"field.type === 'password'\"\n v-model:value=\"model\"\n v-model:visible=\"field.visible\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :visibilityToggle=\"field.visibilityToggle\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <template v-if=\"field.type === 'select'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"width: 100%\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n >\n <a-select-option\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n </template>\n <template v-if=\"field.type === 'groupselect'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n </template>\n\n <a-cascader\n v-if=\"field.type === 'cascader'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :multiple=\"field.multiple\"\n :show-search=\"field.show_search\"\n :changeOnSelect=\"field.changeOnSelect ? field.changeOnSelect : false\"\n :options=\"field.getOptionsData ? field.getOptionsData(options, model) : options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n />\n <!-- <template #displayRender=\"{ labels, selectedOptions }\">-->\n <!-- <span-->\n <!-- v-for=\"(label, index) in labels\"-->\n <!-- :key=\"selectedOptions[index].value\"-->\n <!-- >-->\n <!-- <span v-if=\"index === labels.length - 1\">-->\n <!-- {{ label }}-->\n <!-- </span>-->\n <!-- <span v-else>{{ label }} /</span>-->\n <!-- </span>-->\n <!-- </template>-->\n <!-- </a-cascader>-->\n <remote-cascader\n v-if=\"field.type === 'remotecascader'\"\n v-model:value=\"model\"\n v-model:label=\"labelModel\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-cascader-pro\n v-if=\"field.type === 'remotecascaderpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :show_search=\"field.show_search\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n\n <month-picker\n v-if=\"field.type === 'monthpicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n <a-date-picker\n v-if=\"field.type === 'datepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :picker=\"field.picker\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <a-range-picker\n v-if=\"field.type === 'rangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n :picker=\"field.picker ? field.picker : 'date'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <month-range-picker\n v-if=\"field.type === 'monthrangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n\n <a-time-picker\n v-if=\"field.type === 'timepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-time-range-picker\n v-if=\"field.type === 'timerangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-radio>\n </a-radio-group>\n\n <a-checkbox-group\n v-if=\"field.type === 'checkbox'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-checkbox\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-checkbox>\n </a-checkbox-group>\n\n <a-tree-select\n v-if=\"field.type === 'treeselect'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :multiple=\"field.multiple\"\n :tree-checkable=\"field.treeCheckable\"\n :tree-data=\"options\"\n :tree-label-prop=\"field.labelKey\"\n :tree-node-filter-prop=\"field.valueKey\"\n size=\"small\"\n />\n <remote-filter-select\n v-if=\"field.type === 'remotefilterselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select\n v-if=\"field.type === 'remoteselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select-pro\n v-if=\"field.type === 'remoteselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-complete\n v-if=\"field.type === 'remotecomplete'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :maxlength=\"field.maxlength\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-tree-select\n v-if=\"field.type === 'remotetreeselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-tree-select-pro\n v-if=\"field.type === 'remotetreeselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :search_config=\"field.search_config\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-modal\n v-if=\"field.type === 'remotemodal'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <remote-table\n v-if=\"field.type === 'remotetable'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <remote-table-pro\n v-if=\"field.type === 'remotetablepro' && !self_is_edit\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :context=\"context\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <FormTemplate\n v-if=\"field.type === 'formtemplate'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"modalType\"\n :modalTypeList=\"modalTypeList\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\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 ></FormTemplate>\n <DynamicValueField\n v-if=\"field.type === 'dynamicvaluefield'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></DynamicValueField>\n\n <remote-text\n v-if=\"field.type === 'remotetext'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <upload\n v-if=\"field.type === 'upload'\"\n v-model:value=\"model\"\n :access_type=\"field.access_type\"\n :group=\"field.group\"\n :listType=\"field.listType\"\n :maxCount=\"field.maxCount\"\n :acceptList=\"field.acceptList\"\n ></upload>\n <code-editor\n v-if=\"field.type === 'codeeditor'\"\n v-model:editorValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n :lineWrapping=\"field.lineWrapping\"\n />\n <TinymceEditor\n v-if=\"field.type === 'tinymceeditor'\"\n v-model:modelValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n />\n <icon-select\n v-if=\"field.type === 'iconselect'\"\n v-model:value=\"model\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n ></icon-select>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :count=\"field.count ? field.count : 5\"\n :allow-half=\"field.allowHalf\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio-color'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n <div\n :style=\"{\n width: '20px',\n height: '20px',\n backgroundColor: option[field.valueKey ? field.valueKey : 'value'],\n }\"\n ></div>\n </a-radio>\n </a-radio-group>\n <component\n v-if=\"field.type?.startsWith('CustomField')\"\n :is=\"field.type\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n </a-form-item>\n\n <a-divider\n v-if=\"field.type === 'divider'\"\n :orientation=\"field.orientation\"\n >\n {{ field.label }}\n </a-divider>\n <FormButton\n v-if=\"field.type === 'button'\"\n v-model:value=\"model\"\n :formModel=\"formModel\"\n :field=\"field\"\n :modalType=\"field.modalType\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></FormButton>\n</template>\n<script lang=\"ts\">\nimport RemoteSelect from 'liyu-pc-base/components/FormRender/RemoteSelect/RemoteSelect.vue';\nimport RemoteCascader from 'liyu-pc-base/components/FormRender/RemoteCascader/RemoteCascader.vue';\nimport RemoteModal from 'liyu-pc-base/components/FormRender/RemoteModal/RemoteModal.vue';\nimport RemoteTreeSelect from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue';\nimport RemoteTable from 'liyu-pc-base/components/FormRender/RemoteTable/RemoteTable.vue';\nimport { defineComponent, watch, onMounted, ref, computed, PropType } from 'vue';\nimport RemoteFilterSelect from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/RemoteFilterSelect.vue';\nimport AttributeNomTable from 'liyu-pc-base/components/FormRender/AttributeNomTable/index.vue';\nimport AttributeTable from 'liyu-pc-base/components/FormRender/AttributeTable/index.vue';\nimport JsonStr from 'liyu-pc-base/components/FormRender/JsonStr/index.vue';\nimport JsonObj from 'liyu-pc-base/components/FormRender/JsonObj/index.vue';\nimport RemoteText from 'liyu-pc-base/components/FormRender/RemoteText/RemoteText.vue';\nimport RemoteTablePro from 'liyu-pc-base/components/FormRender/RemoteTablePro/RemoteTablePro.vue';\nimport FormTemplate from './FormTemplate/FormTemplate.vue';\nimport DynamicValueField from 'liyu-pc-base/components/FormRender/DynamicValueField/DynamicValueField.vue';\nimport FormButton from './FormButton/FormButton.vue';\nimport { debounce, isArray } from 'lodash-es';\nimport moment from 'moment';\nimport { isEmpty, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport { PlusOutlined } from '@ant-design/icons-vue';\nimport RemoteSelectPro from 'liyu-pc-base/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue';\nimport RemoteComplete from 'liyu-pc-base/components/FormRender/RemoteComplete/RemoteComplete.vue';\nimport RemoteTreeSelectPro from 'liyu-pc-base/components/FormRender/RemoteTreeSelectPro/RemoteTreeSelectPro.vue';\nimport RemoteCascaderPro from 'liyu-pc-base/components/FormRender/RemoteCascaderPro/RemoteCascaderPro.vue';\nimport Upload from 'liyu-pc-base/components/FormRender/Upload/upload.vue';\nimport RichTextEditor from 'liyu-pc-base/components/FormRender/RichTextEditor/index.vue';\nimport { useI18n } from 'vue-i18n';\nimport IconSelect from 'liyu-pc-base/components/FormRender/iconSelect/index.vue';\nimport MonthPicker from 'liyu-pc-base/components/FormRender/MonthPicker/index.vue';\nimport MonthRangePicker from 'liyu-pc-base/components/FormRender/MonthRangePicker/index.vue';\nimport CodeEditor from 'liyu-pc-base/components/code/CodeEditor.vue';\nimport TinymceEditor from 'liyu-pc-base/components/tinymce/TinymceEditor.vue';\nimport InputNumberPro from './InputNumberPro/InputNumberPro.vue';\nimport InputPro from './InputPro/InputPro.vue';\n\nconst isValidDate = (dateString, format = 'YYYY-MM-DD') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidDateTime = (dateString, format = 'YYYY-MM-DD HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidTime = (dateString, format = 'HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nexport default defineComponent({\n name: 'FieldRender2',\n methods: { isArray },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n required: true,\n },\n label: {\n required: false,\n },\n options: {\n type: Array,\n default: () => [],\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n formModel: {\n type: Object,\n default: () => {},\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n field_render_show: {\n type: Boolean,\n default: true,\n },\n is_show_label: {\n type: Boolean,\n default: true,\n },\n isUseConditions: {\n type: Boolean,\n default: true,\n },\n is_show_field: {\n type: Boolean,\n default: true,\n },\n is_edit: {\n type: Boolean,\n default: true,\n },\n conditionsVisibleNum: {\n type: Number,\n default: 0,\n },\n is_form_design: {\n type: Boolean,\n default: false,\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 type: Object,\n default: null,\n },\n modalType: {\n type: String,\n required: false,\n default: () => '',\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\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: [\n 'add',\n 'update:value',\n 'update:label',\n 'update_model',\n 'update:is_show_field',\n 'update:is_edit',\n 'update_name2',\n ],\n setup(props, { emit }) {\n const newModel = ref({ ...props.formModel });\n const rangeDate = (v: any) => {\n if (typeof v == 'string' && v.indexOf(',') >= 0) {\n return v.split(',');\n }\n return v;\n };\n const convertValueByClassName = (value, class_name) => {\n //class_name 'int','float',str','bool','date','datetime','time'\n let new_value;\n if (class_name == 'int') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'str') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'number') {\n new_value.push(item.toString());\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'number') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'date') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDate(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDate(value) && typeof value === 'string') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'datetime') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDateTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDateTime(value) && typeof value === 'string') {\n new_value = moment(value, 'YYYY-MM-DD HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'time') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidTime(value) && typeof value === 'string') {\n new_value = moment(value, 'HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'float') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'bool') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Boolean(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Boolean(value);\n } else {\n new_value = value;\n }\n }\n return new_value;\n };\n const is_show_field = ref(props.is_show_field);\n const self_is_edit = ref(false);\n const is_show_edit = computed(() => {\n return props.is_form_design && props.field.type === 'remotetablepro';\n });\n const handleToggleEdit = () => {\n emit('update:is_edit', self_is_edit.value);\n };\n const handleAdd = () => {\n emit('add');\n };\n const check_visible_field_fun = debounce(() => {\n const old_is_show_field = is_show_field.value;\n if (props.field?.is_hide) {\n is_show_field.value = false;\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }\n const condition_result_list: any = [];\n for (const i in props.field?.conditions) {\n const group_list = props.field?.conditions[i];\n const group_results = [];\n for (const j in group_list) {\n const item = group_list[j];\n const value = props.formModel[item.watchKey];\n let new_value;\n if (item.class_name) {\n new_value = convertValueByClassName(item.value, item.class_name);\n } else {\n new_value = item.value;\n }\n let first, second;\n if (new_value instanceof Array) {\n [first, second] = new_value;\n }\n if (item.operator == 'lt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isBefore(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'lte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value <= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value > first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isAfter(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isAfter(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'between') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first && value <= second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n (moment(value).isAfter(moment(first)) || moment(value).isSame(moment(first))) &&\n (moment(value).isBefore(moment(second)) || moment(value).isSame(moment(second)))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notbetween') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first || value > second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isAfter(moment(second))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'in') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'eq') {\n if (value === first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'contains') {\n if (value.toString().indexOf(first) > -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'startswith') {\n if (value.toString().startsWith(first)) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'notin') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (!f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notcontains') {\n if (value.toString().indexOf(first) == -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == '_eq') {\n //todo\n } else if (item.operator == 'json_list_not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'json_list_is_blank_is_null') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_eq') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n }\n condition_result_list.push(group_results);\n }\n const con_list = [];\n condition_result_list.forEach(item => {\n const find_false_list = item.filter(x => x === false);\n if (find_false_list && find_false_list.length > 0) {\n con_list.push(false);\n } else {\n con_list.push(true);\n }\n });\n\n const find_true_list = con_list.filter(x => x === true);\n if (find_true_list && find_true_list.length > 0) {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n } else {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n }\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }, 300);\n const model = ref<any>('');\n const labelModel = ref(props.label);\n watch(\n () => model.value,\n newValue => {\n emit('update:value', newValue);\n if (props.field.name2) {\n let label: any;\n if (props.field.type === 'radio') {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n } else if (props.field.type === 'checkbox' && newValue && newValue.length >= 0) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else if (props.field.type === 'select') {\n if (isArray(newValue)) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n }\n }\n if (label !== undefined) {\n emit('update_name2', {\n key: props.field.name2,\n value: label,\n });\n }\n }\n },\n { deep: true },\n );\n watch(\n () => props.value,\n newValue => {\n let value = newValue;\n if (props.field.type === 'rangepicker' && value) {\n value = rangeDate(value);\n } else if (props.field.type === 'input' && value) {\n value = value.toString().replace(/(^\\s*)|(\\s*$)/g, '');\n }\n if (is_show_field.value) {\n //当该表单项显示时,才做向上的数据绑定,避免把undefined向上传递,影响rules字段的有效过滤\n model.value = value;\n }\n },\n { immediate: true },\n );\n watch(\n () => labelModel.value,\n newValue => {\n emit('update:label', newValue);\n if ('name2' in props.field) {\n emit('update_name2', { key: props.field.name2, value: newValue.toString() });\n }\n },\n { deep: true },\n );\n watch(\n () => props.label,\n newValue => {\n labelModel.value = newValue;\n },\n );\n watch(\n () => props.formModel,\n newValue => {\n newModel.value = { ...newValue };\n },\n { deep: true },\n );\n watch(\n () => newModel.value,\n (newValue, oldValue) => {\n if (props.field?.conditions) {\n props.field?.conditions.forEach(condition_list => {\n condition_list.forEach(item => {\n if (oldValue[item.watchKey] != newValue[item.watchKey]) {\n check_visible_field_fun();\n }\n });\n });\n }\n },\n { deep: true },\n );\n watch(\n () => [props.conditionsVisibleNum, props.isUseConditions],\n () => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions) {\n if (props.isUseConditions) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n },\n );\n onMounted(() => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions instanceof Array && props.field?.conditions.length > 0) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n if (!is_show_field.value) {\n // 表单项所见即所得,如果有隐藏的字段,那么model的key也要清除\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n } else {\n let newValue = newModel.value[props.field.name];\n if (newValue === undefined) {\n newValue = null;\n }\n emit('update_model', {\n add_key: props.field.name,\n value: newValue,\n });\n }\n if (is_show_edit.value) {\n emit('update:is_edit', self_is_edit.value);\n }\n });\n const { t } = useI18n();\n return {\n t,\n is_show_field,\n self_is_edit,\n handleToggleEdit,\n rangeDate,\n handleAdd,\n model,\n labelModel,\n is_show_edit,\n };\n },\n components: {\n IconSelect,\n RichTextEditor,\n Upload,\n RemoteCascaderPro,\n RemoteTreeSelectPro,\n RemoteSelectPro,\n RemoteComplete,\n AttributeTable,\n AttributeNomTable,\n RemoteFilterSelect,\n RemoteModal,\n RemoteSelect,\n RemoteCascader,\n RemoteTreeSelect,\n RemoteTable,\n JsonStr,\n JsonObj,\n RemoteText,\n RemoteTablePro,\n FormTemplate,\n DynamicValueField,\n FormButton,\n PlusOutlined,\n MonthPicker,\n MonthRangePicker,\n CodeEditor,\n TinymceEditor,\n InputNumberPro,\n InputPro,\n },\n});\n</script>\n\n<style scoped>\n.ant-calendar-picker {\n width: 100% !important;\n}\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FieldRender2-BlJ1ULbs.js","names":[],"sources":["../src/components/FormRender/FormTemplate/FormItem.vue","../src/components/FormRender/FormTemplate/FormItem.vue","../src/components/FormRender/FormTemplate/TableCell.vue","../src/components/FormRender/FormTemplate/TableCell.vue","../src/components/FormRender/FormTemplate/TableSummary.vue","../src/components/FormRender/FormTemplate/TableSummary.vue","../src/components/FormRender/FormTemplate/FormTemplateTable.vue","../src/components/FormRender/FormTemplate/FormTemplateTable.vue","../src/components/FormRender/FormTemplate/FormTemplate.vue","../src/components/FormRender/FormTemplate/FormTemplate.vue","../src/components/FormRender/DynamicValueField/DynamicValueField.vue","../src/components/FormRender/DynamicValueField/DynamicValueField.vue","../src/components/FormRender/FormButton/FormButton.vue","../src/components/FormRender/FormButton/FormButton.vue","../src/components/FormRender/InputNumberPro/InputNumberPro.vue","../src/components/FormRender/InputNumberPro/InputNumberPro.vue","../src/components/FormRender/InputPro/InputPro.vue","../src/components/FormRender/InputPro/InputPro.vue","../src/components/FormRender/FieldRender2.vue","../src/components/FormRender/FieldRender2.vue"],"sourcesContent":["\n<template>\n <div class=\"form-wrap\">\n <div class=\"form-content\">\n <component\n :is=\"FormRender3Async\"\n :form=\"field.form\"\n v-model:model=\"value\"\n :options=\"field.form?.options\"\n :validateInfos=\"validateInfos\"\n @update_model=\"onUpdateModel\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :context=\"context\"\n :modalType=\"modalType\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </div>\n <div\n v-if=\"field.max_count !== min_count\"\n class=\"form-action\"\n >\n <a-button\n @click=\"removeFormItem\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"listLength <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n watch,\n} from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n value: {\n type: Object,\n default: null,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n listLength: {\n type: Number,\n default: 0,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'remove'],\n setup(props, { emit }) {\n const rulesRef = reactive({ ...props.field.form.rules });\n const validateInfos = ref({});\n const FormRender3Async = defineAsyncComponent(\n () => import('liyu-pc-base/components/FormRender/FormRender3.vue'),\n );\n let validate;\n const genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n };\n // 记录需要忽略校验的字段\n const removeRulKeys = ref([]);\n const valite_id = genID();\n const syncValidate = ([_modelRef, _removeRulKeys]: any[]) => {\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in _modelRef && !_removeRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n const newRes: any = useForm(_modelRef, new_rules_obj);\n validate = newRes.validate;\n validateInfos.value = newRes.validateInfos;\n if (props.nestValidate) {\n props.nestValidate[valite_id] = validate;\n }\n };\n const onUpdateModel = async params => {\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeys.value[params.add_key];\n syncValidate([props.value, removeRulKeys.value]);\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeys.value[params.remove_key] = true;\n syncValidate([props.value, removeRulKeys.value]);\n }\n };\n watch(\n () => props.value,\n newValue => {\n syncValidate([newValue, removeRulKeys.value]);\n },\n { deep: true, immediate: true },\n );\n\n const removeFormItem = () => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n emit('remove');\n };\n onMounted(() => {});\n onUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n });\n return {\n FormRender3Async,\n validateInfos,\n onUpdateModel,\n removeFormItem,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","\n<template>\n <div class=\"form-wrap\">\n <div class=\"form-content\">\n <component\n :is=\"FormRender3Async\"\n :form=\"field.form\"\n v-model:model=\"value\"\n :options=\"field.form?.options\"\n :validateInfos=\"validateInfos\"\n @update_model=\"onUpdateModel\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :context=\"context\"\n :modalType=\"modalType\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </div>\n <div\n v-if=\"field.max_count !== min_count\"\n class=\"form-action\"\n >\n <a-button\n @click=\"removeFormItem\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"listLength <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n watch,\n} from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n value: {\n type: Object,\n default: null,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n listLength: {\n type: Number,\n default: 0,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value', 'remove'],\n setup(props, { emit }) {\n const rulesRef = reactive({ ...props.field.form.rules });\n const validateInfos = ref({});\n const FormRender3Async = defineAsyncComponent(\n () => import('liyu-pc-base/components/FormRender/FormRender3.vue'),\n );\n let validate;\n const genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n };\n // 记录需要忽略校验的字段\n const removeRulKeys = ref([]);\n const valite_id = genID();\n const syncValidate = ([_modelRef, _removeRulKeys]: any[]) => {\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in _modelRef && !_removeRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n const newRes: any = useForm(_modelRef, new_rules_obj);\n validate = newRes.validate;\n validateInfos.value = newRes.validateInfos;\n if (props.nestValidate) {\n props.nestValidate[valite_id] = validate;\n }\n };\n const onUpdateModel = async params => {\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeys.value[params.add_key];\n syncValidate([props.value, removeRulKeys.value]);\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeys.value[params.remove_key] = true;\n syncValidate([props.value, removeRulKeys.value]);\n }\n };\n watch(\n () => props.value,\n newValue => {\n syncValidate([newValue, removeRulKeys.value]);\n },\n { deep: true, immediate: true },\n );\n\n const removeFormItem = () => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n emit('remove');\n };\n onMounted(() => {});\n onUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n });\n return {\n FormRender3Async,\n validateInfos,\n onUpdateModel,\n removeFormItem,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","<template>\n <a-form\n :model=\"model\"\n layout=\"inline\"\n class=\"table-cell-form\"\n >\n <div\n v-show=\"is_show_field\"\n class=\"field-cell-item\"\n :class=\"{ editable: editable, 'item-required': has_reqrired }\"\n >\n <field-render-2\n :is_show_label=\"false\"\n v-model:value=\"model[field.name]\"\n v-model:label=\"model[field.name + '.label']\"\n v-model:is_show_field=\"is_show_field\"\n :field=\"field\"\n :formModel=\"model\"\n :key=\"field.name\"\n :validateInfos=\"validateInfos\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\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 :is_form_design=\"is_form_design\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n />\n </div>\n </a-form>\n</template>\n<script setup lang=\"ts\">\nimport { computed, PropType, ref } from 'vue';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\n\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n model: {\n type: Object,\n required: true,\n },\n validateInfos: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n default: () => {\n return {};\n },\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n has_reqrired: {\n type: Boolean,\n default: false,\n },\n});\nconst emit = defineEmits(['update_model', 'update_name2']);\nconst is_show_field = ref(true);\nconst onUpdateModel = params => {\n emit('update_model', params);\n};\nconst onUpdateName2 = params => {\n emit('update_name2', params);\n};\nconst editable = computed(() => {\n return is_show_field.value && !props.field.disabled && props.field.type !== 'dynamicvaluefield';\n});\n</script>\n<style lang=\"less\" scoped>\n.table-cell-form {\n display: block;\n}\n.field-cell-item {\n padding: 8px;\n box-sizing: border-box;\n height: 100%;\n\n :deep(.ant-input-clear-icon) {\n display: none;\n }\n &:has(:focus),\n &:hover {\n :deep(.ant-input-clear-icon) {\n display: block;\n }\n }\n}\n:deep(.ant-form-item) {\n margin: 0 !important;\n}\n:deep(.ant-input-affix-wrapper) {\n border: 0 !important;\n background-color: transparent !important;\n padding: 0 !important;\n outline: none !important;\n box-shadow: none !important;\n}\n:deep(.ant-input) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n:deep(.ant-select-selector) {\n border: 0 !important;\n box-shadow: none !important;\n padding: 0 !important;\n}\n:deep(.ant-select-selector) {\n background: none !important;\n}\n:deep(.ant-input-number) {\n background-color: transparent !important;\n outline: none !important;\n box-shadow: none !important;\n border: 0 !important;\n}\n:deep(.ant-input-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-affix-wrapper) {\n border: none !important;\n\n background: none !important;\n}\n:deep(.ant-input-number-input) {\n padding: 0 !important;\n}\n:deep(.ant-input-number-handler-wrap) {\n display: none !important;\n}\n:deep(.ant-form-item-control-input-content) {\n .ant-layout {\n background: none;\n }\n}\n.editable.item-required {\n :deep(.ant-form-item::before) {\n display: inline-block;\n position: absolute;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n }\n}\n:deep(.ant-picker) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n</style>\n","<template>\n <a-form\n :model=\"model\"\n layout=\"inline\"\n class=\"table-cell-form\"\n >\n <div\n v-show=\"is_show_field\"\n class=\"field-cell-item\"\n :class=\"{ editable: editable, 'item-required': has_reqrired }\"\n >\n <field-render-2\n :is_show_label=\"false\"\n v-model:value=\"model[field.name]\"\n v-model:label=\"model[field.name + '.label']\"\n v-model:is_show_field=\"is_show_field\"\n :field=\"field\"\n :formModel=\"model\"\n :key=\"field.name\"\n :validateInfos=\"validateInfos\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\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 :is_form_design=\"is_form_design\"\n @update_model=\"onUpdateModel\"\n @update_name2=\"onUpdateName2\"\n />\n </div>\n </a-form>\n</template>\n<script setup lang=\"ts\">\nimport { computed, PropType, ref } from 'vue';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\n\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n model: {\n type: Object,\n required: true,\n },\n validateInfos: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n default: () => {\n return {};\n },\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n has_reqrired: {\n type: Boolean,\n default: false,\n },\n});\nconst emit = defineEmits(['update_model', 'update_name2']);\nconst is_show_field = ref(true);\nconst onUpdateModel = params => {\n emit('update_model', params);\n};\nconst onUpdateName2 = params => {\n emit('update_name2', params);\n};\nconst editable = computed(() => {\n return is_show_field.value && !props.field.disabled && props.field.type !== 'dynamicvaluefield';\n});\n</script>\n<style lang=\"less\" scoped>\n.table-cell-form {\n display: block;\n}\n.field-cell-item {\n padding: 8px;\n box-sizing: border-box;\n height: 100%;\n\n :deep(.ant-input-clear-icon) {\n display: none;\n }\n &:has(:focus),\n &:hover {\n :deep(.ant-input-clear-icon) {\n display: block;\n }\n }\n}\n:deep(.ant-form-item) {\n margin: 0 !important;\n}\n:deep(.ant-input-affix-wrapper) {\n border: 0 !important;\n background-color: transparent !important;\n padding: 0 !important;\n outline: none !important;\n box-shadow: none !important;\n}\n:deep(.ant-input) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n:deep(.ant-select-selector) {\n border: 0 !important;\n box-shadow: none !important;\n padding: 0 !important;\n}\n:deep(.ant-select-selector) {\n background: none !important;\n}\n:deep(.ant-input-number) {\n background-color: transparent !important;\n outline: none !important;\n box-shadow: none !important;\n border: 0 !important;\n}\n:deep(.ant-input-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-group-addon) {\n border: none !important;\n background: none !important;\n}\n:deep(.ant-input-number-affix-wrapper) {\n border: none !important;\n\n background: none !important;\n}\n:deep(.ant-input-number-input) {\n padding: 0 !important;\n}\n:deep(.ant-input-number-handler-wrap) {\n display: none !important;\n}\n:deep(.ant-form-item-control-input-content) {\n .ant-layout {\n background: none;\n }\n}\n.editable.item-required {\n :deep(.ant-form-item::before) {\n display: inline-block;\n position: absolute;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n }\n}\n:deep(.ant-picker) {\n background-color: transparent !important;\n outline: none !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n</style>\n","<template>\n <span v-if=\"summaryParams?.column?.field?.addonBefore\">\n {{ summaryParams.column.field.addonBefore }}\n </span>\n {{ value }}\n <span v-if=\"summaryParams?.column?.field?.addonAfter\">\n {{ summaryParams.column.field.addonAfter }}\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps({\n summaryParams: {\n type: Object,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.summaryParams.pageData) {\n let itemValue = item[props.summaryParams.column.dataIndex];\n if (props.summaryParams.column.field.type === 'number') {\n itemValue = getValue(props.summaryParams.column.field, itemValue);\n } else {\n itemValue = parseFloat(itemValue);\n }\n if (isNaN(itemValue) || itemValue == null) {\n itemValue = 0;\n }\n totla = add(totla, itemValue);\n }\n if (props.summaryParams.column.field.type === 'number') {\n const precision = props.summaryParams.column.field.precision;\n if (precision) {\n totla = totla.toFixed(precision);\n }\n }\n return totla;\n});\nfunction replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\nfunction replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction add(a, b) {\n const precision = Math.max(\n (a.toString().split('.')[1] || '').length,\n (b.toString().split('.')[1] || '').length,\n );\n return parseFloat((a + b).toFixed(precision));\n}\nconst getValue = (field: any, value: any) => {\n if (typeof value === 'string') {\n if (field.addonAfter) {\n value = replaceEnd(value, field.addonAfter, '');\n }\n if (field.addonBefore) {\n value = replaceStart(value, field.addonBefore, '');\n }\n value = parseFloat(value);\n }\n return value;\n};\n</script>\n<style lang=\"less\" scoped></style>\n","<template>\n <span v-if=\"summaryParams?.column?.field?.addonBefore\">\n {{ summaryParams.column.field.addonBefore }}\n </span>\n {{ value }}\n <span v-if=\"summaryParams?.column?.field?.addonAfter\">\n {{ summaryParams.column.field.addonAfter }}\n </span>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps({\n summaryParams: {\n type: Object,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.summaryParams.pageData) {\n let itemValue = item[props.summaryParams.column.dataIndex];\n if (props.summaryParams.column.field.type === 'number') {\n itemValue = getValue(props.summaryParams.column.field, itemValue);\n } else {\n itemValue = parseFloat(itemValue);\n }\n if (isNaN(itemValue) || itemValue == null) {\n itemValue = 0;\n }\n totla = add(totla, itemValue);\n }\n if (props.summaryParams.column.field.type === 'number') {\n const precision = props.summaryParams.column.field.precision;\n if (precision) {\n totla = totla.toFixed(precision);\n }\n }\n return totla;\n});\nfunction replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\nfunction replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction add(a, b) {\n const precision = Math.max(\n (a.toString().split('.')[1] || '').length,\n (b.toString().split('.')[1] || '').length,\n );\n return parseFloat((a + b).toFixed(precision));\n}\nconst getValue = (field: any, value: any) => {\n if (typeof value === 'string') {\n if (field.addonAfter) {\n value = replaceEnd(value, field.addonAfter, '');\n }\n if (field.addonBefore) {\n value = replaceStart(value, field.addonBefore, '');\n }\n value = parseFloat(value);\n }\n return value;\n};\n</script>\n<style lang=\"less\" scoped></style>\n","<template>\n <debug-code v-model:dynamic-title=\"field.dynamicTitle\">\n <!-- 设置:key=\"tableColumns.length\"是为了在列个数发生变化时,重新实例化table,从而重新计算列宽 -->\n <s-table\n :dataSource=\"tableDataSource\"\n :columns=\"tableColumns\"\n :pagination=\"false\"\n :autoRowHeight=\"true\"\n :bordered=\"true\"\n stripe\n summary-fixed\n :scroll=\"{ x: totalWidth }\"\n size=\"small\"\n row-key=\"_key\"\n :key=\"tableColumns.length\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ text, column, record, index, recordIndexs }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(index)\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"value.length <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </template>\n <template v-else-if=\"column.key === 'index'\">\n <div class=\"cell-item\">\n {{ index + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${index}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[index]\"\n :validateInfos=\"validateInfosList[index] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[index]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, index]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(index, params)\"\n />\n </template>\n <template\n #summary\n v-if=\"summaryColumns.length > 0\"\n >\n <s-table-summary-row>\n <s-table-summary-cell :index=\"0\">合计</s-table-summary-cell>\n <s-table-summary-cell\n v-for=\"item in summaryColumns\"\n :key=\"item.index\"\n :index=\"item.index\"\n >\n <template #default=\"vars\">\n <TableSummary :summary-params=\"vars\"></TableSummary>\n </template>\n </s-table-summary-cell>\n </s-table-summary-row>\n </template>\n </s-table>\n </debug-code>\n</template>\n<script setup lang=\"ts\">\nimport TableCell from './TableCell.vue';\nimport TableSummary from './TableSummary.vue';\nimport { computed, PropType, ref, reactive, watch, onUnmounted, onMounted } from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\n\nconst props = defineProps({\n value: {\n type: Array,\n required: true,\n },\n field: {\n type: Object,\n required: true,\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n formModel: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['remove']);\n\nconst rulesRef = reactive({ ...(props.field.form?.rules || {}) });\nconst validateInfosList = ref<any[]>([]);\nconst validateFunctions = ref<any[]>([]);\nconst removeRulKeysList = ref<any[]>([]);\n\nconst genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n};\nconst valite_id = genID();\nconst tableColumns = ref([]);\n\nconst syncValidate = () => {\n const newValidateInfosList: any[] = [];\n const newValidateFunctions: any[] = [];\n\n (props.value || []).forEach((item: any, index: number) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n const rowRemoveRulKeys = removeRulKeysList.value[index];\n\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in item && !rowRemoveRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n\n const { validate, validateInfos } = useForm(item, new_rules_obj);\n newValidateInfosList[index] = validateInfos;\n newValidateFunctions[index] = validate;\n });\n\n validateInfosList.value = newValidateInfosList;\n validateFunctions.value = newValidateFunctions;\n\n if (props.nestValidate) {\n props.nestValidate[valite_id] = async () => {\n const promises = newValidateFunctions.map(v => v());\n return Promise.all(promises);\n };\n }\n};\n\nconst onUpdateModel = (index: number, params: any) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeysList.value[index][params.add_key];\n syncValidate();\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeysList.value[index][params.remove_key] = true;\n syncValidate();\n }\n};\n\nwatch(\n () => props.value,\n () => {\n syncValidate();\n },\n { deep: true, immediate: true },\n);\nwatch(\n () => props.field,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.formModel,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.context,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nonMounted(() => {\n genTableColumns();\n});\nonUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n});\nconst totalWidth = computed(() => {\n let width = 0;\n tableColumns.value.forEach(col => {\n width += col._width || 150;\n });\n return width;\n});\nconst tableDataSource = computed(() => {\n const value = props.value || [];\n return value.map((item: any, index: number) => {\n return { ...item, _key: index };\n });\n});\nconst hasReqrired = fieldName => {\n if (props.field?.form?.rules) {\n const rule = props.field?.form?.rules[fieldName];\n if (rule) {\n for (const item of rule) {\n if (item.required) {\n return true;\n }\n }\n }\n }\n return false;\n};\nconst genTableColumns = async () => {\n let columns = [];\n const keys = {};\n columns.push({\n title: '序号',\n dataIndex: 'index',\n key: 'index',\n maxWidth: 50,\n });\n props.field?.form?.dynamicFieldList?.forEach(group_item => {\n if (group_item.children instanceof Array) {\n group_item.children.forEach(item => {\n if (item.is_table_hide_column) return;\n if (keys[item.name]) return;\n keys[item.name] = true;\n let is_table_auto_width = item.is_table_auto_width;\n if (is_table_auto_width == null || is_table_auto_width === '') {\n is_table_auto_width = true;\n }\n const obj: any = {\n title: item.label,\n dataIndex: item.name,\n key: item.name,\n _width: item.table_column_width || 150,\n checked: true,\n autoWidth: is_table_auto_width,\n resizable: true,\n autoHeight: true,\n field: item,\n is_summary: item.is_table_summary,\n has_reqrired: hasReqrired(item.name),\n };\n if (is_table_auto_width) {\n obj.minWidth = obj._width;\n } else {\n obj.width = obj._width;\n }\n columns.push(obj);\n });\n }\n });\n if (props.field.max_count !== props.min_count) {\n columns.push({\n title: '操作',\n key: 'action',\n dataIndex: 'action',\n width: 60,\n _width: 60,\n fixed: 'right',\n });\n }\n if (props.field.dynamicTitle?.enable) {\n const code = props.field.dynamicTitle.code;\n try {\n const newColumns = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: props.field,\n value: props.value,\n formModel: props.formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, props.field.name],\n columns: columns,\n },\n props.workerHostFunctions || {},\n );\n if (newColumns) {\n columns = newColumns;\n }\n } catch (e) {\n console.error(e);\n }\n }\n tableColumns.value = columns;\n};\nconst onDeleteRow = (index: number) => {\n removeRulKeysList.value.splice(index, 1);\n emit('remove', index);\n};\nconst _innerModel = computed(() => {\n if (props.innerModel) {\n const fieldInnerModel = props.innerModel[props.field.name] || [];\n return (props.value || []).map((_, i) => fieldInnerModel[i] || {});\n }\n return [];\n});\nconst summaryColumns = computed(() => {\n const list = [];\n let index = 0;\n for (const item of tableColumns.value) {\n if (item.is_summary) {\n list.push({\n index: index,\n });\n }\n index++;\n }\n return list;\n});\n</script>\n<style lang=\"less\" scoped>\n:deep(.surely-table-cell) {\n .surely-table-cell-inner {\n height: 100%;\n &:has(.editable) {\n border: 1px solid transparent !important;\n background-color: rgba(248, 232, 53, 0.214);\n\n input {\n text-overflow: ellipsis;\n &:focus {\n text-overflow: clip;\n }\n }\n }\n &:has(.editable:hover),\n &:has(.editable:focus),\n &:has(.editable input:focus),\n &:has(.editable textarea:focus) {\n border-color: #40a9ff !important;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n background-color: rgba(252, 238, 85, 0.738);\n border-radius: 6px;\n }\n &:has(.ant-form-item-has-error) {\n border: 1px solid transparent !important;\n border-color: #ff4d4f !important;\n border-radius: 6px;\n }\n .surely-table-cell-content {\n padding: 0 !important;\n }\n }\n .ant-form-item-explain-error {\n font-size: 10px;\n }\n}\n\n.cell-item {\n padding: 8px;\n}\n</style>\n","<template>\n <debug-code v-model:dynamic-title=\"field.dynamicTitle\">\n <!-- 设置:key=\"tableColumns.length\"是为了在列个数发生变化时,重新实例化table,从而重新计算列宽 -->\n <s-table\n :dataSource=\"tableDataSource\"\n :columns=\"tableColumns\"\n :pagination=\"false\"\n :autoRowHeight=\"true\"\n :bordered=\"true\"\n stripe\n summary-fixed\n :scroll=\"{ x: totalWidth }\"\n size=\"small\"\n row-key=\"_key\"\n :key=\"tableColumns.length\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ text, column, record, index, recordIndexs }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(index)\"\n size=\"small\"\n type=\"link\"\n danger\n :disabled=\"value.length <= min_count\"\n >\n <template #icon>\n <DeleteOutlined />\n </template>\n </a-button>\n </div>\n </template>\n <template v-else-if=\"column.key === 'index'\">\n <div class=\"cell-item\">\n {{ index + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${index}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[index]\"\n :validateInfos=\"validateInfosList[index] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[index]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, index]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(index, params)\"\n />\n </template>\n <template\n #summary\n v-if=\"summaryColumns.length > 0\"\n >\n <s-table-summary-row>\n <s-table-summary-cell :index=\"0\">合计</s-table-summary-cell>\n <s-table-summary-cell\n v-for=\"item in summaryColumns\"\n :key=\"item.index\"\n :index=\"item.index\"\n >\n <template #default=\"vars\">\n <TableSummary :summary-params=\"vars\"></TableSummary>\n </template>\n </s-table-summary-cell>\n </s-table-summary-row>\n </template>\n </s-table>\n </debug-code>\n</template>\n<script setup lang=\"ts\">\nimport TableCell from './TableCell.vue';\nimport TableSummary from './TableSummary.vue';\nimport { computed, PropType, ref, reactive, watch, onUnmounted, onMounted } from 'vue';\nimport { useForm } from 'ant-design-vue/es/form';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\n\nconst props = defineProps({\n value: {\n type: Array,\n required: true,\n },\n field: {\n type: Object,\n required: true,\n },\n context: {\n type: Object,\n default: () => {\n return {};\n },\n },\n innerModel: {\n type: Array,\n default: () => {\n return [];\n },\n },\n globalInnerModel: {\n type: Array,\n default: () => {\n return [];\n },\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 required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n min_count: {\n type: Number,\n default: 1,\n },\n formModel: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['remove']);\n\nconst rulesRef = reactive({ ...(props.field.form?.rules || {}) });\nconst validateInfosList = ref<any[]>([]);\nconst validateFunctions = ref<any[]>([]);\nconst removeRulKeysList = ref<any[]>([]);\n\nconst genID = (): string => {\n const array = new Uint8Array(16); // 16 字节 = 128 位\n window.crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n};\nconst valite_id = genID();\nconst tableColumns = ref([]);\n\nconst syncValidate = () => {\n const newValidateInfosList: any[] = [];\n const newValidateFunctions: any[] = [];\n\n (props.value || []).forEach((item: any, index: number) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n const rowRemoveRulKeys = removeRulKeysList.value[index];\n\n const new_rules_obj = {};\n Object.keys(rulesRef).forEach(key => {\n if (key in item && !rowRemoveRulKeys[key]) {\n new_rules_obj[key] = rulesRef[key];\n }\n });\n\n const { validate, validateInfos } = useForm(item, new_rules_obj);\n newValidateInfosList[index] = validateInfos;\n newValidateFunctions[index] = validate;\n });\n\n validateInfosList.value = newValidateInfosList;\n validateFunctions.value = newValidateFunctions;\n\n if (props.nestValidate) {\n props.nestValidate[valite_id] = async () => {\n const promises = newValidateFunctions.map(v => v());\n return Promise.all(promises);\n };\n }\n};\n\nconst onUpdateModel = (index: number, params: any) => {\n if (!removeRulKeysList.value[index]) {\n removeRulKeysList.value[index] = {};\n }\n if (params.add_key) {\n // 添加字段时,不忽略校验,所以需要从removeRulKeys中删除\n delete removeRulKeysList.value[index][params.add_key];\n syncValidate();\n } else if (params.remove_key) {\n // 删除字段时,忽略校验,所以需要添加到removeRulKeys中\n removeRulKeysList.value[index][params.remove_key] = true;\n syncValidate();\n }\n};\n\nwatch(\n () => props.value,\n () => {\n syncValidate();\n },\n { deep: true, immediate: true },\n);\nwatch(\n () => props.field,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.formModel,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nwatch(\n () => props.context,\n () => {\n genTableColumns();\n },\n { deep: true },\n);\nonMounted(() => {\n genTableColumns();\n});\nonUnmounted(() => {\n if (props.nestValidate) {\n delete props.nestValidate[valite_id];\n }\n});\nconst totalWidth = computed(() => {\n let width = 0;\n tableColumns.value.forEach(col => {\n width += col._width || 150;\n });\n return width;\n});\nconst tableDataSource = computed(() => {\n const value = props.value || [];\n return value.map((item: any, index: number) => {\n return { ...item, _key: index };\n });\n});\nconst hasReqrired = fieldName => {\n if (props.field?.form?.rules) {\n const rule = props.field?.form?.rules[fieldName];\n if (rule) {\n for (const item of rule) {\n if (item.required) {\n return true;\n }\n }\n }\n }\n return false;\n};\nconst genTableColumns = async () => {\n let columns = [];\n const keys = {};\n columns.push({\n title: '序号',\n dataIndex: 'index',\n key: 'index',\n maxWidth: 50,\n });\n props.field?.form?.dynamicFieldList?.forEach(group_item => {\n if (group_item.children instanceof Array) {\n group_item.children.forEach(item => {\n if (item.is_table_hide_column) return;\n if (keys[item.name]) return;\n keys[item.name] = true;\n let is_table_auto_width = item.is_table_auto_width;\n if (is_table_auto_width == null || is_table_auto_width === '') {\n is_table_auto_width = true;\n }\n const obj: any = {\n title: item.label,\n dataIndex: item.name,\n key: item.name,\n _width: item.table_column_width || 150,\n checked: true,\n autoWidth: is_table_auto_width,\n resizable: true,\n autoHeight: true,\n field: item,\n is_summary: item.is_table_summary,\n has_reqrired: hasReqrired(item.name),\n };\n if (is_table_auto_width) {\n obj.minWidth = obj._width;\n } else {\n obj.width = obj._width;\n }\n columns.push(obj);\n });\n }\n });\n if (props.field.max_count !== props.min_count) {\n columns.push({\n title: '操作',\n key: 'action',\n dataIndex: 'action',\n width: 60,\n _width: 60,\n fixed: 'right',\n });\n }\n if (props.field.dynamicTitle?.enable) {\n const code = props.field.dynamicTitle.code;\n try {\n const newColumns = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: props.field,\n value: props.value,\n formModel: props.formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, props.field.name],\n columns: columns,\n },\n props.workerHostFunctions || {},\n );\n if (newColumns) {\n columns = newColumns;\n }\n } catch (e) {\n console.error(e);\n }\n }\n tableColumns.value = columns;\n};\nconst onDeleteRow = (index: number) => {\n removeRulKeysList.value.splice(index, 1);\n emit('remove', index);\n};\nconst _innerModel = computed(() => {\n if (props.innerModel) {\n const fieldInnerModel = props.innerModel[props.field.name] || [];\n return (props.value || []).map((_, i) => fieldInnerModel[i] || {});\n }\n return [];\n});\nconst summaryColumns = computed(() => {\n const list = [];\n let index = 0;\n for (const item of tableColumns.value) {\n if (item.is_summary) {\n list.push({\n index: index,\n });\n }\n index++;\n }\n return list;\n});\n</script>\n<style lang=\"less\" scoped>\n:deep(.surely-table-cell) {\n .surely-table-cell-inner {\n height: 100%;\n &:has(.editable) {\n border: 1px solid transparent !important;\n background-color: rgba(248, 232, 53, 0.214);\n\n input {\n text-overflow: ellipsis;\n &:focus {\n text-overflow: clip;\n }\n }\n }\n &:has(.editable:hover),\n &:has(.editable:focus),\n &:has(.editable input:focus),\n &:has(.editable textarea:focus) {\n border-color: #40a9ff !important;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n background-color: rgba(252, 238, 85, 0.738);\n border-radius: 6px;\n }\n &:has(.ant-form-item-has-error) {\n border: 1px solid transparent !important;\n border-color: #ff4d4f !important;\n border-radius: 6px;\n }\n .surely-table-cell-content {\n padding: 0 !important;\n }\n }\n .ant-form-item-explain-error {\n font-size: 10px;\n }\n}\n\n.cell-item {\n padding: 8px;\n}\n</style>\n","<template>\n <div class=\"top_btn\">\n <a-button\n v-if=\"is_form_design\"\n type=\"primary\"\n size=\"small\"\n @click=\"openModelConfig\"\n :ghost=\"true\"\n >\n 编辑表单\n </a-button>\n <a-button\n v-if=\"hasDownloadBtn\"\n size=\"small\"\n type=\"primary\"\n :loading=\"exportExcelLoading\"\n @click=\"handleExportExcel\"\n >\n 下载导入模版\n </a-button>\n <a-button\n v-if=\"hasImportBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleImportExcel\"\n >\n 导入Excel数据\n </a-button>\n <a-button\n v-if=\"hasAddBtn && (!field.custom_btn_list?.length || field.max_count !== min_count)\"\n type=\"primary\"\n size=\"small\"\n @click=\"addFormItem\"\n :disabled=\"field.max_count && value.length >= field.max_count\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n {{ field.btn_title || '添加' }}\n </a-button>\n <template v-for=\"btn in field.custom_btn_list\">\n <debug-code\n :action_code_id=\"btn.action_code_id\"\n v-model:code=\"btn.code\"\n v-model:action=\"btn.action\"\n :options=\"actionTypes\"\n >\n <a-button\n size=\"small\"\n :type=\"btn.type\"\n :danger=\"btn.danger\"\n @click=\"handleCustomBtnClick(btn)\"\n :disabled=\"field.max_count && value.length >= field.max_count && btn.action === 'add'\"\n >\n {{ btn.label }}\n </a-button>\n </debug-code>\n </template>\n </div>\n <template v-if=\"field.showType === 'table'\">\n <FormTemplateTable\n :value=\"value\"\n :field=\"field\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n :min_count=\"min_count\"\n :formModel=\"formModel\"\n @remove=\"removeFormItem\"\n />\n </template>\n <template v-else>\n <template v-for=\"(item, index) in value\">\n <FormItem\n :form=\"field.form\"\n :field=\"field\"\n v-model:value=\"value[index]\"\n :options=\"field.form?.options\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"_innerModel[index]\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :modalType=\"modalType\"\n :nestValidate=\"nestValidate\"\n :min_count=\"min_count\"\n :listLength=\"value.length\"\n :context=\"context\"\n @remove=\"removeFormItem(index)\"\n :base-key-path=\"[...baseKeyPath, field.name, index]\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </template>\n </template>\n</template>\n\n<script lang=\"ts\">\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport {\n computed,\n watch,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n h,\n defineAsyncComponent,\n createVNode,\n} from 'vue';\nimport mitt from 'mitt';\nimport { cloneDeep, debounce } from 'lodash';\nimport { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';\nimport { Modal } from 'ant-design-vue';\nimport { exportJsonToExcel } from 'liyu-pc-base/utils/excel';\nimport FormItem from './FormItem.vue';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport { message } from 'ant-design-vue';\nimport FormTemplateTable from './FormTemplateTable.vue';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {\n FormItem,\n debugCode,\n FormTemplateTable,\n },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const height = ref(0);\n const eventBus = mitt();\n const actionTypes = [\n {\n label: '添加(add)',\n value: 'add',\n },\n {\n label: '整体更新(update)',\n value: 'update',\n },\n ];\n\n const ImportExcelModal = defineAsyncComponent(\n () => import('liyu-pc-base/components/form-modal/ImportExcelModal/ImportExcelModal.vue'),\n );\n\n const hasDownloadBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('download')) {\n return true;\n }\n return false;\n });\n const hasImportBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('import')) {\n return true;\n }\n return false;\n });\n const hasAddBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('add')) {\n return true;\n }\n return false;\n });\n\n const name2Obj: any = {};\n const handleImportExcel = () => {\n const configList: any = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n const col = { ...item1 };\n if (item1?.name2) {\n name2Obj[item1.name] = item1?.name2;\n }\n if (['select', 'radio', 'checkbox', 'treeselect', 'cascader'].includes(item1.type)) {\n col.options = props.field.form?.options?.[item1.name] || item1.options;\n }\n configList.push(col);\n });\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n component: ImportExcelModal,\n title: '导入Excel数据',\n configList: configList,\n ok: (data: any) => {\n const err = [];\n const list = [];\n\n data.forEach((item: any) => {\n const obj: any = cloneDeep(props.field.form.model || {});\n Object.keys(item).forEach((key: any) => {\n if (item[key].error) {\n err.push(h('li', item[key].error + '(' + item[key].excel_position + ')'));\n }\n obj[key] = item[key].value;\n if (name2Obj[key]) {\n obj[name2Obj[key]] = item[key].raw_value;\n }\n });\n list.push(obj);\n });\n if (err.length > 0) {\n Modal.warning({\n title: `导入Excel报错, 请改正后再尝试导入`,\n content: h('ol', err),\n icon: createVNode(ExclamationCircleOutlined),\n });\n } else {\n const newValue = [...(props.value || []), ...list];\n emit('update:value', newValue);\n }\n tempModal.open = false;\n },\n onCancel: () => {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n };\n\n const exportExcelLoading = ref(false);\n const handleExportExcel = () => {\n exportExcelLoading.value = true;\n const header = [];\n const data = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n if (item1.is_hide) return;\n header.push(item1.label);\n if (props.value && props.value.length > 0) {\n data.push(props.value[0][item1.name] ? props.value[0][item1.name].toString() : '');\n } else {\n data.push('');\n }\n });\n }\n });\n\n const percent = ref(100);\n exportJsonToExcel({\n data: [data],\n autoWidth: true,\n bookType: 'xlsx',\n filename: props.field.label || '导入模板',\n header: header,\n merges: [],\n multiHeader: [],\n percent: percent,\n });\n setTimeout(() => {\n exportExcelLoading.value = false;\n }, 1500);\n };\n\n const min_count = computed(() => {\n if (props.field.min_count || props.field.min_count === 0) {\n return props.field.min_count;\n } else {\n return 1;\n }\n });\n const _innerModel = computed(() => {\n if (props.innerModel) {\n if (!props.innerModel[props.field.name]) {\n props.innerModel[props.field.name] = [];\n }\n for (let i = 0; i < props.value.length; i++) {\n if (!props.innerModel[props.field.name][i]) {\n props.innerModel[props.field.name][i] = {};\n }\n }\n return props.innerModel[props.field.name];\n }\n return [];\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 value: props.value,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (btn.action == 'add') {\n if (res) {\n const temp = cloneDeep(props.field.form.model || {});\n Object.assign(temp, res);\n const new_list = JSON.parse(JSON.stringify(props.value)) || [];\n new_list.push(temp);\n emit('update:value', new_list);\n }\n } else if (btn.action == 'update') {\n if (res instanceof Array) {\n const temp = [];\n for (const item of res) {\n const newItem = cloneDeep(props.field.form.model || {});\n Object.assign(newItem, item);\n temp.push(newItem);\n }\n emit('update:value', temp);\n }\n }\n }\n };\n const addFormItem = () => {\n const dataList = props.value || [];\n dataList.push(cloneDeep(props.field.form.model || {}));\n emit('update:value', dataList);\n };\n\n const removeFormItem = index => {\n const dataList = props.value || [];\n dataList.splice(index, 1);\n emit('update:value', dataList);\n };\n\n const onresize: any = debounce(() => {\n height.value = window.innerHeight - 165;\n }, 200);\n const openModelConfig = () => {\n const tempModal = reactive({\n open: true,\n loading: false,\n component: 'InnerFormDesignModal',\n record: { value: props.field.form || {} },\n height: height.value,\n enableBatchAdd: true,\n modalTypeList: props.modalTypeList,\n modalType: props.modalType,\n eventBus: eventBus,\n ok: (data: any) => {\n props.field.form = data;\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n watch(\n () => props.value,\n newValue => {\n if (!(newValue instanceof Array) || newValue.length < min_count.value) {\n const res = [...(newValue || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n },\n );\n onMounted(() => {\n window.addEventListener('resize', onresize);\n onresize();\n if (!(props.value instanceof Array) || props.value.length < min_count.value) {\n const res = [...(props.value || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n });\n onUnmounted(() => {\n window.removeEventListener('resize', onresize);\n });\n return {\n openModelConfig,\n addFormItem,\n removeFormItem,\n min_count,\n _innerModel,\n actionTypes,\n handleCustomBtnClick,\n hasDownloadBtn,\n hasImportBtn,\n hasAddBtn,\n handleImportExcel,\n handleExportExcel,\n exportExcelLoading,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n flex-wrap: wrap;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","<template>\n <div class=\"top_btn\">\n <a-button\n v-if=\"is_form_design\"\n type=\"primary\"\n size=\"small\"\n @click=\"openModelConfig\"\n :ghost=\"true\"\n >\n 编辑表单\n </a-button>\n <a-button\n v-if=\"hasDownloadBtn\"\n size=\"small\"\n type=\"primary\"\n :loading=\"exportExcelLoading\"\n @click=\"handleExportExcel\"\n >\n 下载导入模版\n </a-button>\n <a-button\n v-if=\"hasImportBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleImportExcel\"\n >\n 导入Excel数据\n </a-button>\n <a-button\n v-if=\"hasAddBtn && (!field.custom_btn_list?.length || field.max_count !== min_count)\"\n type=\"primary\"\n size=\"small\"\n @click=\"addFormItem\"\n :disabled=\"field.max_count && value.length >= field.max_count\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n {{ field.btn_title || '添加' }}\n </a-button>\n <template v-for=\"btn in field.custom_btn_list\">\n <debug-code\n :action_code_id=\"btn.action_code_id\"\n v-model:code=\"btn.code\"\n v-model:action=\"btn.action\"\n :options=\"actionTypes\"\n >\n <a-button\n size=\"small\"\n :type=\"btn.type\"\n :danger=\"btn.danger\"\n @click=\"handleCustomBtnClick(btn)\"\n :disabled=\"field.max_count && value.length >= field.max_count && btn.action === 'add'\"\n >\n {{ btn.label }}\n </a-button>\n </debug-code>\n </template>\n </div>\n <template v-if=\"field.showType === 'table'\">\n <FormTemplateTable\n :value=\"value\"\n :field=\"field\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n :min_count=\"min_count\"\n :formModel=\"formModel\"\n @remove=\"removeFormItem\"\n />\n </template>\n <template v-else>\n <template v-for=\"(item, index) in value\">\n <FormItem\n :form=\"field.form\"\n :field=\"field\"\n v-model:value=\"value[index]\"\n :options=\"field.form?.options\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"_innerModel[index]\"\n :global-inner-model=\"globalInnerModel\"\n :modalTypeList=\"modalTypeList\"\n :modalType=\"modalType\"\n :nestValidate=\"nestValidate\"\n :min_count=\"min_count\"\n :listLength=\"value.length\"\n :context=\"context\"\n @remove=\"removeFormItem(index)\"\n :base-key-path=\"[...baseKeyPath, field.name, index]\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n </template>\n </template>\n</template>\n\n<script lang=\"ts\">\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport {\n computed,\n watch,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n PropType,\n h,\n defineAsyncComponent,\n createVNode,\n} from 'vue';\nimport mitt from 'mitt';\nimport { cloneDeep, debounce } from 'lodash';\nimport { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';\nimport { Modal } from 'ant-design-vue';\nimport { exportJsonToExcel } from 'liyu-pc-base/utils/excel';\nimport FormItem from './FormItem.vue';\nimport debugCode from '../debugCode.vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport { message } from 'ant-design-vue';\nimport FormTemplateTable from './FormTemplateTable.vue';\n\nexport default defineComponent({\n name: 'FormTemplate',\n components: {\n FormItem,\n debugCode,\n FormTemplateTable,\n },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n alwaysShowGroup: {\n type: Boolean,\n default: false,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const height = ref(0);\n const eventBus = mitt();\n const actionTypes = [\n {\n label: '添加(add)',\n value: 'add',\n },\n {\n label: '整体更新(update)',\n value: 'update',\n },\n ];\n\n const ImportExcelModal = defineAsyncComponent(\n () => import('liyu-pc-base/components/form-modal/ImportExcelModal/ImportExcelModal.vue'),\n );\n\n const hasDownloadBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('download')) {\n return true;\n }\n return false;\n });\n const hasImportBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('import')) {\n return true;\n }\n return false;\n });\n const hasAddBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('add')) {\n return true;\n }\n return false;\n });\n\n const name2Obj: any = {};\n const handleImportExcel = () => {\n const configList: any = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n const col = { ...item1 };\n if (item1?.name2) {\n name2Obj[item1.name] = item1?.name2;\n }\n if (['select', 'radio', 'checkbox', 'treeselect', 'cascader'].includes(item1.type)) {\n col.options = props.field.form?.options?.[item1.name] || item1.options;\n }\n configList.push(col);\n });\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n component: ImportExcelModal,\n title: '导入Excel数据',\n configList: configList,\n ok: (data: any) => {\n const err = [];\n const list = [];\n\n data.forEach((item: any) => {\n const obj: any = cloneDeep(props.field.form.model || {});\n Object.keys(item).forEach((key: any) => {\n if (item[key].error) {\n err.push(h('li', item[key].error + '(' + item[key].excel_position + ')'));\n }\n obj[key] = item[key].value;\n if (name2Obj[key]) {\n obj[name2Obj[key]] = item[key].raw_value;\n }\n });\n list.push(obj);\n });\n if (err.length > 0) {\n Modal.warning({\n title: `导入Excel报错, 请改正后再尝试导入`,\n content: h('ol', err),\n icon: createVNode(ExclamationCircleOutlined),\n });\n } else {\n const newValue = [...(props.value || []), ...list];\n emit('update:value', newValue);\n }\n tempModal.open = false;\n },\n onCancel: () => {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n };\n\n const exportExcelLoading = ref(false);\n const handleExportExcel = () => {\n exportExcelLoading.value = true;\n const header = [];\n const data = [];\n const dynamicFieldList = props.field.form?.dynamicFieldList || [];\n dynamicFieldList.forEach((item: any) => {\n if (item.children instanceof Array) {\n item.children.forEach((item1: any) => {\n if (item1.is_hide) return;\n header.push(item1.label);\n if (props.value && props.value.length > 0) {\n data.push(props.value[0][item1.name] ? props.value[0][item1.name].toString() : '');\n } else {\n data.push('');\n }\n });\n }\n });\n\n const percent = ref(100);\n exportJsonToExcel({\n data: [data],\n autoWidth: true,\n bookType: 'xlsx',\n filename: props.field.label || '导入模板',\n header: header,\n merges: [],\n multiHeader: [],\n percent: percent,\n });\n setTimeout(() => {\n exportExcelLoading.value = false;\n }, 1500);\n };\n\n const min_count = computed(() => {\n if (props.field.min_count || props.field.min_count === 0) {\n return props.field.min_count;\n } else {\n return 1;\n }\n });\n const _innerModel = computed(() => {\n if (props.innerModel) {\n if (!props.innerModel[props.field.name]) {\n props.innerModel[props.field.name] = [];\n }\n for (let i = 0; i < props.value.length; i++) {\n if (!props.innerModel[props.field.name][i]) {\n props.innerModel[props.field.name][i] = {};\n }\n }\n return props.innerModel[props.field.name];\n }\n return [];\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 value: props.value,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (btn.action == 'add') {\n if (res) {\n const temp = cloneDeep(props.field.form.model || {});\n Object.assign(temp, res);\n const new_list = JSON.parse(JSON.stringify(props.value)) || [];\n new_list.push(temp);\n emit('update:value', new_list);\n }\n } else if (btn.action == 'update') {\n if (res instanceof Array) {\n const temp = [];\n for (const item of res) {\n const newItem = cloneDeep(props.field.form.model || {});\n Object.assign(newItem, item);\n temp.push(newItem);\n }\n emit('update:value', temp);\n }\n }\n }\n };\n const addFormItem = () => {\n const dataList = props.value || [];\n dataList.push(cloneDeep(props.field.form.model || {}));\n emit('update:value', dataList);\n };\n\n const removeFormItem = index => {\n const dataList = props.value || [];\n dataList.splice(index, 1);\n emit('update:value', dataList);\n };\n\n const onresize: any = debounce(() => {\n height.value = window.innerHeight - 165;\n }, 200);\n const openModelConfig = () => {\n const tempModal = reactive({\n open: true,\n loading: false,\n component: 'InnerFormDesignModal',\n record: { value: props.field.form || {} },\n height: height.value,\n enableBatchAdd: true,\n modalTypeList: props.modalTypeList,\n modalType: props.modalType,\n eventBus: eventBus,\n ok: (data: any) => {\n props.field.form = data;\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n watch(\n () => props.value,\n newValue => {\n if (!(newValue instanceof Array) || newValue.length < min_count.value) {\n const res = [...(newValue || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n },\n );\n onMounted(() => {\n window.addEventListener('resize', onresize);\n onresize();\n if (!(props.value instanceof Array) || props.value.length < min_count.value) {\n const res = [...(props.value || [])];\n while (res.length < min_count.value) {\n res.push(cloneDeep(props.field.form.model || {}));\n }\n emit('update:value', res);\n }\n });\n onUnmounted(() => {\n window.removeEventListener('resize', onresize);\n });\n return {\n openModelConfig,\n addFormItem,\n removeFormItem,\n min_count,\n _innerModel,\n actionTypes,\n handleCustomBtnClick,\n hasDownloadBtn,\n hasImportBtn,\n hasAddBtn,\n handleImportExcel,\n handleExportExcel,\n exportExcelLoading,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.top_btn {\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n flex-wrap: wrap;\n}\n.form-wrap {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n border: 1px solid #e8e8e8;\n border-radius: 4px;\n padding: 4px;\n margin-bottom: 4px;\n width: 100%;\n .form-content {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n }\n .form-action {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-top: 8px;\n flex-shrink: 0;\n }\n}\n</style>\n","<template>\n <debug-code\n :value-code=\"field\"\n :show-debug-code=\"field.watchType === 'code'\"\n >\n <a-input\n :value=\"value\"\n readonly\n size=\"small\"\n style=\"background-color: #f5f5f5\"\n ></a-input>\n </debug-code>\n <span\n v-if=\"errorMsg\"\n class=\"error-msg\"\n >\n {{ errorMsg }}\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { debounce } from 'lodash';\n\nexport default defineComponent({\n name: 'DynamicValueField',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: String,\n default: () => undefined,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n formModel: {\n type: Object,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const errorMsg = ref(null);\n const syncValue = debounce(async (innerModel, globalInnerModel, field, formModel) => {\n const code = field.code;\n if (field.watchType === 'scoped') {\n if (field.valueType === 'single') {\n let value = innerModel?.[field.fieldName];\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = innerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item] !== undefined) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'global') {\n if (field.valueType === 'single') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item]) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'code') {\n try {\n const value = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: field,\n formModel: formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, field.name],\n },\n props.workerHostFunctions || {},\n );\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n errorMsg.value = null;\n } catch (e) {\n console.error(e);\n emit('update:value', '');\n errorMsg.value = e.message;\n }\n }\n }, 200);\n watch(\n () => [props.innerModel, props.globalInnerModel, props.field, props.formModel, props.context],\n ([innerModel, globalInnerModel, field, formModel]) => {\n syncValue(innerModel, globalInnerModel, field, formModel);\n },\n {\n immediate: true,\n deep: true,\n },\n );\n return {\n errorMsg,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.error-msg {\n color: #ff4d4f;\n}\n</style>\n","<template>\n <debug-code\n :value-code=\"field\"\n :show-debug-code=\"field.watchType === 'code'\"\n >\n <a-input\n :value=\"value\"\n readonly\n size=\"small\"\n style=\"background-color: #f5f5f5\"\n ></a-input>\n </debug-code>\n <span\n v-if=\"errorMsg\"\n class=\"error-msg\"\n >\n {{ errorMsg }}\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { debounce } from 'lodash';\n\nexport default defineComponent({\n name: 'DynamicValueField',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: String,\n default: () => undefined,\n },\n innerModel: {\n type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\n default: null,\n },\n formModel: {\n type: Object,\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const errorMsg = ref(null);\n const syncValue = debounce(async (innerModel, globalInnerModel, field, formModel) => {\n const code = field.code;\n if (field.watchType === 'scoped') {\n if (field.valueType === 'single') {\n let value = innerModel?.[field.fieldName];\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = innerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item] !== undefined) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'global') {\n if (field.valueType === 'single') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKey) {\n value = value?.[field.valueKey];\n }\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n } else if (field.valueType === 'multiple') {\n let value = globalInnerModel?.[field.fieldName];\n if (field.valueKeyList && field.valueKeyList.length) {\n const tmpList = [];\n for (const item of field.valueKeyList) {\n if (value?.[item]) {\n tmpList.push(value?.[item]);\n }\n }\n if (tmpList.length === 0 && props.value !== undefined) {\n return;\n }\n value = tmpList.join(field.valueSpace || ',');\n if (value !== props.value) {\n emit('update:value', value);\n }\n }\n }\n } else if (field.watchType === 'code') {\n try {\n const value = await executeScriptInWorker(\n code,\n {\n innerModel: props.innerModel,\n globalInnerModel: props.globalInnerModel,\n field: field,\n formModel: formModel,\n context: props.context,\n keyPath: [...props.baseKeyPath, field.name],\n },\n props.workerHostFunctions || {},\n );\n if (value === undefined && props.value !== undefined) {\n return;\n }\n if (value !== props.value) {\n emit('update:value', value);\n }\n errorMsg.value = null;\n } catch (e) {\n console.error(e);\n emit('update:value', '');\n errorMsg.value = e.message;\n }\n }\n }, 200);\n watch(\n () => [props.innerModel, props.globalInnerModel, props.field, props.formModel, props.context],\n ([innerModel, globalInnerModel, field, formModel]) => {\n syncValue(innerModel, globalInnerModel, field, formModel);\n },\n {\n immediate: true,\n deep: true,\n },\n );\n return {\n errorMsg,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.error-msg {\n color: #ff4d4f;\n}\n</style>\n","<template>\n <debug-code\n :action_code_id=\"field.action_code_id\"\n v-model:code=\"field.code\"\n >\n <a-button\n :danger=\"field.danger\"\n :type=\"field.btn_type\"\n :disabled=\"field.disabled\"\n size=\"small\"\n @click=\"handlClick\"\n >\n {{ field.label }}\n </a-button>\n </debug-code>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'FormButton',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: [],\n setup(props, { emit }) {\n const handlClick = async () => {\n if (props.field.code) {\n let res;\n try {\n res = await executeScriptInWorker(\n props.field.code,\n {\n context: props.context,\n formModel: props.formModel,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (res) {\n Object.assign(props.formModel, res);\n }\n }\n };\n return {\n handlClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped></style>\n","<template>\n <debug-code\n :action_code_id=\"field.action_code_id\"\n v-model:code=\"field.code\"\n >\n <a-button\n :danger=\"field.danger\"\n :type=\"field.btn_type\"\n :disabled=\"field.disabled\"\n size=\"small\"\n @click=\"handlClick\"\n >\n {{ field.label }}\n </a-button>\n </debug-code>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { executeScriptInWorker } from 'liyu-pc-base/utils/function';\nimport debugCode from '../debugCode.vue';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'FormButton',\n components: { debugCode },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n is_form_design: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n default: () => {},\n },\n },\n emits: [],\n setup(props, { emit }) {\n const handlClick = async () => {\n if (props.field.code) {\n let res;\n try {\n res = await executeScriptInWorker(\n props.field.code,\n {\n context: props.context,\n formModel: props.formModel,\n keyPath: [...props.baseKeyPath, props.field.name],\n },\n props.workerHostFunctions || {},\n );\n } catch (e) {\n message.error(e.message);\n return;\n }\n if (res) {\n Object.assign(props.formModel, res);\n }\n }\n };\n return {\n handlClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped></style>\n","<template>\n <a-input-number\n :value=\"innerValue\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision == null || field.precision === '' ? undefined : field.precision\"\n :step=\"field.step\"\n size=\"small\"\n @update:value=\"update\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'InputNumberPro',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: Number,\n required: false,\n default: () => null,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const update = value => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n value = `${value}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n value = `${props.field.addonBefore}${value}`;\n }\n emit('update:value', value);\n };\n function replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n }\n function replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n }\n const innerValue = computed(() => {\n let value = props.value as any;\n if (typeof value === 'string') {\n if (props.field.addonAfter) {\n value = replaceEnd(value, props.field.addonAfter, '');\n }\n if (props.field.addonBefore) {\n value = replaceStart(value, props.field.addonBefore, '');\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n }\n }\n return value;\n });\n return { update, innerValue };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.head_btn {\n display: flex;\n gap: 4px;\n justify-content: end;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n</style>\n","<template>\n <a-input-number\n :value=\"innerValue\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision == null || field.precision === '' ? undefined : field.precision\"\n :step=\"field.step\"\n size=\"small\"\n @update:value=\"update\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input-number>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'InputNumberPro',\n components: {},\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: Number,\n required: false,\n default: () => null,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const update = value => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n value = `${value}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n value = `${props.field.addonBefore}${value}`;\n }\n emit('update:value', value);\n };\n function replaceEnd(str, target, replacement) {\n if (str.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n }\n function replaceStart(str, target, replacement) {\n if (str.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n }\n const innerValue = computed(() => {\n let value = props.value as any;\n if (typeof value === 'string') {\n if (props.field.addonAfter) {\n value = replaceEnd(value, props.field.addonAfter, '');\n }\n if (props.field.addonBefore) {\n value = replaceStart(value, props.field.addonBefore, '');\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n }\n }\n return value;\n });\n return { update, innerValue };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.head_btn {\n display: flex;\n gap: 4px;\n justify-content: end;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n</style>\n","<template>\n <a-input\n v-model:value=\"innerValue\"\n :allow-clear=\"field.allowClear == undefined ? true : field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :readonly=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请输入') + field.label\"\n :type=\"field.inputType ? field.inputType : 'text'\"\n size=\"small\"\n @change=\"update($event.target.value)\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.suffix || field?.suffixIcon\"\n #suffix\n >\n <span v-if=\"field?.suffix\">{{ field.suffix }}</span>\n <component\n v-if=\"field?.suffixIcon\"\n :is=\"field?.suffixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input>\n</template>\n<script setup lang=\"ts\" name=\"InputPro\">\nimport { debounce } from 'lodash';\nimport { ref, watch } from 'vue';\n\nconst value = defineModel('value');\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n});\nconst innerValue = ref('');\nwatch(\n () => value.value,\n newValue => {\n let tmp = newValue;\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n tmp = replaceEnd(tmp, props.field.addonAfter, '');\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n tmp = replaceStart(tmp, props.field.addonBefore, '');\n }\n innerValue.value = tmp;\n },\n { immediate: true },\n);\n\nconst update = debounce(inValue => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n inValue = `${inValue}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n inValue = `${props.field.addonBefore}${inValue}`;\n }\n value.value = inValue;\n}, 300);\nfunction replaceStart(str, target, replacement) {\n if (str?.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction replaceEnd(str, target, replacement) {\n if (str?.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\n</script>\n<style scoped lang=\"less\">\n:deep(.ant-input[readonly]) {\n background-color: #f5f5f5;\n}\n.ant-input-affix-wrapper-readonly {\n background-color: #f5f5f5;\n}\n:deep(.ant-input-affix-wrapper-readonly) {\n background-color: #f5f5f5;\n}\n</style>\n","<template>\n <a-input\n v-model:value=\"innerValue\"\n :allow-clear=\"field.allowClear == undefined ? true : field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :readonly=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请输入') + field.label\"\n :type=\"field.inputType ? field.inputType : 'text'\"\n size=\"small\"\n @change=\"update($event.target.value)\"\n >\n <template\n v-if=\"field?.prefix || field?.prefixIcon\"\n #prefix\n >\n <span v-if=\"field?.prefix\">{{ field.prefix }}</span>\n <component\n v-if=\"field?.prefixIcon\"\n :is=\"field?.prefixIcon\"\n />\n </template>\n <template\n v-if=\"field?.suffix || field?.suffixIcon\"\n #suffix\n >\n <span v-if=\"field?.suffix\">{{ field.suffix }}</span>\n <component\n v-if=\"field?.suffixIcon\"\n :is=\"field?.suffixIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonBefore || field?.addonBeforeIcon\"\n #addonBefore\n >\n <span v-if=\"field?.addonBefore\">{{ field.addonBefore }}</span>\n <component\n v-if=\"field?.addonBeforeIcon\"\n :is=\"field?.addonBeforeIcon\"\n />\n </template>\n <template\n v-if=\"field?.addonAfter || field?.addonAfterIcon\"\n #addonAfter\n >\n <span v-if=\"field?.addonAfter\">{{ field.addonAfter }}</span>\n <component\n v-if=\"field?.addonAfterIcon\"\n :is=\"field?.addonAfterIcon\"\n />\n </template>\n </a-input>\n</template>\n<script setup lang=\"ts\" name=\"InputPro\">\nimport { debounce } from 'lodash';\nimport { ref, watch } from 'vue';\n\nconst value = defineModel('value');\nconst props = defineProps({\n field: {\n type: Object,\n required: true,\n },\n});\nconst innerValue = ref('');\nwatch(\n () => value.value,\n newValue => {\n let tmp = newValue;\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n tmp = replaceEnd(tmp, props.field.addonAfter, '');\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n tmp = replaceStart(tmp, props.field.addonBefore, '');\n }\n innerValue.value = tmp;\n },\n { immediate: true },\n);\n\nconst update = debounce(inValue => {\n if (props.field.extraAddonAfter && props.field.addonAfter) {\n inValue = `${inValue}${props.field.addonAfter}`;\n }\n if (props.field.extraAddonBefore && props.field.addonBefore) {\n inValue = `${props.field.addonBefore}${inValue}`;\n }\n value.value = inValue;\n}, 300);\nfunction replaceStart(str, target, replacement) {\n if (str?.startsWith(target)) {\n return replacement + str.slice(target.length);\n }\n return str;\n}\nfunction replaceEnd(str, target, replacement) {\n if (str?.endsWith(target)) {\n return str.slice(0, -target.length) + replacement;\n }\n return str;\n}\n</script>\n<style scoped lang=\"less\">\n:deep(.ant-input[readonly]) {\n background-color: #f5f5f5;\n}\n.ant-input-affix-wrapper-readonly {\n background-color: #f5f5f5;\n}\n:deep(.ant-input-affix-wrapper-readonly) {\n background-color: #f5f5f5;\n}\n</style>\n","<template>\n <a-form-item\n v-if=\"\n field.type !== 'divider' &&\n field.type !== 'button' &&\n (field?.is_search_show !== false || field_render_show)\n \"\n :extra=\"field.extra\"\n :name=\"field.name\"\n v-bind=\"validateInfos ? validateInfos[field.name] : null\"\n >\n <template\n #label\n v-if=\"is_show_label\"\n >\n {{\n is_show_label ? (field.label_i18n == undefined ? field.label : t(field.label_i18n)) : null\n }}\n <a-switch\n v-if=\"is_show_edit\"\n v-model:checked=\"self_is_edit\"\n style=\"margin: 0 5px\"\n @change=\"handleToggleEdit\"\n checked-children=\"表单\"\n un-checked-children=\"列表\"\n />\n <a-button\n v-if=\"is_show_edit && self_is_edit\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleAdd\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n 添加分组\n </a-button>\n </template>\n <slot />\n <div\n v-if=\"field.type === 'kong'\"\n style=\"height: 62px; width: 100%\"\n ></div>\n <!-- 展示内容-->\n <div v-if=\"field.type === 'tag'\">\n <a-tag\n :color=\"field.color ? field.color(field, model) : 'green'\"\n :style=\"field.style\"\n v-if=\"(field.content && field.content(field, model)) || model\"\n @click=\"field.cb ? field.cb(field, model) : ''\"\n >\n <span v-if=\"field.content\">\n {{ field.content(field, model) }}\n </span>\n <span v-else>{{ model }}</span>\n </a-tag>\n </div>\n <!-- 表单占位组件-->\n <!-- 默认 【表单空位 高62px; 名称空位 高30px;】 如遇个别特殊表单,根据实际情况自行调节 高度-->\n <!-- height 属性必填-->\n <div\n v-if=\"field.type === 'kong_title'\"\n :style=\"'height: ' + field.height + 'px'\"\n ></div>\n <div\n v-if=\"field.type === 'title'\"\n style=\"height: 30px; position: relative\"\n >\n <span\n style=\"\n position: absolute;\n bottom: 0;\n padding: 0;\n margin: 0;\n font-weight: bolder;\n font-size: 17px;\n \"\n >\n {{ field.name }}\n </span>\n </div>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n allow-half\n />\n <InputPro\n v-if=\"field.type === 'input'\"\n :field=\"field\"\n v-model:value=\"model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputPro>\n <a-input-number\n v-if=\"field.type === 'money'\"\n size=\"small\"\n v-model:value=\"model\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :min=\"field.min\"\n :max=\"field.max\"\n :formatter=\"value => `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :placeholder=\"\n field.placeholder_i18n == undefined ? field.placeholder : t(field.placeholder_i18n)\n \"\n style=\"width: 100%\"\n />\n <InputNumberPro\n v-if=\"field.type === 'number'\"\n v-model:value=\"model\"\n :field=\"field\"\n style=\"width: 100%\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputNumberPro>\n\n <a-input\n v-if=\"field.type === 'volume'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"L\"\n size=\"small\"\n type=\"number\"\n />\n <a-input\n v-if=\"field.type === 'weight'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"Kg\"\n size=\"small\"\n type=\"number\"\n />\n <attribute-table\n v-if=\"field.type === 'attributetable'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n size=\"small\"\n />\n <attribute-nom-table\n v-if=\"field.type === 'attributenomtable'\"\n size=\"small\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n\n <a-textarea\n v-if=\"field.type === 'textarea'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autoSize=\"{\n minRows: field.minRows ? field.minRows : 5,\n maxRows: field.maxRows ? field.maxRows : null,\n }\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-str\n v-if=\"field.type === 'jsonstr'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :disabled=\"field.disabled\"\n :rows=\"field.rows\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-obj\n v-if=\"field.type === 'jsonobj'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :mainMenuBar=\"field.mainMenuBar\"\n :mode=\"field.mode\"\n :fullWidthButton=\"field.fullWidthButton\"\n :darkTheme=\"field.darkTheme\"\n />\n <rich-text-editor\n v-if=\"field.type === 'richtexteditor'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <a-input-password\n v-if=\"field.type === 'password'\"\n v-model:value=\"model\"\n v-model:visible=\"field.visible\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :visibilityToggle=\"field.visibilityToggle\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <template v-if=\"field.type === 'select'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"width: 100%\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n >\n <a-select-option\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n </template>\n <template v-if=\"field.type === 'groupselect'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n </template>\n\n <a-cascader\n v-if=\"field.type === 'cascader'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :multiple=\"field.multiple\"\n :show-search=\"field.show_search\"\n :changeOnSelect=\"field.changeOnSelect ? field.changeOnSelect : false\"\n :options=\"field.getOptionsData ? field.getOptionsData(options, model) : options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n />\n <!-- <template #displayRender=\"{ labels, selectedOptions }\">-->\n <!-- <span-->\n <!-- v-for=\"(label, index) in labels\"-->\n <!-- :key=\"selectedOptions[index].value\"-->\n <!-- >-->\n <!-- <span v-if=\"index === labels.length - 1\">-->\n <!-- {{ label }}-->\n <!-- </span>-->\n <!-- <span v-else>{{ label }} /</span>-->\n <!-- </span>-->\n <!-- </template>-->\n <!-- </a-cascader>-->\n <remote-cascader\n v-if=\"field.type === 'remotecascader'\"\n v-model:value=\"model\"\n v-model:label=\"labelModel\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-cascader-pro\n v-if=\"field.type === 'remotecascaderpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :show_search=\"field.show_search\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n\n <month-picker\n v-if=\"field.type === 'monthpicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n <a-date-picker\n v-if=\"field.type === 'datepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :picker=\"field.picker\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <a-range-picker\n v-if=\"field.type === 'rangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n :picker=\"field.picker ? field.picker : 'date'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <month-range-picker\n v-if=\"field.type === 'monthrangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n\n <a-time-picker\n v-if=\"field.type === 'timepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-time-range-picker\n v-if=\"field.type === 'timerangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-radio>\n </a-radio-group>\n\n <a-checkbox-group\n v-if=\"field.type === 'checkbox'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-checkbox\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-checkbox>\n </a-checkbox-group>\n\n <a-tree-select\n v-if=\"field.type === 'treeselect'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :multiple=\"field.multiple\"\n :tree-checkable=\"field.treeCheckable\"\n :tree-data=\"options\"\n :tree-label-prop=\"field.labelKey\"\n :tree-node-filter-prop=\"field.valueKey\"\n size=\"small\"\n />\n <remote-filter-select\n v-if=\"field.type === 'remotefilterselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select\n v-if=\"field.type === 'remoteselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select-pro\n v-if=\"field.type === 'remoteselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-complete\n v-if=\"field.type === 'remotecomplete'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :maxlength=\"field.maxlength\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-tree-select\n v-if=\"field.type === 'remotetreeselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-tree-select-pro\n v-if=\"field.type === 'remotetreeselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :search_config=\"field.search_config\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-modal\n v-if=\"field.type === 'remotemodal'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <remote-table\n v-if=\"field.type === 'remotetable'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <remote-table-pro\n v-if=\"field.type === 'remotetablepro' && !self_is_edit\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :context=\"context\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <FormTemplate\n v-if=\"field.type === 'formtemplate'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"modalType\"\n :modalTypeList=\"modalTypeList\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\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 ></FormTemplate>\n <DynamicValueField\n v-if=\"field.type === 'dynamicvaluefield'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></DynamicValueField>\n\n <remote-text\n v-if=\"field.type === 'remotetext'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <upload\n v-if=\"field.type === 'upload'\"\n v-model:value=\"model\"\n :access_type=\"field.access_type\"\n :group=\"field.group\"\n :listType=\"field.listType\"\n :maxCount=\"field.maxCount\"\n :acceptList=\"field.acceptList\"\n ></upload>\n <code-editor\n v-if=\"field.type === 'codeeditor'\"\n v-model:editorValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n :lineWrapping=\"field.lineWrapping\"\n />\n <TinymceEditor\n v-if=\"field.type === 'tinymceeditor'\"\n v-model:modelValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n />\n <icon-select\n v-if=\"field.type === 'iconselect'\"\n v-model:value=\"model\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n ></icon-select>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :count=\"field.count ? field.count : 5\"\n :allow-half=\"field.allowHalf\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio-color'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n <div\n :style=\"{\n width: '20px',\n height: '20px',\n backgroundColor: option[field.valueKey ? field.valueKey : 'value'],\n }\"\n ></div>\n </a-radio>\n </a-radio-group>\n <component\n v-if=\"field.type?.startsWith('CustomField')\"\n :is=\"field.type\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n </a-form-item>\n\n <a-divider\n v-if=\"field.type === 'divider'\"\n :orientation=\"field.orientation\"\n >\n {{ field.label }}\n </a-divider>\n <FormButton\n v-if=\"field.type === 'button'\"\n v-model:value=\"model\"\n :formModel=\"formModel\"\n :field=\"field\"\n :modalType=\"field.modalType\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></FormButton>\n</template>\n<script lang=\"ts\">\nimport RemoteSelect from 'liyu-pc-base/components/FormRender/RemoteSelect/RemoteSelect.vue';\nimport RemoteCascader from 'liyu-pc-base/components/FormRender/RemoteCascader/RemoteCascader.vue';\nimport RemoteModal from 'liyu-pc-base/components/FormRender/RemoteModal/RemoteModal.vue';\nimport RemoteTreeSelect from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue';\nimport RemoteTable from 'liyu-pc-base/components/FormRender/RemoteTable/RemoteTable.vue';\nimport { defineComponent, watch, onMounted, ref, computed, PropType } from 'vue';\nimport RemoteFilterSelect from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/RemoteFilterSelect.vue';\nimport AttributeNomTable from 'liyu-pc-base/components/FormRender/AttributeNomTable/index.vue';\nimport AttributeTable from 'liyu-pc-base/components/FormRender/AttributeTable/index.vue';\nimport JsonStr from 'liyu-pc-base/components/FormRender/JsonStr/index.vue';\nimport JsonObj from 'liyu-pc-base/components/FormRender/JsonObj/index.vue';\nimport RemoteText from 'liyu-pc-base/components/FormRender/RemoteText/RemoteText.vue';\nimport RemoteTablePro from 'liyu-pc-base/components/FormRender/RemoteTablePro/RemoteTablePro.vue';\nimport FormTemplate from './FormTemplate/FormTemplate.vue';\nimport DynamicValueField from 'liyu-pc-base/components/FormRender/DynamicValueField/DynamicValueField.vue';\nimport FormButton from './FormButton/FormButton.vue';\nimport { debounce, isArray } from 'lodash-es';\nimport moment from 'moment';\nimport { isEmpty, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport { PlusOutlined } from '@ant-design/icons-vue';\nimport RemoteSelectPro from 'liyu-pc-base/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue';\nimport RemoteComplete from 'liyu-pc-base/components/FormRender/RemoteComplete/RemoteComplete.vue';\nimport RemoteTreeSelectPro from 'liyu-pc-base/components/FormRender/RemoteTreeSelectPro/RemoteTreeSelectPro.vue';\nimport RemoteCascaderPro from 'liyu-pc-base/components/FormRender/RemoteCascaderPro/RemoteCascaderPro.vue';\nimport Upload from 'liyu-pc-base/components/FormRender/Upload/upload.vue';\nimport RichTextEditor from 'liyu-pc-base/components/FormRender/RichTextEditor/index.vue';\nimport { useI18n } from 'vue-i18n';\nimport IconSelect from 'liyu-pc-base/components/FormRender/iconSelect/index.vue';\nimport MonthPicker from 'liyu-pc-base/components/FormRender/MonthPicker/index.vue';\nimport MonthRangePicker from 'liyu-pc-base/components/FormRender/MonthRangePicker/index.vue';\nimport CodeEditor from 'liyu-pc-base/components/code/CodeEditor.vue';\nimport TinymceEditor from 'liyu-pc-base/components/tinymce/TinymceEditor.vue';\nimport InputNumberPro from './InputNumberPro/InputNumberPro.vue';\nimport InputPro from './InputPro/InputPro.vue';\n\nconst isValidDate = (dateString, format = 'YYYY-MM-DD') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidDateTime = (dateString, format = 'YYYY-MM-DD HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidTime = (dateString, format = 'HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nexport default defineComponent({\n name: 'FieldRender2',\n methods: { isArray },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n required: true,\n },\n label: {\n required: false,\n },\n options: {\n type: Array,\n default: () => [],\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n formModel: {\n type: Object,\n default: () => {},\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n field_render_show: {\n type: Boolean,\n default: true,\n },\n is_show_label: {\n type: Boolean,\n default: true,\n },\n isUseConditions: {\n type: Boolean,\n default: true,\n },\n is_show_field: {\n type: Boolean,\n default: true,\n },\n is_edit: {\n type: Boolean,\n default: true,\n },\n conditionsVisibleNum: {\n type: Number,\n default: 0,\n },\n is_form_design: {\n type: Boolean,\n default: false,\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 type: Object,\n default: null,\n },\n modalType: {\n type: String,\n required: false,\n default: () => '',\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\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: [\n 'add',\n 'update:value',\n 'update:label',\n 'update_model',\n 'update:is_show_field',\n 'update:is_edit',\n 'update_name2',\n ],\n setup(props, { emit }) {\n const newModel = ref({ ...props.formModel });\n const rangeDate = (v: any) => {\n if (typeof v == 'string' && v.indexOf(',') >= 0) {\n return v.split(',');\n }\n return v;\n };\n const convertValueByClassName = (value, class_name) => {\n //class_name 'int','float',str','bool','date','datetime','time'\n let new_value;\n if (class_name == 'int') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'str') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'number') {\n new_value.push(item.toString());\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'number') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'date') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDate(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDate(value) && typeof value === 'string') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'datetime') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDateTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDateTime(value) && typeof value === 'string') {\n new_value = moment(value, 'YYYY-MM-DD HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'time') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidTime(value) && typeof value === 'string') {\n new_value = moment(value, 'HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'float') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'bool') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Boolean(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Boolean(value);\n } else {\n new_value = value;\n }\n }\n return new_value;\n };\n const is_show_field = ref(props.is_show_field);\n const self_is_edit = ref(false);\n const is_show_edit = computed(() => {\n return props.is_form_design && props.field.type === 'remotetablepro';\n });\n const handleToggleEdit = () => {\n emit('update:is_edit', self_is_edit.value);\n };\n const handleAdd = () => {\n emit('add');\n };\n const check_visible_field_fun = debounce(() => {\n const old_is_show_field = is_show_field.value;\n if (props.field?.is_hide) {\n is_show_field.value = false;\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }\n const condition_result_list: any = [];\n for (const i in props.field?.conditions) {\n const group_list = props.field?.conditions[i];\n const group_results = [];\n for (const j in group_list) {\n const item = group_list[j];\n const value = props.formModel[item.watchKey];\n let new_value;\n if (item.class_name) {\n new_value = convertValueByClassName(item.value, item.class_name);\n } else {\n new_value = item.value;\n }\n let first, second;\n if (new_value instanceof Array) {\n [first, second] = new_value;\n }\n if (item.operator == 'lt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isBefore(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'lte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value <= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value > first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isAfter(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isAfter(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'between') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first && value <= second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n (moment(value).isAfter(moment(first)) || moment(value).isSame(moment(first))) &&\n (moment(value).isBefore(moment(second)) || moment(value).isSame(moment(second)))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notbetween') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first || value > second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isAfter(moment(second))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'in') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'eq') {\n if (value === first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'contains') {\n if (value.toString().indexOf(first) > -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'startswith') {\n if (value.toString().startsWith(first)) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'notin') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (!f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notcontains') {\n if (value.toString().indexOf(first) == -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == '_eq') {\n //todo\n } else if (item.operator == 'json_list_not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'json_list_is_blank_is_null') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_eq') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n }\n condition_result_list.push(group_results);\n }\n const con_list = [];\n condition_result_list.forEach(item => {\n const find_false_list = item.filter(x => x === false);\n if (find_false_list && find_false_list.length > 0) {\n con_list.push(false);\n } else {\n con_list.push(true);\n }\n });\n\n const find_true_list = con_list.filter(x => x === true);\n if (find_true_list && find_true_list.length > 0) {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n } else {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n }\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }, 300);\n const model = ref<any>('');\n const labelModel = ref(props.label);\n watch(\n () => model.value,\n newValue => {\n emit('update:value', newValue);\n if (props.field.name2) {\n let label: any;\n if (props.field.type === 'radio') {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n } else if (props.field.type === 'checkbox' && newValue && newValue.length >= 0) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else if (props.field.type === 'select') {\n if (isArray(newValue)) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n }\n }\n if (label !== undefined) {\n emit('update_name2', {\n key: props.field.name2,\n value: label,\n });\n }\n }\n },\n { deep: true },\n );\n watch(\n () => props.value,\n newValue => {\n let value = newValue;\n if (props.field.type === 'rangepicker' && value) {\n value = rangeDate(value);\n } else if (props.field.type === 'input' && value) {\n value = value.toString().replace(/(^\\s*)|(\\s*$)/g, '');\n }\n if (is_show_field.value) {\n //当该表单项显示时,才做向上的数据绑定,避免把undefined向上传递,影响rules字段的有效过滤\n model.value = value;\n }\n },\n { immediate: true },\n );\n watch(\n () => labelModel.value,\n newValue => {\n emit('update:label', newValue);\n if ('name2' in props.field) {\n emit('update_name2', { key: props.field.name2, value: newValue.toString() });\n }\n },\n { deep: true },\n );\n watch(\n () => props.label,\n newValue => {\n labelModel.value = newValue;\n },\n );\n watch(\n () => props.formModel,\n newValue => {\n newModel.value = { ...newValue };\n },\n { deep: true },\n );\n watch(\n () => newModel.value,\n (newValue, oldValue) => {\n if (props.field?.conditions) {\n props.field?.conditions.forEach(condition_list => {\n condition_list.forEach(item => {\n if (oldValue[item.watchKey] != newValue[item.watchKey]) {\n check_visible_field_fun();\n }\n });\n });\n }\n },\n { deep: true },\n );\n watch(\n () => [props.conditionsVisibleNum, props.isUseConditions],\n () => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions) {\n if (props.isUseConditions) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n },\n );\n onMounted(() => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions instanceof Array && props.field?.conditions.length > 0) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n if (!is_show_field.value) {\n // 表单项所见即所得,如果有隐藏的字段,那么model的key也要清除\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n } else {\n let newValue = newModel.value[props.field.name];\n if (newValue === undefined) {\n newValue = null;\n }\n emit('update_model', {\n add_key: props.field.name,\n value: newValue,\n });\n }\n if (is_show_edit.value) {\n emit('update:is_edit', self_is_edit.value);\n }\n });\n const { t } = useI18n();\n return {\n t,\n is_show_field,\n self_is_edit,\n handleToggleEdit,\n rangeDate,\n handleAdd,\n model,\n labelModel,\n is_show_edit,\n };\n },\n components: {\n IconSelect,\n RichTextEditor,\n Upload,\n RemoteCascaderPro,\n RemoteTreeSelectPro,\n RemoteSelectPro,\n RemoteComplete,\n AttributeTable,\n AttributeNomTable,\n RemoteFilterSelect,\n RemoteModal,\n RemoteSelect,\n RemoteCascader,\n RemoteTreeSelect,\n RemoteTable,\n JsonStr,\n JsonObj,\n RemoteText,\n RemoteTablePro,\n FormTemplate,\n DynamicValueField,\n FormButton,\n PlusOutlined,\n MonthPicker,\n MonthRangePicker,\n CodeEditor,\n TinymceEditor,\n InputNumberPro,\n InputPro,\n },\n});\n</script>\n\n<style scoped>\n.ant-calendar-picker {\n width: 100% !important;\n}\n</style>\n","<template>\n <a-form-item\n v-if=\"\n field.type !== 'divider' &&\n field.type !== 'button' &&\n (field?.is_search_show !== false || field_render_show)\n \"\n :extra=\"field.extra\"\n :name=\"field.name\"\n v-bind=\"validateInfos ? validateInfos[field.name] : null\"\n >\n <template\n #label\n v-if=\"is_show_label\"\n >\n {{\n is_show_label ? (field.label_i18n == undefined ? field.label : t(field.label_i18n)) : null\n }}\n <a-switch\n v-if=\"is_show_edit\"\n v-model:checked=\"self_is_edit\"\n style=\"margin: 0 5px\"\n @change=\"handleToggleEdit\"\n checked-children=\"表单\"\n un-checked-children=\"列表\"\n />\n <a-button\n v-if=\"is_show_edit && self_is_edit\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleAdd\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n 添加分组\n </a-button>\n </template>\n <slot />\n <div\n v-if=\"field.type === 'kong'\"\n style=\"height: 62px; width: 100%\"\n ></div>\n <!-- 展示内容-->\n <div v-if=\"field.type === 'tag'\">\n <a-tag\n :color=\"field.color ? field.color(field, model) : 'green'\"\n :style=\"field.style\"\n v-if=\"(field.content && field.content(field, model)) || model\"\n @click=\"field.cb ? field.cb(field, model) : ''\"\n >\n <span v-if=\"field.content\">\n {{ field.content(field, model) }}\n </span>\n <span v-else>{{ model }}</span>\n </a-tag>\n </div>\n <!-- 表单占位组件-->\n <!-- 默认 【表单空位 高62px; 名称空位 高30px;】 如遇个别特殊表单,根据实际情况自行调节 高度-->\n <!-- height 属性必填-->\n <div\n v-if=\"field.type === 'kong_title'\"\n :style=\"'height: ' + field.height + 'px'\"\n ></div>\n <div\n v-if=\"field.type === 'title'\"\n style=\"height: 30px; position: relative\"\n >\n <span\n style=\"\n position: absolute;\n bottom: 0;\n padding: 0;\n margin: 0;\n font-weight: bolder;\n font-size: 17px;\n \"\n >\n {{ field.name }}\n </span>\n </div>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n allow-half\n />\n <InputPro\n v-if=\"field.type === 'input'\"\n :field=\"field\"\n v-model:value=\"model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputPro>\n <a-input-number\n v-if=\"field.type === 'money'\"\n size=\"small\"\n v-model:value=\"model\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :min=\"field.min\"\n :max=\"field.max\"\n :formatter=\"value => `${value}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :placeholder=\"\n field.placeholder_i18n == undefined ? field.placeholder : t(field.placeholder_i18n)\n \"\n style=\"width: 100%\"\n />\n <InputNumberPro\n v-if=\"field.type === 'number'\"\n v-model:value=\"model\"\n :field=\"field\"\n style=\"width: 100%\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></InputNumberPro>\n\n <a-input\n v-if=\"field.type === 'volume'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"L\"\n size=\"small\"\n type=\"number\"\n />\n <a-input\n v-if=\"field.type === 'weight'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :maxlength=\"field.maxlength\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n addon-after=\"Kg\"\n size=\"small\"\n type=\"number\"\n />\n <attribute-table\n v-if=\"field.type === 'attributetable'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n size=\"small\"\n />\n <attribute-nom-table\n v-if=\"field.type === 'attributenomtable'\"\n size=\"small\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :init_model=\"field.init_model\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n\n <a-textarea\n v-if=\"field.type === 'textarea'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autoSize=\"{\n minRows: field.minRows ? field.minRows : 5,\n maxRows: field.maxRows ? field.maxRows : null,\n }\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-str\n v-if=\"field.type === 'jsonstr'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :disabled=\"field.disabled\"\n :rows=\"field.rows\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <json-obj\n v-if=\"field.type === 'jsonobj'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :mainMenuBar=\"field.mainMenuBar\"\n :mode=\"field.mode\"\n :fullWidthButton=\"field.fullWidthButton\"\n :darkTheme=\"field.darkTheme\"\n />\n <rich-text-editor\n v-if=\"field.type === 'richtexteditor'\"\n v-model:value=\"model\"\n :readOnly=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n />\n <a-input-password\n v-if=\"field.type === 'password'\"\n v-model:value=\"model\"\n v-model:visible=\"field.visible\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :formatter=\"field.formatter\"\n :max=\"field.max\"\n :min=\"field.min\"\n :placeholder=\"field.placeholder ? field.placeholder : '请输入' + field.label\"\n :precision=\"field.precision\"\n :step=\"field.step\"\n :visibilityToggle=\"field.visibilityToggle\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <template v-if=\"field.type === 'select'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"width: 100%\"\n >\n <a-select-option\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n >\n <a-select-option\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-select-option>\n </a-select>\n </template>\n <template v-if=\"field.type === 'groupselect'\">\n <a-select\n v-if=\"field.mode === 'default'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n <a-select\n v-else\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :getPopupContainer=\"field.getPopupContainer == undefined ? null : field.getPopupContainer\"\n :labelInValue=\"field.labelInValue === true\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode\"\n :options=\"options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-search=\"!!field.show_search\"\n size=\"small\"\n style=\"min-width: 150px\"\n ></a-select>\n </template>\n\n <a-cascader\n v-if=\"field.type === 'cascader'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :multiple=\"field.multiple\"\n :show-search=\"field.show_search\"\n :changeOnSelect=\"field.changeOnSelect ? field.changeOnSelect : false\"\n :options=\"field.getOptionsData ? field.getOptionsData(options, model) : options\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n />\n <!-- <template #displayRender=\"{ labels, selectedOptions }\">-->\n <!-- <span-->\n <!-- v-for=\"(label, index) in labels\"-->\n <!-- :key=\"selectedOptions[index].value\"-->\n <!-- >-->\n <!-- <span v-if=\"index === labels.length - 1\">-->\n <!-- {{ label }}-->\n <!-- </span>-->\n <!-- <span v-else>{{ label }} /</span>-->\n <!-- </span>-->\n <!-- </template>-->\n <!-- </a-cascader>-->\n <remote-cascader\n v-if=\"field.type === 'remotecascader'\"\n v-model:value=\"model\"\n v-model:label=\"labelModel\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-cascader-pro\n v-if=\"field.type === 'remotecascaderpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :show_search=\"field.show_search\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n\n <month-picker\n v-if=\"field.type === 'monthpicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n <a-date-picker\n v-if=\"field.type === 'datepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :autocomplete=\"field.autocomplete == undefined ? 'off' : field.autocomplete\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :picker=\"field.picker\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <a-range-picker\n v-if=\"field.type === 'rangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :format=\"field.format\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :show-time=\"field.showTime\"\n :value-format=\"field.valueFormat\"\n :picker=\"field.picker ? field.picker : 'date'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n\n <month-range-picker\n v-if=\"field.type === 'monthrangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue || []\"\n :disabled=\"field.disabled\"\n :placeholder=\"field.placeholder\"\n size=\"small\"\n style=\"width: 100%\"\n :is_range=\"field.is_range\"\n :value_has_time=\"field.value_has_time\"\n :start_offset_day=\"field.start_offset_day\"\n :end_offset_day=\"field.end_offset_day\"\n :fix_day=\"field.fix_day\"\n />\n\n <a-time-picker\n v-if=\"field.type === 'timepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-time-range-picker\n v-if=\"field.type === 'timerangepicker'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :format=\"field.format ? field.format : 'HH:mm'\"\n :placeholder=\"\n field.placeholder && isArray(field.placeholder) && field.placeholder.length > 0\n ? field.placeholder\n : [$t('开始时间'), $t('结束时间')]\n \"\n :value-format=\"field.valueFormat ? field.valueFormat : 'HH:mm'\"\n size=\"small\"\n style=\"width: 100%\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-radio>\n </a-radio-group>\n\n <a-checkbox-group\n v-if=\"field.type === 'checkbox'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-checkbox\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n {{ option[field.labelKey ? field.labelKey : 'label'] }}\n </a-checkbox>\n </a-checkbox-group>\n\n <a-tree-select\n v-if=\"field.type === 'treeselect'\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :dropdownMatchSelectWidth=\"false\"\n :placeholder=\"field.placeholder ? field.placeholder : $t('请选择') + field.label\"\n :multiple=\"field.multiple\"\n :tree-checkable=\"field.treeCheckable\"\n :tree-data=\"options\"\n :tree-label-prop=\"field.labelKey\"\n :tree-node-filter-prop=\"field.valueKey\"\n size=\"small\"\n />\n <remote-filter-select\n v-if=\"field.type === 'remotefilterselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select\n v-if=\"field.type === 'remoteselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :label-key=\"field.labelKey\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-select-pro\n v-if=\"field.type === 'remoteselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-complete\n v-if=\"field.type === 'remotecomplete'\"\n v-model:value=\"model\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :label-key=\"field.labelKey\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n :maxlength=\"field.maxlength\"\n :is_input=\"field.is_input\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-tree-select\n v-if=\"field.type === 'remotetreeselect'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :get-data=\"field.getData\"\n :label-key=\"field.labelKey\"\n :search_config=\"field.search_config\"\n :value-key=\"field.valueKey\"\n />\n <remote-tree-select-pro\n v-if=\"field.type === 'remotetreeselectpro'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :allow-clear=\"field.allowClear\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :get-data=\"field.getData\"\n :multiple=\"field.multiple\"\n :search_config=\"field.search_config\"\n :label-key-type=\"field.labelKeyType\"\n :label-key-list=\"field.labelKeyList\"\n :label-space=\"field.labelSpace\"\n :label-key=\"field.labelKey\"\n :value-key=\"field.valueKey\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n <remote-modal\n v-if=\"field.type === 'remotemodal'\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <remote-table\n v-if=\"field.type === 'remotetable'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <remote-table-pro\n v-if=\"field.type === 'remotetablepro' && !self_is_edit\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :context=\"context\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n />\n <FormTemplate\n v-if=\"field.type === 'formtemplate'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"modalType\"\n :modalTypeList=\"modalTypeList\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\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 ></FormTemplate>\n <DynamicValueField\n v-if=\"field.type === 'dynamicvaluefield'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :field_status=\"field.field_status\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :alwaysShowGroup=\"alwaysShowGroup\"\n :inner-model=\"innerModel\"\n :global-inner-model=\"globalInnerModel\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></DynamicValueField>\n\n <remote-text\n v-if=\"field.type === 'remotetext'\"\n v-model:value=\"model\"\n :columns=\"field.columns\"\n :formModel=\"formModel\"\n :field=\"field\"\n :get-data=\"field.getData\"\n :init_model=\"field.init_model\"\n :modalType=\"field.modalType\"\n :search_config=\"field.search_config\"\n :watch=\"field.watch\"\n />\n <upload\n v-if=\"field.type === 'upload'\"\n v-model:value=\"model\"\n :access_type=\"field.access_type\"\n :group=\"field.group\"\n :listType=\"field.listType\"\n :maxCount=\"field.maxCount\"\n :acceptList=\"field.acceptList\"\n ></upload>\n <code-editor\n v-if=\"field.type === 'codeeditor'\"\n v-model:editorValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n :lineWrapping=\"field.lineWrapping\"\n />\n <TinymceEditor\n v-if=\"field.type === 'tinymceeditor'\"\n v-model:modelValue=\"model\"\n :options=\"field.options\"\n :mode=\"field.mode\"\n />\n <icon-select\n v-if=\"field.type === 'iconselect'\"\n v-model:value=\"model\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n ></icon-select>\n <a-rate\n v-if=\"field.type === 'rate'\"\n v-model:value=\"model\"\n :count=\"field.count ? field.count : 5\"\n :allow-half=\"field.allowHalf\"\n />\n <a-radio-group\n v-if=\"field.type === 'radio-color'\"\n v-model:value=\"model\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n size=\"small\"\n >\n <a-radio\n v-for=\"option in options\"\n :key=\"option[field.valueKey ? field.valueKey : 'value']\"\n :disabled=\"option.disabled\"\n :value=\"option[field.valueKey ? field.valueKey : 'value']\"\n >\n <div\n :style=\"{\n width: '20px',\n height: '20px',\n backgroundColor: option[field.valueKey ? field.valueKey : 'value'],\n }\"\n ></div>\n </a-radio>\n </a-radio-group>\n <component\n v-if=\"field.type?.startsWith('CustomField')\"\n :is=\"field.type\"\n v-model:label=\"labelModel\"\n v-model:value=\"model\"\n :disabled=\"field.disabled\"\n :field=\"field\"\n :formModel=\"formModel\"\n :outModel=\"outModel\"\n :init_model=\"field.init_model\"\n :init_watch=\"field.init_watch\"\n :is_form_design=\"is_form_design\"\n :placeholder=\"\n field.placeholder_i18n == undefined\n ? field.placeholder\n ? field.placeholder\n : $t('请选择') + field.label\n : t(field.placeholder_i18n)\n \"\n />\n </a-form-item>\n\n <a-divider\n v-if=\"field.type === 'divider'\"\n :orientation=\"field.orientation\"\n >\n {{ field.label }}\n </a-divider>\n <FormButton\n v-if=\"field.type === 'button'\"\n v-model:value=\"model\"\n :formModel=\"formModel\"\n :field=\"field\"\n :modalType=\"field.modalType\"\n :watch=\"field.watch\"\n :is_form_design=\"is_form_design\"\n :context=\"context\"\n :base-key-path=\"baseKeyPath\"\n :worker-host-functions=\"workerHostFunctions\"\n ></FormButton>\n</template>\n<script lang=\"ts\">\nimport RemoteSelect from 'liyu-pc-base/components/FormRender/RemoteSelect/RemoteSelect.vue';\nimport RemoteCascader from 'liyu-pc-base/components/FormRender/RemoteCascader/RemoteCascader.vue';\nimport RemoteModal from 'liyu-pc-base/components/FormRender/RemoteModal/RemoteModal.vue';\nimport RemoteTreeSelect from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue';\nimport RemoteTable from 'liyu-pc-base/components/FormRender/RemoteTable/RemoteTable.vue';\nimport { defineComponent, watch, onMounted, ref, computed, PropType } from 'vue';\nimport RemoteFilterSelect from 'liyu-pc-base/components/FormRender/RemoteFilterSelect/RemoteFilterSelect.vue';\nimport AttributeNomTable from 'liyu-pc-base/components/FormRender/AttributeNomTable/index.vue';\nimport AttributeTable from 'liyu-pc-base/components/FormRender/AttributeTable/index.vue';\nimport JsonStr from 'liyu-pc-base/components/FormRender/JsonStr/index.vue';\nimport JsonObj from 'liyu-pc-base/components/FormRender/JsonObj/index.vue';\nimport RemoteText from 'liyu-pc-base/components/FormRender/RemoteText/RemoteText.vue';\nimport RemoteTablePro from 'liyu-pc-base/components/FormRender/RemoteTablePro/RemoteTablePro.vue';\nimport FormTemplate from './FormTemplate/FormTemplate.vue';\nimport DynamicValueField from 'liyu-pc-base/components/FormRender/DynamicValueField/DynamicValueField.vue';\nimport FormButton from './FormButton/FormButton.vue';\nimport { debounce, isArray } from 'lodash-es';\nimport moment from 'moment';\nimport { isEmpty, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport { PlusOutlined } from '@ant-design/icons-vue';\nimport RemoteSelectPro from 'liyu-pc-base/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue';\nimport RemoteComplete from 'liyu-pc-base/components/FormRender/RemoteComplete/RemoteComplete.vue';\nimport RemoteTreeSelectPro from 'liyu-pc-base/components/FormRender/RemoteTreeSelectPro/RemoteTreeSelectPro.vue';\nimport RemoteCascaderPro from 'liyu-pc-base/components/FormRender/RemoteCascaderPro/RemoteCascaderPro.vue';\nimport Upload from 'liyu-pc-base/components/FormRender/Upload/upload.vue';\nimport RichTextEditor from 'liyu-pc-base/components/FormRender/RichTextEditor/index.vue';\nimport { useI18n } from 'vue-i18n';\nimport IconSelect from 'liyu-pc-base/components/FormRender/iconSelect/index.vue';\nimport MonthPicker from 'liyu-pc-base/components/FormRender/MonthPicker/index.vue';\nimport MonthRangePicker from 'liyu-pc-base/components/FormRender/MonthRangePicker/index.vue';\nimport CodeEditor from 'liyu-pc-base/components/code/CodeEditor.vue';\nimport TinymceEditor from 'liyu-pc-base/components/tinymce/TinymceEditor.vue';\nimport InputNumberPro from './InputNumberPro/InputNumberPro.vue';\nimport InputPro from './InputPro/InputPro.vue';\n\nconst isValidDate = (dateString, format = 'YYYY-MM-DD') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidDateTime = (dateString, format = 'YYYY-MM-DD HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nconst isValidTime = (dateString, format = 'HH:mm:ss') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\nexport default defineComponent({\n name: 'FieldRender2',\n methods: { isArray },\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n required: true,\n },\n label: {\n required: false,\n },\n options: {\n type: Array,\n default: () => [],\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n formModel: {\n type: Object,\n default: () => {},\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n field_render_show: {\n type: Boolean,\n default: true,\n },\n is_show_label: {\n type: Boolean,\n default: true,\n },\n isUseConditions: {\n type: Boolean,\n default: true,\n },\n is_show_field: {\n type: Boolean,\n default: true,\n },\n is_edit: {\n type: Boolean,\n default: true,\n },\n conditionsVisibleNum: {\n type: Number,\n default: 0,\n },\n is_form_design: {\n type: Boolean,\n default: false,\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 type: Object,\n default: null,\n },\n modalType: {\n type: String,\n required: false,\n default: () => '',\n },\n modalTypeList: {\n type: Array as PropType<any[]>,\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: [\n 'add',\n 'update:value',\n 'update:label',\n 'update_model',\n 'update:is_show_field',\n 'update:is_edit',\n 'update_name2',\n ],\n setup(props, { emit }) {\n const newModel = ref({ ...props.formModel });\n const rangeDate = (v: any) => {\n if (typeof v == 'string' && v.indexOf(',') >= 0) {\n return v.split(',');\n }\n return v;\n };\n const convertValueByClassName = (value, class_name) => {\n //class_name 'int','float',str','bool','date','datetime','time'\n let new_value;\n if (class_name == 'int') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'str') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'number') {\n new_value.push(item.toString());\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'number') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'date') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDate(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDate(value) && typeof value === 'string') {\n new_value = value.toString();\n } else {\n new_value = value;\n }\n } else if (class_name == 'datetime') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidDateTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'YYYY-MM-DD HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidDateTime(value) && typeof value === 'string') {\n new_value = moment(value, 'YYYY-MM-DD HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'time') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isValidTime(item) && typeof item === 'string') {\n new_value.push(moment(item, 'HH:mm:ss'));\n } else {\n new_value.push(item);\n }\n });\n } else if (isValidTime(value) && typeof value === 'string') {\n new_value = moment(value, 'HH:mm:ss');\n } else {\n new_value = value;\n }\n } else if (class_name == 'float') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (class_name == 'bool') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Boolean(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Boolean(value);\n } else {\n new_value = value;\n }\n }\n return new_value;\n };\n const is_show_field = ref(props.is_show_field);\n const self_is_edit = ref(false);\n const is_show_edit = computed(() => {\n return props.is_form_design && props.field.type === 'remotetablepro';\n });\n const handleToggleEdit = () => {\n emit('update:is_edit', self_is_edit.value);\n };\n const handleAdd = () => {\n emit('add');\n };\n const check_visible_field_fun = debounce(() => {\n const old_is_show_field = is_show_field.value;\n if (props.field?.is_hide) {\n is_show_field.value = false;\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }\n const condition_result_list: any = [];\n for (const i in props.field?.conditions) {\n const group_list = props.field?.conditions[i];\n const group_results = [];\n for (const j in group_list) {\n const item = group_list[j];\n const value = props.formModel[item.watchKey];\n let new_value;\n if (item.class_name) {\n new_value = convertValueByClassName(item.value, item.class_name);\n } else {\n new_value = item.value;\n }\n let first, second;\n if (new_value instanceof Array) {\n [first, second] = new_value;\n }\n if (item.operator == 'lt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isBefore(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'lte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value <= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gt') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value > first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (moment(value).isAfter(moment(first))) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'gte') {\n if (typeof first === 'number') {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isAfter(moment(first)) ||\n moment(value).isSame(moment(first))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'between') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value >= first && value <= second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n (moment(value).isAfter(moment(first)) || moment(value).isSame(moment(first))) &&\n (moment(value).isBefore(moment(second)) || moment(value).isSame(moment(second)))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notbetween') {\n if (typeof first === 'number' && typeof second === 'number' && first && second) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (value < first || value > second) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (isValidDate(first)) {\n if (isEmpty(value)) {\n group_results.push(false);\n } else if (\n moment(value).isBefore(moment(first)) ||\n moment(value).isAfter(moment(second))\n ) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'in') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'eq') {\n if (value === first) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'contains') {\n if (value.toString().indexOf(first) > -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'startswith') {\n if (value.toString().startsWith(first)) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'notin') {\n if (value instanceof Array) {\n const f_list = new_value.filter(x => {\n return value.includes(x);\n });\n if (f_list.length > 0) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (typeof value == 'string' || typeof value == 'number' || isEmpty(value)) {\n // 数字 字符串 空\n const f = new_value.find(x => {\n return value == x;\n });\n if (!f) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n } else if (item.operator == 'notcontains') {\n if (value.toString().indexOf(first) == -1) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == '_eq') {\n //todo\n } else if (item.operator == 'json_list_not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'json_list_is_blank_is_null') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_eq') {\n //为空\n if (!value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n } else if (item.operator == 'not_blank_not_null') {\n // 非空\n if (value) {\n group_results.push(true);\n } else {\n group_results.push(false);\n }\n }\n }\n condition_result_list.push(group_results);\n }\n const con_list = [];\n condition_result_list.forEach(item => {\n const find_false_list = item.filter(x => x === false);\n if (find_false_list && find_false_list.length > 0) {\n con_list.push(false);\n } else {\n con_list.push(true);\n }\n });\n\n const find_true_list = con_list.filter(x => x === true);\n if (find_true_list && find_true_list.length > 0) {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n } else {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n }\n if (is_show_field.value !== old_is_show_field) {\n if (is_show_field.value) {\n newModel.value[props.field.name] = null;\n emit('update_model', {\n add_key: props.field.name,\n value: null,\n });\n } else {\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n }\n }\n }, 300);\n const model = ref<any>('');\n const labelModel = ref(props.label);\n watch(\n () => model.value,\n newValue => {\n emit('update:value', newValue);\n if (props.field.name2) {\n let label: any;\n if (props.field.type === 'radio') {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n } else if (props.field.type === 'checkbox' && newValue && newValue.length >= 0) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else if (props.field.type === 'select') {\n if (isArray(newValue)) {\n const list = [];\n props.options.forEach((item: any) => {\n newValue.forEach((item1: any) => {\n if (item1 == item?.[props.field.valueKey ? props.field.valueKey : 'value']) {\n list.push(item?.[props.field.labelKey ? props.field.labelKey : 'label']);\n }\n });\n });\n label = list.toString();\n } else {\n const obj = props.options.find(\n (item: any) =>\n item[props.field.valueKey ? props.field.valueKey : 'value'] == newValue,\n );\n label = obj?.[props.field.labelKey ? props.field.labelKey : 'label'];\n }\n }\n if (label !== undefined) {\n emit('update_name2', {\n key: props.field.name2,\n value: label,\n });\n }\n }\n },\n { deep: true },\n );\n watch(\n () => props.value,\n newValue => {\n let value = newValue;\n if (props.field.type === 'rangepicker' && value) {\n value = rangeDate(value);\n } else if (props.field.type === 'input' && value) {\n value = value.toString().replace(/(^\\s*)|(\\s*$)/g, '');\n }\n if (is_show_field.value) {\n //当该表单项显示时,才做向上的数据绑定,避免把undefined向上传递,影响rules字段的有效过滤\n model.value = value;\n }\n },\n { immediate: true },\n );\n watch(\n () => labelModel.value,\n newValue => {\n emit('update:label', newValue);\n if ('name2' in props.field) {\n emit('update_name2', { key: props.field.name2, value: newValue.toString() });\n }\n },\n { deep: true },\n );\n watch(\n () => props.label,\n newValue => {\n labelModel.value = newValue;\n },\n );\n watch(\n () => props.formModel,\n newValue => {\n newModel.value = { ...newValue };\n },\n { deep: true },\n );\n watch(\n () => newModel.value,\n (newValue, oldValue) => {\n if (props.field?.conditions) {\n props.field?.conditions.forEach(condition_list => {\n condition_list.forEach(item => {\n if (oldValue[item.watchKey] != newValue[item.watchKey]) {\n check_visible_field_fun();\n }\n });\n });\n }\n },\n { deep: true },\n );\n watch(\n () => [props.conditionsVisibleNum, props.isUseConditions],\n () => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions) {\n if (props.isUseConditions) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n },\n );\n onMounted(() => {\n if (props.field?.is_hide) {\n is_show_field.value = false;\n emit('update:is_show_field', is_show_field.value);\n } else if (props.field?.conditions instanceof Array && props.field?.conditions.length > 0) {\n check_visible_field_fun();\n } else {\n is_show_field.value = true;\n emit('update:is_show_field', is_show_field.value);\n }\n if (!is_show_field.value) {\n // 表单项所见即所得,如果有隐藏的字段,那么model的key也要清除\n delete newModel.value[props.field.name];\n emit('update_model', {\n remove_key: props.field.name,\n });\n } else {\n let newValue = newModel.value[props.field.name];\n if (newValue === undefined) {\n newValue = null;\n }\n emit('update_model', {\n add_key: props.field.name,\n value: newValue,\n });\n }\n if (is_show_edit.value) {\n emit('update:is_edit', self_is_edit.value);\n }\n });\n const { t } = useI18n();\n return {\n t,\n is_show_field,\n self_is_edit,\n handleToggleEdit,\n rangeDate,\n handleAdd,\n model,\n labelModel,\n is_show_edit,\n };\n },\n components: {\n IconSelect,\n RichTextEditor,\n Upload,\n RemoteCascaderPro,\n RemoteTreeSelectPro,\n RemoteSelectPro,\n RemoteComplete,\n AttributeTable,\n AttributeNomTable,\n RemoteFilterSelect,\n RemoteModal,\n RemoteSelect,\n RemoteCascader,\n RemoteTreeSelect,\n RemoteTable,\n JsonStr,\n JsonObj,\n RemoteText,\n RemoteTablePro,\n FormTemplate,\n DynamicValueField,\n FormButton,\n PlusOutlined,\n MonthPicker,\n MonthRangePicker,\n CodeEditor,\n TinymceEditor,\n InputNumberPro,\n InputPro,\n },\n});\n</script>\n\n<style scoped>\n.ant-calendar-picker {\n width: 100% !important;\n}\n</style>\n"],"mappings":"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"}
|