liyu-pc-base 1.0.480 → 1.0.482

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.
@@ -1 +1 @@
1
- {"version":3,"file":"FieldRender2-C3CkEPfn.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":["<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 default: null,\n },\n globalInnerModel: {\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 <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 default: null,\n },\n globalInnerModel: {\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 default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n 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 default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n 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 tableDataSource: {\n type: Array,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.tableDataSource) {\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 tableDataSource: {\n type: Array,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.tableDataSource) {\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 :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 v-model:pagination=\"pagination\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ column, record }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(record._key)\"\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 {{ record._key + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${record._key}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[record._key]\"\n :validateInfos=\"validateInfosList[record._key] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[record._key]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, record._key]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(record._key, 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\n :summary-params=\"vars\"\n :tableDataSource=\"tableDataSource\"\n ></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 pagination = ref<any>({\n showQuickJumper: true,\n showSizeChanger: false,\n showTotal: total => `共 ${total} 条记录`,\n pageSize: 5,\n current: 1,\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 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 :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 v-model:pagination=\"pagination\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ column, record }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(record._key)\"\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 {{ record._key + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${record._key}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[record._key]\"\n :validateInfos=\"validateInfosList[record._key] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[record._key]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, record._key]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(record._key, 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\n :summary-params=\"vars\"\n :tableDataSource=\"tableDataSource\"\n ></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 pagination = ref<any>({\n showQuickJumper: true,\n showSizeChanger: false,\n showTotal: total => `共 ${total} 条记录`,\n pageSize: 5,\n current: 1,\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 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=\"hasClearBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleClear\"\n :danger=\"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, truncate } 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 default: null,\n },\n globalInnerModel: {\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 handleClear = () => {\n Modal.confirm({\n title: '确认清空吗?',\n icon: createVNode(ExclamationCircleOutlined),\n content: '清空后将无法恢复',\n okText: '确认',\n cancelText: '取消',\n onOk: () => {\n emit('update:value', []);\n },\n });\n };\n const hasClearBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('clear')) {\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 hasClearBtn,\n handleClear,\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=\"hasClearBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleClear\"\n :danger=\"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, truncate } 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 default: null,\n },\n globalInnerModel: {\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 handleClear = () => {\n Modal.confirm({\n title: '确认清空吗?',\n icon: createVNode(ExclamationCircleOutlined),\n content: '清空后将无法恢复',\n okText: '确认',\n cancelText: '取消',\n onOk: () => {\n emit('update:value', []);\n },\n });\n };\n const hasClearBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('clear')) {\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 hasClearBtn,\n handleClear,\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 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 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 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 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-CNdvHlXJ.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":["<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 default: null,\n },\n globalInnerModel: {\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 <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 default: null,\n },\n globalInnerModel: {\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 default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n 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 default: null,\n },\n globalInnerModel: {\n default: null,\n },\n nestValidate: {\n type: Object as PropType<Record<string, any> | null>,\n default: null,\n },\n baseKeyPath: {\n type: Array,\n default: () => [],\n },\n workerHostFunctions: {\n type: Object,\n 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 tableDataSource: {\n type: Array,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.tableDataSource) {\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 tableDataSource: {\n type: Array,\n required: true,\n },\n});\nconst value = computed(() => {\n let totla: any = 0;\n for (const item of props.tableDataSource) {\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 :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 v-model:pagination=\"pagination\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ column, record }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(record._key)\"\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 {{ record._key + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${record._key}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[record._key]\"\n :validateInfos=\"validateInfosList[record._key] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[record._key]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, record._key]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(record._key, 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\n :summary-params=\"vars\"\n :tableDataSource=\"tableDataSource\"\n ></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 pagination = ref<any>({\n showQuickJumper: true,\n showSizeChanger: false,\n showTotal: total => `共 ${total} 条记录`,\n pageSize: 5,\n current: 1,\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 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 :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 v-model:pagination=\"pagination\"\n :rangeSelection=\"false\"\n >\n <template #bodyCell=\"{ column, record }\">\n <template v-if=\"column.key === 'action'\">\n <div class=\"cell-item\">\n <a-button\n @click=\"onDeleteRow(record._key)\"\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 {{ record._key + 1 }}\n </div>\n </template>\n <table-cell\n v-else-if=\"column.field\"\n :key=\"`${record._key}_${column.dataIndex}`\"\n :field=\"column.field\"\n :model=\"value[record._key]\"\n :validateInfos=\"validateInfosList[record._key] || {}\"\n :options=\"field.form?.options || {}\"\n :context=\"context\"\n :innerModel=\"_innerModel[record._key]\"\n :globalInnerModel=\"globalInnerModel\"\n :nestValidate=\"nestValidate\"\n :baseKeyPath=\"[...baseKeyPath, field.name, record._key]\"\n :workerHostFunctions=\"workerHostFunctions\"\n :is_form_design=\"is_form_design\"\n :has_reqrired=\"column.has_reqrired\"\n @update_model=\"params => onUpdateModel(record._key, 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\n :summary-params=\"vars\"\n :tableDataSource=\"tableDataSource\"\n ></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 pagination = ref<any>({\n showQuickJumper: true,\n showSizeChanger: false,\n showTotal: total => `共 ${total} 条记录`,\n pageSize: 5,\n current: 1,\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 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=\"hasClearBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleClear\"\n :danger=\"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, truncate } 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 default: null,\n },\n globalInnerModel: {\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 handleClear = () => {\n Modal.confirm({\n title: '确认清空吗?',\n icon: createVNode(ExclamationCircleOutlined),\n content: '清空后将无法恢复',\n okText: '确认',\n cancelText: '取消',\n onOk: () => {\n emit('update:value', []);\n },\n });\n };\n const hasClearBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('clear')) {\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 hasClearBtn,\n handleClear,\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=\"hasClearBtn\"\n size=\"small\"\n type=\"primary\"\n @click=\"handleClear\"\n :danger=\"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, truncate } 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 default: null,\n },\n globalInnerModel: {\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 handleClear = () => {\n Modal.confirm({\n title: '确认清空吗?',\n icon: createVNode(ExclamationCircleOutlined),\n content: '清空后将无法恢复',\n okText: '确认',\n cancelText: '取消',\n onOk: () => {\n emit('update:value', []);\n },\n });\n };\n const hasClearBtn = computed(() => {\n if (props.field.sys_btn_list == null) {\n return true;\n }\n if (props.field.sys_btn_list.includes('clear')) {\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 hasClearBtn,\n handleClear,\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 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 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 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 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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"}