liyu-pc-base 1.0.430 → 1.0.435
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{FieldRender-DX_3D1eR.js → FieldRender-Ds_QtqKD.js} +1 -1
- package/dist/{FieldRender-DX_3D1eR.js.map → FieldRender-Ds_QtqKD.js.map} +1 -1
- package/dist/FieldRender-SVmUCvTe.js +2 -0
- package/dist/{FieldRender2-BQSvLYKn.js → FieldRender2-DHY0ICJK.js} +2 -2
- package/dist/{FieldRender2-BQSvLYKn.js.map → FieldRender2-DHY0ICJK.js.map} +1 -1
- package/dist/{FormRender3-D6C2qJy8.js → FormRender3-BPhDGwhF.js} +1 -1
- package/dist/{FormRender3-D6C2qJy8.js.map → FormRender3-BPhDGwhF.js.map} +1 -1
- package/dist/FormRender3-CnwkCg5U.js +2 -0
- package/dist/{RemoteSelectPro-ChIbw_Ht.js → RemoteSelectPro-DJC3JXiQ.js} +14 -9
- package/dist/RemoteSelectPro-DJC3JXiQ.js.map +1 -0
- package/dist/SearchRender-BOd8P7OK.js +2 -0
- package/dist/{SearchRender-e3xeNBz-.js → SearchRender-BWcOPC54.js} +1 -1
- package/dist/{SearchRender-e3xeNBz-.js.map → SearchRender-BWcOPC54.js.map} +1 -1
- package/dist/components/index.js +6 -6
- package/dist/index.js +1 -1
- package/dist/liyu-pc-base.css +1 -1
- package/dist/{tableModal-CEdsjOPz.js → tableModal-C4CzR3Jr.js} +5 -4
- package/dist/tableModal-C4CzR3Jr.js.map +1 -0
- package/dist/{tablePro-Cz8hKqFc.js → tablePro-BYIW028a.js} +1 -1
- package/dist/{tablePro-Cz8hKqFc.js.map → tablePro-BYIW028a.js.map} +1 -1
- package/dist/tablePro-OkI6nALn.js +2 -0
- package/package.json +1 -1
- package/dist/FieldRender-BrWvVr7V.js +0 -2
- package/dist/FormRender3-BQw-IS_M.js +0 -2
- package/dist/RemoteSelectPro-ChIbw_Ht.js.map +0 -1
- package/dist/SearchRender-DFPI72Xt.js +0 -2
- package/dist/tableModal-CEdsjOPz.js.map +0 -1
- package/dist/tablePro-BNSE6jv8.js +0 -2
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSelectPro-ChIbw_Ht.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 type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\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 = () => {\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) {\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 = () => {\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) {\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 watch(\n () => [props.formModel, props.context],\n () => {\n const oldSearch = JSON.stringify(searchConfig);\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\n } else {\n searchConfig.conditions = getConditions();\n }\n if (props.init_watch) {\n Object.keys(props.init_watch).forEach((key: any) => {\n searchConfig[props.init_watch[key]] = props.formModel[key];\n });\n }\n if (oldSearch == JSON.stringify(searchConfig)) {\n return;\n } else {\n clearDataSource();\n debounce1();\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 clearDataSource();\n debounce1();\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 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 = () => {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\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();\n params = { ...searchConfig, required_condition: getRequiredConditionObj() };\n delete params.simpleSearchParams;\n }\n return params;\n };\n const clearDataSource = () => {\n modalRef.datasource.length = 0;\n };\n const refresh = async () => {\n // modalRef.datasource.length = 0;\n // 不清空modalRef.datasource,保留原始数据,如果是输入过滤条件筛选的数据,需要去重后,追加到datasource里\n if (props.field.postUrl) {\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 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 debounce1: any = debounce(() => {\n refresh();\n }, 1000);\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 clearDataSource();\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n debounce1();\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 debounce1();\n }\n },\n { deep: true },\n );\n\n const handleSearch = (str: any) => {\n searchText.value = str;\n debounce1();\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 if (props.field.queryType === 'simple') {\n tableConfig.value['query_params'] = getSimpleSearchParams();\n } else {\n const conditions = getConditions();\n tableConfig.value['query_params'] = {};\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 await externDataSource(params, selectedValues[0]);\n modalRef.selectedRows = selectedValues[0];\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels[0]);\n }\n } else {\n await externDataSource(params, selectedValues);\n modalRef.selectedRows = 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 type: Object,\n default: null,\n },\n globalInnerModel: {\n type: Object,\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 = () => {\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) {\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 = () => {\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) {\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 watch(\n () => [props.formModel, props.context],\n () => {\n const oldSearch = JSON.stringify(searchConfig);\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\n } else {\n searchConfig.conditions = getConditions();\n }\n if (props.init_watch) {\n Object.keys(props.init_watch).forEach((key: any) => {\n searchConfig[props.init_watch[key]] = props.formModel[key];\n });\n }\n if (oldSearch == JSON.stringify(searchConfig)) {\n return;\n } else {\n clearDataSource();\n debounce1();\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 clearDataSource();\n debounce1();\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 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 = () => {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\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();\n params = { ...searchConfig, required_condition: getRequiredConditionObj() };\n delete params.simpleSearchParams;\n }\n return params;\n };\n const clearDataSource = () => {\n modalRef.datasource.length = 0;\n };\n const refresh = async () => {\n // modalRef.datasource.length = 0;\n // 不清空modalRef.datasource,保留原始数据,如果是输入过滤条件筛选的数据,需要去重后,追加到datasource里\n if (props.field.postUrl) {\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 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 debounce1: any = debounce(() => {\n refresh();\n }, 1000);\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 clearDataSource();\n getColumnFields();\n searchConfig.sort_fields = get_sort_fields();\n debounce1();\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 debounce1();\n }\n },\n { deep: true },\n );\n\n const handleSearch = (str: any) => {\n searchText.value = str;\n debounce1();\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 if (props.field.queryType === 'simple') {\n tableConfig.value['query_params'] = getSimpleSearchParams();\n } else {\n const conditions = getConditions();\n tableConfig.value['query_params'] = {};\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 await externDataSource(params, selectedValues[0]);\n modalRef.selectedRows = selectedValues[0];\n emit('update:value', modalRef.selectedRows);\n emit('update:label', selectedLabels[0]);\n }\n } else {\n await externDataSource(params, selectedValues);\n modalRef.selectedRows = 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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tableModal-CEdsjOPz.js","names":[],"sources":["../src/components/FormRender/RemoteSelectPro/tableModal.vue","../src/components/FormRender/RemoteSelectPro/tableModal.vue"],"sourcesContent":["<template>\n <a-modal\n :open=\"true\"\n title=\"请选择\"\n width=\"80%\"\n :destroyOnClose=\"true\"\n @ok=\"onOk\"\n >\n <div\n class=\"table-modal\"\n :style=\"{ height: `${height}px` }\"\n >\n <div class=\"header\">\n 当前选择:\n <a-tag\n v-for=\"item in innerValue\"\n :closable=\"true\"\n @close=\"handlerClose(item)\"\n >\n {{ item.label }}\n </a-tag>\n </div>\n <component\n :is=\"asyncTable\"\n :config=\"tableConfig\"\n :initSelectValue=\"initSelectValue\"\n :initValueKey=\"valueKey\"\n @selectChange=\"handlerSelectChange\"\n ></component>\n </div>\n </a-modal>\n</template>\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, ref } from 'vue';\nconst emit = defineEmits(['ok']);\nconst props = defineProps({\n tableConfig: {\n type: Object,\n required: true,\n },\n isMultiple: {\n type: Boolean,\n default: true,\n },\n value: {\n type: Object as () => any,\n default: () => null,\n },\n labelKey: {\n type: String,\n default: 'name',\n },\n labelKeyList: {\n type: Array,\n default: () => [],\n },\n labelKeyType: {\n type: Number,\n default: 0,\n },\n labelSpace: {\n type: String,\n default: '',\n },\n valueKey: {\n type: String,\n default: 'id',\n },\n});\nconst asyncTable = defineAsyncComponent(\n () => import('liyu-pc-base/components/tablePro/tablePro.vue'),\n);\nconst height = ref(500);\nconst innerValue = ref([]);\n\nconst resize = () => {\n height.value = window.innerHeight - 300;\n};\nconst initSelectValue = computed(() => {\n if (innerValue.value) {\n return innerValue.value.map(item => {\n return item.value;\n });\n } else {\n return [];\n }\n});\nonMounted(() => {\n resize();\n window.addEventListener('resize', resize);\n innerValue.value = props.value;\n});\nonUnmounted(() => {\n window.removeEventListener('resize', resize);\n});\nconst handlerClose = item => {\n innerValue.value = props.value.filter(i => i.value !== item.value);\n};\nconst getLable = item => {\n let label;\n if (props.labelKeyList && props.labelKeyList.length > 0 && props?.labelKeyType !== 1) {\n const labelList = [];\n for (const key of props.labelKeyList) {\n labelList.push(item[key as string]);\n }\n label = labelList.join(props.labelSpace);\n } else {\n label = item[props.labelKey];\n }\n return label;\n};\nconst handlerSelectChange = (selectdRecord, unSelectdRecord) => {\n if (props.isMultiple) {\n const tmpValue = [...(innerValue.value || [])];\n for (const item of selectdRecord) {\n const value = item[props.valueKey];\n const label = getLable(item);\n if (!tmpValue.some(i => i.value === value)) {\n tmpValue.push({\n value: value,\n label: label,\n });\n }\n }\n\n for (const item of unSelectdRecord) {\n const value = item[props.valueKey];\n if (!tmpValue.some(i => i.value === value)) {\n continue;\n }\n tmpValue.splice(\n tmpValue.findIndex(i => i.value === value),\n 1,\n );\n }\n innerValue.value = tmpValue;\n } else {\n if (selectdRecord?.length > 0) {\n const item = selectdRecord[0];\n const value = item[props.valueKey];\n const label = getLable(item);\n innerValue.value = [\n {\n value: value,\n label: label,\n },\n ];\n } else {\n innerValue.value = [];\n }\n }\n};\nconst onOk = () => {\n emit('ok', innerValue.value);\n};\n</script>\n<style scoped lang=\"less\">\n.table-modal {\n display: flex;\n flex-direction: column;\n gap: 8px;\n .header {\n padding: 4px;\n }\n}\n</style>\n","<template>\n <a-modal\n :open=\"true\"\n title=\"请选择\"\n width=\"80%\"\n :destroyOnClose=\"true\"\n @ok=\"onOk\"\n >\n <div\n class=\"table-modal\"\n :style=\"{ height: `${height}px` }\"\n >\n <div class=\"header\">\n 当前选择:\n <a-tag\n v-for=\"item in innerValue\"\n :closable=\"true\"\n @close=\"handlerClose(item)\"\n >\n {{ item.label }}\n </a-tag>\n </div>\n <component\n :is=\"asyncTable\"\n :config=\"tableConfig\"\n :initSelectValue=\"initSelectValue\"\n :initValueKey=\"valueKey\"\n @selectChange=\"handlerSelectChange\"\n ></component>\n </div>\n </a-modal>\n</template>\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, ref } from 'vue';\nconst emit = defineEmits(['ok']);\nconst props = defineProps({\n tableConfig: {\n type: Object,\n required: true,\n },\n isMultiple: {\n type: Boolean,\n default: true,\n },\n value: {\n type: Object as () => any,\n default: () => null,\n },\n labelKey: {\n type: String,\n default: 'name',\n },\n labelKeyList: {\n type: Array,\n default: () => [],\n },\n labelKeyType: {\n type: Number,\n default: 0,\n },\n labelSpace: {\n type: String,\n default: '',\n },\n valueKey: {\n type: String,\n default: 'id',\n },\n});\nconst asyncTable = defineAsyncComponent(\n () => import('liyu-pc-base/components/tablePro/tablePro.vue'),\n);\nconst height = ref(500);\nconst innerValue = ref([]);\n\nconst resize = () => {\n height.value = window.innerHeight - 300;\n};\nconst initSelectValue = computed(() => {\n if (innerValue.value) {\n return innerValue.value.map(item => {\n return item.value;\n });\n } else {\n return [];\n }\n});\nonMounted(() => {\n resize();\n window.addEventListener('resize', resize);\n innerValue.value = props.value;\n});\nonUnmounted(() => {\n window.removeEventListener('resize', resize);\n});\nconst handlerClose = item => {\n innerValue.value = props.value.filter(i => i.value !== item.value);\n};\nconst getLable = item => {\n let label;\n if (props.labelKeyList && props.labelKeyList.length > 0 && props?.labelKeyType !== 1) {\n const labelList = [];\n for (const key of props.labelKeyList) {\n labelList.push(item[key as string]);\n }\n label = labelList.join(props.labelSpace);\n } else {\n label = item[props.labelKey];\n }\n return label;\n};\nconst handlerSelectChange = (selectdRecord, unSelectdRecord) => {\n if (props.isMultiple) {\n const tmpValue = [...(innerValue.value || [])];\n for (const item of selectdRecord) {\n const value = item[props.valueKey];\n const label = getLable(item);\n if (!tmpValue.some(i => i.value === value)) {\n tmpValue.push({\n value: value,\n label: label,\n });\n }\n }\n\n for (const item of unSelectdRecord) {\n const value = item[props.valueKey];\n if (!tmpValue.some(i => i.value === value)) {\n continue;\n }\n tmpValue.splice(\n tmpValue.findIndex(i => i.value === value),\n 1,\n );\n }\n innerValue.value = tmpValue;\n } else {\n if (selectdRecord?.length > 0) {\n const item = selectdRecord[0];\n const value = item[props.valueKey];\n const label = getLable(item);\n innerValue.value = [\n {\n value: value,\n label: label,\n },\n ];\n } else {\n innerValue.value = [];\n }\n }\n};\nconst onOk = () => {\n emit('ok', innerValue.value);\n};\n</script>\n<style scoped lang=\"less\">\n.table-modal {\n display: flex;\n flex-direction: column;\n gap: 8px;\n .header {\n padding: 4px;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,IAAM,IAAO,GACP,IAAQ,GAkCR,IAAa,QACX,OAAO,0BACd,EACK,IAAS,EAAI,IAAI,EACjB,IAAa,EAAI,EAAE,CAAC,EAEpB,UAAe;AACnB,KAAO,QAAQ,OAAO,cAAc;KAEhC,IAAkB,QAClB,EAAW,QACN,EAAW,MAAM,KAAI,MACnB,EAAK,MACZ,GAEK,EAAE,CAEX;AAMF,EALA,QAAgB;AAGd,GAFA,GAAQ,EACR,OAAO,iBAAiB,UAAU,EAAO,EACzC,EAAW,QAAQ,EAAM;IACzB,EACF,QAAkB;AAChB,UAAO,oBAAoB,UAAU,EAAO;IAC5C;EACF,IAAM,KAAe,MAAQ;AAC3B,KAAW,QAAQ,EAAM,MAAM,QAAO,MAAK,EAAE,UAAU,EAAK,MAAM;KAE9D,KAAW,MAAQ;GACvB,IAAI;AACJ,OAAI,EAAM,gBAAgB,EAAM,aAAa,SAAS,KAAK,GAAO,iBAAiB,GAAG;IACpF,IAAM,IAAY,EAAE;AACpB,SAAK,IAAM,KAAO,EAAM,aACtB,GAAU,KAAK,EAAK,GAAe;AAErC,QAAQ,EAAU,KAAK,EAAM,WAAW;SAExC,KAAQ,EAAK,EAAM;AAErB,UAAO;KAEH,KAAuB,GAAe,MAAoB;AAC9D,OAAI,EAAM,YAAY;IACpB,IAAM,IAAW,CAAC,GAAI,EAAW,SAAS,EAAE,CAAE;AAC9C,SAAK,IAAM,KAAQ,GAAe;KAChC,IAAM,IAAQ,EAAK,EAAM,WACnB,IAAQ,EAAS,EAAK;AAC5B,KAAK,EAAS,MAAK,MAAK,EAAE,UAAU,EAAM,IACxC,EAAS,KAAK;MACL;MACA;MACR,CAAC;;AAIN,SAAK,IAAM,KAAQ,GAAiB;KAClC,IAAM,IAAQ,EAAK,EAAM;AACpB,OAAS,MAAK,MAAK,EAAE,UAAU,EAAM,IAG1C,EAAS,OACP,EAAS,WAAU,MAAK,EAAE,UAAU,EAAM,EAC1C,EACD;;AAEH,MAAW,QAAQ;cAEf,GAAe,SAAS,GAAG;IAC7B,IAAM,IAAO,EAAc;AAG3B,MAAW,QAAQ,CACjB;KACS,OAJG,EAAK,EAAM;KAKd,OAJG,EAAS,EAAK;KAKzB,CACF;SAED,GAAW,QAAQ,EAAE;KAIrB,UAAa;AACjB,KAAK,MAAM,EAAW,MAAM"}
|