liyu-pc-base 1.0.473 → 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":"RemoteSelectPro-Cqvkkyap.js","names":[],"sources":["../src/components/FormRender/RemoteTreeSelect/index.ts","../src/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue","../src/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue","../src/components/FormRender/RemoteTable/RemoteTable.vue","../src/components/FormRender/RemoteTable/RemoteTable.vue","../src/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue","../src/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue"],"sourcesContent":["import type { RemoteTreeSelect } from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/typing';\nimport { useGlobMap } from 'liyu-pc-base/init-plugin';\n\nconst res_components: { [key: string]: any } = {};\nconst init = () => {\n if (Object.keys(res_components).length > 0) {\n return;\n }\n const allComponents: any = import.meta.glob(\n 'liyu-pc-base/components/FormRender/RemoteTreeSelect/*/*.ts',\n {\n eager: true,\n },\n );\n const customComponents = useGlobMap('remoteTreeSelect');\n Object.assign(allComponents, customComponents);\n Object.keys(allComponents).forEach(full_file_name => {\n const file_name_list = full_file_name.split('/');\n const file_name = file_name_list[file_name_list.length - 1].replace('.ts', '');\n res_components[file_name] = allComponents[full_file_name].default;\n });\n};\nexport default (modalType: string): RemoteTreeSelect => {\n init();\n if (res_components[modalType] == undefined) {\n console.error('remotetreeselect没有组件:' + modalType);\n return {\n getData: undefined,\n searchConfig: undefined,\n };\n }\n return {\n ...res_components[modalType](`remotetreeselect_${modalType}`),\n };\n};\n","<template>\n <a-layout\n width=\"100%\"\n style=\"min-width: 190px\"\n >\n <a-layout-content>\n <a-tree-select\n v-model:value=\"modalRef.selectedRows\"\n size=\"small\"\n style=\"min-width: 150px\"\n :placeholder=\"field.placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :allow-clear=\"field.allowClear\"\n :tree-data=\"modalRef.datasource\"\n :tree-checkable=\"field.multiple\"\n :tree-node-filter-prop=\"field.valueKey\"\n :tree-label-prop=\"field.labelKey\"\n :dropdownStyle=\"{ maxHeight: '400px' }\"\n @change=\"handleChange\"\n />\n </a-layout-content>\n <a-layout-sider\n width=\"30px\"\n style=\"background: rgba(0, 0, 0, 0)\"\n >\n <a-button\n size=\"small\"\n style=\"width: 30px\"\n @click=\"btnClick(true)\"\n type=\"text\"\n >\n <template #icon>\n <reload-outlined />\n </template>\n </a-button>\n </a-layout-sider>\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/index';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'RemoteTreeSelect',\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n search_config: {\n type: Object,\n required: false,\n default: () => {},\n },\n label: {\n type: [Array, String],\n required: false,\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef: any = reactive({\n selectedRows: [],\n datasource: [],\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n });\n\n if (props.value) {\n modalRef.selectedRows.push(props.value);\n }\n\n const getLabelFromDatasource = (datasource: Array<any>) => {\n const labelList: Array<string> = [];\n datasource.forEach((item: any) => {\n if (\n modalRef.selectedRows instanceof Array &&\n modalRef.selectedRows.includes(item[props.field.valueKey])\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (\n !(modalRef.selectedRows instanceof Array) &&\n modalRef.selectedRows == item[props.field.valueKey]\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (item.children && item.children.length > 0) {\n getLabelFromDatasource(item.children).forEach(obj => labelList.push(obj));\n }\n });\n return labelList;\n };\n\n const handleChange = () => {\n emit('update:value', modalRef.selectedRows);\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n };\n\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name]) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else {\n //modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n },\n );\n\n const btnClick = (noCache?: boolean) => {\n if (noCache) {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n }\n\n getData({ ...search_modelRef, ...props.search_config }, noCache)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n if (modalRef.datasource.length > 0 && modalRef.selectedRows.length > 0) {\n if (\n typeof modalRef.datasource[0][props.field.valueKey] == 'number' &&\n typeof modalRef.selectedRows[0] == 'string'\n ) {\n const list: Array<number> = [];\n modalRef.selectedRows.map((item: string) => {\n item.split(',').map(obj => {\n list.push(Number(obj));\n });\n });\n if (props.field.multiple) {\n modalRef.selectedRows = list;\n } else {\n if (list.length > 1) {\n list.length = 1;\n }\n modalRef.selectedRows = list;\n }\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n if (noCache) {\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n }\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n };\n btnClick();\n\n return {\n props,\n modalRef,\n search_modelRef,\n handleChange,\n btnClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-layout\n width=\"100%\"\n style=\"min-width: 190px\"\n >\n <a-layout-content>\n <a-tree-select\n v-model:value=\"modalRef.selectedRows\"\n size=\"small\"\n style=\"min-width: 150px\"\n :placeholder=\"field.placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :allow-clear=\"field.allowClear\"\n :tree-data=\"modalRef.datasource\"\n :tree-checkable=\"field.multiple\"\n :tree-node-filter-prop=\"field.valueKey\"\n :tree-label-prop=\"field.labelKey\"\n :dropdownStyle=\"{ maxHeight: '400px' }\"\n @change=\"handleChange\"\n />\n </a-layout-content>\n <a-layout-sider\n width=\"30px\"\n style=\"background: rgba(0, 0, 0, 0)\"\n >\n <a-button\n size=\"small\"\n style=\"width: 30px\"\n @click=\"btnClick(true)\"\n type=\"text\"\n >\n <template #icon>\n <reload-outlined />\n </template>\n </a-button>\n </a-layout-sider>\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/index';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'RemoteTreeSelect',\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n search_config: {\n type: Object,\n required: false,\n default: () => {},\n },\n label: {\n type: [Array, String],\n required: false,\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef: any = reactive({\n selectedRows: [],\n datasource: [],\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n });\n\n if (props.value) {\n modalRef.selectedRows.push(props.value);\n }\n\n const getLabelFromDatasource = (datasource: Array<any>) => {\n const labelList: Array<string> = [];\n datasource.forEach((item: any) => {\n if (\n modalRef.selectedRows instanceof Array &&\n modalRef.selectedRows.includes(item[props.field.valueKey])\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (\n !(modalRef.selectedRows instanceof Array) &&\n modalRef.selectedRows == item[props.field.valueKey]\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (item.children && item.children.length > 0) {\n getLabelFromDatasource(item.children).forEach(obj => labelList.push(obj));\n }\n });\n return labelList;\n };\n\n const handleChange = () => {\n emit('update:value', modalRef.selectedRows);\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n };\n\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name]) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else {\n //modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n },\n );\n\n const btnClick = (noCache?: boolean) => {\n if (noCache) {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n }\n\n getData({ ...search_modelRef, ...props.search_config }, noCache)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n if (modalRef.datasource.length > 0 && modalRef.selectedRows.length > 0) {\n if (\n typeof modalRef.datasource[0][props.field.valueKey] == 'number' &&\n typeof modalRef.selectedRows[0] == 'string'\n ) {\n const list: Array<number> = [];\n modalRef.selectedRows.map((item: string) => {\n item.split(',').map(obj => {\n list.push(Number(obj));\n });\n });\n if (props.field.multiple) {\n modalRef.selectedRows = list;\n } else {\n if (list.length > 1) {\n list.length = 1;\n }\n modalRef.selectedRows = list;\n }\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n if (noCache) {\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n }\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n };\n btnClick();\n\n return {\n props,\n modalRef,\n search_modelRef,\n handleChange,\n btnClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-table\n :bordered=\"true\"\n size=\"small\"\n :loading=\"state.loading\"\n :scroll=\"{ y: 400, x: columnState.tableWidth }\"\n :row-selection=\"rowSelection\"\n :columns=\"dynamicColumns\"\n row-key=\"id\"\n :data-source=\"state.dataSource\"\n :pagination=\"{\n current: state.current,\n pageSize: state.pageSize,\n total: state.total,\n }\"\n @change=\"handleTableChange\"\n >\n <template\n v-for=\"item in slotList\"\n v-slot:[item.slotName]=\"{ index, text }\"\n :key=\"item.slotName\"\n >\n <span v-if=\"item.slotName === 'index'\">\n {{ index + 1 + state.pageSize * (state.current - 1) }}\n </span>\n <span v-if=\"item.type === 'custom'\">\n {{ item['field_' + text] }}\n </span>\n <span v-if=\"item.type === 'datetime'\">\n {{ getDateTime(text) }}\n </span>\n <span v-if=\"item.type === 'date'\">\n {{ getDate(text) }}\n </span>\n <span v-if=\"item.type === 'full_date'\">\n {{ getFullDate(text) }}\n </span>\n <span v-if=\"item.type === 'time'\">\n {{ getTime(text) }}\n </span>\n <a-tag\n color=\"green\"\n v-if=\"text && item.type === 'boolean'\"\n >\n {{ item.name1 }}\n </a-tag>\n <a-tag\n color=\"red\"\n v-if=\"!text && item.type === 'boolean'\"\n >\n {{ item.name2 }}\n </a-tag>\n <template v-if=\"item.type === 'list'\">\n <a-tag\n color=\"#87d068\"\n v-for=\"obj in text\"\n :key=\"obj.id\"\n style=\"margin-bottom: 1px\"\n >\n {{ obj.name }}\n </a-tag>\n </template>\n </template>\n </a-table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\n// import { ColumnProps } from 'ant-design-vue/es/table/interface';\nimport { useFetchData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport { useForm } from 'ant-design-vue/es/form';\n\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteModal/index';\nimport { useTableDynamicColumns } from 'liyu-pc-base/utils/hooks/useTableColumn';\nimport { getDate, getDateTime, getFullDate, getTime } from 'liyu-pc-base/utils/function';\n\n// type Key = ColumnProps['key'];\n\n// interface DataType {\n// id: number;\n// key: Key;\n// name: string;\n// }\n\nexport default defineComponent({\n name: 'RemoteTable',\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 field_status: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const loading = ref(false);\n const { searchConfig, searchConfigOptions, getData, columns, slotList } = getFormConfig(\n props.modalType,\n );\n const search_modelRef = reactive({\n ...searchConfig.model,\n is_active: true,\n ...props.init_model,\n });\n\n for (const field of searchConfig.fields) {\n if (props.field_status && props.field_status.hasOwnProperty(field.name)) {\n if (props.field_status[field.name] == 0) {\n field.disabled = true;\n field.hidden = false;\n } else if (props.field_status[field.name] == 1) {\n field.disabled = false;\n field.hidden = true;\n } else {\n field.disabled = false;\n field.hidden = false;\n }\n }\n }\n\n const old_obj: { [key: string]: any } = {};\n onMounted(() => {\n if (props.watch) {\n for (const k of props.watch) {\n if (props.formModel) {\n old_obj[k as string] = props.formModel[k as string];\n }\n }\n }\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n search_modelRef[k as string] = props.formModel[k as string];\n watch(\n () => props.formModel[k as string],\n () => {\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n if (old_obj[k as string] != props.formModel[k as string]) {\n search_modelRef[k as string] = props.formModel[k as string];\n }\n }\n }\n },\n { immediate: true },\n );\n }\n }\n });\n\n const { state: columnState, dynamicColumns } = useTableDynamicColumns(columns, {\n checkAll: false,\n needRowIndex: false,\n });\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n return {\n value: item[props.field.valueKey ? (props.field.valueKey as string) : 'id'],\n label: item[props.field.labelKey ? (props.field.labelKey as string) : 'name'],\n };\n });\n });\n const modalRef = reactive({\n visible: false,\n selectedRows: new Array<number>(),\n selectedRowsKey: new Array<number>(),\n selectedRowsTotal: new Array<any>(),\n datasource: new Array<any>(),\n });\n\n const rowSelection = {\n type:\n props.field.mode == 'default'\n ? 'radio'\n : props.field.mode == 'multiple'\n ? 'checkbox'\n : 'checkbox',\n columnWidth: '30px',\n selectedRowKeys: modalRef.selectedRowsKey,\n onChange: (selectedRowKeys: any, selectedRows: any) => {\n // modalRef.selectedRowsKey.length = 0;\n const remove_key: Array<number> = modalRef.selectedRowsKey.filter(\n item => selectedRowKeys.indexOf(Number(item)) == -1,\n );\n modalRef.selectedRowsTotal = modalRef.selectedRowsTotal.filter(\n item => remove_key.indexOf(item.id) == -1,\n );\n selectedRows.forEach((item: any) => {\n if (modalRef.selectedRowsKey.indexOf(item.id) == -1) {\n modalRef.selectedRowsTotal.push(item);\n }\n });\n\n modalRef.selectedRowsKey.length = 0;\n selectedRows.forEach((item: any) => {\n modalRef.selectedRowsKey.push(item.id);\n modalRef.datasource.push(item);\n });\n },\n };\n\n const {\n reload,\n setPageInfo,\n context: state,\n } = useFetchData(getData, {\n current: 1,\n pageSize: 20,\n tableSize: 'middle', // 'default' | 'middle' | 'small'\n stripe: true,\n requestParams: {\n ...search_modelRef,\n },\n });\n watch(\n () => state.dataSource,\n () => {\n const total_ids: Array<number> = modalRef.selectedRowsTotal.map(item => item.id);\n state.dataSource.map((item: any) => {\n if (total_ids.indexOf(item.id) > -1) {\n modalRef.selectedRowsKey.push(item.id);\n }\n });\n },\n );\n const init = () => {\n let list: any[] = [];\n if (props.value instanceof Array) {\n if (props.value.length > 0) {\n list = props.value as Array<number>;\n }\n } else {\n if (props.value) {\n list.push(props.value);\n }\n }\n if (list.length > 0) {\n const tmp_ids: any[] = [];\n const tmp_item_ids: any[] = [];\n modalRef.datasource.map(item => tmp_item_ids.push(item.id));\n list.map(item => {\n if (modalRef.selectedRows.indexOf(Number(item)) == -1) {\n modalRef.selectedRows.push(Number(item));\n modalRef.selectedRowsKey.push(Number(item));\n }\n if (tmp_item_ids.indexOf(item) == -1) {\n tmp_ids.push(item);\n }\n });\n if (tmp_ids.length > 0) {\n getData({ current: 1, ...search_modelRef, pageSize: 2000, ids: tmp_ids.join(',') }).then(\n function (res: any) {\n res.data.forEach(item => {\n if (list.indexOf(item.id) >= 0) {\n modalRef.datasource.push(item);\n modalRef.selectedRowsTotal.push(item);\n }\n });\n },\n );\n }\n } else {\n modalRef.selectedRows.length = 0;\n modalRef.selectedRowsKey.length = 0;\n modalRef.selectedRowsTotal.length = 0;\n }\n };\n init();\n\n watch(\n () => props.value,\n () => {\n init();\n },\n );\n\n const handleTableChange = ({ current, pageSize }: any, filters: any, sorter: any) => {\n console.log(sorter);\n setPageInfo({\n current,\n pageSize,\n ...filters,\n ...search_modelRef,\n });\n\n reload();\n };\n\n const { validateInfos: searchValidateInfos } = useForm(search_modelRef, {});\n\n const search = () => {\n setPageInfo({\n current: 1,\n ...search_modelRef,\n });\n reload();\n };\n\n return {\n props,\n modalRef,\n datasource,\n state,\n loading,\n getDateTime,\n getDate,\n getFullDate,\n getTime,\n search,\n handleTableChange,\n rowSelection,\n searchValidateInfos,\n search_modelRef,\n searchConfig,\n searchConfigOptions,\n getData,\n columnState,\n dynamicColumns,\n slotList,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-table\n :bordered=\"true\"\n size=\"small\"\n :loading=\"state.loading\"\n :scroll=\"{ y: 400, x: columnState.tableWidth }\"\n :row-selection=\"rowSelection\"\n :columns=\"dynamicColumns\"\n row-key=\"id\"\n :data-source=\"state.dataSource\"\n :pagination=\"{\n current: state.current,\n pageSize: state.pageSize,\n total: state.total,\n }\"\n @change=\"handleTableChange\"\n >\n <template\n v-for=\"item in slotList\"\n v-slot:[item.slotName]=\"{ index, text }\"\n :key=\"item.slotName\"\n >\n <span v-if=\"item.slotName === 'index'\">\n {{ index + 1 + state.pageSize * (state.current - 1) }}\n </span>\n <span v-if=\"item.type === 'custom'\">\n {{ item['field_' + text] }}\n </span>\n <span v-if=\"item.type === 'datetime'\">\n {{ getDateTime(text) }}\n </span>\n <span v-if=\"item.type === 'date'\">\n {{ getDate(text) }}\n </span>\n <span v-if=\"item.type === 'full_date'\">\n {{ getFullDate(text) }}\n </span>\n <span v-if=\"item.type === 'time'\">\n {{ getTime(text) }}\n </span>\n <a-tag\n color=\"green\"\n v-if=\"text && item.type === 'boolean'\"\n >\n {{ item.name1 }}\n </a-tag>\n <a-tag\n color=\"red\"\n v-if=\"!text && item.type === 'boolean'\"\n >\n {{ item.name2 }}\n </a-tag>\n <template v-if=\"item.type === 'list'\">\n <a-tag\n color=\"#87d068\"\n v-for=\"obj in text\"\n :key=\"obj.id\"\n style=\"margin-bottom: 1px\"\n >\n {{ obj.name }}\n </a-tag>\n </template>\n </template>\n </a-table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\n// import { ColumnProps } from 'ant-design-vue/es/table/interface';\nimport { useFetchData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport { useForm } from 'ant-design-vue/es/form';\n\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteModal/index';\nimport { useTableDynamicColumns } from 'liyu-pc-base/utils/hooks/useTableColumn';\nimport { getDate, getDateTime, getFullDate, getTime } from 'liyu-pc-base/utils/function';\n\n// type Key = ColumnProps['key'];\n\n// interface DataType {\n// id: number;\n// key: Key;\n// name: string;\n// }\n\nexport default defineComponent({\n name: 'RemoteTable',\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 field_status: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const loading = ref(false);\n const { searchConfig, searchConfigOptions, getData, columns, slotList } = getFormConfig(\n props.modalType,\n );\n const search_modelRef = reactive({\n ...searchConfig.model,\n is_active: true,\n ...props.init_model,\n });\n\n for (const field of searchConfig.fields) {\n if (props.field_status && props.field_status.hasOwnProperty(field.name)) {\n if (props.field_status[field.name] == 0) {\n field.disabled = true;\n field.hidden = false;\n } else if (props.field_status[field.name] == 1) {\n field.disabled = false;\n field.hidden = true;\n } else {\n field.disabled = false;\n field.hidden = false;\n }\n }\n }\n\n const old_obj: { [key: string]: any } = {};\n onMounted(() => {\n if (props.watch) {\n for (const k of props.watch) {\n if (props.formModel) {\n old_obj[k as string] = props.formModel[k as string];\n }\n }\n }\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n search_modelRef[k as string] = props.formModel[k as string];\n watch(\n () => props.formModel[k as string],\n () => {\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n if (old_obj[k as string] != props.formModel[k as string]) {\n search_modelRef[k as string] = props.formModel[k as string];\n }\n }\n }\n },\n { immediate: true },\n );\n }\n }\n });\n\n const { state: columnState, dynamicColumns } = useTableDynamicColumns(columns, {\n checkAll: false,\n needRowIndex: false,\n });\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n return {\n value: item[props.field.valueKey ? (props.field.valueKey as string) : 'id'],\n label: item[props.field.labelKey ? (props.field.labelKey as string) : 'name'],\n };\n });\n });\n const modalRef = reactive({\n visible: false,\n selectedRows: new Array<number>(),\n selectedRowsKey: new Array<number>(),\n selectedRowsTotal: new Array<any>(),\n datasource: new Array<any>(),\n });\n\n const rowSelection = {\n type:\n props.field.mode == 'default'\n ? 'radio'\n : props.field.mode == 'multiple'\n ? 'checkbox'\n : 'checkbox',\n columnWidth: '30px',\n selectedRowKeys: modalRef.selectedRowsKey,\n onChange: (selectedRowKeys: any, selectedRows: any) => {\n // modalRef.selectedRowsKey.length = 0;\n const remove_key: Array<number> = modalRef.selectedRowsKey.filter(\n item => selectedRowKeys.indexOf(Number(item)) == -1,\n );\n modalRef.selectedRowsTotal = modalRef.selectedRowsTotal.filter(\n item => remove_key.indexOf(item.id) == -1,\n );\n selectedRows.forEach((item: any) => {\n if (modalRef.selectedRowsKey.indexOf(item.id) == -1) {\n modalRef.selectedRowsTotal.push(item);\n }\n });\n\n modalRef.selectedRowsKey.length = 0;\n selectedRows.forEach((item: any) => {\n modalRef.selectedRowsKey.push(item.id);\n modalRef.datasource.push(item);\n });\n },\n };\n\n const {\n reload,\n setPageInfo,\n context: state,\n } = useFetchData(getData, {\n current: 1,\n pageSize: 20,\n tableSize: 'middle', // 'default' | 'middle' | 'small'\n stripe: true,\n requestParams: {\n ...search_modelRef,\n },\n });\n watch(\n () => state.dataSource,\n () => {\n const total_ids: Array<number> = modalRef.selectedRowsTotal.map(item => item.id);\n state.dataSource.map((item: any) => {\n if (total_ids.indexOf(item.id) > -1) {\n modalRef.selectedRowsKey.push(item.id);\n }\n });\n },\n );\n const init = () => {\n let list: any[] = [];\n if (props.value instanceof Array) {\n if (props.value.length > 0) {\n list = props.value as Array<number>;\n }\n } else {\n if (props.value) {\n list.push(props.value);\n }\n }\n if (list.length > 0) {\n const tmp_ids: any[] = [];\n const tmp_item_ids: any[] = [];\n modalRef.datasource.map(item => tmp_item_ids.push(item.id));\n list.map(item => {\n if (modalRef.selectedRows.indexOf(Number(item)) == -1) {\n modalRef.selectedRows.push(Number(item));\n modalRef.selectedRowsKey.push(Number(item));\n }\n if (tmp_item_ids.indexOf(item) == -1) {\n tmp_ids.push(item);\n }\n });\n if (tmp_ids.length > 0) {\n getData({ current: 1, ...search_modelRef, pageSize: 2000, ids: tmp_ids.join(',') }).then(\n function (res: any) {\n res.data.forEach(item => {\n if (list.indexOf(item.id) >= 0) {\n modalRef.datasource.push(item);\n modalRef.selectedRowsTotal.push(item);\n }\n });\n },\n );\n }\n } else {\n modalRef.selectedRows.length = 0;\n modalRef.selectedRowsKey.length = 0;\n modalRef.selectedRowsTotal.length = 0;\n }\n };\n init();\n\n watch(\n () => props.value,\n () => {\n init();\n },\n );\n\n const handleTableChange = ({ current, pageSize }: any, filters: any, sorter: any) => {\n console.log(sorter);\n setPageInfo({\n current,\n pageSize,\n ...filters,\n ...search_modelRef,\n });\n\n reload();\n };\n\n const { validateInfos: searchValidateInfos } = useForm(search_modelRef, {});\n\n const search = () => {\n setPageInfo({\n current: 1,\n ...search_modelRef,\n });\n reload();\n };\n\n return {\n props,\n modalRef,\n datasource,\n state,\n loading,\n getDateTime,\n getDate,\n getFullDate,\n getTime,\n search,\n handleTableChange,\n rowSelection,\n searchValidateInfos,\n search_modelRef,\n searchConfig,\n searchConfigOptions,\n getData,\n columnState,\n dynamicColumns,\n slotList,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <div class=\"remote-select-pro\">\n <!-- <a-layout-content>-->\n <a-select\n v-model:value=\"modalRef.selectedRows\"\n :allow-clear=\"field.allowClear !== false\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :filter-option=\"filterOption\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode == 'default' ? null : field.mode\"\n :placeholder=\"placeholder\"\n :show-search=\"field.show_search !== false\"\n size=\"small\"\n :autoClearSearchValue=\"false\"\n @change=\"handleChange\"\n @search=\"handleSearch\"\n style=\"min-width: 120px\"\n >\n <a-select-option\n v-for=\"option in datasource\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n <bold-matcher\n :text=\"option.label\"\n :pattern=\"searchText\"\n :color=\"field.searchColor\"\n />\n </a-select-option>\n </a-select>\n\n <div\n v-if=\"field.table?.enable\"\n class=\"table-search-icon\"\n style=\"margin-right: 5px\"\n >\n <FileSearchOutlined @click=\"handleOpenTable\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n watch,\n} from 'vue';\nimport { debounce, isEqual } from 'lodash-es';\nimport { convertValueByClassName, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport BoldMatcher from 'liyu-pc-base/components/FormRender/RemoteSelect/boldenText.vue';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useRequiredConditionStore, required_condition_event_obj } from 'liyu-pc-base/init-plugin';\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport md5 from 'blueimp-md5';\nimport { useRoute } from 'vue-router';\n\ntype Field = {\n label: string;\n mode: 'multiple' | 'tags' | 'combobox' | 'default';\n cb?: any;\n select_style: any;\n default: string;\n name: string;\n postUrl: string;\n searchConditions: any;\n queryType: string;\n simpleSearchConditions: any;\n maxTagCount: number;\n allowClear: boolean;\n defaultValue: any;\n disabled: boolean;\n show_search: boolean;\n searchColor: string;\n required_condition: any;\n defaultValueType: string;\n globalDefaultKey: string;\n globalDefaultField: string;\n extendedFields: string[];\n table: any;\n};\nexport default defineComponent({\n name: 'RemoteSelectPro',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKeyType: {\n type: Number,\n default: () => 0,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n default: () => [],\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n placeholder: {\n type: String,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n is_input: {\n type: Boolean,\n default: () => false,\n },\n init_watch: {\n // 普通查询监听字段 {监听key: 传参key}\n type: Object,\n default: () => {},\n },\n is_form_design: {\n type: Boolean,\n default: () => false,\n },\n innerModel: {\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: new Array<number | any>(),\n datasource: new Array<any>(),\n });\n const route = useRoute();\n const tableKey = ref('remoteSelectPro');\n const tableConfig = ref(null);\n const searchText = ref('');\n const requiredConditionStore = useRequiredConditionStore();\n const getConditionsItem = (value: any, list: any, item: any) => {\n if (item.operator === 'not_blank_not_null') {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: [],\n format: item.format,\n class_name: item.class_name,\n });\n } else if (value instanceof Array) {\n const [first] = value;\n if (isNotEmpty(first)) {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(value, item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n } else if (isNotEmpty(value)) {\n let val = value;\n if (item.operator === 'in' || item.operator === 'notin') {\n if (value.includes('[')) {\n val = JSON.parse(value);\n } else if (value.includes(',')) {\n val = value.split(',');\n }\n if (item.class_name === 'int') {\n val = val.map(Number);\n }\n }\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(val instanceof Array ? val : [val], item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n };\n function getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n const getConditions = (has_search = true) => {\n const conditions = [];\n let search_conditions = [\n [\n {\n searchType: 3,\n field_name: 'is_active',\n operator: 'eq',\n value: [true],\n format: 'choices',\n class_name: 'bool',\n },\n ],\n ];\n if (props.field.searchConditions) {\n search_conditions = props.field.searchConditions;\n }\n search_conditions.forEach((item: any) => {\n const list = [];\n item.forEach((item1: any) => {\n if (item1.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(\n (props.outModel ? props.outModel : props.formModel)[key],\n list,\n item1,\n );\n }\n });\n } else if (item1.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(props.formModel[key], list, item1);\n }\n });\n } else if (item1.searchType === 3) {\n getConditionsItem(item1.value, list, item1);\n } else if (item1.searchType === 4) {\n getConditionsItem(getNestedValue(props.context, item1.select_name), list, item1);\n } else {\n getConditionsItem(item1.value, list, item1);\n }\n });\n conditions.push(list);\n });\n if (searchText.value && has_search) {\n searchConfig.pageSize = 50;\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n let subSearch = conditions[index];\n if (!subSearch) {\n subSearch = [];\n conditions[index] = subSearch;\n }\n subSearch.push({\n field_name: key,\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n });\n } else {\n if (conditions.length === 0) {\n conditions.push([\n {\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n },\n ]);\n } else {\n for (const item of conditions) {\n item.push({\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n }\n }\n }\n }\n return conditions;\n };\n const getSimpleSearchParams = (has_search = true) => {\n const params = {};\n if (props.field.simpleSearchConditions) {\n props.field.simpleSearchConditions.forEach((item: any) => {\n if (item.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = (props.outModel ? props.outModel : props.formModel)[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = props.formModel[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 3) {\n params[item.field_name] = item.value;\n } else if (item.searchType === 4) {\n params[item.field_name] = getNestedValue(props.context, item.select_name);\n }\n });\n }\n if (searchText.value && has_search) {\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n params[key] = searchText.value;\n });\n } else {\n params[get_label_key()] = searchText.value;\n }\n }\n return params;\n };\n\n const searchConfig: any = {\n current: 1,\n pageSize: 200,\n is_pagination: true,\n request_source: 'strict',\n is_active: true,\n ...props.init_model, // 普通查询条件\n column_fields: [],\n sort_fields: [],\n conditions: [],\n simpleSearchParams: {},\n };\n const get_value_key = () => {\n return props.valueKey || 'id';\n };\n const get_label_key = () => {\n return props.labelKey || 'name';\n };\n const get_sort_fields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(...props.labelKeyList);\n } else {\n list.push(get_label_key());\n }\n return list;\n };\n const getColumnFields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(get_value_key(), ...props.labelKeyList);\n } else {\n list.push(get_value_key(), get_label_key());\n }\n if (props.field?.extendedFields && props.field?.extendedFields.length > 0) {\n list.push(...props.field.extendedFields);\n }\n // 去重\n const uniqueList = [...new Set(list)];\n searchConfig.column_fields = [].concat(uniqueList);\n };\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n if (props.init_model?.sort_fields) {\n searchConfig.sort_fields = props.init_model?.sort_fields;\n }\n const checkEqualSelected = value => {\n if (Array.isArray(modalRef.selectedRows)) {\n if (modalRef.selectedRows.includes(value)) {\n return true;\n }\n } else {\n if (modalRef.selectedRows === value) {\n return true;\n }\n }\n return false;\n };\n\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n // 已经选择的数据不处理labelKeyList\n if (props.labelKeyList && props.labelKeyList.length > 0 && props?.labelKeyType !== 1) {\n const label = [];\n for (const key of props.labelKeyList) {\n label.push(item[key as string]);\n }\n return {\n value: item[get_value_key()],\n label: label.join(props.labelSpace),\n };\n } else {\n return {\n value: item[get_value_key()],\n label: item[get_label_key()],\n };\n }\n });\n });\n const getDefaultValue = (dataList: any) => {\n if (dataList && !Array.isArray(dataList)) {\n dataList = [dataList];\n }\n if (\n props.field.default &&\n !props.formModel[props.field.name] &&\n props.field.mode == 'default' &&\n dataList.length > 0\n ) {\n props.formModel[props.field.name] = dataList[0];\n const foundItem = modalRef.datasource.find(item => {\n if (item[get_value_key()] == dataList[0]) {\n return true;\n }\n });\n if (foundItem) {\n emit('update:label', foundItem[get_label_key()]);\n }\n }\n if (props.field.mode == 'default') {\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const setInnerModel = () => {\n if (props.field.mode === 'default') {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems[0];\n }\n } else {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems;\n }\n }\n };\n let oldParams = {};\n watch(\n () => [props.formModel, props.context],\n () => {\n const newParams = getQueryParams(false);\n if (!isEqual(oldParams, newParams)) {\n oldParams = newParams;\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name] || props.formModel[props.field.name] === 0) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n // modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name];\n } else {\n modalRef.selectedRows = [];\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n },\n );\n watch(\n () => props.value,\n () => {\n setInnerModel();\n },\n { deep: true },\n );\n const handleRequiredConditionChange = (key: string) => {\n if (props.field.required_condition) {\n const item = props.field.required_condition.find((item: any) => item.key === key);\n if (item) {\n delayRefresh(true);\n }\n }\n };\n onMounted(() => {\n let tmpKey = `${route.path}_${props.field.name}_${props.field.postUrl}`;\n tableKey.value = 'remoteselectpro:' + md5(tmpKey);\n initDataSource();\n required_condition_event_obj().on('required_condition_change', handleRequiredConditionChange);\n refresh();\n });\n onUnmounted(() => {\n required_condition_event_obj().off(\n 'required_condition_change',\n handleRequiredConditionChange,\n );\n });\n const initDataSource = () => {\n if (props.field.mode === 'default') {\n if (props.value || props.value === 0) {\n if (get_value_key() === 'id') {\n if (isNaN(Number(props.value))) {\n modalRef.selectedRows.push(props.value);\n } else {\n modalRef.selectedRows.push(Number(props.value));\n }\n } else {\n modalRef.selectedRows.push(props.value);\n }\n }\n } else {\n if (typeof props.value === 'string') {\n (props.value as string).split(',').map((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value instanceof Array) {\n props.value.forEach((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n }\n };\n const handleChange = () => {\n if (props.field.mode == 'default') {\n emit('update:value', modalRef.selectedRows);\n const selectItems: any = datasource.value\n .filter((item: any) => {\n return modalRef.selectedRows == item.value;\n })\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n if (modalRef.selectedRows.length > 1) {\n emit('update:value', modalRef.selectedRows);\n } else {\n emit('update:value', modalRef.selectedRows);\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const getRequiredConditionObj = () => {\n const required_condition = props.field.required_condition;\n const required_condition_obj = {};\n if (required_condition) {\n required_condition.forEach((item: any) => {\n const value = requiredConditionStore.value_map[item.key];\n if (value !== undefined && value !== null) {\n required_condition_obj[item.field_name] = value;\n }\n });\n }\n return required_condition_obj;\n };\n /**\n * 补充之前选择的项对应的数据\n */\n const externDataSource = async (params, selectedRows) => {\n if (selectedRows && !Array.isArray(selectedRows)) {\n selectedRows = [selectedRows];\n }\n if (selectedRows && selectedRows.length > 0) {\n const notFoundValues = [];\n selectedRows.forEach((item1: any) => {\n if (!modalRef.datasource.some(item => item[get_value_key()] === item1)) {\n notFoundValues.push(item1);\n }\n });\n if (notFoundValues.length > 0) {\n const obj = { ...params };\n if (props.field.queryType === 'simple') {\n let value = notFoundValues as any;\n if (value instanceof Array && value.length > 0) {\n value = value.join(',');\n }\n obj[get_value_key()] = value;\n } else {\n if (obj.conditions && obj.conditions.length > 0) {\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n } else {\n obj.conditions = [[]];\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n }\n }\n const res1 = await getApiData({ ...obj }, props.field.postUrl, false, {\n skip_error: true,\n });\n modalRef.datasource = modalRef.datasource.concat(res1?.data || []);\n }\n }\n };\n const getQueryParams = (has_search = true) => {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams(has_search);\n params = {\n ...searchConfig,\n ...searchConfig.simpleSearchParams,\n required_condition: getRequiredConditionObj(),\n };\n delete params.conditions;\n delete params.simpleSearchParams;\n } else {\n searchConfig.conditions = getConditions(has_search);\n params = { ...searchConfig, required_condition: getRequiredConditionObj() };\n delete params.simpleSearchParams;\n }\n return params;\n };\n\n const refresh = async (clear = false) => {\n // modalRef.datasource.length = 0;\n // 不清空modalRef.datasource,保留原始数据,如果是输入过滤条件筛选的数据,需要去重后,追加到datasource里\n if (props.field.postUrl) {\n if (clear) {\n modalRef.datasource.length = 0;\n }\n const is_first = modalRef.datasource.length === 0;\n const params = getQueryParams();\n const res = await getApiData(params, props.field.postUrl, false, { skip_error: true });\n if (res?.data?.length > 0) {\n const rowKey = get_value_key();\n const new_list = res?.data.filter(i => {\n const f = modalRef.datasource.find(j => {\n return i[rowKey] == j[rowKey];\n });\n return !f;\n });\n modalRef.datasource = modalRef.datasource.concat(new_list);\n if (is_first) {\n await externDataSource(params, modalRef.selectedRows);\n }\n setInnerModel();\n }\n\n if (props.field.defaultValueType === 'first' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', modalRef.datasource[0][get_label_key()]);\n emit('update:value', modalRef.datasource[0][get_value_key()]);\n } else {\n emit('update:label', [modalRef.datasource[0][get_label_key()]]);\n emit('update:value', [modalRef.datasource[0][get_value_key()]]);\n }\n }\n } else if (props.field.defaultValueType === 'global' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n const globalDefaultKey = props.field.globalDefaultKey;\n const globalDefaultField = props.field.globalDefaultField;\n const globalDefaultValue = requiredConditionStore.value_map[globalDefaultKey];\n if (globalDefaultValue) {\n const globalDefaultItem = modalRef.datasource.find(\n item1 => item1[globalDefaultField] === globalDefaultValue,\n );\n if (globalDefaultItem) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', globalDefaultItem[get_label_key()]);\n emit('update:value', globalDefaultItem[get_value_key()]);\n } else {\n emit('update:label', [globalDefaultItem[get_label_key()]]);\n emit('update:value', [globalDefaultItem[get_value_key()]]);\n }\n }\n }\n }\n } else {\n getDefaultValue(modalRef.selectedRows);\n }\n }\n };\n const delayRefresh: any = debounce((clear = false) => {\n refresh(clear);\n }, 500);\n watch(\n () => [\n props.labelKeyList,\n props.labelKey,\n props.labelKeyType,\n props.valueKey,\n props.labelSpace,\n props.field.postUrl,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => [\n props.field.searchConditions,\n props.field.queryType,\n props.field.simpleSearchConditions,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n\n const handleSearch = (str: any) => {\n searchText.value = str;\n delayRefresh();\n };\n const tableModal = defineAsyncComponent(() => import('./tableModal.vue'));\n const handleOpenTable = () => {\n let currentValue = [];\n searchText.value = '';\n let rowSelectionType = 'checkbox';\n if (props.field.mode === 'default') {\n rowSelectionType = 'radio';\n }\n if (!datasource.value) {\n currentValue = [];\n } else {\n currentValue = datasource.value.filter((item: any) => checkEqualSelected(item.value));\n }\n tableConfig.value = {\n key: tableKey.value,\n title: props.field.label || props.field.name,\n rowSelectionType,\n columns: props.field.table?.columns || [],\n search_config: props.field.table?.search_config || [],\n list_url: props.field.postUrl,\n is_selection: true,\n is_pagination: true,\n hide_header: true,\n };\n const init_model = props.init_model || {};\n if (props.field.queryType === 'simple') {\n tableConfig.value['query_params'] = { ...init_model, ...getSimpleSearchParams() };\n } else {\n const conditions = getConditions();\n tableConfig.value['query_params'] = init_model;\n if (conditions.length > 0 && conditions[0].length > 0) {\n tableConfig.value['base_conditions'] = conditions[0];\n }\n }\n const required_condition = getRequiredConditionObj();\n if (required_condition) {\n tableConfig.value['query_params'] = {\n ...tableConfig.value['query_params'],\n required_condition,\n };\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n component: tableModal,\n isMultiple: props.field.mode !== 'default',\n tableConfig: tableConfig.value,\n labelKey: props.labelKey || 'name',\n value: currentValue,\n labelKeyList: props.labelKeyList || [],\n labelKeyType: props.labelKeyType || 1,\n labelSpace: props.labelSpace || '-',\n valueKey: props.valueKey || 'id',\n ok: async (data: any) => {\n const selectedValues = data.map((item: any) => item.value) || [];\n const selectedLabels = data.map((item: any) => item.label) || [];\n const params = getQueryParams();\n if (props.field.mode == 'default') {\n if (selectedValues.length == 0) {\n modalRef.selectedRows = undefined;\n emit('update:value', modalRef.selectedRows);\n emit('update:label', undefined);\n } else {\n modalRef.selectedRows = selectedValues[0];\n await externDataSource(params, selectedValues[0]);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels[0]);\n }\n } else {\n modalRef.selectedRows = selectedValues;\n await externDataSource(params, selectedValues);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels);\n }\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n\n const filterOption = (val: string, option: any) => {\n if (datasource.value instanceof Array) {\n const f: any = datasource.value.find(item => {\n return item['value'] == option.key;\n });\n if (f) {\n return String(f['label']).toLowerCase().indexOf(val.toLowerCase()) >= 0;\n } else {\n return false;\n }\n }\n };\n\n return {\n props,\n modalRef,\n searchText,\n datasource,\n handleChange,\n handleSearch,\n filterOption,\n handleOpenTable,\n tableConfig,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: { BoldMatcher },\n});\n</script>\n<style scoped lang=\"less\">\n.remote-select-pro {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n flex-wrap: nowrap;\n}\n.ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: flex;\n }\n}\n.ant-form-inline {\n .ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: inline-flex;\n }\n }\n}\n.table-search-icon {\n color: black;\n font-size: 17px;\n}\n</style>\n","<template>\n <div class=\"remote-select-pro\">\n <!-- <a-layout-content>-->\n <a-select\n v-model:value=\"modalRef.selectedRows\"\n :allow-clear=\"field.allowClear !== false\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :filter-option=\"filterOption\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode == 'default' ? null : field.mode\"\n :placeholder=\"placeholder\"\n :show-search=\"field.show_search !== false\"\n size=\"small\"\n :autoClearSearchValue=\"false\"\n @change=\"handleChange\"\n @search=\"handleSearch\"\n style=\"min-width: 120px\"\n >\n <a-select-option\n v-for=\"option in datasource\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n <bold-matcher\n :text=\"option.label\"\n :pattern=\"searchText\"\n :color=\"field.searchColor\"\n />\n </a-select-option>\n </a-select>\n\n <div\n v-if=\"field.table?.enable\"\n class=\"table-search-icon\"\n style=\"margin-right: 5px\"\n >\n <FileSearchOutlined @click=\"handleOpenTable\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n watch,\n} from 'vue';\nimport { debounce, isEqual } from 'lodash-es';\nimport { convertValueByClassName, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport BoldMatcher from 'liyu-pc-base/components/FormRender/RemoteSelect/boldenText.vue';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useRequiredConditionStore, required_condition_event_obj } from 'liyu-pc-base/init-plugin';\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport md5 from 'blueimp-md5';\nimport { useRoute } from 'vue-router';\n\ntype Field = {\n label: string;\n mode: 'multiple' | 'tags' | 'combobox' | 'default';\n cb?: any;\n select_style: any;\n default: string;\n name: string;\n postUrl: string;\n searchConditions: any;\n queryType: string;\n simpleSearchConditions: any;\n maxTagCount: number;\n allowClear: boolean;\n defaultValue: any;\n disabled: boolean;\n show_search: boolean;\n searchColor: string;\n required_condition: any;\n defaultValueType: string;\n globalDefaultKey: string;\n globalDefaultField: string;\n extendedFields: string[];\n table: any;\n};\nexport default defineComponent({\n name: 'RemoteSelectPro',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKeyType: {\n type: Number,\n default: () => 0,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n default: () => [],\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n placeholder: {\n type: String,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n is_input: {\n type: Boolean,\n default: () => false,\n },\n init_watch: {\n // 普通查询监听字段 {监听key: 传参key}\n type: Object,\n default: () => {},\n },\n is_form_design: {\n type: Boolean,\n default: () => false,\n },\n innerModel: {\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: new Array<number | any>(),\n datasource: new Array<any>(),\n });\n const route = useRoute();\n const tableKey = ref('remoteSelectPro');\n const tableConfig = ref(null);\n const searchText = ref('');\n const requiredConditionStore = useRequiredConditionStore();\n const getConditionsItem = (value: any, list: any, item: any) => {\n if (item.operator === 'not_blank_not_null') {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: [],\n format: item.format,\n class_name: item.class_name,\n });\n } else if (value instanceof Array) {\n const [first] = value;\n if (isNotEmpty(first)) {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(value, item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n } else if (isNotEmpty(value)) {\n let val = value;\n if (item.operator === 'in' || item.operator === 'notin') {\n if (value.includes('[')) {\n val = JSON.parse(value);\n } else if (value.includes(',')) {\n val = value.split(',');\n }\n if (item.class_name === 'int') {\n val = val.map(Number);\n }\n }\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(val instanceof Array ? val : [val], item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n };\n function getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n const getConditions = (has_search = true) => {\n const conditions = [];\n let search_conditions = [\n [\n {\n searchType: 3,\n field_name: 'is_active',\n operator: 'eq',\n value: [true],\n format: 'choices',\n class_name: 'bool',\n },\n ],\n ];\n if (props.field.searchConditions) {\n search_conditions = props.field.searchConditions;\n }\n search_conditions.forEach((item: any) => {\n const list = [];\n item.forEach((item1: any) => {\n if (item1.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(\n (props.outModel ? props.outModel : props.formModel)[key],\n list,\n item1,\n );\n }\n });\n } else if (item1.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(props.formModel[key], list, item1);\n }\n });\n } else if (item1.searchType === 3) {\n getConditionsItem(item1.value, list, item1);\n } else if (item1.searchType === 4) {\n getConditionsItem(getNestedValue(props.context, item1.select_name), list, item1);\n } else {\n getConditionsItem(item1.value, list, item1);\n }\n });\n conditions.push(list);\n });\n if (searchText.value && has_search) {\n searchConfig.pageSize = 50;\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n let subSearch = conditions[index];\n if (!subSearch) {\n subSearch = [];\n conditions[index] = subSearch;\n }\n subSearch.push({\n field_name: key,\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n });\n } else {\n if (conditions.length === 0) {\n conditions.push([\n {\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n },\n ]);\n } else {\n for (const item of conditions) {\n item.push({\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n }\n }\n }\n }\n return conditions;\n };\n const getSimpleSearchParams = (has_search = true) => {\n const params = {};\n if (props.field.simpleSearchConditions) {\n props.field.simpleSearchConditions.forEach((item: any) => {\n if (item.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = (props.outModel ? props.outModel : props.formModel)[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = props.formModel[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 3) {\n params[item.field_name] = item.value;\n } else if (item.searchType === 4) {\n params[item.field_name] = getNestedValue(props.context, item.select_name);\n }\n });\n }\n if (searchText.value && has_search) {\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n params[key] = searchText.value;\n });\n } else {\n params[get_label_key()] = searchText.value;\n }\n }\n return params;\n };\n\n const searchConfig: any = {\n current: 1,\n pageSize: 200,\n is_pagination: true,\n request_source: 'strict',\n is_active: true,\n ...props.init_model, // 普通查询条件\n column_fields: [],\n sort_fields: [],\n conditions: [],\n simpleSearchParams: {},\n };\n const get_value_key = () => {\n return props.valueKey || 'id';\n };\n const get_label_key = () => {\n return props.labelKey || 'name';\n };\n const get_sort_fields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(...props.labelKeyList);\n } else {\n list.push(get_label_key());\n }\n return list;\n };\n const getColumnFields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(get_value_key(), ...props.labelKeyList);\n } else {\n list.push(get_value_key(), get_label_key());\n }\n if (props.field?.extendedFields && props.field?.extendedFields.length > 0) {\n list.push(...props.field.extendedFields);\n }\n // 去重\n const uniqueList = [...new Set(list)];\n searchConfig.column_fields = [].concat(uniqueList);\n };\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n if (props.init_model?.sort_fields) {\n searchConfig.sort_fields = props.init_model?.sort_fields;\n }\n const checkEqualSelected = value => {\n if (Array.isArray(modalRef.selectedRows)) {\n if (modalRef.selectedRows.includes(value)) {\n return true;\n }\n } else {\n if (modalRef.selectedRows === value) {\n return true;\n }\n }\n return false;\n };\n\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n // 已经选择的数据不处理labelKeyList\n if (props.labelKeyList && props.labelKeyList.length > 0 && props?.labelKeyType !== 1) {\n const label = [];\n for (const key of props.labelKeyList) {\n label.push(item[key as string]);\n }\n return {\n value: item[get_value_key()],\n label: label.join(props.labelSpace),\n };\n } else {\n return {\n value: item[get_value_key()],\n label: item[get_label_key()],\n };\n }\n });\n });\n const getDefaultValue = (dataList: any) => {\n if (dataList && !Array.isArray(dataList)) {\n dataList = [dataList];\n }\n if (\n props.field.default &&\n !props.formModel[props.field.name] &&\n props.field.mode == 'default' &&\n dataList.length > 0\n ) {\n props.formModel[props.field.name] = dataList[0];\n const foundItem = modalRef.datasource.find(item => {\n if (item[get_value_key()] == dataList[0]) {\n return true;\n }\n });\n if (foundItem) {\n emit('update:label', foundItem[get_label_key()]);\n }\n }\n if (props.field.mode == 'default') {\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const setInnerModel = () => {\n if (props.field.mode === 'default') {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems[0];\n }\n } else {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems;\n }\n }\n };\n let oldParams = {};\n watch(\n () => [props.formModel, props.context],\n () => {\n const newParams = getQueryParams(false);\n if (!isEqual(oldParams, newParams)) {\n oldParams = newParams;\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name] || props.formModel[props.field.name] === 0) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n // modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name];\n } else {\n modalRef.selectedRows = [];\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n },\n );\n watch(\n () => props.value,\n () => {\n setInnerModel();\n },\n { deep: true },\n );\n const handleRequiredConditionChange = (key: string) => {\n if (props.field.required_condition) {\n const item = props.field.required_condition.find((item: any) => item.key === key);\n if (item) {\n delayRefresh(true);\n }\n }\n };\n onMounted(() => {\n let tmpKey = `${route.path}_${props.field.name}_${props.field.postUrl}`;\n tableKey.value = 'remoteselectpro:' + md5(tmpKey);\n initDataSource();\n required_condition_event_obj().on('required_condition_change', handleRequiredConditionChange);\n refresh();\n });\n onUnmounted(() => {\n required_condition_event_obj().off(\n 'required_condition_change',\n handleRequiredConditionChange,\n );\n });\n const initDataSource = () => {\n if (props.field.mode === 'default') {\n if (props.value || props.value === 0) {\n if (get_value_key() === 'id') {\n if (isNaN(Number(props.value))) {\n modalRef.selectedRows.push(props.value);\n } else {\n modalRef.selectedRows.push(Number(props.value));\n }\n } else {\n modalRef.selectedRows.push(props.value);\n }\n }\n } else {\n if (typeof props.value === 'string') {\n (props.value as string).split(',').map((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value instanceof Array) {\n props.value.forEach((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n }\n };\n const handleChange = () => {\n if (props.field.mode == 'default') {\n emit('update:value', modalRef.selectedRows);\n const selectItems: any = datasource.value\n .filter((item: any) => {\n return modalRef.selectedRows == item.value;\n })\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n if (modalRef.selectedRows.length > 1) {\n emit('update:value', modalRef.selectedRows);\n } else {\n emit('update:value', modalRef.selectedRows);\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const getRequiredConditionObj = () => {\n const required_condition = props.field.required_condition;\n const required_condition_obj = {};\n if (required_condition) {\n required_condition.forEach((item: any) => {\n const value = requiredConditionStore.value_map[item.key];\n if (value !== undefined && value !== null) {\n required_condition_obj[item.field_name] = value;\n }\n });\n }\n return required_condition_obj;\n };\n /**\n * 补充之前选择的项对应的数据\n */\n const externDataSource = async (params, selectedRows) => {\n if (selectedRows && !Array.isArray(selectedRows)) {\n selectedRows = [selectedRows];\n }\n if (selectedRows && selectedRows.length > 0) {\n const notFoundValues = [];\n selectedRows.forEach((item1: any) => {\n if (!modalRef.datasource.some(item => item[get_value_key()] === item1)) {\n notFoundValues.push(item1);\n }\n });\n if (notFoundValues.length > 0) {\n const obj = { ...params };\n if (props.field.queryType === 'simple') {\n let value = notFoundValues as any;\n if (value instanceof Array && value.length > 0) {\n value = value.join(',');\n }\n obj[get_value_key()] = value;\n } else {\n if (obj.conditions && obj.conditions.length > 0) {\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n } else {\n obj.conditions = [[]];\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n }\n }\n const res1 = await getApiData({ ...obj }, props.field.postUrl, false, {\n skip_error: true,\n });\n modalRef.datasource = modalRef.datasource.concat(res1?.data || []);\n }\n }\n };\n const getQueryParams = (has_search = true) => {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams(has_search);\n params = {\n ...searchConfig,\n ...searchConfig.simpleSearchParams,\n required_condition: getRequiredConditionObj(),\n };\n delete params.conditions;\n delete params.simpleSearchParams;\n } else {\n searchConfig.conditions = getConditions(has_search);\n params = { ...searchConfig, required_condition: getRequiredConditionObj() };\n delete params.simpleSearchParams;\n }\n return params;\n };\n\n const refresh = async (clear = false) => {\n // modalRef.datasource.length = 0;\n // 不清空modalRef.datasource,保留原始数据,如果是输入过滤条件筛选的数据,需要去重后,追加到datasource里\n if (props.field.postUrl) {\n if (clear) {\n modalRef.datasource.length = 0;\n }\n const is_first = modalRef.datasource.length === 0;\n const params = getQueryParams();\n const res = await getApiData(params, props.field.postUrl, false, { skip_error: true });\n if (res?.data?.length > 0) {\n const rowKey = get_value_key();\n const new_list = res?.data.filter(i => {\n const f = modalRef.datasource.find(j => {\n return i[rowKey] == j[rowKey];\n });\n return !f;\n });\n modalRef.datasource = modalRef.datasource.concat(new_list);\n if (is_first) {\n await externDataSource(params, modalRef.selectedRows);\n }\n setInnerModel();\n }\n\n if (props.field.defaultValueType === 'first' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', modalRef.datasource[0][get_label_key()]);\n emit('update:value', modalRef.datasource[0][get_value_key()]);\n } else {\n emit('update:label', [modalRef.datasource[0][get_label_key()]]);\n emit('update:value', [modalRef.datasource[0][get_value_key()]]);\n }\n }\n } else if (props.field.defaultValueType === 'global' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n const globalDefaultKey = props.field.globalDefaultKey;\n const globalDefaultField = props.field.globalDefaultField;\n const globalDefaultValue = requiredConditionStore.value_map[globalDefaultKey];\n if (globalDefaultValue) {\n const globalDefaultItem = modalRef.datasource.find(\n item1 => item1[globalDefaultField] === globalDefaultValue,\n );\n if (globalDefaultItem) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', globalDefaultItem[get_label_key()]);\n emit('update:value', globalDefaultItem[get_value_key()]);\n } else {\n emit('update:label', [globalDefaultItem[get_label_key()]]);\n emit('update:value', [globalDefaultItem[get_value_key()]]);\n }\n }\n }\n }\n } else {\n getDefaultValue(modalRef.selectedRows);\n }\n }\n };\n const delayRefresh: any = debounce((clear = false) => {\n refresh(clear);\n }, 500);\n watch(\n () => [\n props.labelKeyList,\n props.labelKey,\n props.labelKeyType,\n props.valueKey,\n props.labelSpace,\n props.field.postUrl,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => [\n props.field.searchConditions,\n props.field.queryType,\n props.field.simpleSearchConditions,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n\n const handleSearch = (str: any) => {\n searchText.value = str;\n delayRefresh();\n };\n const tableModal = defineAsyncComponent(() => import('./tableModal.vue'));\n const handleOpenTable = () => {\n let currentValue = [];\n searchText.value = '';\n let rowSelectionType = 'checkbox';\n if (props.field.mode === 'default') {\n rowSelectionType = 'radio';\n }\n if (!datasource.value) {\n currentValue = [];\n } else {\n currentValue = datasource.value.filter((item: any) => checkEqualSelected(item.value));\n }\n tableConfig.value = {\n key: tableKey.value,\n title: props.field.label || props.field.name,\n rowSelectionType,\n columns: props.field.table?.columns || [],\n search_config: props.field.table?.search_config || [],\n list_url: props.field.postUrl,\n is_selection: true,\n is_pagination: true,\n hide_header: true,\n };\n const init_model = props.init_model || {};\n if (props.field.queryType === 'simple') {\n tableConfig.value['query_params'] = { ...init_model, ...getSimpleSearchParams() };\n } else {\n const conditions = getConditions();\n tableConfig.value['query_params'] = init_model;\n if (conditions.length > 0 && conditions[0].length > 0) {\n tableConfig.value['base_conditions'] = conditions[0];\n }\n }\n const required_condition = getRequiredConditionObj();\n if (required_condition) {\n tableConfig.value['query_params'] = {\n ...tableConfig.value['query_params'],\n required_condition,\n };\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n component: tableModal,\n isMultiple: props.field.mode !== 'default',\n tableConfig: tableConfig.value,\n labelKey: props.labelKey || 'name',\n value: currentValue,\n labelKeyList: props.labelKeyList || [],\n labelKeyType: props.labelKeyType || 1,\n labelSpace: props.labelSpace || '-',\n valueKey: props.valueKey || 'id',\n ok: async (data: any) => {\n const selectedValues = data.map((item: any) => item.value) || [];\n const selectedLabels = data.map((item: any) => item.label) || [];\n const params = getQueryParams();\n if (props.field.mode == 'default') {\n if (selectedValues.length == 0) {\n modalRef.selectedRows = undefined;\n emit('update:value', modalRef.selectedRows);\n emit('update:label', undefined);\n } else {\n modalRef.selectedRows = selectedValues[0];\n await externDataSource(params, selectedValues[0]);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels[0]);\n }\n } else {\n modalRef.selectedRows = selectedValues;\n await externDataSource(params, selectedValues);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels);\n }\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n\n const filterOption = (val: string, option: any) => {\n if (datasource.value instanceof Array) {\n const f: any = datasource.value.find(item => {\n return item['value'] == option.key;\n });\n if (f) {\n return String(f['label']).toLowerCase().indexOf(val.toLowerCase()) >= 0;\n } else {\n return false;\n }\n }\n };\n\n return {\n props,\n modalRef,\n searchText,\n datasource,\n handleChange,\n handleSearch,\n filterOption,\n handleOpenTable,\n tableConfig,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: { BoldMatcher },\n});\n</script>\n<style scoped lang=\"less\">\n.remote-select-pro {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n flex-wrap: nowrap;\n}\n.ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: flex;\n }\n}\n.ant-form-inline {\n .ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: inline-flex;\n }\n }\n}\n.table-search-icon {\n color: black;\n font-size: 17px;\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RemoteSelectPro-C-LgAnnI.js","names":[],"sources":["../src/components/FormRender/RemoteTreeSelect/index.ts","../src/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue","../src/components/FormRender/RemoteTreeSelect/RemoteTreeSelect.vue","../src/components/FormRender/RemoteTable/RemoteTable.vue","../src/components/FormRender/RemoteTable/RemoteTable.vue","../src/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue","../src/components/FormRender/RemoteSelectPro/RemoteSelectPro.vue"],"sourcesContent":["import type { RemoteTreeSelect } from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/typing';\nimport { useGlobMap } from 'liyu-pc-base/init-plugin';\n\nconst res_components: { [key: string]: any } = {};\nconst init = () => {\n if (Object.keys(res_components).length > 0) {\n return;\n }\n const allComponents: any = import.meta.glob(\n 'liyu-pc-base/components/FormRender/RemoteTreeSelect/*/*.ts',\n {\n eager: true,\n },\n );\n const customComponents = useGlobMap('remoteTreeSelect');\n Object.assign(allComponents, customComponents);\n Object.keys(allComponents).forEach(full_file_name => {\n const file_name_list = full_file_name.split('/');\n const file_name = file_name_list[file_name_list.length - 1].replace('.ts', '');\n res_components[file_name] = allComponents[full_file_name].default;\n });\n};\nexport default (modalType: string): RemoteTreeSelect => {\n init();\n if (res_components[modalType] == undefined) {\n console.error('remotetreeselect没有组件:' + modalType);\n return {\n getData: undefined,\n searchConfig: undefined,\n };\n }\n return {\n ...res_components[modalType](`remotetreeselect_${modalType}`),\n };\n};\n","<template>\n <a-layout\n width=\"100%\"\n style=\"min-width: 190px\"\n >\n <a-layout-content>\n <a-tree-select\n v-model:value=\"modalRef.selectedRows\"\n size=\"small\"\n style=\"min-width: 150px\"\n :placeholder=\"field.placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :allow-clear=\"field.allowClear\"\n :tree-data=\"modalRef.datasource\"\n :tree-checkable=\"field.multiple\"\n :tree-node-filter-prop=\"field.valueKey\"\n :tree-label-prop=\"field.labelKey\"\n :dropdownStyle=\"{ maxHeight: '400px' }\"\n @change=\"handleChange\"\n />\n </a-layout-content>\n <a-layout-sider\n width=\"30px\"\n style=\"background: rgba(0, 0, 0, 0)\"\n >\n <a-button\n size=\"small\"\n style=\"width: 30px\"\n @click=\"btnClick(true)\"\n type=\"text\"\n >\n <template #icon>\n <reload-outlined />\n </template>\n </a-button>\n </a-layout-sider>\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/index';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'RemoteTreeSelect',\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n search_config: {\n type: Object,\n required: false,\n default: () => {},\n },\n label: {\n type: [Array, String],\n required: false,\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef: any = reactive({\n selectedRows: [],\n datasource: [],\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n });\n\n if (props.value) {\n modalRef.selectedRows.push(props.value);\n }\n\n const getLabelFromDatasource = (datasource: Array<any>) => {\n const labelList: Array<string> = [];\n datasource.forEach((item: any) => {\n if (\n modalRef.selectedRows instanceof Array &&\n modalRef.selectedRows.includes(item[props.field.valueKey])\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (\n !(modalRef.selectedRows instanceof Array) &&\n modalRef.selectedRows == item[props.field.valueKey]\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (item.children && item.children.length > 0) {\n getLabelFromDatasource(item.children).forEach(obj => labelList.push(obj));\n }\n });\n return labelList;\n };\n\n const handleChange = () => {\n emit('update:value', modalRef.selectedRows);\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n };\n\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name]) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else {\n //modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n },\n );\n\n const btnClick = (noCache?: boolean) => {\n if (noCache) {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n }\n\n getData({ ...search_modelRef, ...props.search_config }, noCache)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n if (modalRef.datasource.length > 0 && modalRef.selectedRows.length > 0) {\n if (\n typeof modalRef.datasource[0][props.field.valueKey] == 'number' &&\n typeof modalRef.selectedRows[0] == 'string'\n ) {\n const list: Array<number> = [];\n modalRef.selectedRows.map((item: string) => {\n item.split(',').map(obj => {\n list.push(Number(obj));\n });\n });\n if (props.field.multiple) {\n modalRef.selectedRows = list;\n } else {\n if (list.length > 1) {\n list.length = 1;\n }\n modalRef.selectedRows = list;\n }\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n if (noCache) {\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n }\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n };\n btnClick();\n\n return {\n props,\n modalRef,\n search_modelRef,\n handleChange,\n btnClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-layout\n width=\"100%\"\n style=\"min-width: 190px\"\n >\n <a-layout-content>\n <a-tree-select\n v-model:value=\"modalRef.selectedRows\"\n size=\"small\"\n style=\"min-width: 150px\"\n :placeholder=\"field.placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :allow-clear=\"field.allowClear\"\n :tree-data=\"modalRef.datasource\"\n :tree-checkable=\"field.multiple\"\n :tree-node-filter-prop=\"field.valueKey\"\n :tree-label-prop=\"field.labelKey\"\n :dropdownStyle=\"{ maxHeight: '400px' }\"\n @change=\"handleChange\"\n />\n </a-layout-content>\n <a-layout-sider\n width=\"30px\"\n style=\"background: rgba(0, 0, 0, 0)\"\n >\n <a-button\n size=\"small\"\n style=\"width: 30px\"\n @click=\"btnClick(true)\"\n type=\"text\"\n >\n <template #icon>\n <reload-outlined />\n </template>\n </a-button>\n </a-layout-sider>\n </a-layout>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, watch } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteTreeSelect/index';\nimport { message } from 'ant-design-vue';\n\nexport default defineComponent({\n name: 'RemoteTreeSelect',\n props: {\n field: {\n type: Object,\n required: true,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n search_config: {\n type: Object,\n required: false,\n default: () => {},\n },\n label: {\n type: [Array, String],\n required: false,\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef: any = reactive({\n selectedRows: [],\n datasource: [],\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n });\n\n if (props.value) {\n modalRef.selectedRows.push(props.value);\n }\n\n const getLabelFromDatasource = (datasource: Array<any>) => {\n const labelList: Array<string> = [];\n datasource.forEach((item: any) => {\n if (\n modalRef.selectedRows instanceof Array &&\n modalRef.selectedRows.includes(item[props.field.valueKey])\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (\n !(modalRef.selectedRows instanceof Array) &&\n modalRef.selectedRows == item[props.field.valueKey]\n ) {\n labelList.push(item[props.field.labelKey]);\n }\n if (item.children && item.children.length > 0) {\n getLabelFromDatasource(item.children).forEach(obj => labelList.push(obj));\n }\n });\n return labelList;\n };\n\n const handleChange = () => {\n emit('update:value', modalRef.selectedRows);\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n };\n\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name]) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n } else {\n //modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name].map((item: any) => {\n return item;\n });\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n },\n );\n\n const btnClick = (noCache?: boolean) => {\n if (noCache) {\n message.loading({ content: '刷新数据……', key: props.field.modalType });\n }\n\n getData({ ...search_modelRef, ...props.search_config }, noCache)\n .then(function (res: ReponseData<any>) {\n modalRef.datasource = res.data;\n if (modalRef.datasource.length > 0 && modalRef.selectedRows.length > 0) {\n if (\n typeof modalRef.datasource[0][props.field.valueKey] == 'number' &&\n typeof modalRef.selectedRows[0] == 'string'\n ) {\n const list: Array<number> = [];\n modalRef.selectedRows.map((item: string) => {\n item.split(',').map(obj => {\n list.push(Number(obj));\n });\n });\n if (props.field.multiple) {\n modalRef.selectedRows = list;\n } else {\n if (list.length > 1) {\n list.length = 1;\n }\n modalRef.selectedRows = list;\n }\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n if (noCache) {\n message.success({ content: '刷新数据成功', key: props.field.modalType, duration: 2 });\n }\n })\n .catch(() => {\n message.destroy();\n message.error('接口调用失败', 10);\n });\n };\n btnClick();\n\n return {\n props,\n modalRef,\n search_modelRef,\n handleChange,\n btnClick,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-table\n :bordered=\"true\"\n size=\"small\"\n :loading=\"state.loading\"\n :scroll=\"{ y: 400, x: columnState.tableWidth }\"\n :row-selection=\"rowSelection\"\n :columns=\"dynamicColumns\"\n row-key=\"id\"\n :data-source=\"state.dataSource\"\n :pagination=\"{\n current: state.current,\n pageSize: state.pageSize,\n total: state.total,\n }\"\n @change=\"handleTableChange\"\n >\n <template\n v-for=\"item in slotList\"\n v-slot:[item.slotName]=\"{ index, text }\"\n :key=\"item.slotName\"\n >\n <span v-if=\"item.slotName === 'index'\">\n {{ index + 1 + state.pageSize * (state.current - 1) }}\n </span>\n <span v-if=\"item.type === 'custom'\">\n {{ item['field_' + text] }}\n </span>\n <span v-if=\"item.type === 'datetime'\">\n {{ getDateTime(text) }}\n </span>\n <span v-if=\"item.type === 'date'\">\n {{ getDate(text) }}\n </span>\n <span v-if=\"item.type === 'full_date'\">\n {{ getFullDate(text) }}\n </span>\n <span v-if=\"item.type === 'time'\">\n {{ getTime(text) }}\n </span>\n <a-tag\n color=\"green\"\n v-if=\"text && item.type === 'boolean'\"\n >\n {{ item.name1 }}\n </a-tag>\n <a-tag\n color=\"red\"\n v-if=\"!text && item.type === 'boolean'\"\n >\n {{ item.name2 }}\n </a-tag>\n <template v-if=\"item.type === 'list'\">\n <a-tag\n color=\"#87d068\"\n v-for=\"obj in text\"\n :key=\"obj.id\"\n style=\"margin-bottom: 1px\"\n >\n {{ obj.name }}\n </a-tag>\n </template>\n </template>\n </a-table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\n// import { ColumnProps } from 'ant-design-vue/es/table/interface';\nimport { useFetchData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport { useForm } from 'ant-design-vue/es/form';\n\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteModal/index';\nimport { useTableDynamicColumns } from 'liyu-pc-base/utils/hooks/useTableColumn';\nimport { getDate, getDateTime, getFullDate, getTime } from 'liyu-pc-base/utils/function';\n\n// type Key = ColumnProps['key'];\n\n// interface DataType {\n// id: number;\n// key: Key;\n// name: string;\n// }\n\nexport default defineComponent({\n name: 'RemoteTable',\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 field_status: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const loading = ref(false);\n const { searchConfig, searchConfigOptions, getData, columns, slotList } = getFormConfig(\n props.modalType,\n );\n const search_modelRef = reactive({\n ...searchConfig.model,\n is_active: true,\n ...props.init_model,\n });\n\n for (const field of searchConfig.fields) {\n if (props.field_status && props.field_status.hasOwnProperty(field.name)) {\n if (props.field_status[field.name] == 0) {\n field.disabled = true;\n field.hidden = false;\n } else if (props.field_status[field.name] == 1) {\n field.disabled = false;\n field.hidden = true;\n } else {\n field.disabled = false;\n field.hidden = false;\n }\n }\n }\n\n const old_obj: { [key: string]: any } = {};\n onMounted(() => {\n if (props.watch) {\n for (const k of props.watch) {\n if (props.formModel) {\n old_obj[k as string] = props.formModel[k as string];\n }\n }\n }\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n search_modelRef[k as string] = props.formModel[k as string];\n watch(\n () => props.formModel[k as string],\n () => {\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n if (old_obj[k as string] != props.formModel[k as string]) {\n search_modelRef[k as string] = props.formModel[k as string];\n }\n }\n }\n },\n { immediate: true },\n );\n }\n }\n });\n\n const { state: columnState, dynamicColumns } = useTableDynamicColumns(columns, {\n checkAll: false,\n needRowIndex: false,\n });\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n return {\n value: item[props.field.valueKey ? (props.field.valueKey as string) : 'id'],\n label: item[props.field.labelKey ? (props.field.labelKey as string) : 'name'],\n };\n });\n });\n const modalRef = reactive({\n visible: false,\n selectedRows: new Array<number>(),\n selectedRowsKey: new Array<number>(),\n selectedRowsTotal: new Array<any>(),\n datasource: new Array<any>(),\n });\n\n const rowSelection = {\n type:\n props.field.mode == 'default'\n ? 'radio'\n : props.field.mode == 'multiple'\n ? 'checkbox'\n : 'checkbox',\n columnWidth: '30px',\n selectedRowKeys: modalRef.selectedRowsKey,\n onChange: (selectedRowKeys: any, selectedRows: any) => {\n // modalRef.selectedRowsKey.length = 0;\n const remove_key: Array<number> = modalRef.selectedRowsKey.filter(\n item => selectedRowKeys.indexOf(Number(item)) == -1,\n );\n modalRef.selectedRowsTotal = modalRef.selectedRowsTotal.filter(\n item => remove_key.indexOf(item.id) == -1,\n );\n selectedRows.forEach((item: any) => {\n if (modalRef.selectedRowsKey.indexOf(item.id) == -1) {\n modalRef.selectedRowsTotal.push(item);\n }\n });\n\n modalRef.selectedRowsKey.length = 0;\n selectedRows.forEach((item: any) => {\n modalRef.selectedRowsKey.push(item.id);\n modalRef.datasource.push(item);\n });\n },\n };\n\n const {\n reload,\n setPageInfo,\n context: state,\n } = useFetchData(getData, {\n current: 1,\n pageSize: 20,\n tableSize: 'middle', // 'default' | 'middle' | 'small'\n stripe: true,\n requestParams: {\n ...search_modelRef,\n },\n });\n watch(\n () => state.dataSource,\n () => {\n const total_ids: Array<number> = modalRef.selectedRowsTotal.map(item => item.id);\n state.dataSource.map((item: any) => {\n if (total_ids.indexOf(item.id) > -1) {\n modalRef.selectedRowsKey.push(item.id);\n }\n });\n },\n );\n const init = () => {\n let list: any[] = [];\n if (props.value instanceof Array) {\n if (props.value.length > 0) {\n list = props.value as Array<number>;\n }\n } else {\n if (props.value) {\n list.push(props.value);\n }\n }\n if (list.length > 0) {\n const tmp_ids: any[] = [];\n const tmp_item_ids: any[] = [];\n modalRef.datasource.map(item => tmp_item_ids.push(item.id));\n list.map(item => {\n if (modalRef.selectedRows.indexOf(Number(item)) == -1) {\n modalRef.selectedRows.push(Number(item));\n modalRef.selectedRowsKey.push(Number(item));\n }\n if (tmp_item_ids.indexOf(item) == -1) {\n tmp_ids.push(item);\n }\n });\n if (tmp_ids.length > 0) {\n getData({ current: 1, ...search_modelRef, pageSize: 2000, ids: tmp_ids.join(',') }).then(\n function (res: any) {\n res.data.forEach(item => {\n if (list.indexOf(item.id) >= 0) {\n modalRef.datasource.push(item);\n modalRef.selectedRowsTotal.push(item);\n }\n });\n },\n );\n }\n } else {\n modalRef.selectedRows.length = 0;\n modalRef.selectedRowsKey.length = 0;\n modalRef.selectedRowsTotal.length = 0;\n }\n };\n init();\n\n watch(\n () => props.value,\n () => {\n init();\n },\n );\n\n const handleTableChange = ({ current, pageSize }: any, filters: any, sorter: any) => {\n console.log(sorter);\n setPageInfo({\n current,\n pageSize,\n ...filters,\n ...search_modelRef,\n });\n\n reload();\n };\n\n const { validateInfos: searchValidateInfos } = useForm(search_modelRef, {});\n\n const search = () => {\n setPageInfo({\n current: 1,\n ...search_modelRef,\n });\n reload();\n };\n\n return {\n props,\n modalRef,\n datasource,\n state,\n loading,\n getDateTime,\n getDate,\n getFullDate,\n getTime,\n search,\n handleTableChange,\n rowSelection,\n searchValidateInfos,\n search_modelRef,\n searchConfig,\n searchConfigOptions,\n getData,\n columnState,\n dynamicColumns,\n slotList,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-table\n :bordered=\"true\"\n size=\"small\"\n :loading=\"state.loading\"\n :scroll=\"{ y: 400, x: columnState.tableWidth }\"\n :row-selection=\"rowSelection\"\n :columns=\"dynamicColumns\"\n row-key=\"id\"\n :data-source=\"state.dataSource\"\n :pagination=\"{\n current: state.current,\n pageSize: state.pageSize,\n total: state.total,\n }\"\n @change=\"handleTableChange\"\n >\n <template\n v-for=\"item in slotList\"\n v-slot:[item.slotName]=\"{ index, text }\"\n :key=\"item.slotName\"\n >\n <span v-if=\"item.slotName === 'index'\">\n {{ index + 1 + state.pageSize * (state.current - 1) }}\n </span>\n <span v-if=\"item.type === 'custom'\">\n {{ item['field_' + text] }}\n </span>\n <span v-if=\"item.type === 'datetime'\">\n {{ getDateTime(text) }}\n </span>\n <span v-if=\"item.type === 'date'\">\n {{ getDate(text) }}\n </span>\n <span v-if=\"item.type === 'full_date'\">\n {{ getFullDate(text) }}\n </span>\n <span v-if=\"item.type === 'time'\">\n {{ getTime(text) }}\n </span>\n <a-tag\n color=\"green\"\n v-if=\"text && item.type === 'boolean'\"\n >\n {{ item.name1 }}\n </a-tag>\n <a-tag\n color=\"red\"\n v-if=\"!text && item.type === 'boolean'\"\n >\n {{ item.name2 }}\n </a-tag>\n <template v-if=\"item.type === 'list'\">\n <a-tag\n color=\"#87d068\"\n v-for=\"obj in text\"\n :key=\"obj.id\"\n style=\"margin-bottom: 1px\"\n >\n {{ obj.name }}\n </a-tag>\n </template>\n </template>\n </a-table>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\n// import { ColumnProps } from 'ant-design-vue/es/table/interface';\nimport { useFetchData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport { useForm } from 'ant-design-vue/es/form';\n\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteModal/index';\nimport { useTableDynamicColumns } from 'liyu-pc-base/utils/hooks/useTableColumn';\nimport { getDate, getDateTime, getFullDate, getTime } from 'liyu-pc-base/utils/function';\n\n// type Key = ColumnProps['key'];\n\n// interface DataType {\n// id: number;\n// key: Key;\n// name: string;\n// }\n\nexport default defineComponent({\n name: 'RemoteTable',\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 field_status: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const loading = ref(false);\n const { searchConfig, searchConfigOptions, getData, columns, slotList } = getFormConfig(\n props.modalType,\n );\n const search_modelRef = reactive({\n ...searchConfig.model,\n is_active: true,\n ...props.init_model,\n });\n\n for (const field of searchConfig.fields) {\n if (props.field_status && props.field_status.hasOwnProperty(field.name)) {\n if (props.field_status[field.name] == 0) {\n field.disabled = true;\n field.hidden = false;\n } else if (props.field_status[field.name] == 1) {\n field.disabled = false;\n field.hidden = true;\n } else {\n field.disabled = false;\n field.hidden = false;\n }\n }\n }\n\n const old_obj: { [key: string]: any } = {};\n onMounted(() => {\n if (props.watch) {\n for (const k of props.watch) {\n if (props.formModel) {\n old_obj[k as string] = props.formModel[k as string];\n }\n }\n }\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n search_modelRef[k as string] = props.formModel[k as string];\n watch(\n () => props.formModel[k as string],\n () => {\n if (props.watch && props.formModel) {\n for (const k of props.watch) {\n if (old_obj[k as string] != props.formModel[k as string]) {\n search_modelRef[k as string] = props.formModel[k as string];\n }\n }\n }\n },\n { immediate: true },\n );\n }\n }\n });\n\n const { state: columnState, dynamicColumns } = useTableDynamicColumns(columns, {\n checkAll: false,\n needRowIndex: false,\n });\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n return {\n value: item[props.field.valueKey ? (props.field.valueKey as string) : 'id'],\n label: item[props.field.labelKey ? (props.field.labelKey as string) : 'name'],\n };\n });\n });\n const modalRef = reactive({\n visible: false,\n selectedRows: new Array<number>(),\n selectedRowsKey: new Array<number>(),\n selectedRowsTotal: new Array<any>(),\n datasource: new Array<any>(),\n });\n\n const rowSelection = {\n type:\n props.field.mode == 'default'\n ? 'radio'\n : props.field.mode == 'multiple'\n ? 'checkbox'\n : 'checkbox',\n columnWidth: '30px',\n selectedRowKeys: modalRef.selectedRowsKey,\n onChange: (selectedRowKeys: any, selectedRows: any) => {\n // modalRef.selectedRowsKey.length = 0;\n const remove_key: Array<number> = modalRef.selectedRowsKey.filter(\n item => selectedRowKeys.indexOf(Number(item)) == -1,\n );\n modalRef.selectedRowsTotal = modalRef.selectedRowsTotal.filter(\n item => remove_key.indexOf(item.id) == -1,\n );\n selectedRows.forEach((item: any) => {\n if (modalRef.selectedRowsKey.indexOf(item.id) == -1) {\n modalRef.selectedRowsTotal.push(item);\n }\n });\n\n modalRef.selectedRowsKey.length = 0;\n selectedRows.forEach((item: any) => {\n modalRef.selectedRowsKey.push(item.id);\n modalRef.datasource.push(item);\n });\n },\n };\n\n const {\n reload,\n setPageInfo,\n context: state,\n } = useFetchData(getData, {\n current: 1,\n pageSize: 20,\n tableSize: 'middle', // 'default' | 'middle' | 'small'\n stripe: true,\n requestParams: {\n ...search_modelRef,\n },\n });\n watch(\n () => state.dataSource,\n () => {\n const total_ids: Array<number> = modalRef.selectedRowsTotal.map(item => item.id);\n state.dataSource.map((item: any) => {\n if (total_ids.indexOf(item.id) > -1) {\n modalRef.selectedRowsKey.push(item.id);\n }\n });\n },\n );\n const init = () => {\n let list: any[] = [];\n if (props.value instanceof Array) {\n if (props.value.length > 0) {\n list = props.value as Array<number>;\n }\n } else {\n if (props.value) {\n list.push(props.value);\n }\n }\n if (list.length > 0) {\n const tmp_ids: any[] = [];\n const tmp_item_ids: any[] = [];\n modalRef.datasource.map(item => tmp_item_ids.push(item.id));\n list.map(item => {\n if (modalRef.selectedRows.indexOf(Number(item)) == -1) {\n modalRef.selectedRows.push(Number(item));\n modalRef.selectedRowsKey.push(Number(item));\n }\n if (tmp_item_ids.indexOf(item) == -1) {\n tmp_ids.push(item);\n }\n });\n if (tmp_ids.length > 0) {\n getData({ current: 1, ...search_modelRef, pageSize: 2000, ids: tmp_ids.join(',') }).then(\n function (res: any) {\n res.data.forEach(item => {\n if (list.indexOf(item.id) >= 0) {\n modalRef.datasource.push(item);\n modalRef.selectedRowsTotal.push(item);\n }\n });\n },\n );\n }\n } else {\n modalRef.selectedRows.length = 0;\n modalRef.selectedRowsKey.length = 0;\n modalRef.selectedRowsTotal.length = 0;\n }\n };\n init();\n\n watch(\n () => props.value,\n () => {\n init();\n },\n );\n\n const handleTableChange = ({ current, pageSize }: any, filters: any, sorter: any) => {\n console.log(sorter);\n setPageInfo({\n current,\n pageSize,\n ...filters,\n ...search_modelRef,\n });\n\n reload();\n };\n\n const { validateInfos: searchValidateInfos } = useForm(search_modelRef, {});\n\n const search = () => {\n setPageInfo({\n current: 1,\n ...search_modelRef,\n });\n reload();\n };\n\n return {\n props,\n modalRef,\n datasource,\n state,\n loading,\n getDateTime,\n getDate,\n getFullDate,\n getTime,\n search,\n handleTableChange,\n rowSelection,\n searchValidateInfos,\n search_modelRef,\n searchConfig,\n searchConfigOptions,\n getData,\n columnState,\n dynamicColumns,\n slotList,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <div class=\"remote-select-pro\">\n <!-- <a-layout-content>-->\n <a-select\n v-model:value=\"modalRef.selectedRows\"\n :allow-clear=\"field.allowClear !== false\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :filter-option=\"filterOption\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode == 'default' ? null : field.mode\"\n :placeholder=\"placeholder\"\n :show-search=\"field.show_search !== false\"\n size=\"small\"\n :autoClearSearchValue=\"false\"\n @change=\"handleChange\"\n @search=\"handleSearch\"\n style=\"min-width: 120px\"\n >\n <a-select-option\n v-for=\"option in datasource\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n <bold-matcher\n :text=\"option.label\"\n :pattern=\"searchText\"\n :color=\"field.searchColor\"\n />\n </a-select-option>\n </a-select>\n\n <div\n v-if=\"field.table?.enable\"\n class=\"table-search-icon\"\n style=\"margin-right: 5px\"\n >\n <FileSearchOutlined @click=\"handleOpenTable\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n watch,\n} from 'vue';\nimport { debounce, isEqual } from 'lodash-es';\nimport { convertValueByClassName, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport BoldMatcher from 'liyu-pc-base/components/FormRender/RemoteSelect/boldenText.vue';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useRequiredConditionStore, required_condition_event_obj } from 'liyu-pc-base/init-plugin';\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport md5 from 'blueimp-md5';\nimport { useRoute } from 'vue-router';\n\ntype Field = {\n label: string;\n mode: 'multiple' | 'tags' | 'combobox' | 'default';\n cb?: any;\n select_style: any;\n default: string;\n name: string;\n postUrl: string;\n searchConditions: any;\n queryType: string;\n simpleSearchConditions: any;\n maxTagCount: number;\n allowClear: boolean;\n defaultValue: any;\n disabled: boolean;\n show_search: boolean;\n searchColor: string;\n required_condition: any;\n defaultValueType: string;\n globalDefaultKey: string;\n globalDefaultField: string;\n extendedFields: string[];\n table: any;\n};\nexport default defineComponent({\n name: 'RemoteSelectPro',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKeyType: {\n type: Number,\n default: () => 0,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n default: () => [],\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n placeholder: {\n type: String,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n is_input: {\n type: Boolean,\n default: () => false,\n },\n init_watch: {\n // 普通查询监听字段 {监听key: 传参key}\n type: Object,\n default: () => {},\n },\n is_form_design: {\n type: Boolean,\n default: () => false,\n },\n innerModel: {\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: new Array<number | any>(),\n datasource: new Array<any>(),\n });\n const route = useRoute();\n const tableKey = ref('remoteSelectPro');\n const tableConfig = ref(null);\n const searchText = ref('');\n const requiredConditionStore = useRequiredConditionStore();\n const getConditionsItem = (value: any, list: any, item: any) => {\n if (item.operator === 'not_blank_not_null') {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: [],\n format: item.format,\n class_name: item.class_name,\n });\n } else if (value instanceof Array) {\n const [first] = value;\n if (isNotEmpty(first)) {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(value, item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n } else if (isNotEmpty(value)) {\n let val = value;\n if (item.operator === 'in' || item.operator === 'notin') {\n if (value.includes('[')) {\n val = JSON.parse(value);\n } else if (value.includes(',')) {\n val = value.split(',');\n }\n if (item.class_name === 'int') {\n val = val.map(Number);\n }\n }\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(val instanceof Array ? val : [val], item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n };\n function getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n const getConditions = (has_search = true) => {\n const conditions = [];\n let search_conditions = [\n [\n {\n searchType: 3,\n field_name: 'is_active',\n operator: 'eq',\n value: [true],\n format: 'choices',\n class_name: 'bool',\n },\n ],\n ];\n if (props.field.searchConditions) {\n search_conditions = props.field.searchConditions;\n }\n search_conditions.forEach((item: any) => {\n const list = [];\n item.forEach((item1: any) => {\n if (item1.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(\n (props.outModel ? props.outModel : props.formModel)[key],\n list,\n item1,\n );\n }\n });\n } else if (item1.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(props.formModel[key], list, item1);\n }\n });\n } else if (item1.searchType === 3) {\n getConditionsItem(item1.value, list, item1);\n } else if (item1.searchType === 4) {\n getConditionsItem(getNestedValue(props.context, item1.select_name), list, item1);\n } else {\n getConditionsItem(item1.value, list, item1);\n }\n });\n conditions.push(list);\n });\n if (searchText.value && has_search) {\n searchConfig.pageSize = 50;\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n let subSearch = conditions[index];\n if (!subSearch) {\n subSearch = [];\n conditions[index] = subSearch;\n }\n subSearch.push({\n field_name: key,\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n });\n } else {\n if (conditions.length === 0) {\n conditions.push([\n {\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n },\n ]);\n } else {\n for (const item of conditions) {\n item.push({\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n }\n }\n }\n }\n return conditions;\n };\n const getSimpleSearchParams = (has_search = true) => {\n const params = {};\n if (props.field.simpleSearchConditions) {\n props.field.simpleSearchConditions.forEach((item: any) => {\n if (item.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = (props.outModel ? props.outModel : props.formModel)[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = props.formModel[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 3) {\n params[item.field_name] = item.value;\n } else if (item.searchType === 4) {\n params[item.field_name] = getNestedValue(props.context, item.select_name);\n }\n });\n }\n if (searchText.value && has_search) {\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n params[key] = searchText.value;\n });\n } else {\n params[get_label_key()] = searchText.value;\n }\n }\n return params;\n };\n\n const searchConfig: any = {\n current: 1,\n pageSize: 200,\n is_pagination: true,\n request_source: 'strict',\n is_active: true,\n ...props.init_model, // 普通查询条件\n column_fields: [],\n sort_fields: [],\n conditions: [],\n simpleSearchParams: {},\n };\n const get_value_key = () => {\n return props.valueKey || 'id';\n };\n const get_label_key = () => {\n return props.labelKey || 'name';\n };\n const get_sort_fields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(...props.labelKeyList);\n } else {\n list.push(get_label_key());\n }\n return list;\n };\n const getColumnFields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(get_value_key(), ...props.labelKeyList);\n } else {\n list.push(get_value_key(), get_label_key());\n }\n if (props.field?.extendedFields && props.field?.extendedFields.length > 0) {\n list.push(...props.field.extendedFields);\n }\n // 去重\n const uniqueList = [...new Set(list)];\n searchConfig.column_fields = [].concat(uniqueList);\n };\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n if (props.init_model?.sort_fields) {\n searchConfig.sort_fields = props.init_model?.sort_fields;\n }\n const checkEqualSelected = value => {\n if (Array.isArray(modalRef.selectedRows)) {\n if (modalRef.selectedRows.includes(value)) {\n return true;\n }\n } else {\n if (modalRef.selectedRows === value) {\n return true;\n }\n }\n return false;\n };\n\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n // 已经选择的数据不处理labelKeyList\n if (props.labelKeyList && props.labelKeyList.length > 0 && props?.labelKeyType !== 1) {\n const label = [];\n for (const key of props.labelKeyList) {\n label.push(item[key as string]);\n }\n return {\n value: item[get_value_key()],\n label: label.join(props.labelSpace),\n };\n } else {\n return {\n value: item[get_value_key()],\n label: item[get_label_key()],\n };\n }\n });\n });\n const getDefaultValue = (dataList: any) => {\n if (dataList && !Array.isArray(dataList)) {\n dataList = [dataList];\n }\n if (\n props.field.default &&\n !props.formModel[props.field.name] &&\n props.field.mode == 'default' &&\n dataList.length > 0\n ) {\n props.formModel[props.field.name] = dataList[0];\n const foundItem = modalRef.datasource.find(item => {\n if (item[get_value_key()] == dataList[0]) {\n return true;\n }\n });\n if (foundItem) {\n emit('update:label', foundItem[get_label_key()]);\n }\n }\n if (props.field.mode == 'default') {\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const setInnerModel = () => {\n if (props.field.mode === 'default') {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems[0];\n }\n } else {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems;\n }\n }\n };\n let oldParams = {};\n watch(\n () => [props.formModel, props.context],\n () => {\n const newParams = getQueryParams(false);\n if (!isEqual(oldParams, newParams)) {\n oldParams = newParams;\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name] || props.formModel[props.field.name] === 0) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n // modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name];\n } else {\n modalRef.selectedRows = [];\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n },\n );\n watch(\n () => props.value,\n () => {\n setInnerModel();\n },\n { deep: true },\n );\n const handleRequiredConditionChange = (key: string) => {\n if (props.field.required_condition) {\n const item = props.field.required_condition.find((item: any) => item.key === key);\n if (item) {\n delayRefresh(true);\n }\n }\n };\n onMounted(() => {\n let tmpKey = `${route.path}_${props.field.name}_${props.field.postUrl}`;\n tableKey.value = 'remoteselectpro:' + md5(tmpKey);\n initDataSource();\n required_condition_event_obj().on('required_condition_change', handleRequiredConditionChange);\n refresh();\n });\n onUnmounted(() => {\n required_condition_event_obj().off(\n 'required_condition_change',\n handleRequiredConditionChange,\n );\n });\n const initDataSource = () => {\n if (props.field.mode === 'default') {\n if (props.value || props.value === 0) {\n if (get_value_key() === 'id') {\n if (isNaN(Number(props.value))) {\n modalRef.selectedRows.push(props.value);\n } else {\n modalRef.selectedRows.push(Number(props.value));\n }\n } else {\n modalRef.selectedRows.push(props.value);\n }\n }\n } else {\n if (typeof props.value === 'string') {\n (props.value as string).split(',').map((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value instanceof Array) {\n props.value.forEach((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n }\n };\n const handleChange = () => {\n if (props.field.mode == 'default') {\n emit('update:value', modalRef.selectedRows);\n const selectItems: any = datasource.value\n .filter((item: any) => {\n return modalRef.selectedRows == item.value;\n })\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n if (modalRef.selectedRows.length > 1) {\n emit('update:value', modalRef.selectedRows);\n } else {\n emit('update:value', modalRef.selectedRows);\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const getRequiredConditionObj = () => {\n const required_condition = props.field.required_condition;\n const required_condition_obj = {};\n if (required_condition) {\n required_condition.forEach((item: any) => {\n const value = requiredConditionStore.value_map[item.key];\n if (value !== undefined && value !== null) {\n required_condition_obj[item.field_name] = value;\n }\n });\n }\n return required_condition_obj;\n };\n /**\n * 补充之前选择的项对应的数据\n */\n const externDataSource = async (params, selectedRows) => {\n if (selectedRows && !Array.isArray(selectedRows)) {\n selectedRows = [selectedRows];\n }\n if (selectedRows && selectedRows.length > 0) {\n const notFoundValues = [];\n selectedRows.forEach((item1: any) => {\n if (!modalRef.datasource.some(item => item[get_value_key()] === item1)) {\n notFoundValues.push(item1);\n }\n });\n if (notFoundValues.length > 0) {\n const obj = { ...params };\n if (props.field.queryType === 'simple') {\n let value = notFoundValues as any;\n if (value instanceof Array && value.length > 0) {\n value = value.join(',');\n }\n obj[get_value_key()] = value;\n } else {\n if (obj.conditions && obj.conditions.length > 0) {\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n } else {\n obj.conditions = [[]];\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n }\n }\n const res1 = await getApiData({ ...obj }, props.field.postUrl, false, {\n skip_error: true,\n });\n modalRef.datasource = modalRef.datasource.concat(res1?.data || []);\n }\n }\n };\n const getQueryParams = (has_search = true) => {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams(has_search);\n params = {\n ...searchConfig,\n ...searchConfig.simpleSearchParams,\n required_condition: getRequiredConditionObj(),\n };\n delete params.conditions;\n delete params.simpleSearchParams;\n } else {\n searchConfig.conditions = getConditions(has_search);\n params = { ...searchConfig, required_condition: getRequiredConditionObj() };\n delete params.simpleSearchParams;\n }\n return params;\n };\n\n const refresh = async (clear = false) => {\n // modalRef.datasource.length = 0;\n // 不清空modalRef.datasource,保留原始数据,如果是输入过滤条件筛选的数据,需要去重后,追加到datasource里\n if (props.field.postUrl) {\n if (clear) {\n modalRef.datasource.length = 0;\n }\n const is_first = modalRef.datasource.length === 0;\n const params = getQueryParams();\n const res = await getApiData(params, props.field.postUrl, false, { skip_error: true });\n if (res?.data?.length > 0) {\n const rowKey = get_value_key();\n const new_list = res?.data.filter(i => {\n const f = modalRef.datasource.find(j => {\n return i[rowKey] == j[rowKey];\n });\n return !f;\n });\n modalRef.datasource = modalRef.datasource.concat(new_list);\n if (is_first) {\n await externDataSource(params, modalRef.selectedRows);\n }\n setInnerModel();\n }\n\n if (props.field.defaultValueType === 'first' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', modalRef.datasource[0][get_label_key()]);\n emit('update:value', modalRef.datasource[0][get_value_key()]);\n } else {\n emit('update:label', [modalRef.datasource[0][get_label_key()]]);\n emit('update:value', [modalRef.datasource[0][get_value_key()]]);\n }\n }\n } else if (props.field.defaultValueType === 'global' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n const globalDefaultKey = props.field.globalDefaultKey;\n const globalDefaultField = props.field.globalDefaultField;\n const globalDefaultValue = requiredConditionStore.value_map[globalDefaultKey];\n if (globalDefaultValue) {\n const globalDefaultItem = modalRef.datasource.find(\n item1 => item1[globalDefaultField] === globalDefaultValue,\n );\n if (globalDefaultItem) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', globalDefaultItem[get_label_key()]);\n emit('update:value', globalDefaultItem[get_value_key()]);\n } else {\n emit('update:label', [globalDefaultItem[get_label_key()]]);\n emit('update:value', [globalDefaultItem[get_value_key()]]);\n }\n }\n }\n }\n } else {\n getDefaultValue(modalRef.selectedRows);\n }\n }\n };\n const delayRefresh: any = debounce((clear = false) => {\n refresh(clear);\n }, 500);\n watch(\n () => [\n props.labelKeyList,\n props.labelKey,\n props.labelKeyType,\n props.valueKey,\n props.labelSpace,\n props.field.postUrl,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => [\n props.field.searchConditions,\n props.field.queryType,\n props.field.simpleSearchConditions,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n\n const handleSearch = (str: any) => {\n searchText.value = str;\n delayRefresh();\n };\n const tableModal = defineAsyncComponent(() => import('./tableModal.vue'));\n const handleOpenTable = () => {\n let currentValue = [];\n searchText.value = '';\n let rowSelectionType = 'checkbox';\n if (props.field.mode === 'default') {\n rowSelectionType = 'radio';\n }\n if (!datasource.value) {\n currentValue = [];\n } else {\n currentValue = datasource.value.filter((item: any) => checkEqualSelected(item.value));\n }\n tableConfig.value = {\n key: tableKey.value,\n title: props.field.label || props.field.name,\n rowSelectionType,\n columns: props.field.table?.columns || [],\n search_config: props.field.table?.search_config || [],\n list_url: props.field.postUrl,\n is_selection: true,\n is_pagination: true,\n hide_header: true,\n };\n const init_model = props.init_model || {};\n if (props.field.queryType === 'simple') {\n tableConfig.value['query_params'] = { ...init_model, ...getSimpleSearchParams() };\n } else {\n const conditions = getConditions();\n tableConfig.value['query_params'] = init_model;\n if (conditions.length > 0 && conditions[0].length > 0) {\n tableConfig.value['base_conditions'] = conditions[0];\n }\n }\n const required_condition = getRequiredConditionObj();\n if (required_condition) {\n tableConfig.value['query_params'] = {\n ...tableConfig.value['query_params'],\n required_condition,\n };\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n component: tableModal,\n isMultiple: props.field.mode !== 'default',\n tableConfig: tableConfig.value,\n labelKey: props.labelKey || 'name',\n value: currentValue,\n labelKeyList: props.labelKeyList || [],\n labelKeyType: props.labelKeyType || 1,\n labelSpace: props.labelSpace || '-',\n valueKey: props.valueKey || 'id',\n ok: async (data: any) => {\n const selectedValues = data.map((item: any) => item.value) || [];\n const selectedLabels = data.map((item: any) => item.label) || [];\n const params = getQueryParams();\n if (props.field.mode == 'default') {\n if (selectedValues.length == 0) {\n modalRef.selectedRows = undefined;\n emit('update:value', modalRef.selectedRows);\n emit('update:label', undefined);\n } else {\n modalRef.selectedRows = selectedValues[0];\n await externDataSource(params, selectedValues[0]);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels[0]);\n }\n } else {\n modalRef.selectedRows = selectedValues;\n await externDataSource(params, selectedValues);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels);\n }\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n\n const filterOption = (val: string, option: any) => {\n if (datasource.value instanceof Array) {\n const f: any = datasource.value.find(item => {\n return item['value'] == option.key;\n });\n if (f) {\n return String(f['label']).toLowerCase().indexOf(val.toLowerCase()) >= 0;\n } else {\n return false;\n }\n }\n };\n\n return {\n props,\n modalRef,\n searchText,\n datasource,\n handleChange,\n handleSearch,\n filterOption,\n handleOpenTable,\n tableConfig,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: { BoldMatcher },\n});\n</script>\n<style scoped lang=\"less\">\n.remote-select-pro {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n flex-wrap: nowrap;\n}\n.ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: flex;\n }\n}\n.ant-form-inline {\n .ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: inline-flex;\n }\n }\n}\n.table-search-icon {\n color: black;\n font-size: 17px;\n}\n</style>\n","<template>\n <div class=\"remote-select-pro\">\n <!-- <a-layout-content>-->\n <a-select\n v-model:value=\"modalRef.selectedRows\"\n :allow-clear=\"field.allowClear !== false\"\n :default-value=\"field.defaultValue\"\n :disabled=\"field.disabled\"\n :filter-option=\"filterOption\"\n :maxTagCount=\"field.maxTagCount ? field.maxTagCount : 'responsive'\"\n :mode=\"field.mode == 'default' ? null : field.mode\"\n :placeholder=\"placeholder\"\n :show-search=\"field.show_search !== false\"\n size=\"small\"\n :autoClearSearchValue=\"false\"\n @change=\"handleChange\"\n @search=\"handleSearch\"\n style=\"min-width: 120px\"\n >\n <a-select-option\n v-for=\"option in datasource\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n <bold-matcher\n :text=\"option.label\"\n :pattern=\"searchText\"\n :color=\"field.searchColor\"\n />\n </a-select-option>\n </a-select>\n\n <div\n v-if=\"field.table?.enable\"\n class=\"table-search-icon\"\n style=\"margin-right: 5px\"\n >\n <FileSearchOutlined @click=\"handleOpenTable\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n onMounted,\n onUnmounted,\n reactive,\n ref,\n watch,\n} from 'vue';\nimport { debounce, isEqual } from 'lodash-es';\nimport { convertValueByClassName, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport BoldMatcher from 'liyu-pc-base/components/FormRender/RemoteSelect/boldenText.vue';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useRequiredConditionStore, required_condition_event_obj } from 'liyu-pc-base/init-plugin';\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\nimport md5 from 'blueimp-md5';\nimport { useRoute } from 'vue-router';\n\ntype Field = {\n label: string;\n mode: 'multiple' | 'tags' | 'combobox' | 'default';\n cb?: any;\n select_style: any;\n default: string;\n name: string;\n postUrl: string;\n searchConditions: any;\n queryType: string;\n simpleSearchConditions: any;\n maxTagCount: number;\n allowClear: boolean;\n defaultValue: any;\n disabled: boolean;\n show_search: boolean;\n searchColor: string;\n required_condition: any;\n defaultValueType: string;\n globalDefaultKey: string;\n globalDefaultField: string;\n extendedFields: string[];\n table: any;\n};\nexport default defineComponent({\n name: 'RemoteSelectPro',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n valueKey: {\n type: String,\n },\n labelKeyType: {\n type: Number,\n default: () => 0,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\n default: () => [],\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n outModel: {\n type: Object,\n default: () => {},\n },\n placeholder: {\n type: String,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n is_input: {\n type: Boolean,\n default: () => false,\n },\n init_watch: {\n // 普通查询监听字段 {监听key: 传参key}\n type: Object,\n default: () => {},\n },\n is_form_design: {\n type: Boolean,\n default: () => false,\n },\n innerModel: {\n default: null,\n },\n globalInnerModel: {\n default: null,\n },\n context: {\n type: Object,\n default: null,\n },\n },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const modalRef = reactive({\n selectedRows: new Array<number | any>(),\n datasource: new Array<any>(),\n });\n const route = useRoute();\n const tableKey = ref('remoteSelectPro');\n const tableConfig = ref(null);\n const searchText = ref('');\n const requiredConditionStore = useRequiredConditionStore();\n const getConditionsItem = (value: any, list: any, item: any) => {\n if (item.operator === 'not_blank_not_null') {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: [],\n format: item.format,\n class_name: item.class_name,\n });\n } else if (value instanceof Array) {\n const [first] = value;\n if (isNotEmpty(first)) {\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(value, item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n } else if (isNotEmpty(value)) {\n let val = value;\n if (item.operator === 'in' || item.operator === 'notin') {\n if (value.includes('[')) {\n val = JSON.parse(value);\n } else if (value.includes(',')) {\n val = value.split(',');\n }\n if (item.class_name === 'int') {\n val = val.map(Number);\n }\n }\n list.push({\n field_name: item.field_name,\n operator: item.operator,\n value: convertValueByClassName(val instanceof Array ? val : [val], item.class_name),\n format: item.format,\n class_name: item.class_name,\n });\n }\n };\n function getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n const getConditions = (has_search = true) => {\n const conditions = [];\n let search_conditions = [\n [\n {\n searchType: 3,\n field_name: 'is_active',\n operator: 'eq',\n value: [true],\n format: 'choices',\n class_name: 'bool',\n },\n ],\n ];\n if (props.field.searchConditions) {\n search_conditions = props.field.searchConditions;\n }\n search_conditions.forEach((item: any) => {\n const list = [];\n item.forEach((item1: any) => {\n if (item1.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(\n (props.outModel ? props.outModel : props.formModel)[key],\n list,\n item1,\n );\n }\n });\n } else if (item1.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item1.select_name == key) {\n getConditionsItem(props.formModel[key], list, item1);\n }\n });\n } else if (item1.searchType === 3) {\n getConditionsItem(item1.value, list, item1);\n } else if (item1.searchType === 4) {\n getConditionsItem(getNestedValue(props.context, item1.select_name), list, item1);\n } else {\n getConditionsItem(item1.value, list, item1);\n }\n });\n conditions.push(list);\n });\n if (searchText.value && has_search) {\n searchConfig.pageSize = 50;\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n let subSearch = conditions[index];\n if (!subSearch) {\n subSearch = [];\n conditions[index] = subSearch;\n }\n subSearch.push({\n field_name: key,\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n });\n } else {\n if (conditions.length === 0) {\n conditions.push([\n {\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n },\n ]);\n } else {\n for (const item of conditions) {\n item.push({\n field_name: get_label_key(),\n operator: 'icontains',\n format: 'input',\n value: [searchText.value],\n class_name: 'str',\n });\n }\n }\n }\n }\n return conditions;\n };\n const getSimpleSearchParams = (has_search = true) => {\n const params = {};\n if (props.field.simpleSearchConditions) {\n props.field.simpleSearchConditions.forEach((item: any) => {\n if (item.searchType === 1) {\n Object.keys(props.outModel ? props.outModel : props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = (props.outModel ? props.outModel : props.formModel)[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 2) {\n Object.keys(props.formModel).forEach((key: any) => {\n if (item.select_name == key) {\n const value = props.formModel[key];\n params[item.field_name] = value;\n }\n });\n } else if (item.searchType === 3) {\n params[item.field_name] = item.value;\n } else if (item.searchType === 4) {\n params[item.field_name] = getNestedValue(props.context, item.select_name);\n }\n });\n }\n if (searchText.value && has_search) {\n if (props?.labelKeyList && props?.labelKeyList?.length > 0) {\n props.labelKeyList.forEach((key: any, index: any) => {\n params[key] = searchText.value;\n });\n } else {\n params[get_label_key()] = searchText.value;\n }\n }\n return params;\n };\n\n const searchConfig: any = {\n current: 1,\n pageSize: 200,\n is_pagination: true,\n request_source: 'strict',\n is_active: true,\n ...props.init_model, // 普通查询条件\n column_fields: [],\n sort_fields: [],\n conditions: [],\n simpleSearchParams: {},\n };\n const get_value_key = () => {\n return props.valueKey || 'id';\n };\n const get_label_key = () => {\n return props.labelKey || 'name';\n };\n const get_sort_fields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(...props.labelKeyList);\n } else {\n list.push(get_label_key());\n }\n return list;\n };\n const getColumnFields = () => {\n const list = [];\n if (props?.labelKeyList && props?.labelKeyList?.length > 0 && props.labelKeyType !== 1) {\n list.push(get_value_key(), ...props.labelKeyList);\n } else {\n list.push(get_value_key(), get_label_key());\n }\n if (props.field?.extendedFields && props.field?.extendedFields.length > 0) {\n list.push(...props.field.extendedFields);\n }\n // 去重\n const uniqueList = [...new Set(list)];\n searchConfig.column_fields = [].concat(uniqueList);\n };\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n if (props.init_model?.sort_fields) {\n searchConfig.sort_fields = props.init_model?.sort_fields;\n }\n const checkEqualSelected = value => {\n if (Array.isArray(modalRef.selectedRows)) {\n if (modalRef.selectedRows.includes(value)) {\n return true;\n }\n } else {\n if (modalRef.selectedRows === value) {\n return true;\n }\n }\n return false;\n };\n\n const datasource = computed(() => {\n return modalRef.datasource.map(item => {\n // 已经选择的数据不处理labelKeyList\n if (props.labelKeyList && props.labelKeyList.length > 0 && props?.labelKeyType !== 1) {\n const label = [];\n for (const key of props.labelKeyList) {\n label.push(item[key as string]);\n }\n return {\n value: item[get_value_key()],\n label: label.join(props.labelSpace),\n };\n } else {\n return {\n value: item[get_value_key()],\n label: item[get_label_key()],\n };\n }\n });\n });\n const getDefaultValue = (dataList: any) => {\n if (dataList && !Array.isArray(dataList)) {\n dataList = [dataList];\n }\n if (\n props.field.default &&\n !props.formModel[props.field.name] &&\n props.field.mode == 'default' &&\n dataList.length > 0\n ) {\n props.formModel[props.field.name] = dataList[0];\n const foundItem = modalRef.datasource.find(item => {\n if (item[get_value_key()] == dataList[0]) {\n return true;\n }\n });\n if (foundItem) {\n emit('update:label', foundItem[get_label_key()]);\n }\n }\n if (props.field.mode == 'default') {\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const setInnerModel = () => {\n if (props.field.mode === 'default') {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems[0];\n }\n } else {\n const rawItems = modalRef.datasource.filter((item: any) =>\n checkEqualSelected(item[get_value_key()]),\n );\n if (props.innerModel) {\n props.innerModel[props.field.name] = rawItems;\n }\n }\n };\n let oldParams = {};\n watch(\n () => [props.formModel, props.context],\n () => {\n const newParams = getQueryParams(false);\n if (!isEqual(oldParams, newParams)) {\n oldParams = newParams;\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => props.formModel[props.field.name],\n () => {\n if (props.field.mode === 'default') {\n if (props.formModel[props.field.name] || props.formModel[props.field.name] === 0) {\n modalRef.selectedRows = [props.formModel[props.field.name]];\n } else {\n modalRef.selectedRows = [];\n }\n const selectItems: any = datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n // modalRef.selectedRows.length = 0;\n if (props.formModel[props.field.name] && props.formModel[props.field.name].length > 0) {\n modalRef.selectedRows = props.formModel[props.field.name];\n } else {\n modalRef.selectedRows = [];\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n },\n );\n watch(\n () => props.value,\n () => {\n setInnerModel();\n },\n { deep: true },\n );\n const handleRequiredConditionChange = (key: string) => {\n if (props.field.required_condition) {\n const item = props.field.required_condition.find((item: any) => item.key === key);\n if (item) {\n delayRefresh(true);\n }\n }\n };\n onMounted(() => {\n let tmpKey = `${route.path}_${props.field.name}_${props.field.postUrl}`;\n tableKey.value = 'remoteselectpro:' + md5(tmpKey);\n initDataSource();\n required_condition_event_obj().on('required_condition_change', handleRequiredConditionChange);\n refresh();\n });\n onUnmounted(() => {\n required_condition_event_obj().off(\n 'required_condition_change',\n handleRequiredConditionChange,\n );\n });\n const initDataSource = () => {\n if (props.field.mode === 'default') {\n if (props.value || props.value === 0) {\n if (get_value_key() === 'id') {\n if (isNaN(Number(props.value))) {\n modalRef.selectedRows.push(props.value);\n } else {\n modalRef.selectedRows.push(Number(props.value));\n }\n } else {\n modalRef.selectedRows.push(props.value);\n }\n }\n } else {\n if (typeof props.value === 'string') {\n (props.value as string).split(',').map((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value instanceof Array) {\n props.value.forEach((item: any) => {\n if (get_value_key() === 'id') {\n if (isNaN(Number(item))) {\n modalRef.selectedRows.push(item);\n } else {\n modalRef.selectedRows.push(Number(item));\n }\n } else {\n modalRef.selectedRows.push(item);\n }\n });\n } else if (props.value != null) {\n modalRef.selectedRows.push(props.value);\n }\n }\n };\n const handleChange = () => {\n if (props.field.mode == 'default') {\n emit('update:value', modalRef.selectedRows);\n const selectItems: any = datasource.value\n .filter((item: any) => {\n return modalRef.selectedRows == item.value;\n })\n .map((item: any) => item.label);\n emit('update:label', selectItems.length > 0 ? selectItems[0] : '');\n } else {\n if (modalRef.selectedRows.length > 1) {\n emit('update:value', modalRef.selectedRows);\n } else {\n emit('update:value', modalRef.selectedRows);\n }\n emit(\n 'update:label',\n datasource.value\n .filter((item: any) => checkEqualSelected(item.value))\n .map((item: any) => item.label),\n );\n }\n };\n const getRequiredConditionObj = () => {\n const required_condition = props.field.required_condition;\n const required_condition_obj = {};\n if (required_condition) {\n required_condition.forEach((item: any) => {\n const value = requiredConditionStore.value_map[item.key];\n if (value !== undefined && value !== null) {\n required_condition_obj[item.field_name] = value;\n }\n });\n }\n return required_condition_obj;\n };\n /**\n * 补充之前选择的项对应的数据\n */\n const externDataSource = async (params, selectedRows) => {\n if (selectedRows && !Array.isArray(selectedRows)) {\n selectedRows = [selectedRows];\n }\n if (selectedRows && selectedRows.length > 0) {\n const notFoundValues = [];\n selectedRows.forEach((item1: any) => {\n if (!modalRef.datasource.some(item => item[get_value_key()] === item1)) {\n notFoundValues.push(item1);\n }\n });\n if (notFoundValues.length > 0) {\n const obj = { ...params };\n if (props.field.queryType === 'simple') {\n let value = notFoundValues as any;\n if (value instanceof Array && value.length > 0) {\n value = value.join(',');\n }\n obj[get_value_key()] = value;\n } else {\n if (obj.conditions && obj.conditions.length > 0) {\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n } else {\n obj.conditions = [[]];\n obj.conditions[0].push({\n class_name: 'int',\n operator: 'in',\n value: notFoundValues,\n format: 'remote',\n field_name: get_value_key(),\n });\n }\n }\n const res1 = await getApiData({ ...obj }, props.field.postUrl, false, {\n skip_error: true,\n });\n modalRef.datasource = modalRef.datasource.concat(res1?.data || []);\n }\n }\n };\n const getQueryParams = (has_search = true) => {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams(has_search);\n params = {\n ...searchConfig,\n ...searchConfig.simpleSearchParams,\n required_condition: getRequiredConditionObj(),\n };\n delete params.conditions;\n delete params.simpleSearchParams;\n } else {\n searchConfig.conditions = getConditions(has_search);\n params = { ...searchConfig, required_condition: getRequiredConditionObj() };\n delete params.simpleSearchParams;\n }\n return params;\n };\n\n const refresh = async (clear = false) => {\n // modalRef.datasource.length = 0;\n // 不清空modalRef.datasource,保留原始数据,如果是输入过滤条件筛选的数据,需要去重后,追加到datasource里\n if (props.field.postUrl) {\n if (clear) {\n modalRef.datasource.length = 0;\n }\n const is_first = modalRef.datasource.length === 0;\n const params = getQueryParams();\n const res = await getApiData(params, props.field.postUrl, false, { skip_error: true });\n if (res?.data?.length > 0) {\n const rowKey = get_value_key();\n const new_list = res?.data.filter(i => {\n const f = modalRef.datasource.find(j => {\n return i[rowKey] == j[rowKey];\n });\n return !f;\n });\n modalRef.datasource = modalRef.datasource.concat(new_list);\n if (is_first) {\n await externDataSource(params, modalRef.selectedRows);\n }\n setInnerModel();\n }\n\n if (props.field.defaultValueType === 'first' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', modalRef.datasource[0][get_label_key()]);\n emit('update:value', modalRef.datasource[0][get_value_key()]);\n } else {\n emit('update:label', [modalRef.datasource[0][get_label_key()]]);\n emit('update:value', [modalRef.datasource[0][get_value_key()]]);\n }\n }\n } else if (props.field.defaultValueType === 'global' && !props.is_form_design) {\n if (!props.formModel[props.field.name]) {\n const globalDefaultKey = props.field.globalDefaultKey;\n const globalDefaultField = props.field.globalDefaultField;\n const globalDefaultValue = requiredConditionStore.value_map[globalDefaultKey];\n if (globalDefaultValue) {\n const globalDefaultItem = modalRef.datasource.find(\n item1 => item1[globalDefaultField] === globalDefaultValue,\n );\n if (globalDefaultItem) {\n if (props.field.mode === 'default' || !props.field.mode) {\n emit('update:label', globalDefaultItem[get_label_key()]);\n emit('update:value', globalDefaultItem[get_value_key()]);\n } else {\n emit('update:label', [globalDefaultItem[get_label_key()]]);\n emit('update:value', [globalDefaultItem[get_value_key()]]);\n }\n }\n }\n }\n } else {\n getDefaultValue(modalRef.selectedRows);\n }\n }\n };\n const delayRefresh: any = debounce((clear = false) => {\n refresh(clear);\n }, 500);\n watch(\n () => [\n props.labelKeyList,\n props.labelKey,\n props.labelKeyType,\n props.valueKey,\n props.labelSpace,\n props.field.postUrl,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n watch(\n () => [\n props.field.searchConditions,\n props.field.queryType,\n props.field.simpleSearchConditions,\n ],\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue)) {\n delayRefresh(true);\n }\n },\n { deep: true },\n );\n\n const handleSearch = (str: any) => {\n searchText.value = str;\n delayRefresh();\n };\n const tableModal = defineAsyncComponent(() => import('./tableModal.vue'));\n const handleOpenTable = () => {\n let currentValue = [];\n searchText.value = '';\n let rowSelectionType = 'checkbox';\n if (props.field.mode === 'default') {\n rowSelectionType = 'radio';\n }\n if (!datasource.value) {\n currentValue = [];\n } else {\n currentValue = datasource.value.filter((item: any) => checkEqualSelected(item.value));\n }\n tableConfig.value = {\n key: tableKey.value,\n title: props.field.label || props.field.name,\n rowSelectionType,\n columns: props.field.table?.columns || [],\n search_config: props.field.table?.search_config || [],\n list_url: props.field.postUrl,\n is_selection: true,\n is_pagination: true,\n hide_header: true,\n };\n const init_model = props.init_model || {};\n if (props.field.queryType === 'simple') {\n tableConfig.value['query_params'] = { ...init_model, ...getSimpleSearchParams() };\n } else {\n const conditions = getConditions();\n tableConfig.value['query_params'] = init_model;\n if (conditions.length > 0 && conditions[0].length > 0) {\n tableConfig.value['base_conditions'] = conditions[0];\n }\n }\n const required_condition = getRequiredConditionObj();\n if (required_condition) {\n tableConfig.value['query_params'] = {\n ...tableConfig.value['query_params'],\n required_condition,\n };\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n component: tableModal,\n isMultiple: props.field.mode !== 'default',\n tableConfig: tableConfig.value,\n labelKey: props.labelKey || 'name',\n value: currentValue,\n labelKeyList: props.labelKeyList || [],\n labelKeyType: props.labelKeyType || 1,\n labelSpace: props.labelSpace || '-',\n valueKey: props.valueKey || 'id',\n ok: async (data: any) => {\n const selectedValues = data.map((item: any) => item.value) || [];\n const selectedLabels = data.map((item: any) => item.label) || [];\n const params = getQueryParams();\n if (props.field.mode == 'default') {\n if (selectedValues.length == 0) {\n modalRef.selectedRows = undefined;\n emit('update:value', modalRef.selectedRows);\n emit('update:label', undefined);\n } else {\n modalRef.selectedRows = selectedValues[0];\n await externDataSource(params, selectedValues[0]);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels[0]);\n }\n } else {\n modalRef.selectedRows = selectedValues;\n await externDataSource(params, selectedValues);\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels);\n }\n },\n cancel: () => {\n console.log('cancel');\n },\n });\n modalBox(tempModal);\n };\n\n const filterOption = (val: string, option: any) => {\n if (datasource.value instanceof Array) {\n const f: any = datasource.value.find(item => {\n return item['value'] == option.key;\n });\n if (f) {\n return String(f['label']).toLowerCase().indexOf(val.toLowerCase()) >= 0;\n } else {\n return false;\n }\n }\n };\n\n return {\n props,\n modalRef,\n searchText,\n datasource,\n handleChange,\n handleSearch,\n filterOption,\n handleOpenTable,\n tableConfig,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: { BoldMatcher },\n});\n</script>\n<style scoped lang=\"less\">\n.remote-select-pro {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n flex-wrap: nowrap;\n}\n.ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: flex;\n }\n}\n.ant-form-inline {\n .ant-input-group.ant-input-group-compact {\n .remote-select-pro {\n display: inline-flex;\n }\n }\n}\n.table-search-icon {\n color: black;\n font-size: 17px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;AAGA,IAAM,IAAyC,CAAC,GAC1C,UAAa;CACjB,IAAI,OAAO,KAAK,CAAc,CAAC,CAAC,SAAS,GACvC;CAEF,IAAM,IAAqB,uBAAA,OAAA,CAAA,CAAA,GAMrB,IAAmB,EAAW,kBAAkB;CAEtD,AADA,OAAO,OAAO,GAAe,CAAgB,GAC7C,OAAO,KAAK,CAAa,CAAC,CAAC,SAAQ,MAAkB;EACnD,IAAM,IAAiB,EAAe,MAAM,GAAG,GACzC,IAAY,EAAe,EAAe,SAAS,EAAE,CAAC,QAAQ,OAAO,EAAE;EAC7E,EAAe,KAAa,EAAc,EAAe,CAAC;CAC5D,CAAC;AACH,GACA,KAAgB,OACd,EAAK,GACD,EAAe,MAAc,QAC/B,QAAQ,MAAM,0BAA0B,CAAS,GAC1C;CACL,SAAS,KAAA;CACT,cAAc,KAAA;AAChB,KAEK,EACL,GAAG,EAAe,EAAU,CAAC,oBAAoB,GAAW,EAC9D,ICcF,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,OAAO;GACL,MAAM;GACN,UAAU;EACZ;EACA,OAAO;GACL,MAAM;IAAC;IAAO;IAAQ;GAAM;GAC5B,UAAU;GACV,eAAe;EACjB;EACA,eAAe;GACb,MAAM;GACN,UAAU;GACV,eAAe,CAAC;EAClB;EACA,OAAO;GACL,MAAM,CAAC,OAAO,MAAM;GACpB,UAAU;EACZ;EACA,WAAW;GACT,MAAM;GACN,UAAU;EACZ;CACF;CACA,OAAO,CAAC,gBAAgB,cAAc;CACtC,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,IAAgB,EAAS;GAC7B,cAAc,CAAC;GACf,YAAY,CAAC;EACf,CAAC,GACK,EAAE,iBAAc,eAAY,EAAc,EAAM,MAAM,SAAS,GAC/D,IAAkB,EAAS,EAC/B,GAAG,EAAa,MAClB,CAAC;EAED,AAAI,EAAM,SACR,EAAS,aAAa,KAAK,EAAM,KAAK;EAGxC,IAAM,KAA0B,MAA2B;GACzD,IAAM,IAA2B,CAAC;GAkBlC,OAjBA,EAAW,SAAS,MAAc;IAahC,AAXE,EAAS,wBAAwB,SACjC,EAAS,aAAa,SAAS,EAAK,EAAM,MAAM,SAAS,KAEzD,EAAU,KAAK,EAAK,EAAM,MAAM,SAAS,GAGzC,EAAE,EAAS,wBAAwB,UACnC,EAAS,gBAAgB,EAAK,EAAM,MAAM,aAE1C,EAAU,KAAK,EAAK,EAAM,MAAM,SAAS,GAEvC,EAAK,YAAY,EAAK,SAAS,SAAS,KAC1C,EAAuB,EAAK,QAAQ,CAAC,CAAC,SAAQ,MAAO,EAAU,KAAK,CAAG,CAAC;GAE5E,CAAC,GACM;EACT,GAEM,UAAqB;GAEzB,AADA,EAAK,gBAAgB,EAAS,YAAY,GAC1C,EAAK,gBAAgB,EAAuB,EAAS,UAAU,CAAC;EAClE;EAEA,QACQ,EAAM,UAAU,EAAM,MAAM,aAC5B;GAeJ,AAdI,EAAM,MAAM,SAAS,YACnB,EAAM,UAAU,EAAM,MAAM,QAC9B,EAAS,eAAe,CAAC,EAAM,UAAU,EAAM,MAAM,KAAK,IAE1D,EAAS,eAAe,CAAC,IAIvB,EAAM,UAAU,EAAM,MAAM,SAAS,EAAM,UAAU,EAAM,MAAM,KAAK,CAAC,SAAS,MAClF,EAAS,eAAe,EAAM,UAAU,EAAM,MAAM,KAAK,CAAC,KAAK,MACtD,CACR,IAGL,EAAK,gBAAgB,EAAuB,EAAS,UAAU,CAAC;EAClE,CACF;EAEA,IAAM,KAAY,MAAsB;GAKtC,AAJI,KACF,EAAQ,QAAQ;IAAE,SAAS;IAAU,KAAK,EAAM,MAAM;GAAU,CAAC,GAGnE,EAAQ;IAAE,GAAG;IAAiB,GAAG,EAAM;GAAc,GAAG,CAAO,CAAA,CAC5D,KAAK,SAAU,GAAuB;IAErC,IADA,EAAS,aAAa,EAAI,MACtB,EAAS,WAAW,SAAS,KAAK,EAAS,aAAa,SAAS,KAEjE,OAAO,EAAS,WAAW,EAAE,CAAC,EAAM,MAAM,aAAa,YACvD,OAAO,EAAS,aAAa,MAAM,UACnC;KACA,IAAM,IAAsB,CAAC;KAM7B,AALA,EAAS,aAAa,KAAK,MAAiB;MAC1C,EAAK,MAAM,GAAG,CAAC,CAAC,KAAI,MAAO;OACzB,EAAK,KAAK,OAAO,CAAG,CAAC;MACvB,CAAC;KACH,CAAC,GACG,EAAM,MAAM,YAGV,EAAK,SAAS,MAChB,EAAK,SAAS,IAHhB,EAAS,eAAe;IAO5B;IAGF,AADA,EAAK,gBAAgB,EAAuB,EAAS,UAAU,CAAC,GAC5D,KACF,EAAQ,QAAQ;KAAE,SAAS;KAAU,KAAK,EAAM,MAAM;KAAW,UAAU;IAAE,CAAC;GAElF,CAAC,CAAA,CACA,YAAY;IAEX,AADA,EAAQ,QAAQ,GAChB,EAAQ,MAAM,UAAU,EAAE;GAC5B,CAAC;EACL;EAGA,OAFA,EAAS,GAEF;GACL;GACA;GACA;GACA;GACA;EACF;CACF;CAEA,OAAO;EACL,OAAO,EACL,OAAO,KAAK,MACd;CACF;AACF,CAAC;;;;;aC9LC,EAqCW,GAAA;EApCT,OAAM;EACN,OAAA,EAAA,aAAA,QAAA;;EAHJ,SAAA,QAsBuB,CAjBnB,EAiBmB,GAAA,MAAA;GAtBvB,SAAA,QAqBQ,CAfF,EAeE,GAAA;IAdQ,OAAO,EAAA,SAAS;IAPhC,kBAAA,AAAA,EAAA,QAAA,MAAA,EAOuB,SAAS,eAAY;IACpC,MAAK;IACL,OAAA,EAAA,aAAA,QAAA;IACC,aAAa,EAAA,MAAM;IACnB,0BAA0B;IAC1B,UAAU,EAAA,MAAM;IAChB,iBAAe,EAAA,MAAM;IACrB,eAAa,EAAA,MAAM;IACnB,aAAW,EAAA,SAAS;IACpB,kBAAgB,EAAA,MAAM;IACtB,yBAAuB,EAAA,MAAM;IAC7B,mBAAiB,EAAA,MAAM;IACvB,eAAe,EAAA,WAAA,QAAA;IACf,UAAQ,EAAA;;;;;;;;;;;;;GApBjB,GAAA;MAuBI,EAciB,GAAA;GAbf,OAAM;GACN,OAAA,EAAA,YAAA,mBAAA;;GAzBN,SAAA,QAoCiB,CATX,EASW,GAAA;IART,MAAK;IACL,OAAA,EAAA,OAAA,OAAA;IACC,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,SAAQ,EAAA;IAChB,MAAK;;IAEM,MAAI,QACM,CAAnB,EAAmB,CAAA,CAAA,CAAA;IAlC7B,GAAA;;GAAA,GAAA;;EAAA,GAAA;;;6CCoFA,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,OAAO;GACL,MAAM;GACN,UAAU;EACZ;EACA,WAAW;GACT,MAAM;GACN,UAAU;GACV,eAAe;EACjB;EACA,OAAO;GACL,MAAM;GACN,UAAU;GACV,eAAe,CAAC;EAClB;EACA,YAAY;GACV,MAAM;GACN,eAAe,CAAC;EAClB;EACA,cAAc;GACZ,MAAM;GACN,eAAe,CAAC;EAClB;EACA,OAAO;GACL,MAAM;GACN,eAAe,CAAC;EAClB;EACA,WAAW;GACT,MAAM;GACN,UAAU;EACZ;CACF;CACA,OAAO,CAAC,cAAc;CACtB,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,IAAU,EAAI,EAAK,GACnB,EAAE,iBAAc,wBAAqB,YAAS,YAAS,gBAAa,EACxE,EAAM,SACR,GACM,IAAkB,EAAS;GAC/B,GAAG,EAAa;GAChB,WAAW;GACX,GAAG,EAAM;EACX,CAAC;EAED,KAAK,IAAM,KAAS,EAAa,QAC/B,AAAI,EAAM,gBAAgB,EAAM,aAAa,eAAe,EAAM,IAAI,MAChE,EAAM,aAAa,EAAM,SAAS,KACpC,EAAM,WAAW,IACjB,EAAM,SAAS,MACN,EAAM,aAAa,EAAM,SAAS,KAC3C,EAAM,WAAW,IACjB,EAAM,SAAS,OAEf,EAAM,WAAW,IACjB,EAAM,SAAS;EAKrB,IAAM,IAAkC,CAAC;EACzC,QAAgB;GACd,IAAI,EAAM,YACH,IAAM,KAAK,EAAM,OACpB,AAAI,EAAM,cACR,EAAQ,KAAe,EAAM,UAAU;GAI7C,IAAI,EAAM,SAAS,EAAM,WACvB,KAAK,IAAM,KAAK,EAAM,OAEpB,AADA,EAAgB,KAAe,EAAM,UAAU,IAC/C,QACQ,EAAM,UAAU,UAChB;IACJ,IAAI,EAAM,SAAS,EAAM,gBAClB,IAAM,KAAK,EAAM,OACpB,AAAI,EAAQ,MAAgB,EAAM,UAAU,OAC1C,EAAgB,KAAe,EAAM,UAAU;GAIvD,GACA,EAAE,WAAW,GAAK,CACpB;EAGN,CAAC;EAED,IAAM,EAAE,OAAO,GAAa,sBAAmB,EAAuB,GAAS;GAC7E,UAAU;GACV,cAAc;EAChB,CAAC,GACK,IAAa,QACV,EAAS,WAAW,KAAI,OACtB;GACL,OAAO,EAAK,EAAM,MAAM,WAAY,EAAM,MAAM,WAAsB;GACtE,OAAO,EAAK,EAAM,MAAM,WAAY,EAAM,MAAM,WAAsB;EACxE,EACD,CACF,GACK,IAAW,EAAS;GACxB,SAAS;GACT,cAAc,CAAkB;GAChC,iBAAiB,CAAkB;GACnC,mBAAmB,CAAe;GAClC,YAAY,CAAe;EAC7B,CAAC,GAEK,IAAe;GACnB,MACE,EAAM,MAAM,QAAQ,YAChB,WACA,EAAM,MAAM,MACZ;GAEN,aAAa;GACb,iBAAiB,EAAS;GAC1B,WAAW,GAAsB,MAAsB;IAErD,IAAM,IAA4B,EAAS,gBAAgB,QACzD,MAAQ,EAAgB,QAAQ,OAAO,CAAI,CAAC,KAAK,EACnD;IAWA,AAVA,EAAS,oBAAoB,EAAS,kBAAkB,QACtD,MAAQ,EAAW,QAAQ,EAAK,EAAE,KAAK,EACzC,GACA,EAAa,SAAS,MAAc;KAClC,AAAI,EAAS,gBAAgB,QAAQ,EAAK,EAAE,KAAK,MAC/C,EAAS,kBAAkB,KAAK,CAAI;IAExC,CAAC,GAED,EAAS,gBAAgB,SAAS,GAClC,EAAa,SAAS,MAAc;KAElC,AADA,EAAS,gBAAgB,KAAK,EAAK,EAAE,GACrC,EAAS,WAAW,KAAK,CAAI;IAC/B,CAAC;GACH;EACF,GAEM,EACJ,WACA,gBACA,SAAS,MACP,EAAa,GAAS;GACxB,SAAS;GACT,UAAU;GACV,WAAW;GACX,QAAQ;GACR,eAAe,EACb,GAAG,EACL;EACF,CAAC;EACD,QACQ,EAAM,kBACN;GACJ,IAAM,IAA2B,EAAS,kBAAkB,KAAI,MAAQ,EAAK,EAAE;GAC/E,EAAM,WAAW,KAAK,MAAc;IAClC,AAAI,EAAU,QAAQ,EAAK,EAAE,IAAI,MAC/B,EAAS,gBAAgB,KAAK,EAAK,EAAE;GAEzC,CAAC;EACH,CACF;EACA,IAAM,UAAa;GACjB,IAAI,IAAc,CAAC;GAUnB,IATI,EAAM,iBAAiB,QACrB,EAAM,MAAM,SAAS,MACvB,IAAO,EAAM,SAGX,EAAM,SACR,EAAK,KAAK,EAAM,KAAK,GAGrB,EAAK,SAAS,GAAG;IACnB,IAAM,IAAiB,CAAC,GAClB,IAAsB,CAAC;IAW7B,AAVA,EAAS,WAAW,KAAI,MAAQ,EAAa,KAAK,EAAK,EAAE,CAAC,GAC1D,EAAK,KAAI,MAAQ;KAKf,AAJI,EAAS,aAAa,QAAQ,OAAO,CAAI,CAAC,KAAK,OACjD,EAAS,aAAa,KAAK,OAAO,CAAI,CAAC,GACvC,EAAS,gBAAgB,KAAK,OAAO,CAAI,CAAC,IAExC,EAAa,QAAQ,CAAI,KAAK,MAChC,EAAQ,KAAK,CAAI;IAErB,CAAC,GACG,EAAQ,SAAS,KACnB,EAAQ;KAAE,SAAS;KAAG,GAAG;KAAiB,UAAU;KAAM,KAAK,EAAQ,KAAK,GAAG;IAAE,CAAC,CAAC,CAAC,KAClF,SAAU,GAAU;KAClB,EAAI,KAAK,SAAQ,MAAQ;MACvB,AAAI,EAAK,QAAQ,EAAK,EAAE,KAAK,MAC3B,EAAS,WAAW,KAAK,CAAI,GAC7B,EAAS,kBAAkB,KAAK,CAAI;KAExC,CAAC;IACH,CACF;GAEJ,OAGE,AAFA,EAAS,aAAa,SAAS,GAC/B,EAAS,gBAAgB,SAAS,GAClC,EAAS,kBAAkB,SAAS;EAExC;EAGA,AAFA,EAAK,GAEL,QACQ,EAAM,aACN;GACJ,EAAK;EACP,CACF;EAEA,IAAM,KAAqB,EAAE,YAAS,eAAiB,GAAc,MAAgB;GASnF,AARA,QAAQ,IAAI,CAAM,GAClB,EAAY;IACV;IACA;IACA,GAAG;IACH,GAAG;GACL,CAAC,GAED,EAAO;EACT,GAEM,EAAE,eAAe,MAAwB,EAAQ,GAAiB,CAAC,CAAC;EAU1E,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,cAlBmB;IAKnB,AAJA,EAAY;KACV,SAAS;KACT,GAAG;IACL,CAAC,GACD,EAAO;GACT;GAaE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CAEA,OAAO;EACL,OAAO,EACL,OAAO,KAAK,MACd;CACF;AACF,CAAC,SC/VD,KAAA,EAAA,SAAA,KAAA,EAAA,SAAA,KAAA,EAAA,SAAA,KAAA,EAAA,UAAA,KAAA,EAAA,UAAA,KAAA,EAAA;;;aACE,EA8DU,GAAA;EA7DP,UAAU;EACX,MAAK;EACJ,SAAS,EAAA,MAAM;EACf,QAAM;GAAA,GAAA;GAAA,GAAe,EAAA,YAAY;EAAU;EAC3C,iBAAe,EAAA;EACf,SAAS,EAAA;EACV,WAAQ;EACP,eAAa,EAAA,MAAM;EACnB,YAAU;YAAmB,EAAA,MAAM;aAAyB,EAAA,MAAM;UAAuB,EAAA,MAAM;;EAK/F,UAAQ,EAAA;IAfb,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,EAkBqB,EAAA,WAAR;EAlBb,MAmBa,EAAK;EAnBlB,IAAA,GAwBa,EALmB,UAAO,cAAI;GAGzB,EAAK,aAAQ,WAAA,EAAA,GAAzB,EAEO,QAxBb,GAAA,EAuBW,IAAK,IAAO,EAAA,MAAM,YAAY,EAAA,MAAM,UAAO,EAAA,GAAA,CAAA,KAvBtD,EAAA,IAAA,EAAA;GAyBkB,EAAK,SAAI,YAAA,EAAA,GAArB,EAEO,QA3Bb,GAAA,EA0BW,EAAI,WAAY,EAAI,GAAA,CAAA,KA1B/B,EAAA,IAAA,EAAA;GA4BkB,EAAK,SAAI,cAAA,EAAA,GAArB,EAEO,QA9Bb,GAAA,EA6BW,EAAA,YAAY,CAAI,CAAA,GAAA,CAAA,KA7B3B,EAAA,IAAA,EAAA;GA+BkB,EAAK,SAAI,UAAA,EAAA,GAArB,EAEO,QAjCb,GAAA,EAgCW,EAAA,QAAQ,CAAI,CAAA,GAAA,CAAA,KAhCvB,EAAA,IAAA,EAAA;GAkCkB,EAAK,SAAI,eAAA,EAAA,GAArB,EAEO,QApCb,IAAA,EAmCW,EAAA,YAAY,CAAI,CAAA,GAAA,CAAA,KAnC3B,EAAA,IAAA,EAAA;GAqCkB,EAAK,SAAI,UAAA,EAAA,GAArB,EAEO,QAvCb,IAAA,EAsCW,EAAA,QAAQ,CAAI,CAAA,GAAA,CAAA,KAtCvB,EAAA,IAAA,EAAA;GA0Cc,KAAQ,EAAK,SAAI,aAAA,EAAA,GAFzB,EAKQ,GAAA;IA7Cd,KAAA;IAyCQ,OAAM;;IAzCd,SAAA,QA4CwB,CA5CxB,EAAA,EA4CW,EAAK,KAAK,GAAA,CAAA,CAAA,CAAA;IA5CrB,GAAA;eAAA,EAAA,IAAA,EAAA;IAgDe,KAAQ,EAAK,SAAI,aAAA,EAAA,GAF1B,EAKQ,GAAA;IAnDd,KAAA;IA+CQ,OAAM;;IA/Cd,SAAA,QAkDwB,CAlDxB,EAAA,EAkDW,EAAK,KAAK,GAAA,CAAA,CAAA,CAAA;IAlDrB,GAAA;eAAA,EAAA,IAAA,EAAA;GAoDsB,EAAK,SAAI,UAAA,EAAA,EAAA,GACvB,EAOQ,GAAA,EA5DhB,KAAA,EAAA,GAAA,EAuDwB,IAAP,YAFT,EAOQ,GAAA;IANN,OAAM;IAEL,KAAK,EAAI;IACV,OAAA,EAAA,iBAAA,MAAA;;IAzDV,SAAA,QA2DwB,CA3DxB,EAAA,EA2Da,EAAI,IAAI,GAAA,CAAA,CAAA,CAAA;IA3DrB,GAAA;uBAAA,EAAA,IAAA,EAAA;;;;;;;;;;;;+ECuFA,KAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,OAAO;GACL,MAAM;GACN,UAAU;EACZ;EACA,UAAU,EACR,MAAM,OACR;EACA,cAAc;GACZ,MAAM;GACN,eAAe;EACjB;EACA,UAAU,EACR,MAAM,OACR;EACA,YAAY;GACV,MAAM;GACN,SAAS;EACX;EACA,cAAc;GACZ,MAAM;GACN,eAAe,CAAC;EAClB;EACA,OAAO;GACL,MAAM;IAAC;IAAO;IAAQ;GAAM;GAC5B,UAAU;GACV,eAAe;EACjB;EACA,OAAO;GACL,MAAM,CAAC,OAAO,MAAM;GACpB,UAAU;GACV,eAAe,CAAC;EAClB;EACA,WAAW;GACT,MAAM;GACN,UAAU;EACZ;EACA,UAAU;GACR,MAAM;GACN,eAAe,CAAC;EAClB;EACA,aAAa,EACX,MAAM,OACR;EACA,YAAY;GACV,MAAM;GACN,eAAe,CAAC;EAClB;EACA,UAAU;GACR,MAAM;GACN,eAAe;EACjB;EACA,YAAY;GAEV,MAAM;GACN,eAAe,CAAC;EAClB;EACA,gBAAgB;GACd,MAAM;GACN,eAAe;EACjB;EACA,YAAY,EACV,SAAS,KACX;EACA,kBAAkB,EAChB,SAAS,KACX;EACA,SAAS;GACP,MAAM;GACN,SAAS;EACX;CACF;CACA,OAAO,CAAC,gBAAgB,cAAc;CACtC,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,IAAW,EAAS;GACxB,cAAc,CAAwB;GACtC,YAAY,CAAe;EAC7B,CAAC,GACK,IAAQ,EAAS,GACjB,IAAW,EAAI,iBAAiB,GAChC,IAAc,EAAI,IAAI,GACtB,IAAa,EAAI,EAAE,GACnB,IAAyB,EAA0B,GACnD,KAAqB,GAAY,GAAW,MAAc;GAC9D,IAAI,EAAK,aAAa,sBACpB,EAAK,KAAK;IACR,YAAY,EAAK;IACjB,UAAU,EAAK;IACf,OAAO,CAAC;IACR,QAAQ,EAAK;IACb,YAAY,EAAK;GACnB,CAAC;QACI,IAAI,aAAiB,OAAO;IACjC,IAAM,CAAC,KAAS;IAChB,AAAI,EAAW,CAAK,KAClB,EAAK,KAAK;KACR,YAAY,EAAK;KACjB,UAAU,EAAK;KACf,OAAO,EAAwB,GAAO,EAAK,UAAU;KACrD,QAAQ,EAAK;KACb,YAAY,EAAK;IACnB,CAAC;GAEL,OAAO,IAAI,EAAW,CAAK,GAAG;IAC5B,IAAI,IAAM;IAWV,CAVI,EAAK,aAAa,QAAQ,EAAK,aAAa,aAC1C,EAAM,SAAS,GAAG,IACpB,IAAM,KAAK,MAAM,CAAK,IACb,EAAM,SAAS,GAAG,MAC3B,IAAM,EAAM,MAAM,GAAG,IAEnB,EAAK,eAAe,UACtB,IAAM,EAAI,IAAI,MAAM,KAGxB,EAAK,KAAK;KACR,YAAY,EAAK;KACjB,UAAU,EAAK;KACf,OAAO,EAAwB,aAAe,QAAQ,IAAM,CAAC,CAAG,GAAG,EAAK,UAAU;KAClF,QAAQ,EAAK;KACb,YAAY,EAAK;IACnB,CAAC;GACH;EACF;EACA,SAAS,EAAe,GAAK,GAAM;GACjC,OAAO,EAAK,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAS,MAAQ,IAAU,IAAM,CAAG;EACrE;EAEA,IAAM,KAAiB,IAAa,OAAS;GAC3C,IAAM,IAAa,CAAC,GAChB,IAAoB,CACtB,CACE;IACE,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,OAAO,CAAC,EAAI;IACZ,QAAQ;IACR,YAAY;GACd,CACF,CACF;GAiCA,IAhCI,EAAM,MAAM,qBACd,IAAoB,EAAM,MAAM,mBAElC,EAAkB,SAAS,MAAc;IACvC,IAAM,IAAO,CAAC;IA0Bd,AAzBA,EAAK,SAAS,MAAe;KAC3B,AAAI,EAAM,eAAe,IACvB,OAAO,KAAK,EAAM,WAAW,EAAM,WAAW,EAAM,SAAS,CAAC,CAAC,SAAS,MAAa;MACnF,AAAI,EAAM,eAAe,KACvB,GACG,EAAM,WAAW,EAAM,WAAW,EAAM,UAAA,CAAW,IACpD,GACA,CACF;KAEJ,CAAC,IACQ,EAAM,eAAe,IAC9B,OAAO,KAAK,EAAM,SAAS,CAAC,CAAC,SAAS,MAAa;MACjD,AAAI,EAAM,eAAe,KACvB,EAAkB,EAAM,UAAU,IAAM,GAAM,CAAK;KAEvD,CAAC,IACQ,EAAM,eAAe,IAC9B,EAAkB,EAAM,OAAO,GAAM,CAAK,IACjC,EAAM,eAAe,IAC9B,EAAkB,EAAe,EAAM,SAAS,EAAM,WAAW,GAAG,GAAM,CAAK,IAE/E,EAAkB,EAAM,OAAO,GAAM,CAAK;IAE9C,CAAC,GACD,EAAW,KAAK,CAAI;GACtB,CAAC,GACG,EAAW,SAAS,GAEtB,IADA,EAAa,WAAW,IACpB,GAAO,gBAAgB,GAAO,cAAc,SAAS,GACvD,EAAM,aAAa,SAAS,GAAU,MAAe;IACnD,IAAI,IAAY,EAAW;IAK3B,AAJK,MACH,IAAY,CAAC,GACb,EAAW,KAAS,IAEtB,EAAU,KAAK;KACb,YAAY;KACZ,UAAU;KACV,QAAQ;KACR,OAAO,CAAC,EAAW,KAAK;KACxB,YAAY;IACd,CAAC;GACH,CAAC;QAED,IAAI,EAAW,WAAW,GACxB,EAAW,KAAK,CACd;IACE,YAAY,EAAc;IAC1B,UAAU;IACV,QAAQ;IACR,OAAO,CAAC,EAAW,KAAK;IACxB,YAAY;GACd,CACF,CAAC;QAED,KAAK,IAAM,KAAQ,GACjB,EAAK,KAAK;IACR,YAAY,EAAc;IAC1B,UAAU;IACV,QAAQ;IACR,OAAO,CAAC,EAAW,KAAK;IACxB,YAAY;GACd,CAAC;GAKT,OAAO;EACT,GACM,KAAyB,IAAa,OAAS;GACnD,IAAM,IAAS,CAAC;GAiChB,OAhCI,EAAM,MAAM,0BACd,EAAM,MAAM,uBAAuB,SAAS,MAAc;IACxD,AAAI,EAAK,eAAe,IACtB,OAAO,KAAK,EAAM,WAAW,EAAM,WAAW,EAAM,SAAS,CAAC,CAAC,SAAS,MAAa;KACnF,IAAI,EAAK,eAAe,GAAK;MAC3B,IAAM,KAAS,EAAM,WAAW,EAAM,WAAW,EAAM,UAAA,CAAW;MAClE,EAAO,EAAK,cAAc;KAC5B;IACF,CAAC,IACQ,EAAK,eAAe,IAC7B,OAAO,KAAK,EAAM,SAAS,CAAC,CAAC,SAAS,MAAa;KACjD,IAAI,EAAK,eAAe,GAAK;MAC3B,IAAM,IAAQ,EAAM,UAAU;MAC9B,EAAO,EAAK,cAAc;KAC5B;IACF,CAAC,IACQ,EAAK,eAAe,IAC7B,EAAO,EAAK,cAAc,EAAK,QACtB,EAAK,eAAe,MAC7B,EAAO,EAAK,cAAc,EAAe,EAAM,SAAS,EAAK,WAAW;GAE5E,CAAC,GAEC,EAAW,SAAS,MAClB,GAAO,gBAAgB,GAAO,cAAc,SAAS,IACvD,EAAM,aAAa,SAAS,GAAU,MAAe;IACnD,EAAO,KAAO,EAAW;GAC3B,CAAC,IAED,EAAO,EAAc,KAAK,EAAW,QAGlC;EACT,GAEM,IAAoB;GACxB,SAAS;GACT,UAAU;GACV,eAAe;GACf,gBAAgB;GAChB,WAAW;GACX,GAAG,EAAM;GACT,eAAe,CAAC;GAChB,aAAa,CAAC;GACd,YAAY,CAAC;GACb,oBAAoB,CAAC;EACvB,GACM,UACG,EAAM,YAAY,MAErB,UACG,EAAM,YAAY,QAErB,UAAwB;GAC5B,IAAM,IAAO,CAAC;GAMd,OALI,GAAO,gBAAgB,GAAO,cAAc,SAAS,KAAK,EAAM,iBAAiB,IACnF,EAAK,KAAK,GAAG,EAAM,YAAY,IAE/B,EAAK,KAAK,EAAc,CAAC,GAEpB;EACT,GACM,UAAwB;GAC5B,IAAM,IAAO,CAAC;GAMd,AALI,GAAO,gBAAgB,GAAO,cAAc,SAAS,KAAK,EAAM,iBAAiB,IACnF,EAAK,KAAK,EAAc,GAAG,GAAG,EAAM,YAAY,IAEhD,EAAK,KAAK,EAAc,GAAG,EAAc,CAAC,GAExC,EAAM,OAAO,kBAAkB,EAAM,OAAO,eAAe,SAAS,KACtE,EAAK,KAAK,GAAG,EAAM,MAAM,cAAc;GAGzC,IAAM,IAAa,CAAC,GAAG,IAAI,IAAI,CAAI,CAAC;GACpC,EAAa,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAU;EACnD;EAGA,AAFA,EAAgB,GAChB,EAAa,cAAc,EAAgB,GACvC,EAAM,YAAY,gBACpB,EAAa,cAAc,EAAM,YAAY;EAE/C,IAAM,KAAqB,MAAS;GAClC,IAAI,MAAM,QAAQ,EAAS,YAAY;QACjC,EAAS,aAAa,SAAS,CAAK,GACtC,OAAO;GAAA,OAGT,IAAI,EAAS,iBAAiB,GAC5B,OAAO;GAGX,OAAO;EACT,GAEM,IAAa,QACV,EAAS,WAAW,KAAI,MAAQ;GAErC,IAAI,EAAM,gBAAgB,EAAM,aAAa,SAAS,KAAK,GAAO,iBAAiB,GAAG;IACpF,IAAM,IAAQ,CAAC;IACf,KAAK,IAAM,KAAO,EAAM,cACtB,EAAM,KAAK,EAAK,EAAc;IAEhC,OAAO;KACL,OAAO,EAAK,EAAc;KAC1B,OAAO,EAAM,KAAK,EAAM,UAAU;IACpC;GACF,OACE,OAAO;IACL,OAAO,EAAK,EAAc;IAC1B,OAAO,EAAK,EAAc;GAC5B;EAEJ,CAAC,CACF,GACK,KAAmB,MAAkB;GAIzC,IAHI,KAAY,CAAC,MAAM,QAAQ,CAAQ,MACrC,IAAW,CAAC,CAAQ,IAGpB,EAAM,MAAM,WACZ,CAAC,EAAM,UAAU,EAAM,MAAM,SAC7B,EAAM,MAAM,QAAQ,aACpB,EAAS,SAAS,GAClB;IACA,EAAM,UAAU,EAAM,MAAM,QAAQ,EAAS;IAC7C,IAAM,IAAY,EAAS,WAAW,MAAK,MAAQ;KACjD,IAAI,EAAK,EAAc,MAAM,EAAS,IACpC,OAAO;IAEX,CAAC;IACD,AAAI,KACF,EAAK,gBAAgB,EAAU,EAAc,EAAE;GAEnD;GACA,IAAI,EAAM,MAAM,QAAQ,WAAW;IACjC,IAAM,IAAmB,EAAW,MACjC,QAAQ,MAAc,EAAmB,EAAK,KAAK,CAAC,CAAA,CACpD,KAAK,MAAc,EAAK,KAAK;IAChC,EAAK,gBAAgB,EAAY,SAAS,IAAI,EAAY,KAAK,EAAE;GACnE,OACE,EACE,gBACA,EAAW,MACR,QAAQ,MAAc,EAAmB,EAAK,KAAK,CAAC,CAAA,CACpD,KAAK,MAAc,EAAK,KAAK,CAClC;EAEJ,GACM,UAAsB;GAC1B,IAAI,EAAM,MAAM,SAAS,WAAW;IAClC,IAAM,IAAW,EAAS,WAAW,QAAQ,MAC3C,EAAmB,EAAK,EAAc,EAAE,CAC1C;IACA,AAAI,EAAM,eACR,EAAM,WAAW,EAAM,MAAM,QAAQ,EAAS;GAElD,OAAO;IACL,IAAM,IAAW,EAAS,WAAW,QAAQ,MAC3C,EAAmB,EAAK,EAAc,EAAE,CAC1C;IACA,AAAI,EAAM,eACR,EAAM,WAAW,EAAM,MAAM,QAAQ;GAEzC;EACF,GACI,IAAY,CAAC;EAyCjB,AAxCA,QACQ,CAAC,EAAM,WAAW,EAAM,OAAO,SAC/B;GACJ,IAAM,IAAY,EAAe,EAAK;GACtC,AAAK,EAAQ,GAAW,CAAS,MAC/B,IAAY,GACZ,EAAa,EAAI;EAErB,GACA,EAAE,MAAM,GAAK,CACf,GACA,QACQ,EAAM,UAAU,EAAM,MAAM,aAC5B;GACJ,IAAI,EAAM,MAAM,SAAS,WAAW;IAClC,AAAI,EAAM,UAAU,EAAM,MAAM,SAAS,EAAM,UAAU,EAAM,MAAM,UAAU,IAC7E,EAAS,eAAe,CAAC,EAAM,UAAU,EAAM,MAAM,KAAK,IAE1D,EAAS,eAAe,CAAC;IAE3B,IAAM,IAAmB,EAAW,MACjC,QAAQ,MAAc,EAAmB,EAAK,KAAK,CAAC,CAAA,CACpD,KAAK,MAAc,EAAK,KAAK;IAChC,EAAK,gBAAgB,EAAY,SAAS,IAAI,EAAY,KAAK,EAAE;GACnE,OAOE,AALI,EAAM,UAAU,EAAM,MAAM,SAAS,EAAM,UAAU,EAAM,MAAM,KAAK,CAAC,SAAS,IAClF,EAAS,eAAe,EAAM,UAAU,EAAM,MAAM,QAEpD,EAAS,eAAe,CAAC,GAE3B,EACE,gBACA,EAAW,MACR,QAAQ,MAAc,EAAmB,EAAK,KAAK,CAAC,CAAA,CACpD,KAAK,MAAc,EAAK,KAAK,CAClC;EAEJ,CACF,GACA,QACQ,EAAM,aACN;GACJ,EAAc;EAChB,GACA,EAAE,MAAM,GAAK,CACf;EACA,IAAM,KAAiC,MAAgB;GACrD,AAAI,EAAM,MAAM,sBACD,EAAM,MAAM,mBAAmB,MAAM,MAAc,EAAK,QAAQ,CACzE,KACF,EAAa,EAAI;EAGvB;EAQA,AAPA,QAAgB;GAKd,AAHA,EAAS,QAAQ,sBAAA,GAAA,GAAA,QAAA,CAAyB,GAD1B,EAAM,KAAK,GAAG,EAAM,MAAM,KAAK,GAAG,EAAM,MAAM,SACd,GAChD,EAAe,GACf,EAA6B,CAAC,CAAC,GAAG,6BAA6B,CAA6B,GAC5F,EAAQ;EACV,CAAC,GACD,QAAkB;GAChB,EAA6B,CAAC,CAAC,IAC7B,6BACA,CACF;EACF,CAAC;EACD,IAAM,UAAuB;GAC3B,AAAI,EAAM,MAAM,SAAS,aACnB,EAAM,SAAS,EAAM,UAAU,OAC7B,EAAc,MAAM,OAClB,MAAM,OAAO,EAAM,KAAK,CAAC,IAC3B,EAAS,aAAa,KAAK,EAAM,KAAK,IAEtC,EAAS,aAAa,KAAK,OAAO,EAAM,KAAK,CAAC,IAGhD,EAAS,aAAa,KAAK,EAAM,KAAK,KAItC,OAAO,EAAM,SAAU,WACzB,EAAO,MAAiB,MAAM,GAAG,CAAC,CAAC,KAAK,MAAc;IACpD,AAAI,EAAc,MAAM,OAClB,MAAM,OAAO,CAAI,CAAC,IACpB,EAAS,aAAa,KAAK,CAAI,IAE/B,EAAS,aAAa,KAAK,OAAO,CAAI,CAAC,IAGzC,EAAS,aAAa,KAAK,CAAI;GAEnC,CAAC,IACQ,EAAM,iBAAiB,QAChC,EAAM,MAAM,SAAS,MAAc;IACjC,AAAI,EAAc,MAAM,OAClB,MAAM,OAAO,CAAI,CAAC,IACpB,EAAS,aAAa,KAAK,CAAI,IAE/B,EAAS,aAAa,KAAK,OAAO,CAAI,CAAC,IAGzC,EAAS,aAAa,KAAK,CAAI;GAEnC,CAAC,IACQ,EAAM,SAAS,QACxB,EAAS,aAAa,KAAK,EAAM,KAAK;EAG5C,GACM,UAAqB;GACzB,IAAI,EAAM,MAAM,QAAQ,WAAW;IACjC,EAAK,gBAAgB,EAAS,YAAY;IAC1C,IAAM,IAAmB,EAAW,MACjC,QAAQ,MACA,EAAS,gBAAgB,EAAK,KACtC,CAAA,CACA,KAAK,MAAc,EAAK,KAAK;IAChC,EAAK,gBAAgB,EAAY,SAAS,IAAI,EAAY,KAAK,EAAE;GACnE,OAME,AALI,EAAS,aAAa,QACxB,EAAK,gBAAgB,EAAS,YAAY,GAI5C,EACE,gBACA,EAAW,MACR,QAAQ,MAAc,EAAmB,EAAK,KAAK,CAAC,CAAA,CACpD,KAAK,MAAc,EAAK,KAAK,CAClC;EAEJ,GACM,UAAgC;GACpC,IAAM,IAAqB,EAAM,MAAM,oBACjC,IAAyB,CAAC;GAShC,OARI,KACF,EAAmB,SAAS,MAAc;IACxC,IAAM,IAAQ,EAAuB,UAAU,EAAK;IACpD,AAAI,KAAiC,SACnC,EAAuB,EAAK,cAAc;GAE9C,CAAC,GAEI;EACT,GAIM,IAAmB,OAAO,GAAQ,MAAiB;GAIvD,IAHI,KAAgB,CAAC,MAAM,QAAQ,CAAY,MAC7C,IAAe,CAAC,CAAY,IAE1B,KAAgB,EAAa,SAAS,GAAG;IAC3C,IAAM,IAAiB,CAAC;IAMxB,IALA,EAAa,SAAS,MAAe;KACnC,AAAK,EAAS,WAAW,MAAK,MAAQ,EAAK,EAAc,OAAO,CAAK,KACnE,EAAe,KAAK,CAAK;IAE7B,CAAC,GACG,EAAe,SAAS,GAAG;KAC7B,IAAM,IAAM,EAAE,GAAG,EAAO;KACxB,IAAI,EAAM,MAAM,cAAc,UAAU;MACtC,IAAI,IAAQ;MAIZ,AAHI,aAAiB,SAAS,EAAM,SAAS,MAC3C,IAAQ,EAAM,KAAK,GAAG,IAExB,EAAI,EAAc,KAAK;KACzB,OACE,AAAI,EAAI,cAAc,EAAI,WAAW,SAAS,MAS5C,EAAI,aAAa,CAAC,CAAC,CAAC,IARpB,EAAI,WAAW,EAAE,CAAC,KAAK;MACrB,YAAY;MACZ,UAAU;MACV,OAAO;MACP,QAAQ;MACR,YAAY,EAAc;KAC5B,CAAC;KAYL,IAAM,IAAO,MAAM,EAAW,EAAE,GAAG,EAAI,GAAG,EAAM,MAAM,SAAS,IAAO,EACpE,YAAY,GACd,CAAC;KACD,EAAS,aAAa,EAAS,WAAW,OAAO,GAAM,QAAQ,CAAC,CAAC;IACnE;GACF;EACF,GACM,KAAkB,IAAa,OAAS;GAC5C,IAAI,IAAc,CAAC;GAenB,OAdI,EAAM,MAAM,cAAc,YAC5B,EAAa,qBAAqB,EAAsB,CAAU,GAClE,IAAS;IACP,GAAG;IACH,GAAG,EAAa;IAChB,oBAAoB,EAAwB;GAC9C,GACA,OAAO,EAAO,YACd,OAAO,EAAO,uBAEd,EAAa,aAAa,EAAc,CAAU,GAClD,IAAS;IAAE,GAAG;IAAc,oBAAoB,EAAwB;GAAE,GAC1E,OAAO,EAAO,qBAET;EACT,GAEM,IAAU,OAAO,IAAQ,OAAU;GAGvC,IAAI,EAAM,MAAM,SAAS;IACvB,AAAI,MACF,EAAS,WAAW,SAAS;IAE/B,IAAM,IAAW,EAAS,WAAW,WAAW,GAC1C,IAAS,EAAe,GACxB,IAAM,MAAM,EAAW,GAAQ,EAAM,MAAM,SAAS,IAAO,EAAE,YAAY,GAAK,CAAC;IACrF,IAAI,GAAK,MAAM,SAAS,GAAG;KACzB,IAAM,IAAS,EAAc,GACvB,IAAW,GAAK,KAAK,QAAO,MAIzB,CAHG,EAAS,WAAW,MAAK,MAC1B,EAAE,MAAW,EAAE,EAEhB,CACT;KAKD,AAJA,EAAS,aAAa,EAAS,WAAW,OAAO,CAAQ,GACrD,KACF,MAAM,EAAiB,GAAQ,EAAS,YAAY,GAEtD,EAAc;IAChB;IAEA,IAAI,EAAM,MAAM,qBAAqB,WAAW,CAAC,EAAM,gBAChD,EAAM,UAAU,EAAM,MAAM,UAC3B,EAAM,MAAM,SAAS,aAAa,CAAC,EAAM,MAAM,QACjD,EAAK,gBAAgB,EAAS,WAAW,EAAE,CAAC,EAAc,EAAE,GAC5D,EAAK,gBAAgB,EAAS,WAAW,EAAE,CAAC,EAAc,EAAE,MAE5D,EAAK,gBAAgB,CAAC,EAAS,WAAW,EAAE,CAAC,EAAc,EAAE,CAAC,GAC9D,EAAK,gBAAgB,CAAC,EAAS,WAAW,EAAE,CAAC,EAAc,EAAE,CAAC;SAG7D,IAAI,EAAM,MAAM,qBAAqB,YAAY,CAAC,EAAM;SACzD,CAAC,EAAM,UAAU,EAAM,MAAM,OAAO;MACtC,IAAM,IAAmB,EAAM,MAAM,kBAC/B,IAAqB,EAAM,MAAM,oBACjC,IAAqB,EAAuB,UAAU;MAC5D,IAAI,GAAoB;OACtB,IAAM,IAAoB,EAAS,WAAW,MAC5C,MAAS,EAAM,OAAwB,CACzC;OACA,AAAI,MACE,EAAM,MAAM,SAAS,aAAa,CAAC,EAAM,MAAM,QACjD,EAAK,gBAAgB,EAAkB,EAAc,EAAE,GACvD,EAAK,gBAAgB,EAAkB,EAAc,EAAE,MAEvD,EAAK,gBAAgB,CAAC,EAAkB,EAAc,EAAE,CAAC,GACzD,EAAK,gBAAgB,CAAC,EAAkB,EAAc,EAAE,CAAC;MAG/D;KACF;WAEA,EAAgB,EAAS,YAAY;GAEzC;EACF,GACM,IAAoB,GAAU,IAAQ,OAAU;GACpD,EAAQ,CAAK;EACf,GAAG,GAAG;EAmBN,AAlBA,QACQ;GACJ,EAAM;GACN,EAAM;GACN,EAAM;GACN,EAAM;GACN,EAAM;GACN,EAAM,MAAM;EACd,IACC,GAAU,MAAa;GACtB,AAAK,EAAQ,GAAU,CAAQ,MAC7B,EAAgB,GAChB,EAAa,cAAc,EAAgB,GAC3C,EAAa,EAAI;EAErB,GACA,EAAE,MAAM,GAAK,CACf,GACA,QACQ;GACJ,EAAM,MAAM;GACZ,EAAM,MAAM;GACZ,EAAM,MAAM;EACd,IACC,GAAU,MAAa;GACtB,AAAK,EAAQ,GAAU,CAAQ,KAC7B,EAAa,EAAI;EAErB,GACA,EAAE,MAAM,GAAK,CACf;EAEA,IAAM,KAAgB,MAAa;GAEjC,AADA,EAAW,QAAQ,GACnB,EAAa;EACf,GACM,IAAa,QAA2B,OAAO,2BAAmB;EA+FxE,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA,eApBoB,GAAa,MAAgB;IACjD,IAAI,EAAW,iBAAiB,OAAO;KACrC,IAAM,IAAS,EAAW,MAAM,MAAK,MAC5B,EAAK,SAAY,EAAO,GAChC;KAIC,OAHE,IACK,OAAO,EAAE,KAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAI,YAAY,CAAC,KAAK,IAE/D;IAEX;GACF;GAUE,uBAtG4B;IAC5B,IAAI,IAAe,CAAC;IACpB,EAAW,QAAQ;IACnB,IAAI,IAAmB;IASvB,AARI,EAAM,MAAM,SAAS,cACvB,IAAmB,UAErB,AACE,IADG,EAAW,QAGC,EAAW,MAAM,QAAQ,MAAc,EAAmB,EAAK,KAAK,CAAC,IAFrE,CAAC,GAIlB,EAAY,QAAQ;KAClB,KAAK,EAAS;KACd,OAAO,EAAM,MAAM,SAAS,EAAM,MAAM;KACxC;KACA,SAAS,EAAM,MAAM,OAAO,WAAW,CAAC;KACxC,eAAe,EAAM,MAAM,OAAO,iBAAiB,CAAC;KACpD,UAAU,EAAM,MAAM;KACtB,cAAc;KACd,eAAe;KACf,aAAa;IACf;IACA,IAAM,IAAa,EAAM,cAAc,CAAC;IACxC,IAAI,EAAM,MAAM,cAAc,UAC5B,EAAY,MAAM,eAAkB;KAAE,GAAG;KAAY,GAAG,EAAsB;IAAE;SAC3E;KACL,IAAM,IAAa,EAAc;KAEjC,AADA,EAAY,MAAM,eAAkB,GAChC,EAAW,SAAS,KAAK,EAAW,EAAE,CAAC,SAAS,MAClD,EAAY,MAAM,kBAAqB,EAAW;IAEtD;IACA,IAAM,IAAqB,EAAwB;IA6CnD,AA5CI,MACF,EAAY,MAAM,eAAkB;KAClC,GAAG,EAAY,MAAM;KACrB;IACF,IAwCF,EAtCkB,EAAS;KACzB,MAAM;KACN,SAAS;KACT,WAAW;KACX,YAAY,EAAM,MAAM,SAAS;KACjC,aAAa,EAAY;KACzB,UAAU,EAAM,YAAY;KAC5B,OAAO;KACP,cAAc,EAAM,gBAAgB,CAAC;KACrC,cAAc,EAAM,gBAAgB;KACpC,YAAY,EAAM,cAAc;KAChC,UAAU,EAAM,YAAY;KAC5B,IAAI,OAAO,MAAc;MACvB,IAAM,IAAiB,EAAK,KAAK,MAAc,EAAK,KAAK,KAAK,CAAC,GACzD,IAAiB,EAAK,KAAK,MAAc,EAAK,KAAK,KAAK,CAAC,GACzD,IAAS,EAAe;MAC9B,AAAI,EAAM,MAAM,QAAQ,YAClB,EAAe,UAAU,KAC3B,EAAS,eAAe,KAAA,GACxB,EAAK,gBAAgB,EAAS,YAAY,GAC1C,EAAK,gBAAgB,KAAA,CAAS,MAE9B,EAAS,eAAe,EAAe,IACvC,MAAM,EAAiB,GAAQ,EAAe,EAAE,GAChD,EAAK,gBAAgB,EAAS,YAAY,GAC1C,EAAK,gBAAgB,EAAe,EAAE,MAGxC,EAAS,eAAe,GACxB,MAAM,EAAiB,GAAQ,CAAc,GAC7C,EAAK,gBAAgB,EAAS,YAAY,GAC1C,EAAK,gBAAgB,CAAc;KAEvC;KACA,cAAc;MACZ,QAAQ,IAAI,QAAQ;KACtB;IACF,CACS,CAAS;GACpB;GAwBE;EACF;CACF;CAEA,OAAO;EACL,OAAO,EACL,OAAO,KAAK,MACd;CACF;CACA,YAAY,EAAE,aAAA,EAAY;AAC5B,CAAC,UCr4BM,OAAM,oBAAmB;CADhC,KAAA;CAkCM,OAAM;CACN,OAAA,EAAA,gBAAA,MAAA;;;;aAlCJ,EAsCM,OAtCN,IAsCM,CApCJ,EA2BW,GAAA;EA1BD,OAAO,EAAA,SAAS;EAJ9B,kBAAA,AAAA,EAAA,QAAA,MAAA,EAIqB,SAAS,eAAY;EACnC,eAAa,EAAA,MAAM,eAAU;EAC7B,iBAAe,EAAA,MAAM;EACrB,UAAU,EAAA,MAAM;EAChB,iBAAe,EAAA;EACf,aAAa,EAAA,MAAM,cAAc,EAAA,MAAM,cAAW;EAClD,MAAM,EAAA,MAAM,QAAI,YAAA,OAAuB,EAAA,MAAM;EAC7C,aAAa,EAAA;EACb,eAAa,EAAA,MAAM,gBAAW;EAC/B,MAAK;EACJ,sBAAsB;EACtB,UAAQ,EAAA;EACR,UAAQ,EAAA;EACT,OAAA,EAAA,aAAA,QAAA;;EAjBN,SAAA,QAoBoC,EAAA,EAAA,EAAA,GAD9B,EAUkB,GAAA,MA7BxB,EAoByB,EAAA,aAAV,YADT,EAUkB,GAAA;GARf,KAAK,EAAO;GACZ,OAAO,EAAO;;GAtBvB,SAAA,QA4BU,CAJF,EAIE,GAAA;IAHC,MAAM,EAAO;IACb,SAAS,EAAA;IACT,OAAO,EAAA,MAAM;;;;;;GA3BxB,GAAA;;EAAA,GAAA;;;;;;;;;;;;;KAiCY,EAAA,MAAM,OAAO,UAAA,EAAA,GADrB,EAMM,OANN,IAMM,CADJ,EAA+C,GAAA,EAA1B,SAAO,EAAA,gBAAe,GAAA,MAAA,GAAA,CAAA,SAAA,CAAA,CAAA,CAAA,KArCjD,EAAA,IAAA,EAAA,CAAA,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { n as e } from "./rolldown-runtime-Dqa2HsxW.js";
2
2
  import { t } from "./_plugin-vue_export-helper-B3ysoDQm.js";
3
3
  import { t as n } from "./lodash-CRdKFc7e.js";
4
- import { t as r } from "./FieldRender2-CU_uToLj.js";
4
+ import { t as r } from "./FieldRender2-CNdvHlXJ.js";
5
5
  import { Fragment as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, createVNode as u, openBlock as d, renderList as f, renderSlot as p, resolveComponent as m, toDisplayString as h, vShow as g, watch as _, withCtx as v, withDirectives as y } from "vue";
6
6
  import b from "moment";
7
7
  import { CloseOutlined as x, LeftOutlined as S, RightOutlined as C } from "@ant-design/icons-vue";