liyu-pc-base 1.0.921 → 1.0.925
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{FieldRender-BOg7nm5z.js → FieldRender-DnOLSXTl.js} +1 -1
- package/dist/{FieldRender2-_MtcDkI5.js → FieldRender2-CvxGe238.js} +2 -2
- package/dist/{FormRender3-BtY9d91e.js → FormRender3-CAxOQgue.js} +1 -1
- package/dist/{RemoteSelectPro-CcWTS4f6.js → RemoteSelectPro-CcL_vU1K.js} +1 -1
- package/dist/{SearchRender-ByarFel1.js → SearchRender-Dr_qnvZM.js} +1 -1
- package/dist/components/index.js +7 -7
- package/dist/{dbViewConfig-RGSyUx3F.js → dbViewConfig-BF0QZ_mT.js} +1 -1
- package/dist/{detailTablePro-CqcVbn8O.js → detailTablePro-DxgfGYN3.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/liyu-pc-base.css +1 -1
- package/dist/{tableModal-DSKuV-hn.js → tableModal-DZE5wntG.js} +1 -1
- package/dist/{tablePageHost-B_BOlBNA.js → tablePageHost-hE_1hQv4.js} +82 -44
- package/dist/{tablePro-IAcxxAGI.js → tablePro-t2yDX9oW.js} +16 -11
- package/package.json +1 -1
- package/dist/AttributeNomTable-DHED22ju.js.map +0 -1
- package/dist/AttributeTable-muxdKpWW.js.map +0 -1
- package/dist/FieldRender-BOg7nm5z.js.map +0 -1
- package/dist/FieldRender2-_MtcDkI5.js.map +0 -1
- package/dist/FormRender3-BtY9d91e.js.map +0 -1
- package/dist/ImportExcelModal-Dds857L2.js.map +0 -1
- package/dist/JsonObj-CmylW4Or.js.map +0 -1
- package/dist/JsonStr-JwOPdAYW.js.map +0 -1
- package/dist/RemoteCascader-B2ytkZp7.js.map +0 -1
- package/dist/RemoteFilterSelect-BthY6Fyt.js.map +0 -1
- package/dist/RemoteModal-Dqy32RFN.js.map +0 -1
- package/dist/RemoteSelect-27xLYvyg.js.map +0 -1
- package/dist/RemoteSelectPro-CcWTS4f6.js.map +0 -1
- package/dist/RemoteTable-D_12PvNS.js.map +0 -1
- package/dist/RemoteTable2-DF7gWHYf.js.map +0 -1
- package/dist/RemoteText-DwRLI0xq.js.map +0 -1
- package/dist/RemoteTreeSelectPro-CXMOariR.js.map +0 -1
- package/dist/SearchRender-ByarFel1.js.map +0 -1
- package/dist/TinymceEditor-waI-dlC5.js.map +0 -1
- package/dist/aiGenModel-C9E1ahu8.js.map +0 -1
- package/dist/api/api-model.js.map +0 -1
- package/dist/api/typing.js.map +0 -1
- package/dist/batchCreateUser-B4zAXSR6.js.map +0 -1
- package/dist/boldenText-Bv8Zo7Vh.js.map +0 -1
- package/dist/components/FormRender/utils.js.map +0 -1
- package/dist/components/gridPage/utils.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/remotePages/utils.js.map +0 -1
- package/dist/dbDataSourceConfig-Hj90tvTR.js.map +0 -1
- package/dist/dbViewConfig-RGSyUx3F.js.map +0 -1
- package/dist/default-DmCqrYQi.js.map +0 -1
- package/dist/detailTablePro-CqcVbn8O.js.map +0 -1
- package/dist/exceljs.min-BPhBd8yF.js.map +0 -1
- package/dist/function-BhYSb8ls.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init-plugin-CvgtEpwY.js.map +0 -1
- package/dist/lodash-CMVwnWxD.js.map +0 -1
- package/dist/md5-WIoeWMjT.js.map +0 -1
- package/dist/modal-tools-CrXdI5sg.js.map +0 -1
- package/dist/props-util-D7nkeN4W.js.map +0 -1
- package/dist/remotePages-CvjMLjTh.js.map +0 -1
- package/dist/role-manage-C7O8b2SF.js.map +0 -1
- package/dist/syncDataSourceConfig-OZ2mJCJs.js.map +0 -1
- package/dist/syncExportRawData-Dpi-VJuu.js.map +0 -1
- package/dist/syncModelTypeConfig-B2vV_kKb.js.map +0 -1
- package/dist/tableModal-DSKuV-hn.js.map +0 -1
- package/dist/tablePageHost-B_BOlBNA.js.map +0 -1
- package/dist/tablePro-IAcxxAGI.js.map +0 -1
- package/dist/utils/excel.js.map +0 -1
- package/dist/utils/hooks/useFetchData.js.map +0 -1
- package/dist/utils/hooks/useTableColumn.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteTable-D_12PvNS.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"],"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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteTable2-DF7gWHYf.js","names":[],"sources":["../src/components/FormRender/RemoteTable2/RemoteTable2.vue","../src/components/FormRender/RemoteTable2/RemoteTable2.vue"],"sourcesContent":["<template>\n <div>\n <div style=\"width: 100%\">\n <div style=\"display: flex; justify-content: end\">\n <a-button\n size=\"small\"\n type=\"primary\"\n @click=\"handleOpenAddModal\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n 添加一行\n </a-button>\n </div>\n <a-table\n :dataSource=\"dataSource\"\n :columns=\"columns\"\n :pagination=\"false\"\n size=\"small\"\n :scroll=\"{ x: 800 }\"\n >\n <template #bodyCell=\"{ text, column, record, index }\">\n <template v-if=\"column.dataIndex === 'index'\">\n {{ index + 1 }}\n </template>\n <template v-else-if=\"column.dataIndex === 'action'\">\n <a-space>\n <a-button\n size=\"small\"\n @click=\"handleUpdateRow(record, index)\"\n >\n 修改\n </a-button>\n <a-button\n size=\"small\"\n @click=\"handleRemoveRow(index)\"\n danger\n >\n 删除\n </a-button>\n </a-space>\n </template>\n </template>\n </a-table>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, createVNode, defineComponent, reactive, ref } from 'vue';\nimport { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';\nimport { Modal } from 'ant-design-vue';\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\n\nexport default defineComponent({\n name: 'RemoteTable2',\n components: { PlusOutlined },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const columns = computed(() => {\n if (props.field.columns) {\n return props.field.columns;\n } else {\n const list = [];\n props.field?.children?.forEach(row => {\n if (row instanceof Array) {\n row.forEach(i => {\n const obj = {\n title: i.label,\n dataIndex: i.name,\n key: i.name,\n width: 150,\n };\n if (i.name2) {\n obj['dataIndex'] = i.name2;\n }\n list.push(obj);\n });\n } else {\n const obj = {\n title: row.label,\n dataIndex: row.name,\n key: row.name,\n width: 150,\n };\n if (row.name2) {\n obj['dataIndex'] = row.name2;\n }\n list.push(obj);\n }\n });\n const f = list.find(item => {\n return item.dataIndex == 'action';\n });\n if (!f) {\n const obj = {\n title: '操作',\n dataIndex: 'action',\n key: 'action',\n width: 120,\n fixed: 'right',\n };\n list.push(obj);\n }\n list.splice(0, 0, {\n title: '序号',\n dataIndex: 'index',\n key: 'index',\n width: 50,\n fixed: 'left',\n });\n return list;\n }\n });\n const dataSource = computed(() => {\n return props.value;\n });\n\n const handleOpenAddModal = () => {\n const rules = ref({});\n const options = {};\n const model = ref({});\n props.field.children.forEach((item: any) => {\n model.value[item.name] = null;\n if (item.name2) {\n model.value[item.name2] = null;\n }\n if (item.options) {\n options[item.name] = item.options;\n }\n if (item.required) {\n if (item.type == 'input') {\n rules.value[item.name] = [{ required: true, message: '请输入' + item.label }];\n } else if (\n ['select', 'remoteselect', 'radio', 'checkbox', 'datepicker', 'monthpicker'].includes(\n item.type,\n )\n ) {\n rules.value[item.name] = [{ required: true, message: '请选择' + item.label }];\n } else {\n rules.value[item.name] = [{ required: true, message: '请设置' + item.label }];\n }\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n title: props.field.label,\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: props.field.children,\n rules: rules,\n model: model,\n },\n options: options,\n ok: (data: any) => {\n const new_list = JSON.parse(JSON.stringify(props.value));\n new_list.push(data);\n emit('update:value', new_list);\n },\n });\n modalBox(tempModal);\n };\n const handleRemoveRow = index => {\n Modal.confirm({\n title: `是否确认删除?`,\n icon: createVNode(ExclamationCircleOutlined),\n onOk() {\n const new_list = JSON.parse(JSON.stringify(props.value));\n new_list.splice(index, 1);\n emit('update:value', new_list);\n },\n onCancel() {},\n });\n };\n const handleUpdateRow = (record, index) => {\n const rules = ref({});\n const options = {};\n const model = ref({});\n props.field.children.forEach((item: any) => {\n model.value[item.name] = record[item.name];\n if (item.name2) {\n model.value[item.name2] = null;\n }\n if (item.options) {\n options[item.name] = item.options;\n }\n if (item.required) {\n if (item.type == 'input') {\n rules.value[item.name] = [{ required: true, message: '请输入' + item.label }];\n } else if (\n ['select', 'remoteselect', 'radio', 'checkbox', 'datepicker', 'monthpicker'].includes(\n item.type,\n )\n ) {\n rules.value[item.name] = [{ required: true, message: '请选择' + item.label }];\n } else {\n rules.value[item.name] = [{ required: true, message: '请设置' + item.label }];\n }\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n title: props.field.label,\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: props.field.children,\n rules: rules,\n model: model,\n },\n options: options,\n ok: (data: any) => {\n const new_list = JSON.parse(JSON.stringify(props.value));\n const f = new_list.find((item, i) => {\n return i === index;\n });\n if (f) {\n Object.assign(f, data);\n }\n emit('update:value', new_list);\n },\n });\n modalBox(tempModal);\n };\n return {\n columns,\n dataSource,\n handleOpenAddModal,\n handleRemoveRow,\n handleUpdateRow,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <div>\n <div style=\"width: 100%\">\n <div style=\"display: flex; justify-content: end\">\n <a-button\n size=\"small\"\n type=\"primary\"\n @click=\"handleOpenAddModal\"\n >\n <template #icon>\n <plus-outlined />\n </template>\n 添加一行\n </a-button>\n </div>\n <a-table\n :dataSource=\"dataSource\"\n :columns=\"columns\"\n :pagination=\"false\"\n size=\"small\"\n :scroll=\"{ x: 800 }\"\n >\n <template #bodyCell=\"{ text, column, record, index }\">\n <template v-if=\"column.dataIndex === 'index'\">\n {{ index + 1 }}\n </template>\n <template v-else-if=\"column.dataIndex === 'action'\">\n <a-space>\n <a-button\n size=\"small\"\n @click=\"handleUpdateRow(record, index)\"\n >\n 修改\n </a-button>\n <a-button\n size=\"small\"\n @click=\"handleRemoveRow(index)\"\n danger\n >\n 删除\n </a-button>\n </a-space>\n </template>\n </template>\n </a-table>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, createVNode, defineComponent, reactive, ref } from 'vue';\nimport { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons-vue';\nimport { Modal } from 'ant-design-vue';\nimport modalBox from 'liyu-pc-base/components/form-modal/modal-tools';\n\nexport default defineComponent({\n name: 'RemoteTable2',\n components: { PlusOutlined },\n props: {\n field: {\n type: Object,\n required: true,\n },\n modalType: {\n type: String,\n required: true,\n default: () => '',\n },\n value: {\n type: Array,\n required: true,\n default: () => [],\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n watch: {\n type: Array,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const columns = computed(() => {\n if (props.field.columns) {\n return props.field.columns;\n } else {\n const list = [];\n props.field?.children?.forEach(row => {\n if (row instanceof Array) {\n row.forEach(i => {\n const obj = {\n title: i.label,\n dataIndex: i.name,\n key: i.name,\n width: 150,\n };\n if (i.name2) {\n obj['dataIndex'] = i.name2;\n }\n list.push(obj);\n });\n } else {\n const obj = {\n title: row.label,\n dataIndex: row.name,\n key: row.name,\n width: 150,\n };\n if (row.name2) {\n obj['dataIndex'] = row.name2;\n }\n list.push(obj);\n }\n });\n const f = list.find(item => {\n return item.dataIndex == 'action';\n });\n if (!f) {\n const obj = {\n title: '操作',\n dataIndex: 'action',\n key: 'action',\n width: 120,\n fixed: 'right',\n };\n list.push(obj);\n }\n list.splice(0, 0, {\n title: '序号',\n dataIndex: 'index',\n key: 'index',\n width: 50,\n fixed: 'left',\n });\n return list;\n }\n });\n const dataSource = computed(() => {\n return props.value;\n });\n\n const handleOpenAddModal = () => {\n const rules = ref({});\n const options = {};\n const model = ref({});\n props.field.children.forEach((item: any) => {\n model.value[item.name] = null;\n if (item.name2) {\n model.value[item.name2] = null;\n }\n if (item.options) {\n options[item.name] = item.options;\n }\n if (item.required) {\n if (item.type == 'input') {\n rules.value[item.name] = [{ required: true, message: '请输入' + item.label }];\n } else if (\n ['select', 'remoteselect', 'radio', 'checkbox', 'datepicker', 'monthpicker'].includes(\n item.type,\n )\n ) {\n rules.value[item.name] = [{ required: true, message: '请选择' + item.label }];\n } else {\n rules.value[item.name] = [{ required: true, message: '请设置' + item.label }];\n }\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n title: props.field.label,\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: props.field.children,\n rules: rules,\n model: model,\n },\n options: options,\n ok: (data: any) => {\n const new_list = JSON.parse(JSON.stringify(props.value));\n new_list.push(data);\n emit('update:value', new_list);\n },\n });\n modalBox(tempModal);\n };\n const handleRemoveRow = index => {\n Modal.confirm({\n title: `是否确认删除?`,\n icon: createVNode(ExclamationCircleOutlined),\n onOk() {\n const new_list = JSON.parse(JSON.stringify(props.value));\n new_list.splice(index, 1);\n emit('update:value', new_list);\n },\n onCancel() {},\n });\n };\n const handleUpdateRow = (record, index) => {\n const rules = ref({});\n const options = {};\n const model = ref({});\n props.field.children.forEach((item: any) => {\n model.value[item.name] = record[item.name];\n if (item.name2) {\n model.value[item.name2] = null;\n }\n if (item.options) {\n options[item.name] = item.options;\n }\n if (item.required) {\n if (item.type == 'input') {\n rules.value[item.name] = [{ required: true, message: '请输入' + item.label }];\n } else if (\n ['select', 'remoteselect', 'radio', 'checkbox', 'datepicker', 'monthpicker'].includes(\n item.type,\n )\n ) {\n rules.value[item.name] = [{ required: true, message: '请选择' + item.label }];\n } else {\n rules.value[item.name] = [{ required: true, message: '请设置' + item.label }];\n }\n }\n });\n const tempModal = reactive({\n open: true,\n loading: false,\n title: props.field.label,\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: props.field.children,\n rules: rules,\n model: model,\n },\n options: options,\n ok: (data: any) => {\n const new_list = JSON.parse(JSON.stringify(props.value));\n const f = new_list.find((item, i) => {\n return i === index;\n });\n if (f) {\n Object.assign(f, data);\n }\n emit('update:value', new_list);\n },\n });\n modalBox(tempModal);\n };\n return {\n columns,\n dataSource,\n handleOpenAddModal,\n handleRemoveRow,\n handleUpdateRow,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteText-DwRLI0xq.js","names":[],"sources":["../src/components/FormRender/RemoteText/configs/sys/liyu_organization-get_person_balance.ts","../src/components/FormRender/RemoteText/index.ts","../src/components/FormRender/RemoteText/RemoteText.vue","../src/components/FormRender/RemoteText/RemoteText.vue"],"sourcesContent":["export default () => {\n const search_config: any = {\n model: {},\n watch: ['name1', 'name2'],\n };\n return {\n getData: () => {\n console.log('fetch data');\n\n return new Promise(resolve => {\n resolve(1000000);\n });\n },\n searchConfig: search_config,\n };\n};\n","import type { RemoteSelect } from 'liyu-pc-base/components/FormRender/RemoteText/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/RemoteText/configs/*/*.ts',\n {\n eager: true,\n },\n );\n const customComponents = useGlobMap('remoteText');\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};\n\nexport default (modalType: string): RemoteSelect => {\n init();\n if (res_components[modalType] == undefined) {\n console.error('RemoteText没有组件:' + modalType);\n return {\n getData: undefined,\n searchConfig: undefined,\n };\n }\n return {\n ...res_components[modalType](),\n };\n};\n","<template>\n <div v-if=\"field.textType == 'currency'\">{{ numeral(modalRef.text).format('0,0') }}</div>\n <div v-else-if=\"field.textType == 'string'\">{{ modalRef.text }}</div>\n <div v-else-if=\"field.textType == 'number'\">{{ modalRef.text }}</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent, onMounted, reactive, watch } from 'vue';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteText/index';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport numeral from 'numeral';\n\ntype Field = {\n modalType: string;\n textType: 'string' | 'number' | 'currency';\n};\n\nexport default defineComponent({\n name: 'RemoteText',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const modalRef = reactive({\n text: null,\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n ...props.init_model,\n });\n const check_params_need_request = () => {\n let is_ok = true;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n if (\n (props.formModel[k] === null || props.formModel[k] === undefined) &&\n props.init_model &&\n (props.init_model[k] === null || props.init_model[k] === undefined)\n ) {\n is_ok = false;\n }\n }\n }\n }\n return is_ok;\n };\n const old_obj: { [key: string]: any } = {};\n onMounted(() => {\n let is_use = false;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n old_obj[k] = props.formModel[k];\n }\n }\n }\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n search_modelRef[k] = props.formModel[k];\n watch(\n () => props.formModel[k],\n () => {\n let change = false;\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n if (old_obj[k] != props.formModel[k] && props.formModel[k]) {\n change = true;\n search_modelRef[k] = props.formModel[k];\n }\n }\n }\n if (change && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.text = res;\n emit('update:value', modalRef.text);\n });\n }\n },\n { immediate: true },\n );\n }\n }\n if (searchConfig.attr_use && searchConfig.attr_use.length > 0) {\n for (const k of searchConfig.attr_use) {\n if (props.formModel && props.formModel[k]) {\n is_use = true;\n } else {\n is_use = false;\n break;\n }\n }\n } else {\n if (check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.text = res;\n emit('update:value', modalRef.text);\n });\n }\n }\n if (is_use && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.text = res;\n emit('update:value', modalRef.text);\n });\n }\n });\n\n return {\n props,\n modalRef,\n search_modelRef,\n searchConfig,\n numeral,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: {},\n});\n</script>\n","<template>\n <div v-if=\"field.textType == 'currency'\">{{ numeral(modalRef.text).format('0,0') }}</div>\n <div v-else-if=\"field.textType == 'string'\">{{ modalRef.text }}</div>\n <div v-else-if=\"field.textType == 'number'\">{{ modalRef.text }}</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent, onMounted, reactive, watch } from 'vue';\nimport getFormConfig from 'liyu-pc-base/components/FormRender/RemoteText/index';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport numeral from 'numeral';\n\ntype Field = {\n modalType: string;\n textType: 'string' | 'number' | 'currency';\n};\n\nexport default defineComponent({\n name: 'RemoteText',\n props: {\n field: {\n type: Object as PropType<Field>,\n required: true,\n },\n value: {\n type: [Array, Number, String],\n required: false,\n default: () => null,\n },\n label: {\n type: [Array, String],\n required: false,\n default: () => [],\n },\n formModel: {\n type: Object,\n required: true,\n },\n init_model: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const modalRef = reactive({\n text: null,\n });\n const { searchConfig, getData } = getFormConfig(props.field.modalType);\n const search_modelRef = reactive({\n ...searchConfig.model,\n ...props.init_model,\n });\n const check_params_need_request = () => {\n let is_ok = true;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n if (\n (props.formModel[k] === null || props.formModel[k] === undefined) &&\n props.init_model &&\n (props.init_model[k] === null || props.init_model[k] === undefined)\n ) {\n is_ok = false;\n }\n }\n }\n }\n return is_ok;\n };\n const old_obj: { [key: string]: any } = {};\n onMounted(() => {\n let is_use = false;\n if (searchConfig.watch) {\n for (const k of searchConfig.watch) {\n if (props.formModel) {\n old_obj[k] = props.formModel[k];\n }\n }\n }\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n search_modelRef[k] = props.formModel[k];\n watch(\n () => props.formModel[k],\n () => {\n let change = false;\n if (searchConfig.watch && props.formModel) {\n for (const k of searchConfig.watch) {\n if (old_obj[k] != props.formModel[k] && props.formModel[k]) {\n change = true;\n search_modelRef[k] = props.formModel[k];\n }\n }\n }\n if (change && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.text = res;\n emit('update:value', modalRef.text);\n });\n }\n },\n { immediate: true },\n );\n }\n }\n if (searchConfig.attr_use && searchConfig.attr_use.length > 0) {\n for (const k of searchConfig.attr_use) {\n if (props.formModel && props.formModel[k]) {\n is_use = true;\n } else {\n is_use = false;\n break;\n }\n }\n } else {\n if (check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.text = res;\n emit('update:value', modalRef.text);\n });\n }\n }\n if (is_use && check_params_need_request()) {\n getData({ ...search_modelRef }).then(function (res: ReponseData<any>) {\n modalRef.text = res;\n emit('update:value', modalRef.text);\n });\n }\n });\n\n return {\n props,\n modalRef,\n search_modelRef,\n searchConfig,\n numeral,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n components: {},\n});\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteTreeSelectPro-CXMOariR.js","names":[],"sources":["../src/utils/load-async-asset.ts","../src/components/code/CodeEditor.vue","../src/components/code/CodeEditor.vue","../src/components/FormRender/RemoteTreeSelectPro/RemoteTreeSelectPro.vue","../src/components/FormRender/RemoteTreeSelectPro/RemoteTreeSelectPro.vue"],"sourcesContent":["export function loadScript(src: string): Promise<Event> {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = src;\n script.onload = resolve;\n script.onerror = reject;\n document.head.appendChild(script);\n });\n}\n\nexport function loadStyle(href: string): Promise<Event> {\n return new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.onload = resolve;\n link.onerror = reject;\n document.head.appendChild(link);\n });\n}\n","<template>\n <textarea\n style=\"display: none\"\n :id=\"code_edit_id\"\n ></textarea>\n</template>\n\n<script lang=\"ts\">\nimport { onMounted, onUnmounted, PropType, watch } from 'vue';\nimport { loadScript, loadStyle } from 'liyu-pc-base/utils/load-async-asset';\nimport { useEnv } from 'liyu-pc-base/init-plugin';\nimport expand from 'emmet';\n\ntype modeType = 'javascript' | 'htmlmixed' | 'css' | 'python' | 'jinja2' | 'sql' | 'xml';\n\n// Dynamically set asset URLs based on the environment\nconst get_CODEMIRROR_BASE_URL = () => {\n const env = useEnv();\n return env.VUE_APP_PUBLIC_PATH + 'codemirror';\n};\n\nconst loadedModes = new Set<string>();\n\nasync function loadMode(mode: modeType) {\n if (loadedModes.has(mode)) {\n return;\n }\n // The files copied from node_modules are not minified, so we use the standard names.\n let modeFile = '';\n switch (mode) {\n case 'javascript':\n case 'css':\n case 'htmlmixed':\n case 'python':\n case 'jinja2':\n case 'sql':\n case 'xml':\n modeFile = `${mode}/${mode}.js`;\n break;\n }\n if (modeFile) {\n await loadScript(`${get_CODEMIRROR_BASE_URL()}/mode/${modeFile}`);\n loadedModes.add(mode);\n }\n}\n\nfunction getWord(line: string, ch: number): [string, number] {\n const getNearTagChar = (str: string): string => {\n for (let i = str.length - 1; i > 0; i--) {\n if (str[i] === '>' || str[i] === '<') return str[i];\n }\n return str[0] || '<';\n };\n // 光标位于行末或单词末尾\n if (ch === line.length || (line.length > ch + 1 && (/S/.test(line[ch]) || line[ch] === '<'))) {\n let i;\n for (i = ch - 1; i >= 0; i--) {\n if (/S/.test(line[i]) || (line[i] === '>' && getNearTagChar(line.slice(0, i)) === '<')) {\n break;\n }\n }\n return [line.slice(i + 1, ch), i + 1];\n }\n return ['', 0];\n}\n\nfunction debounce(fn: any, delay = 1000) {\n let timer: any;\n return function (this: any) {\n const context = this;\n const args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n}\n\nexport default {\n name: 'CodeEditor',\n props: {\n editorValue: {\n type: String,\n default: '',\n },\n mode: {\n type: String as PropType<modeType>,\n required: true,\n default: 'javascript',\n },\n lineWrapping: {\n type: Boolean,\n default: true,\n },\n options: {\n type: Object,\n default: () => {\n return {\n lineNumbers: true,\n line: true,\n indentUnit: 2,\n lineWidth: 4,\n lineColor: '#b99944',\n immediate: true,\n };\n },\n },\n },\n setup(props: any, context: any) {\n let cmInstance: any;\n const code_edit_id: string = 'code_edit_id' + new Date().getTime();\n\n const initCodeMirror = async () => {\n const editor = document.getElementById(code_edit_id);\n let word: string, wordIndex: number;\n\n await loadMode(props.mode);\n\n const extraKeys = {\n 'Ctrl-Space': 'autocomplete',\n };\n\n cmInstance = window.CodeMirror.fromTextArea(editor as HTMLTextAreaElement, {\n ...props.options,\n extraKeys,\n hintOptions: {\n // tables: {\n // users: ['name', 'score', 'birthDate'],\n // countries: ['name', 'population', 'size'],\n // },\n },\n lineWrapping: props.lineWrapping,\n });\n\n cmInstance.setOption('mode', props.mode);\n cmInstance.setOption('theme', 'material-darker');\n cmInstance.setValue(props.editorValue || '');\n\n cmInstance.on('change', (coder: any) => {\n if (props.mode === 'htmlmixed' || props.mode === 'css' || props.mode === 'xml') {\n // HTML模式下使用Emmet\n const { line: lineIndex, ch } = coder.getCursor();\n const line = coder.getLine(lineIndex);\n const wordResult = getWord(line, ch);\n word = wordResult[0];\n wordIndex = wordResult[1];\n }\n context.emit('update:editorValue', coder.getValue());\n });\n\n cmInstance.on(\n 'change',\n debounce(() => {\n context.emit('debounce-update');\n }, 5000) as (instance: any) => void,\n );\n\n // Autocomplete on input\n cmInstance.on('inputRead', (cm: any, change: any) => {\n if (cm.state.completionActive || change.origin === '+delete' || change.origin === 'paste') {\n return;\n }\n // Show hint for normal typing\n const NON_SPECIAL_CHARS = /^[a-zA-Z0-9_.]*$/;\n if (NON_SPECIAL_CHARS.test(change.text[0])) {\n cm.showHint({ completeSingle: false });\n }\n });\n\n if (props.mode === 'htmlmixed' || props.mode === 'css' || props.mode === 'xml') {\n const currentExtraKeys = cmInstance.getOption('extraKeys');\n cmInstance.setOption('extraKeys', {\n ...currentExtraKeys,\n Tab: function (coder: any) {\n const indent = coder.getOption('indentUnit') || 2;\n const spaces = Array(indent + 1).join(' ');\n if (!word) {\n coder.replaceSelection(spaces);\n } else {\n try {\n const typeMap: any = {\n htmlmixed: 'markup',\n css: 'stylesheet',\n xml: 'markup',\n };\n const emmet = expand(word, { type: typeMap[props.mode] });\n const { line, ch } = coder.getCursor();\n coder.setSelection({ line, ch }, { line, ch: wordIndex });\n const formatterEmmet = emmet\n .split('\\n')\n .map((line: string, index: number) => {\n if (index > 0) {\n line = line.replace(/\\t/g, spaces);\n line = Array(wordIndex + 1).join(' ') + line;\n }\n return line;\n })\n .join('\\n');\n coder.replaceSelection(formatterEmmet);\n } catch (e) {\n console.error(e);\n coder.replaceSelection(spaces);\n }\n }\n },\n });\n }\n };\n\n onMounted(async () => {\n try {\n if (!(window as any).CodeMirror) {\n // First time loading: fetch all assets in the correct order.\n await Promise.all([\n loadStyle(`${get_CODEMIRROR_BASE_URL()}/lib/codemirror.css`),\n loadStyle(`${get_CODEMIRROR_BASE_URL()}/theme/material-darker.css`),\n loadStyle(`${get_CODEMIRROR_BASE_URL()}/addon/hint/show-hint.css`),\n ]);\n await loadScript(`${get_CODEMIRROR_BASE_URL()}/lib/codemirror.js`);\n await Promise.all([\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/show-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/anyword-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/xml-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/sql-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/javascript-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/css-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/html-hint.js`),\n ]);\n }\n\n await initCodeMirror();\n\n await new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, 500);\n });\n if (cmInstance) {\n cmInstance.refresh();\n }\n } catch (error) {\n console.error('Failed to load CodeMirror assets:', error);\n }\n });\n\n onUnmounted(() => {\n if (cmInstance) {\n cmInstance.toTextArea();\n cmInstance = null;\n }\n });\n\n watch(\n () => props.mode,\n async val => {\n if (cmInstance) {\n await loadMode(val);\n cmInstance.setOption('mode', val);\n }\n },\n );\n\n watch(\n () => props.editorValue,\n async newValue => {\n if (cmInstance && newValue !== cmInstance.getValue()) {\n cmInstance.setValue(newValue || '');\n }\n },\n );\n\n return {\n code_edit_id,\n handleCodeMirrorRefresh() {\n if (cmInstance) {\n cmInstance.refresh();\n }\n },\n };\n },\n};\n</script>\n<style>\n.CodeMirror {\n height: 300px !important;\n font-size: 15px !important;\n font-family: Monaco, MonoSpace;\n line-height: 1.4 !important;\n}\n\n.CodeMirror-lines {\n padding: 4px 0;\n min-height: 1px; /* Ensure line measure div is not collapsed */\n}\n\n.CodeMirror-hints {\n position: absolute;\n z-index: 9999 !important;\n overflow: hidden;\n list-style: none;\n margin: 0 0 0 5px; /* Add a 5px offset to the left */\n padding: 2px;\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n border: 1px solid #555; /* A softer border for the theme */\n background: #2d2d2d;\n font-size: 100%;\n font-family: monospace;\n max-height: 20em;\n overflow-y: auto;\n}\n\n.CodeMirror-hint {\n margin: 0;\n padding: 0 4px;\n border-radius: 2px;\n white-space: pre;\n color: white;\n cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n background: #08f;\n color: white;\n}\n</style>\n","<template>\n <textarea\n style=\"display: none\"\n :id=\"code_edit_id\"\n ></textarea>\n</template>\n\n<script lang=\"ts\">\nimport { onMounted, onUnmounted, PropType, watch } from 'vue';\nimport { loadScript, loadStyle } from 'liyu-pc-base/utils/load-async-asset';\nimport { useEnv } from 'liyu-pc-base/init-plugin';\nimport expand from 'emmet';\n\ntype modeType = 'javascript' | 'htmlmixed' | 'css' | 'python' | 'jinja2' | 'sql' | 'xml';\n\n// Dynamically set asset URLs based on the environment\nconst get_CODEMIRROR_BASE_URL = () => {\n const env = useEnv();\n return env.VUE_APP_PUBLIC_PATH + 'codemirror';\n};\n\nconst loadedModes = new Set<string>();\n\nasync function loadMode(mode: modeType) {\n if (loadedModes.has(mode)) {\n return;\n }\n // The files copied from node_modules are not minified, so we use the standard names.\n let modeFile = '';\n switch (mode) {\n case 'javascript':\n case 'css':\n case 'htmlmixed':\n case 'python':\n case 'jinja2':\n case 'sql':\n case 'xml':\n modeFile = `${mode}/${mode}.js`;\n break;\n }\n if (modeFile) {\n await loadScript(`${get_CODEMIRROR_BASE_URL()}/mode/${modeFile}`);\n loadedModes.add(mode);\n }\n}\n\nfunction getWord(line: string, ch: number): [string, number] {\n const getNearTagChar = (str: string): string => {\n for (let i = str.length - 1; i > 0; i--) {\n if (str[i] === '>' || str[i] === '<') return str[i];\n }\n return str[0] || '<';\n };\n // 光标位于行末或单词末尾\n if (ch === line.length || (line.length > ch + 1 && (/S/.test(line[ch]) || line[ch] === '<'))) {\n let i;\n for (i = ch - 1; i >= 0; i--) {\n if (/S/.test(line[i]) || (line[i] === '>' && getNearTagChar(line.slice(0, i)) === '<')) {\n break;\n }\n }\n return [line.slice(i + 1, ch), i + 1];\n }\n return ['', 0];\n}\n\nfunction debounce(fn: any, delay = 1000) {\n let timer: any;\n return function (this: any) {\n const context = this;\n const args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n}\n\nexport default {\n name: 'CodeEditor',\n props: {\n editorValue: {\n type: String,\n default: '',\n },\n mode: {\n type: String as PropType<modeType>,\n required: true,\n default: 'javascript',\n },\n lineWrapping: {\n type: Boolean,\n default: true,\n },\n options: {\n type: Object,\n default: () => {\n return {\n lineNumbers: true,\n line: true,\n indentUnit: 2,\n lineWidth: 4,\n lineColor: '#b99944',\n immediate: true,\n };\n },\n },\n },\n setup(props: any, context: any) {\n let cmInstance: any;\n const code_edit_id: string = 'code_edit_id' + new Date().getTime();\n\n const initCodeMirror = async () => {\n const editor = document.getElementById(code_edit_id);\n let word: string, wordIndex: number;\n\n await loadMode(props.mode);\n\n const extraKeys = {\n 'Ctrl-Space': 'autocomplete',\n };\n\n cmInstance = window.CodeMirror.fromTextArea(editor as HTMLTextAreaElement, {\n ...props.options,\n extraKeys,\n hintOptions: {\n // tables: {\n // users: ['name', 'score', 'birthDate'],\n // countries: ['name', 'population', 'size'],\n // },\n },\n lineWrapping: props.lineWrapping,\n });\n\n cmInstance.setOption('mode', props.mode);\n cmInstance.setOption('theme', 'material-darker');\n cmInstance.setValue(props.editorValue || '');\n\n cmInstance.on('change', (coder: any) => {\n if (props.mode === 'htmlmixed' || props.mode === 'css' || props.mode === 'xml') {\n // HTML模式下使用Emmet\n const { line: lineIndex, ch } = coder.getCursor();\n const line = coder.getLine(lineIndex);\n const wordResult = getWord(line, ch);\n word = wordResult[0];\n wordIndex = wordResult[1];\n }\n context.emit('update:editorValue', coder.getValue());\n });\n\n cmInstance.on(\n 'change',\n debounce(() => {\n context.emit('debounce-update');\n }, 5000) as (instance: any) => void,\n );\n\n // Autocomplete on input\n cmInstance.on('inputRead', (cm: any, change: any) => {\n if (cm.state.completionActive || change.origin === '+delete' || change.origin === 'paste') {\n return;\n }\n // Show hint for normal typing\n const NON_SPECIAL_CHARS = /^[a-zA-Z0-9_.]*$/;\n if (NON_SPECIAL_CHARS.test(change.text[0])) {\n cm.showHint({ completeSingle: false });\n }\n });\n\n if (props.mode === 'htmlmixed' || props.mode === 'css' || props.mode === 'xml') {\n const currentExtraKeys = cmInstance.getOption('extraKeys');\n cmInstance.setOption('extraKeys', {\n ...currentExtraKeys,\n Tab: function (coder: any) {\n const indent = coder.getOption('indentUnit') || 2;\n const spaces = Array(indent + 1).join(' ');\n if (!word) {\n coder.replaceSelection(spaces);\n } else {\n try {\n const typeMap: any = {\n htmlmixed: 'markup',\n css: 'stylesheet',\n xml: 'markup',\n };\n const emmet = expand(word, { type: typeMap[props.mode] });\n const { line, ch } = coder.getCursor();\n coder.setSelection({ line, ch }, { line, ch: wordIndex });\n const formatterEmmet = emmet\n .split('\\n')\n .map((line: string, index: number) => {\n if (index > 0) {\n line = line.replace(/\\t/g, spaces);\n line = Array(wordIndex + 1).join(' ') + line;\n }\n return line;\n })\n .join('\\n');\n coder.replaceSelection(formatterEmmet);\n } catch (e) {\n console.error(e);\n coder.replaceSelection(spaces);\n }\n }\n },\n });\n }\n };\n\n onMounted(async () => {\n try {\n if (!(window as any).CodeMirror) {\n // First time loading: fetch all assets in the correct order.\n await Promise.all([\n loadStyle(`${get_CODEMIRROR_BASE_URL()}/lib/codemirror.css`),\n loadStyle(`${get_CODEMIRROR_BASE_URL()}/theme/material-darker.css`),\n loadStyle(`${get_CODEMIRROR_BASE_URL()}/addon/hint/show-hint.css`),\n ]);\n await loadScript(`${get_CODEMIRROR_BASE_URL()}/lib/codemirror.js`);\n await Promise.all([\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/show-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/anyword-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/xml-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/sql-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/javascript-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/css-hint.js`),\n loadScript(`${get_CODEMIRROR_BASE_URL()}/addon/hint/html-hint.js`),\n ]);\n }\n\n await initCodeMirror();\n\n await new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, 500);\n });\n if (cmInstance) {\n cmInstance.refresh();\n }\n } catch (error) {\n console.error('Failed to load CodeMirror assets:', error);\n }\n });\n\n onUnmounted(() => {\n if (cmInstance) {\n cmInstance.toTextArea();\n cmInstance = null;\n }\n });\n\n watch(\n () => props.mode,\n async val => {\n if (cmInstance) {\n await loadMode(val);\n cmInstance.setOption('mode', val);\n }\n },\n );\n\n watch(\n () => props.editorValue,\n async newValue => {\n if (cmInstance && newValue !== cmInstance.getValue()) {\n cmInstance.setValue(newValue || '');\n }\n },\n );\n\n return {\n code_edit_id,\n handleCodeMirrorRefresh() {\n if (cmInstance) {\n cmInstance.refresh();\n }\n },\n };\n },\n};\n</script>\n<style>\n.CodeMirror {\n height: 300px !important;\n font-size: 15px !important;\n font-family: Monaco, MonoSpace;\n line-height: 1.4 !important;\n}\n\n.CodeMirror-lines {\n padding: 4px 0;\n min-height: 1px; /* Ensure line measure div is not collapsed */\n}\n\n.CodeMirror-hints {\n position: absolute;\n z-index: 9999 !important;\n overflow: hidden;\n list-style: none;\n margin: 0 0 0 5px; /* Add a 5px offset to the left */\n padding: 2px;\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n border: 1px solid #555; /* A softer border for the theme */\n background: #2d2d2d;\n font-size: 100%;\n font-family: monospace;\n max-height: 20em;\n overflow-y: auto;\n}\n\n.CodeMirror-hint {\n margin: 0;\n padding: 0 4px;\n border-radius: 2px;\n white-space: pre;\n color: white;\n cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n background: #08f;\n color: white;\n}\n</style>\n","<template>\n <a-tree-select\n v-model:search-value=\"searchValue\"\n v-model:value=\"modalRef.selectedRows\"\n size=\"small\"\n style=\"min-width: 150px\"\n :placeholder=\"placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :allow-clear=\"field.allowClear !== false\"\n :tree-data=\"modalRef.datasource\"\n :multiple=\"field.multiple\"\n :tree-node-filter-prop=\"labelKey\"\n :tree-label-prop=\"labelKey\"\n :dropdownStyle=\"{ maxHeight: '400px' }\"\n @change=\"handleChange\"\n @mouseenter=\"handleMouseenter\"\n :show-search=\"true\"\n >\n <template #title=\"value\">\n <template\n v-for=\"(fragment, i) in value[labelKey || 'name']\n ?.toString()\n .split(new RegExp(`(?<=${searchValue})|(?=${searchValue})`, 'i'))\"\n >\n <span\n v-if=\"fragment.toLowerCase() === searchValue.toLowerCase()\"\n :key=\"i\"\n style=\"color: #08c\"\n >\n {{ fragment }}\n </span>\n <template v-else>{{ fragment }}</template>\n </template>\n </template>\n </a-tree-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, watch, onMounted, onUnmounted, ref } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport { convertValueByClassName, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport { debounce, isArray } from 'lodash-es';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useRequiredConditionStore, required_condition_event_obj } from 'liyu-pc-base/init-plugin';\n\nexport default defineComponent({\n name: 'RemoteTreeSelectPro',\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 valueKey: {\n type: String,\n },\n labelKeyType: {\n type: Number,\n default: () => 1,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\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 outModel: {\n required: false,\n },\n placeholder: {\n type: String,\n },\n init_model: {\n type: Object,\n default: () => {},\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 },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const searchValue = ref('');\n const requiredConditionStore = useRequiredConditionStore();\n const modalRef: any = reactive({\n selectedRows: props.field.multiple ? [] : null,\n datasource: [],\n baseData: null,\n });\n let is_refresh = false; // 是否触发刷新\n const getSelectedRows = (value: any) => {\n if (value) {\n if (props.field.multiple) {\n modalRef.selectedRows = [];\n if (isArray(value)) {\n value.forEach((item: any) => {\n modalRef.selectedRows.push(item);\n });\n } else {\n modalRef.selectedRows.push(value);\n }\n } else {\n if (isArray(value)) {\n if (value?.length > 0) {\n modalRef.selectedRows = value[0];\n } else {\n modalRef.selectedRows = null;\n }\n } else {\n modalRef.selectedRows = value;\n }\n }\n } else {\n if (props.field.multiple) {\n modalRef.selectedRows = [];\n } else {\n modalRef.selectedRows = null;\n }\n }\n };\n getSelectedRows(props.value);\n const getTreeData = (res: any) => {\n const result = [...res.data];\n // 递归排序函数\n function dataChildren(nodes) {\n nodes.forEach(node => {\n node.key = node[get_value_key()];\n node.value = node[get_value_key()];\n if (props.labelKeyList && props.labelKeyList.length > 0 && props.labelKeyType == 2) {\n const label = [];\n for (const key of props.labelKeyList) {\n label.push(node[key as string]);\n }\n node.title = label.join(props.labelSpace);\n } else {\n node.title = node[get_label_key()];\n }\n if (node?.children && node.children.length > 0) {\n dataChildren(node.children); // 递归排序子节点\n } else {\n delete node.children;\n }\n });\n }\n dataChildren(result); // 然后递归地对每个根节点的子节点排序\n modalRef.datasource = result;\n };\n const get_value_key = () => {\n return props.valueKey ? (props.valueKey as string) : 'id';\n };\n const get_label_key = () => {\n return props.labelKey ? (props.labelKey as string) : 'name';\n };\n const 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 /**\n * searchType === 1 时按 key 同时处理 outModel 与 formModel:\n * outModel 中该字段有值(非 undefined / null)时优先,否则回退 formModel 的同名字段。\n * 不能用 `outModel ? outModel : formModel` 做对象级二选一(outModel 默认为 {} 恒为真值)。\n */\n const resolveModelValue = (selectName: any): { found: boolean; value: any } => {\n if (\n props.outModel &&\n Object.prototype.hasOwnProperty.call(props.outModel, selectName) &&\n props.outModel[selectName] !== undefined &&\n props.outModel[selectName] !== null\n ) {\n return { found: true, value: props.outModel[selectName] };\n }\n if (props.formModel && Object.prototype.hasOwnProperty.call(props.formModel, selectName)) {\n return { found: true, value: props.formModel[selectName] };\n }\n return { found: false, value: undefined };\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 // outModel 优先、formModel 兜底,两者同时参与查找\n const resolved = resolveModelValue(item1.select_name);\n if (resolved.found) {\n getConditionsItem(resolved.value, list, item1);\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 {\n getConditionsItem(item1.value, list, item1);\n }\n });\n conditions.push(list);\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 // outModel 优先、formModel 兜底,两者同时参与查找\n const resolved = resolveModelValue(item.select_name);\n if (resolved.found) {\n params[item.field_name] = resolved.value;\n }\n } else if (item.searchType === 3) {\n params[item.field_name] = item.value;\n }\n });\n return params;\n }\n };\n const searchConfig: any = {\n current: 1,\n pageSize: 2000,\n is_pagination: true,\n is_active: true,\n ...props.init_model, // 普通查询条件\n column_fields: [],\n conditions: [],\n simpleSearchParams: {},\n };\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\n } else {\n searchConfig.conditions = getConditions();\n }\n const getColumnFields = () => {\n const list = [];\n if (props.labelKeyType == 2) {\n list.push(get_value_key(), ...props.labelKeyList);\n } else {\n list.push(get_value_key(), get_label_key());\n }\n searchConfig.column_fields = [].concat(list);\n };\n getColumnFields();\n const getLabelFromDatasource = (datasource: Array<any>) => {\n const labelList: Array<string> = [];\n datasource.forEach((item: any) => {\n if (modalRef.selectedRows instanceof Array && modalRef.selectedRows.includes(item.key)) {\n labelList.push(item.title);\n }\n if (!(modalRef.selectedRows instanceof Array) && modalRef.selectedRows == item.key) {\n labelList.push(item.title);\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 getSelectedRows(props.formModel[props.field.name]);\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\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 refresh = () => {\n if (props.field.postUrl) {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n params = {\n ...searchConfig.simpleSearchParams,\n required_condition: getRequiredConditionObj(),\n };\n } else {\n params = {\n ...searchConfig,\n ...props.search_config,\n required_condition: getRequiredConditionObj(),\n };\n delete params.simpleSearchParams;\n }\n getApiData(\n params,\n props.field.postUrl.replace('__tree', ''),\n props.field.postUrl.includes('__tree'),\n ).then(function (res: ReponseData<any>) {\n // console.log('res', res.data);\n modalRef.baseData = res;\n getTreeData(modalRef.baseData);\n getSelectedRows(modalRef.selectedRows);\n if (!props.is_form_design) {\n if (props.field.defaultValueType === 'first') {\n if (!modalRef.selectedRows || modalRef.selectedRows.length === 0) {\n if (!props.field.multiple) {\n modalRef.selectedRows = modalRef.datasource[0].value;\n } else {\n modalRef.selectedRows = [modalRef.datasource[0].value];\n }\n }\n } else if (props.field.defaultValueType === 'global') {\n if (!modalRef.selectedRows || modalRef.selectedRows.length === 0) {\n const globalDefaultKey = props.field.globalDefaultKey;\n const globalDefaultField = props.field.globalDefaultField;\n const globalDefaultValue = requiredConditionStore.value_map[globalDefaultKey];\n console.log('globalDefaultValue', globalDefaultValue);\n if (globalDefaultValue) {\n const globalDefaultItem = findDataItem(\n res.data,\n globalDefaultField,\n globalDefaultValue,\n );\n if (globalDefaultItem) {\n if (!props.field.multiple) {\n modalRef.selectedRows = globalDefaultItem[get_value_key()];\n } else {\n modalRef.selectedRows = [globalDefaultItem[get_value_key()]];\n }\n }\n }\n }\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n emit('update:value', modalRef.selectedRows);\n });\n }\n };\n const findDataItem = (rawDataList: any, key: string, value: any) => {\n for (const rawData of rawDataList) {\n if (rawData[key] === value) {\n return rawData;\n }\n if (rawData.children) {\n const result = findDataItem(rawData.children, key, value);\n if (result) {\n return result;\n }\n }\n }\n return null;\n };\n const debounce1: any = debounce(() => {\n refresh();\n }, 1000);\n const handleMouseenter = () => {\n if (is_refresh) {\n is_refresh = false;\n refresh();\n }\n };\n watch(\n // outModel 参与 searchType===1 的取值(见 resolveModelValue),必须一并监听:\n // 否则外部模型变化时查询条件不会重建。下方 JSON.stringify(searchConfig) 比对会挡住\n // 参数未变化时的重复刷新,不会多打请求。\n () => [props.formModel, props.outModel],\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 debounce1();\n }\n },\n { deep: true },\n );\n watch(\n () => [\n props.field.searchConditions,\n props.field.queryType,\n props.field.simpleSearchConditions,\n ],\n () => {\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\n } else {\n searchConfig.conditions = getConditions();\n }\n is_refresh = true;\n },\n { deep: true },\n );\n watch(\n () => [\n props.labelKeyList,\n props.labelKey,\n props.labelKeyType,\n props.valueKey,\n props.labelSpace,\n ],\n () => {\n getTreeData(modalRef.baseData);\n },\n { deep: true },\n );\n watch(\n () => props.field.multiple,\n () => {\n getSelectedRows(modalRef.selectedRows);\n emit('update:value', modalRef.selectedRows);\n },\n );\n watch(\n () => props.field.postUrl,\n () => {\n is_refresh = true;\n },\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 debounce1();\n }\n }\n };\n onMounted(() => {\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 return {\n props,\n modalRef,\n handleChange,\n handleMouseenter,\n searchValue,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n","<template>\n <a-tree-select\n v-model:search-value=\"searchValue\"\n v-model:value=\"modalRef.selectedRows\"\n size=\"small\"\n style=\"min-width: 150px\"\n :placeholder=\"placeholder\"\n :dropdownMatchSelectWidth=\"false\"\n :disabled=\"field.disabled\"\n :default-value=\"field.defaultValue\"\n :allow-clear=\"field.allowClear !== false\"\n :tree-data=\"modalRef.datasource\"\n :multiple=\"field.multiple\"\n :tree-node-filter-prop=\"labelKey\"\n :tree-label-prop=\"labelKey\"\n :dropdownStyle=\"{ maxHeight: '400px' }\"\n @change=\"handleChange\"\n @mouseenter=\"handleMouseenter\"\n :show-search=\"true\"\n >\n <template #title=\"value\">\n <template\n v-for=\"(fragment, i) in value[labelKey || 'name']\n ?.toString()\n .split(new RegExp(`(?<=${searchValue})|(?=${searchValue})`, 'i'))\"\n >\n <span\n v-if=\"fragment.toLowerCase() === searchValue.toLowerCase()\"\n :key=\"i\"\n style=\"color: #08c\"\n >\n {{ fragment }}\n </span>\n <template v-else>{{ fragment }}</template>\n </template>\n </template>\n </a-tree-select>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, watch, onMounted, onUnmounted, ref } from 'vue';\nimport type { ReponseData } from 'liyu-pc-base/utils/hooks/useFetchData';\nimport { convertValueByClassName, isNotEmpty } from 'liyu-pc-base/utils/function';\nimport { debounce, isArray } from 'lodash-es';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport { useRequiredConditionStore, required_condition_event_obj } from 'liyu-pc-base/init-plugin';\n\nexport default defineComponent({\n name: 'RemoteTreeSelectPro',\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 valueKey: {\n type: String,\n },\n labelKeyType: {\n type: Number,\n default: () => 1,\n },\n labelKey: {\n type: String,\n },\n labelSpace: {\n type: String,\n default: '-',\n },\n labelKeyList: {\n type: Array,\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 outModel: {\n required: false,\n },\n placeholder: {\n type: String,\n },\n init_model: {\n type: Object,\n default: () => {},\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 },\n emits: ['update:value', 'update:label'],\n setup(props, { emit }) {\n const searchValue = ref('');\n const requiredConditionStore = useRequiredConditionStore();\n const modalRef: any = reactive({\n selectedRows: props.field.multiple ? [] : null,\n datasource: [],\n baseData: null,\n });\n let is_refresh = false; // 是否触发刷新\n const getSelectedRows = (value: any) => {\n if (value) {\n if (props.field.multiple) {\n modalRef.selectedRows = [];\n if (isArray(value)) {\n value.forEach((item: any) => {\n modalRef.selectedRows.push(item);\n });\n } else {\n modalRef.selectedRows.push(value);\n }\n } else {\n if (isArray(value)) {\n if (value?.length > 0) {\n modalRef.selectedRows = value[0];\n } else {\n modalRef.selectedRows = null;\n }\n } else {\n modalRef.selectedRows = value;\n }\n }\n } else {\n if (props.field.multiple) {\n modalRef.selectedRows = [];\n } else {\n modalRef.selectedRows = null;\n }\n }\n };\n getSelectedRows(props.value);\n const getTreeData = (res: any) => {\n const result = [...res.data];\n // 递归排序函数\n function dataChildren(nodes) {\n nodes.forEach(node => {\n node.key = node[get_value_key()];\n node.value = node[get_value_key()];\n if (props.labelKeyList && props.labelKeyList.length > 0 && props.labelKeyType == 2) {\n const label = [];\n for (const key of props.labelKeyList) {\n label.push(node[key as string]);\n }\n node.title = label.join(props.labelSpace);\n } else {\n node.title = node[get_label_key()];\n }\n if (node?.children && node.children.length > 0) {\n dataChildren(node.children); // 递归排序子节点\n } else {\n delete node.children;\n }\n });\n }\n dataChildren(result); // 然后递归地对每个根节点的子节点排序\n modalRef.datasource = result;\n };\n const get_value_key = () => {\n return props.valueKey ? (props.valueKey as string) : 'id';\n };\n const get_label_key = () => {\n return props.labelKey ? (props.labelKey as string) : 'name';\n };\n const 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 /**\n * searchType === 1 时按 key 同时处理 outModel 与 formModel:\n * outModel 中该字段有值(非 undefined / null)时优先,否则回退 formModel 的同名字段。\n * 不能用 `outModel ? outModel : formModel` 做对象级二选一(outModel 默认为 {} 恒为真值)。\n */\n const resolveModelValue = (selectName: any): { found: boolean; value: any } => {\n if (\n props.outModel &&\n Object.prototype.hasOwnProperty.call(props.outModel, selectName) &&\n props.outModel[selectName] !== undefined &&\n props.outModel[selectName] !== null\n ) {\n return { found: true, value: props.outModel[selectName] };\n }\n if (props.formModel && Object.prototype.hasOwnProperty.call(props.formModel, selectName)) {\n return { found: true, value: props.formModel[selectName] };\n }\n return { found: false, value: undefined };\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 // outModel 优先、formModel 兜底,两者同时参与查找\n const resolved = resolveModelValue(item1.select_name);\n if (resolved.found) {\n getConditionsItem(resolved.value, list, item1);\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 {\n getConditionsItem(item1.value, list, item1);\n }\n });\n conditions.push(list);\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 // outModel 优先、formModel 兜底,两者同时参与查找\n const resolved = resolveModelValue(item.select_name);\n if (resolved.found) {\n params[item.field_name] = resolved.value;\n }\n } else if (item.searchType === 3) {\n params[item.field_name] = item.value;\n }\n });\n return params;\n }\n };\n const searchConfig: any = {\n current: 1,\n pageSize: 2000,\n is_pagination: true,\n is_active: true,\n ...props.init_model, // 普通查询条件\n column_fields: [],\n conditions: [],\n simpleSearchParams: {},\n };\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\n } else {\n searchConfig.conditions = getConditions();\n }\n const getColumnFields = () => {\n const list = [];\n if (props.labelKeyType == 2) {\n list.push(get_value_key(), ...props.labelKeyList);\n } else {\n list.push(get_value_key(), get_label_key());\n }\n searchConfig.column_fields = [].concat(list);\n };\n getColumnFields();\n const getLabelFromDatasource = (datasource: Array<any>) => {\n const labelList: Array<string> = [];\n datasource.forEach((item: any) => {\n if (modalRef.selectedRows instanceof Array && modalRef.selectedRows.includes(item.key)) {\n labelList.push(item.title);\n }\n if (!(modalRef.selectedRows instanceof Array) && modalRef.selectedRows == item.key) {\n labelList.push(item.title);\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 getSelectedRows(props.formModel[props.field.name]);\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\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 refresh = () => {\n if (props.field.postUrl) {\n let params: any = {};\n if (props.field.queryType === 'simple') {\n params = {\n ...searchConfig.simpleSearchParams,\n required_condition: getRequiredConditionObj(),\n };\n } else {\n params = {\n ...searchConfig,\n ...props.search_config,\n required_condition: getRequiredConditionObj(),\n };\n delete params.simpleSearchParams;\n }\n getApiData(\n params,\n props.field.postUrl.replace('__tree', ''),\n props.field.postUrl.includes('__tree'),\n ).then(function (res: ReponseData<any>) {\n // console.log('res', res.data);\n modalRef.baseData = res;\n getTreeData(modalRef.baseData);\n getSelectedRows(modalRef.selectedRows);\n if (!props.is_form_design) {\n if (props.field.defaultValueType === 'first') {\n if (!modalRef.selectedRows || modalRef.selectedRows.length === 0) {\n if (!props.field.multiple) {\n modalRef.selectedRows = modalRef.datasource[0].value;\n } else {\n modalRef.selectedRows = [modalRef.datasource[0].value];\n }\n }\n } else if (props.field.defaultValueType === 'global') {\n if (!modalRef.selectedRows || modalRef.selectedRows.length === 0) {\n const globalDefaultKey = props.field.globalDefaultKey;\n const globalDefaultField = props.field.globalDefaultField;\n const globalDefaultValue = requiredConditionStore.value_map[globalDefaultKey];\n console.log('globalDefaultValue', globalDefaultValue);\n if (globalDefaultValue) {\n const globalDefaultItem = findDataItem(\n res.data,\n globalDefaultField,\n globalDefaultValue,\n );\n if (globalDefaultItem) {\n if (!props.field.multiple) {\n modalRef.selectedRows = globalDefaultItem[get_value_key()];\n } else {\n modalRef.selectedRows = [globalDefaultItem[get_value_key()]];\n }\n }\n }\n }\n }\n }\n emit('update:label', getLabelFromDatasource(modalRef.datasource));\n emit('update:value', modalRef.selectedRows);\n });\n }\n };\n const findDataItem = (rawDataList: any, key: string, value: any) => {\n for (const rawData of rawDataList) {\n if (rawData[key] === value) {\n return rawData;\n }\n if (rawData.children) {\n const result = findDataItem(rawData.children, key, value);\n if (result) {\n return result;\n }\n }\n }\n return null;\n };\n const debounce1: any = debounce(() => {\n refresh();\n }, 1000);\n const handleMouseenter = () => {\n if (is_refresh) {\n is_refresh = false;\n refresh();\n }\n };\n watch(\n // outModel 参与 searchType===1 的取值(见 resolveModelValue),必须一并监听:\n // 否则外部模型变化时查询条件不会重建。下方 JSON.stringify(searchConfig) 比对会挡住\n // 参数未变化时的重复刷新,不会多打请求。\n () => [props.formModel, props.outModel],\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 debounce1();\n }\n },\n { deep: true },\n );\n watch(\n () => [\n props.field.searchConditions,\n props.field.queryType,\n props.field.simpleSearchConditions,\n ],\n () => {\n if (props.field.queryType === 'simple') {\n searchConfig.simpleSearchParams = getSimpleSearchParams();\n } else {\n searchConfig.conditions = getConditions();\n }\n is_refresh = true;\n },\n { deep: true },\n );\n watch(\n () => [\n props.labelKeyList,\n props.labelKey,\n props.labelKeyType,\n props.valueKey,\n props.labelSpace,\n ],\n () => {\n getTreeData(modalRef.baseData);\n },\n { deep: true },\n );\n watch(\n () => props.field.multiple,\n () => {\n getSelectedRows(modalRef.selectedRows);\n emit('update:value', modalRef.selectedRows);\n },\n );\n watch(\n () => props.field.postUrl,\n () => {\n is_refresh = true;\n },\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 debounce1();\n }\n }\n };\n onMounted(() => {\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 return {\n props,\n modalRef,\n handleChange,\n handleMouseenter,\n searchValue,\n };\n },\n\n data() {\n return {\n model: this.value,\n };\n },\n});\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SearchRender-ByarFel1.js","names":[],"sources":["../src/components/FormRender/SearchRender.vue","../src/components/FormRender/SearchRender.vue"],"sourcesContent":["<template>\n <template v-if=\"!isShowGeneralFilter\">\n <div v-show=\"!formShow.open\">\n <a-space>\n <a-button\n type=\"link\"\n @click=\"handleShowGeneralFilter\"\n v-if=\"is_show_advantage\"\n >\n {{ $t('高级') }}\n </a-button>\n <a-button\n type=\"link\"\n @click=\"\n () => {\n formShow.open = true;\n $emit('resize');\n }\n \"\n >\n {{ $t('展开') }}\n </a-button>\n </a-space>\n <span v-for=\"field in form.fields\">\n <span v-if=\"field.type == 'rangepicker'\">\n <a-tag\n v-show=\"model[field.name] != null && model[field.name] != ''\"\n color=\"green\"\n >\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"reduceRangePre(field)\"\n >\n <template #icon><left-outlined /></template>\n </a-button>\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"addRangePre(field)\"\n >\n <template #icon><right-outlined /></template>\n </a-button>\n {{ field.label }}:{{ showLabel(field, field.name) }}\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"reduceRangeAfter(field)\"\n >\n <template #icon><left-outlined /></template>\n </a-button>\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"addRangeAfter(field)\"\n >\n <template #icon><right-outlined /></template>\n </a-button>\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ name: field.name, key: 'model' })\"\n />\n </a-tag>\n </span>\n <span v-else-if=\"field.type == 'datepicker'\">\n <a-tag\n v-show=\"model[field.name] != null && model[field.name] != ''\"\n color=\"green\"\n >\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"reduce(field)\"\n >\n <template #icon><left-outlined /></template>\n </a-button>\n {{ field.label }}:{{ showLabel(field, field.name) }}\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"add(field)\"\n >\n <template #icon><right-outlined /></template>\n </a-button>\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ name: field.name, key: 'model' })\"\n />\n </a-tag>\n </span>\n <span v-else>\n <a-tag\n v-show=\"model[field.name] != null && model[field.name] != '' && isShowFilter(field)\"\n color=\"green\"\n >\n {{ field.label }}:{{ showLabel(field, field.name) }}\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ name: field.name, key: 'model' })\"\n />\n </a-tag>\n </span>\n </span>\n <template v-if=\"searchLabelList.length > 0\">\n <template\n v-for=\"(label, index) in searchLabelList\"\n :key=\"index\"\n >\n <a-tag\n v-show=\"\n label.filters\n ? label.filteredValue && JSON.stringify(label.filteredValue) !== '[]'\n : false\n \"\n color=\"green\"\n >\n {{ label.label }} 包含:{{ loadLabelOptions(label) }}\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ label, key: 'filters' })\"\n />\n </a-tag>\n </template>\n <template\n v-for=\"(label, index) in searchLabelList\"\n :key=\"index\"\n >\n <a-tag\n v-show=\"label.sorter && label.sortOrder\"\n color=\"blue\"\n >\n {{ label.label }}: {{ loadLabelSort(label) }}\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ label, key: 'sorter' })\"\n />\n </a-tag>\n </template>\n </template>\n </div>\n <a-form\n v-if=\"delayShow || formShow.open\"\n v-show=\"formShow.open\"\n ref=\"form\"\n autocomplete=\"off\"\n :model=\"model\"\n :rules=\"form.rules\"\n :layout=\"form.settings.layout\"\n :label-col=\"form.settings.labelCol\"\n :wrapper-col=\"form.settings.wrapperCol\"\n :labelAlign=\"form.settings.labelAlign\"\n scrollToFirstError\n >\n <a-form-item v-if=\"showSearch\">\n <a-space>\n <a-button\n type=\"link\"\n @click=\"handleShowGeneralFilter\"\n v-if=\"is_show_advantage\"\n >\n {{ $t('高级') }}\n </a-button>\n <a-button\n type=\"link\"\n @click=\"\n () => {\n formShow.open = false;\n $emit('resize');\n }\n \"\n >\n {{ $t('隐藏') }}\n </a-button>\n </a-space>\n </a-form-item>\n <template\n v-for=\"field in form.fields\"\n :key=\"field.name\"\n >\n <field-render-2\n v-if=\"field.type == 'rangepicker'\"\n v-model:label=\"labelModel[field.name]\"\n v-model:value=\"model[field.name]\"\n :field=\"{ ...field, format: field.dateFormat }\"\n :formModel=\"model\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\n :validateInfos=\"validateInfos\"\n />\n <field-render-2\n v-else\n v-model:label=\"labelModel[field.name]\"\n v-model:value=\"model[field.name]\"\n :field=\"field\"\n :formModel=\"model\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\n :validateInfos=\"validateInfos\"\n />\n </template>\n <a-form-item v-if=\"showSearch\">\n <a-button\n size=\"small\"\n type=\"primary\"\n @click=\"search\"\n >\n {{ $t('查询') }}\n </a-button>\n </a-form-item>\n <a-form-item v-if=\"showReset\">\n <a-button\n size=\"small\"\n @click=\"resetFields\"\n >\n {{ $t('重置') }}\n </a-button>\n </a-form-item>\n <a-form-item v-if=\"showReport\">\n <a-button\n size=\"small\"\n type=\"info\"\n @click=\"editModal.open = true\"\n >\n {{ $t('订阅') }}\n </a-button>\n </a-form-item>\n </a-form>\n <a-modal\n v-if=\"editModal.open\"\n :open=\"editModal.open\"\n @cancel=\"\n () => {\n editModal.open = false;\n }\n \"\n />\n </template>\n <template v-if=\"isShowGeneralFilter\">\n <slot name=\"generalFilter\"></slot>\n </template>\n</template>\n<script language=\"ts\">\nimport { watch } from 'vue';\nimport { CloseOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons-vue';\nimport moment from 'moment';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\nimport { cloneDeep } from 'lodash';\n\nexport default {\n name: 'SearchRender',\n components: { FieldRender2, LeftOutlined, RightOutlined, CloseOutlined },\n emits: ['search', 'resize', 'delSearch', 'showGeneralFilter'],\n props: {\n model: {\n type: Object,\n required: true,\n },\n form: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n required: true,\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n resetFields: {\n type: Function,\n default: () => {},\n },\n showReport: {\n type: Boolean,\n default: () => false,\n },\n showSearch: {\n type: Boolean,\n default: () => true,\n },\n showReset: {\n type: Boolean,\n default: () => true,\n },\n defaultShowEdit: {\n type: Boolean,\n default: () => false,\n },\n search_visible: {\n type: Boolean,\n default: () => false,\n },\n searchLabelList: {\n type: Array,\n default: () => [],\n },\n isShowGeneralFilter: {\n type: Boolean,\n default: () => false,\n },\n is_show_advantage: {\n type: Boolean,\n default: () => false,\n },\n delayShow: {\n type: Boolean,\n default: () => true,\n },\n },\n data() {\n return {\n editModal: {\n open: false,\n },\n formShow: {\n open: this.defaultShowEdit,\n },\n labelModel: {},\n };\n },\n methods: {\n delSearch(obj) {\n this.$emit('delSearch', obj);\n },\n search() {\n this.$refs.form.validate().then(\n () => {\n this.$emit('search');\n this.formShow.open = this.search_visible;\n },\n () => {\n // this.$emit('search');\n },\n );\n },\n validate() {\n return this.$refs.form.validate();\n },\n reset() {\n this.$refs.form.resetFields();\n },\n disable(name) {\n this.form.fields[name].disabled = true;\n },\n disableAll() {\n this.form.fields.forEach(item => {\n item.disabled = true;\n });\n },\n isShowFilter(field) {\n let is = true;\n this.searchLabelList.forEach(item => {\n if (field.name == item.key && item.is_filter_model) {\n is = false;\n }\n });\n return is;\n },\n showLabel(field, name) {\n const options = this.options[field.datasource ? field.datasource : field.name];\n if (this.labelModel[name] != undefined) {\n return this.labelModel[name];\n } else if (options) {\n if (\n typeof this.model[name] == 'object' &&\n this.model[name] != undefined &&\n this.model[name].length >= 0\n ) {\n const selectItems = options\n .filter(item => this.model[name].includes(item.value))\n .map(item => item.name);\n if (selectItems.length > 0) {\n return selectItems;\n }\n\n return '';\n } else {\n const selectItem = options.find(item => item.value == this.model[name]);\n if (selectItem) {\n return selectItem.name;\n }\n return '';\n }\n } else if (field.type === 'rangepicker' && this.model[name] instanceof Array) {\n const [first, second] = this.model[name];\n let first_srt, second_srt;\n if (field?.picker === 'month') {\n first_srt = moment(first).format('YYYY-MM');\n second_srt = moment(second).format('YYYY-MM');\n } else if (field?.picker === 'year') {\n first_srt = moment(first).format('YYYY');\n second_srt = moment(second).format('YYYY');\n } else if (field?.picker === 'time') {\n first_srt = moment(first, field.valueFormat).format(field.valueFormat);\n second_srt = moment(second, field.valueFormat).format(field.valueFormat);\n } else if (!field?.picker || field?.picker === 'date') {\n if (field.show_time) {\n first_srt = moment(first).format('YYYY-MM-DD HH:mm:ss');\n second_srt = moment(second).format('YYYY-MM-DD HH:mm:ss');\n } else {\n first_srt = moment(first).format('YYYY-MM-DD');\n second_srt = moment(second).format('YYYY-MM-DD');\n }\n } else if (field.valueFormat) {\n first_srt = moment(first).format(field.valueFormat);\n second_srt = moment(second).format(field.valueFormat);\n }\n return `${first_srt},${second_srt}`;\n } else {\n return this.model[name];\n }\n },\n loadLabelOptions(label) {\n if (label?.filters && label.filteredValue) {\n const str = [];\n label.filters.forEach(item => {\n let i = cloneDeep(item.value);\n if (i === 'true') {\n i = true;\n } else if (i === 'false') {\n i = false;\n }\n if (Array.isArray(label.filteredValue)) {\n if (label.filteredValue.includes(i) || label.filteredValue.includes(item.value)) {\n str.push(item.text ? item.text : item.label ? item.label : '');\n }\n } else {\n if (label.filteredValue == i || label.filteredValue == item.value) {\n str.push(item.text ? item.text : item.label ? item.label : '');\n }\n }\n });\n return `\" ${str.toString()} \"`;\n }\n },\n loadLabelSort(label) {\n if (label?.sorter && label.sortOrder) {\n if (label.sortOrder === 'ascend') {\n return '升序';\n } else if (label.sortOrder === 'descend') {\n return '降序';\n }\n }\n },\n add(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n reduce(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n reduceRangePre(fields) {\n console.log('reduceRangePre');\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n addRangePre(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n reduceRangeAfter(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n addRangeAfter(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n isShow(name) {\n let is = false;\n if (this.form?.sideSearch && this.form?.sideSearch.length > 0) {\n this.form?.sideSearch.forEach(item => {\n if (item.name == name) {\n is = true;\n }\n });\n }\n return is;\n },\n handleShowGeneralFilter() {\n this.$emit('showGeneralFilter', { is_show: true });\n },\n },\n created() {\n if (this.form.watch) {\n for (const k in this.form.watch) {\n watch(\n () => this.model[k],\n () => {\n this.form.watch[k](this.model, this.form);\n },\n );\n }\n }\n },\n};\n</script>\n<style scoped lang=\"less\">\n:deep(.ant-select-selection-placeholder) {\n overflow: hidden;\n width: 100%;\n}\n</style>\n","<template>\n <template v-if=\"!isShowGeneralFilter\">\n <div v-show=\"!formShow.open\">\n <a-space>\n <a-button\n type=\"link\"\n @click=\"handleShowGeneralFilter\"\n v-if=\"is_show_advantage\"\n >\n {{ $t('高级') }}\n </a-button>\n <a-button\n type=\"link\"\n @click=\"\n () => {\n formShow.open = true;\n $emit('resize');\n }\n \"\n >\n {{ $t('展开') }}\n </a-button>\n </a-space>\n <span v-for=\"field in form.fields\">\n <span v-if=\"field.type == 'rangepicker'\">\n <a-tag\n v-show=\"model[field.name] != null && model[field.name] != ''\"\n color=\"green\"\n >\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"reduceRangePre(field)\"\n >\n <template #icon><left-outlined /></template>\n </a-button>\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"addRangePre(field)\"\n >\n <template #icon><right-outlined /></template>\n </a-button>\n {{ field.label }}:{{ showLabel(field, field.name) }}\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"reduceRangeAfter(field)\"\n >\n <template #icon><left-outlined /></template>\n </a-button>\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"addRangeAfter(field)\"\n >\n <template #icon><right-outlined /></template>\n </a-button>\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ name: field.name, key: 'model' })\"\n />\n </a-tag>\n </span>\n <span v-else-if=\"field.type == 'datepicker'\">\n <a-tag\n v-show=\"model[field.name] != null && model[field.name] != ''\"\n color=\"green\"\n >\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"reduce(field)\"\n >\n <template #icon><left-outlined /></template>\n </a-button>\n {{ field.label }}:{{ showLabel(field, field.name) }}\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"add(field)\"\n >\n <template #icon><right-outlined /></template>\n </a-button>\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ name: field.name, key: 'model' })\"\n />\n </a-tag>\n </span>\n <span v-else>\n <a-tag\n v-show=\"model[field.name] != null && model[field.name] != '' && isShowFilter(field)\"\n color=\"green\"\n >\n {{ field.label }}:{{ showLabel(field, field.name) }}\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ name: field.name, key: 'model' })\"\n />\n </a-tag>\n </span>\n </span>\n <template v-if=\"searchLabelList.length > 0\">\n <template\n v-for=\"(label, index) in searchLabelList\"\n :key=\"index\"\n >\n <a-tag\n v-show=\"\n label.filters\n ? label.filteredValue && JSON.stringify(label.filteredValue) !== '[]'\n : false\n \"\n color=\"green\"\n >\n {{ label.label }} 包含:{{ loadLabelOptions(label) }}\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ label, key: 'filters' })\"\n />\n </a-tag>\n </template>\n <template\n v-for=\"(label, index) in searchLabelList\"\n :key=\"index\"\n >\n <a-tag\n v-show=\"label.sorter && label.sortOrder\"\n color=\"blue\"\n >\n {{ label.label }}: {{ loadLabelSort(label) }}\n <close-outlined\n style=\"cursor: pointer; margin-left: 5px\"\n @click=\"delSearch({ label, key: 'sorter' })\"\n />\n </a-tag>\n </template>\n </template>\n </div>\n <a-form\n v-if=\"delayShow || formShow.open\"\n v-show=\"formShow.open\"\n ref=\"form\"\n autocomplete=\"off\"\n :model=\"model\"\n :rules=\"form.rules\"\n :layout=\"form.settings.layout\"\n :label-col=\"form.settings.labelCol\"\n :wrapper-col=\"form.settings.wrapperCol\"\n :labelAlign=\"form.settings.labelAlign\"\n scrollToFirstError\n >\n <a-form-item v-if=\"showSearch\">\n <a-space>\n <a-button\n type=\"link\"\n @click=\"handleShowGeneralFilter\"\n v-if=\"is_show_advantage\"\n >\n {{ $t('高级') }}\n </a-button>\n <a-button\n type=\"link\"\n @click=\"\n () => {\n formShow.open = false;\n $emit('resize');\n }\n \"\n >\n {{ $t('隐藏') }}\n </a-button>\n </a-space>\n </a-form-item>\n <template\n v-for=\"field in form.fields\"\n :key=\"field.name\"\n >\n <field-render-2\n v-if=\"field.type == 'rangepicker'\"\n v-model:label=\"labelModel[field.name]\"\n v-model:value=\"model[field.name]\"\n :field=\"{ ...field, format: field.dateFormat }\"\n :formModel=\"model\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\n :validateInfos=\"validateInfos\"\n />\n <field-render-2\n v-else\n v-model:label=\"labelModel[field.name]\"\n v-model:value=\"model[field.name]\"\n :field=\"field\"\n :formModel=\"model\"\n :options=\"options[field.datasource ? field.datasource : field.name]\"\n :validateInfos=\"validateInfos\"\n />\n </template>\n <a-form-item v-if=\"showSearch\">\n <a-button\n size=\"small\"\n type=\"primary\"\n @click=\"search\"\n >\n {{ $t('查询') }}\n </a-button>\n </a-form-item>\n <a-form-item v-if=\"showReset\">\n <a-button\n size=\"small\"\n @click=\"resetFields\"\n >\n {{ $t('重置') }}\n </a-button>\n </a-form-item>\n <a-form-item v-if=\"showReport\">\n <a-button\n size=\"small\"\n type=\"info\"\n @click=\"editModal.open = true\"\n >\n {{ $t('订阅') }}\n </a-button>\n </a-form-item>\n </a-form>\n <a-modal\n v-if=\"editModal.open\"\n :open=\"editModal.open\"\n @cancel=\"\n () => {\n editModal.open = false;\n }\n \"\n />\n </template>\n <template v-if=\"isShowGeneralFilter\">\n <slot name=\"generalFilter\"></slot>\n </template>\n</template>\n<script language=\"ts\">\nimport { watch } from 'vue';\nimport { CloseOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons-vue';\nimport moment from 'moment';\nimport FieldRender2 from 'liyu-pc-base/components/FormRender/FieldRender2.vue';\nimport { cloneDeep } from 'lodash';\n\nexport default {\n name: 'SearchRender',\n components: { FieldRender2, LeftOutlined, RightOutlined, CloseOutlined },\n emits: ['search', 'resize', 'delSearch', 'showGeneralFilter'],\n props: {\n model: {\n type: Object,\n required: true,\n },\n form: {\n type: Object,\n required: true,\n },\n options: {\n type: Object,\n required: true,\n },\n validateInfos: {\n type: Object,\n default: () => {},\n },\n resetFields: {\n type: Function,\n default: () => {},\n },\n showReport: {\n type: Boolean,\n default: () => false,\n },\n showSearch: {\n type: Boolean,\n default: () => true,\n },\n showReset: {\n type: Boolean,\n default: () => true,\n },\n defaultShowEdit: {\n type: Boolean,\n default: () => false,\n },\n search_visible: {\n type: Boolean,\n default: () => false,\n },\n searchLabelList: {\n type: Array,\n default: () => [],\n },\n isShowGeneralFilter: {\n type: Boolean,\n default: () => false,\n },\n is_show_advantage: {\n type: Boolean,\n default: () => false,\n },\n delayShow: {\n type: Boolean,\n default: () => true,\n },\n },\n data() {\n return {\n editModal: {\n open: false,\n },\n formShow: {\n open: this.defaultShowEdit,\n },\n labelModel: {},\n };\n },\n methods: {\n delSearch(obj) {\n this.$emit('delSearch', obj);\n },\n search() {\n this.$refs.form.validate().then(\n () => {\n this.$emit('search');\n this.formShow.open = this.search_visible;\n },\n () => {\n // this.$emit('search');\n },\n );\n },\n validate() {\n return this.$refs.form.validate();\n },\n reset() {\n this.$refs.form.resetFields();\n },\n disable(name) {\n this.form.fields[name].disabled = true;\n },\n disableAll() {\n this.form.fields.forEach(item => {\n item.disabled = true;\n });\n },\n isShowFilter(field) {\n let is = true;\n this.searchLabelList.forEach(item => {\n if (field.name == item.key && item.is_filter_model) {\n is = false;\n }\n });\n return is;\n },\n showLabel(field, name) {\n const options = this.options[field.datasource ? field.datasource : field.name];\n if (this.labelModel[name] != undefined) {\n return this.labelModel[name];\n } else if (options) {\n if (\n typeof this.model[name] == 'object' &&\n this.model[name] != undefined &&\n this.model[name].length >= 0\n ) {\n const selectItems = options\n .filter(item => this.model[name].includes(item.value))\n .map(item => item.name);\n if (selectItems.length > 0) {\n return selectItems;\n }\n\n return '';\n } else {\n const selectItem = options.find(item => item.value == this.model[name]);\n if (selectItem) {\n return selectItem.name;\n }\n return '';\n }\n } else if (field.type === 'rangepicker' && this.model[name] instanceof Array) {\n const [first, second] = this.model[name];\n let first_srt, second_srt;\n if (field?.picker === 'month') {\n first_srt = moment(first).format('YYYY-MM');\n second_srt = moment(second).format('YYYY-MM');\n } else if (field?.picker === 'year') {\n first_srt = moment(first).format('YYYY');\n second_srt = moment(second).format('YYYY');\n } else if (field?.picker === 'time') {\n first_srt = moment(first, field.valueFormat).format(field.valueFormat);\n second_srt = moment(second, field.valueFormat).format(field.valueFormat);\n } else if (!field?.picker || field?.picker === 'date') {\n if (field.show_time) {\n first_srt = moment(first).format('YYYY-MM-DD HH:mm:ss');\n second_srt = moment(second).format('YYYY-MM-DD HH:mm:ss');\n } else {\n first_srt = moment(first).format('YYYY-MM-DD');\n second_srt = moment(second).format('YYYY-MM-DD');\n }\n } else if (field.valueFormat) {\n first_srt = moment(first).format(field.valueFormat);\n second_srt = moment(second).format(field.valueFormat);\n }\n return `${first_srt},${second_srt}`;\n } else {\n return this.model[name];\n }\n },\n loadLabelOptions(label) {\n if (label?.filters && label.filteredValue) {\n const str = [];\n label.filters.forEach(item => {\n let i = cloneDeep(item.value);\n if (i === 'true') {\n i = true;\n } else if (i === 'false') {\n i = false;\n }\n if (Array.isArray(label.filteredValue)) {\n if (label.filteredValue.includes(i) || label.filteredValue.includes(item.value)) {\n str.push(item.text ? item.text : item.label ? item.label : '');\n }\n } else {\n if (label.filteredValue == i || label.filteredValue == item.value) {\n str.push(item.text ? item.text : item.label ? item.label : '');\n }\n }\n });\n return `\" ${str.toString()} \"`;\n }\n },\n loadLabelSort(label) {\n if (label?.sorter && label.sortOrder) {\n if (label.sortOrder === 'ascend') {\n return '升序';\n } else if (label.sortOrder === 'descend') {\n return '降序';\n }\n }\n },\n add(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name] = moment(this.model[fields.name])\n .add('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n reduce(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name] = moment(this.model[fields.name])\n .subtract('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n reduceRangePre(fields) {\n console.log('reduceRangePre');\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .subtract('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n addRangePre(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][0] = moment(this.model[fields.name][0])\n .add('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n reduceRangeAfter(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .subtract('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n addRangeAfter(fields) {\n if (this.model[fields.name]) {\n if (!fields.picker || fields.picker === 'date') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'days')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM-DD');\n this.search();\n } else if (fields.picker === 'month') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'months')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY-MM');\n this.search();\n } else if (fields.picker === 'week') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'weeks')\n .format(fields.valueFormat ? fields.valueFormat : 'GGGG-WW[周]');\n this.search();\n } else if (fields.picker === 'quarter') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'quarters')\n .format(fields.valueFormat ? fields.valueFormat : '');\n this.search();\n } else if (fields.picker === 'year') {\n this.model[fields.name][1] = moment(this.model[fields.name][1])\n .add('1', 'years')\n .format(fields.valueFormat ? fields.valueFormat : 'YYYY');\n this.search();\n }\n }\n },\n isShow(name) {\n let is = false;\n if (this.form?.sideSearch && this.form?.sideSearch.length > 0) {\n this.form?.sideSearch.forEach(item => {\n if (item.name == name) {\n is = true;\n }\n });\n }\n return is;\n },\n handleShowGeneralFilter() {\n this.$emit('showGeneralFilter', { is_show: true });\n },\n },\n created() {\n if (this.form.watch) {\n for (const k in this.form.watch) {\n watch(\n () => this.model[k],\n () => {\n this.form.watch[k](this.model, this.form);\n },\n );\n }\n }\n },\n};\n</script>\n<style scoped lang=\"less\">\n:deep(.ant-select-selection-placeholder) {\n overflow: hidden;\n width: 100%;\n}\n</style>\n"],"mappings":"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"}
|