lyflowchart 1.0.113 → 1.0.130

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.
Files changed (198) hide show
  1. package/dist/ActionsConfig-BuvSvRbv.js +395 -0
  2. package/dist/ActionsConfig-BuvSvRbv.js.map +1 -0
  3. package/dist/ApprovalEditorModal-DZfXupU3.js +48 -0
  4. package/dist/ApprovalEditorModal-DZfXupU3.js.map +1 -0
  5. package/dist/CancelModal-BUi3ieI8.js +61 -0
  6. package/dist/CancelModal-BUi3ieI8.js.map +1 -0
  7. package/dist/Cell_click_approve-CBh0j--6.js +244 -0
  8. package/dist/Cell_click_approve-CBh0j--6.js.map +1 -0
  9. package/dist/JsonTags-BbWLqghI.js +66 -0
  10. package/dist/JsonTags-BbWLqghI.js.map +1 -0
  11. package/dist/MyProcess-FWGEwQcv.js +26434 -0
  12. package/dist/MyProcess-FWGEwQcv.js.map +1 -0
  13. package/dist/MyProcess.vue.d.ts +991 -0
  14. package/dist/approval-BW2WjPxY.js +167 -0
  15. package/dist/approval-BW2WjPxY.js.map +1 -0
  16. package/dist/approval-CuUNtG9u.js +18 -0
  17. package/dist/approval-CuUNtG9u.js.map +1 -0
  18. package/dist/approvalHistory-B2gpQbFC.js +868 -0
  19. package/dist/approvalHistory-B2gpQbFC.js.map +1 -0
  20. package/dist/approvalHistoryViewModal-DgLpv2ot.js +114 -0
  21. package/dist/approvalHistoryViewModal-DgLpv2ot.js.map +1 -0
  22. package/dist/approvalPageConfig-D0zPXOUf.js +2437 -0
  23. package/dist/approvalPageConfig-D0zPXOUf.js.map +1 -0
  24. package/dist/approveLeftConfig-BOU_UgHp.js +136 -0
  25. package/dist/approveLeftConfig-BOU_UgHp.js.map +1 -0
  26. package/dist/codeHistoryViewModal-BfSjIbEU.js +103 -0
  27. package/dist/codeHistoryViewModal-BfSjIbEU.js.map +1 -0
  28. package/dist/columnTables-DLwtgcC7.js +1272 -0
  29. package/dist/columnTables-DLwtgcC7.js.map +1 -0
  30. package/dist/components/Cell_click_approve.vue.d.ts +5 -0
  31. package/dist/components/Cell_click_data_source.vue.d.ts +6 -0
  32. package/dist/components/Process/common/bpmnUtils.d.ts +8 -0
  33. package/dist/components/Process/common/global.d.ts +16 -0
  34. package/dist/components/Process/common/index.d.ts +5 -0
  35. package/dist/components/Process/component/JsonTags2.vue.d.ts +60 -0
  36. package/dist/components/Process/component/ValueInput2.vue.d.ts +74 -0
  37. package/dist/components/Process/component/columnNameField2.vue.d.ts +51 -0
  38. package/dist/components/Process/component/data.d.ts +157 -0
  39. package/dist/components/Process/customPanel/CustomContextPad.d.ts +31 -0
  40. package/dist/components/Process/customPanel/CustomPalette.d.ts +89 -0
  41. package/dist/components/Process/customPanel/customTranslate.d.ts +1 -0
  42. package/dist/components/Process/customPanel/index.d.ts +8 -0
  43. package/dist/components/Process/designer.vue.d.ts +589 -0
  44. package/dist/components/Process/flowable/init.d.ts +1 -0
  45. package/dist/components/Process/index.vue.d.ts +812 -0
  46. package/dist/components/Process/lang/zh.d.ts +249 -0
  47. package/dist/components/Process/panel/ButtonsPanel.vue.d.ts +24 -0
  48. package/dist/components/Process/panel/PropertiesPanel.vue.d.ts +24 -0
  49. package/dist/components/Process/panel/commonPanel.vue.d.ts +40 -0
  50. package/dist/components/Process/panel/conditionPanel.vue.d.ts +271 -0
  51. package/dist/components/Process/panel/executionListener.vue.d.ts +66 -0
  52. package/dist/components/Process/panel/formPanel.vue.d.ts +7 -0
  53. package/dist/components/Process/panel/multiInstance.vue.d.ts +33 -0
  54. package/dist/components/Process/panel/otherPanel.vue.d.ts +17 -0
  55. package/dist/components/Process/panel/taskListener.vue.d.ts +64 -0
  56. package/dist/components/Process/panel/taskPanel.vue.d.ts +254 -0
  57. package/dist/components/Process/viewer/index.vue.d.ts +41 -0
  58. package/dist/components/approval/ApprovalEditorModal.vue.d.ts +26 -0
  59. package/dist/components/approval/CostCompanySelect.vue.d.ts +29 -0
  60. package/dist/components/approval/CostDepartmentSelect.vue.d.ts +35 -0
  61. package/dist/components/approval/CreateByCascader.vue.d.ts +27 -0
  62. package/dist/components/approval/CreateBySelect.vue.d.ts +35 -0
  63. package/dist/components/approval/PostionCascader.vue.d.ts +26 -0
  64. package/dist/components/approval/SystemTime.vue.d.ts +38 -0
  65. package/dist/components/approval/approvalViewId.d.ts +36 -0
  66. package/dist/components/approval/components/CancelModal.vue.d.ts +25 -0
  67. package/dist/components/approval/components/FormCodeInput.vue.d.ts +33 -0
  68. package/dist/components/approval/components/FormContextInput.vue.d.ts +33 -0
  69. package/dist/components/approval/components/FormFlowOrgInput.vue.d.ts +40 -0
  70. package/dist/components/approval/components/actionsBar.vue.d.ts +17 -0
  71. package/dist/components/approval/components/approvalHistory/approvalHistoryViewModal.vue.d.ts +41 -0
  72. package/dist/components/approval/components/approvalHistory/dataStoreSettingHistory.vue.d.ts +55 -0
  73. package/dist/components/approval/components/approvalHistory/dataStoreSettingHistoryViewModal.vue.d.ts +41 -0
  74. package/dist/components/approval/components/approvalHistory/flowHistoryViewModal.vue.d.ts +41 -0
  75. package/dist/components/approval/components/approvalHistory/flowSettingHistory.vue.d.ts +55 -0
  76. package/dist/components/approval/components/approvalHistory/index.vue.d.ts +212 -0
  77. package/dist/components/approval/components/approvalHistory/pageSettingHistory.vue.d.ts +55 -0
  78. package/dist/components/approval/components/approvalPageConfig/ActionsConfig.vue.d.ts +112 -0
  79. package/dist/components/approval/components/approvalPageConfig/BaseConditions.vue.d.ts +205 -0
  80. package/dist/components/approval/components/approvalPageConfig/CodeEditorWraper.vue.d.ts +51 -0
  81. package/dist/components/approval/components/approvalPageConfig/ColumnConfig.vue.d.ts +145 -0
  82. package/dist/components/approval/components/approvalPageConfig/ConditionFieldMulType.vue.d.ts +137 -0
  83. package/dist/components/approval/components/approvalPageConfig/JsonInput.vue.d.ts +38 -0
  84. package/dist/components/approval/components/approvalPageConfig/JsonTags.vue.d.ts +26 -0
  85. package/dist/components/approval/components/approvalPageConfig/JsonText.vue.d.ts +36 -0
  86. package/dist/components/approval/components/approvalPageConfig/approveLeftConfig.vue.d.ts +6 -0
  87. package/dist/components/approval/components/approvalPageConfig/baseConfig.vue.d.ts +10 -0
  88. package/dist/components/approval/components/approvalPageConfig/cellEdit.vue.d.ts +23 -0
  89. package/dist/components/approval/components/approvalPageConfig/configSync.vue.d.ts +76 -0
  90. package/dist/components/approval/components/approvalPageConfig/confirmInput.vue.d.ts +26 -0
  91. package/dist/components/approval/components/approvalPageConfig/defaultOperatorSelect.vue.d.ts +18 -0
  92. package/dist/components/approval/components/approvalPageConfig/index.vue.d.ts +11 -0
  93. package/dist/components/approval/components/approvalPageConfig/jsonConfig.vue.d.ts +16 -0
  94. package/dist/components/approval/components/approvalPageConfig/layoutSetting.vue.d.ts +9 -0
  95. package/dist/components/approval/components/approvalPageConfig/leftColumn.vue.d.ts +1184 -0
  96. package/dist/components/approval/components/approvalPageConfig/middleColumn.vue.d.ts +145 -0
  97. package/dist/components/approval/components/approvalPageConfig/operatorSelect.vue.d.ts +18 -0
  98. package/dist/components/approval/components/approvalPageConfig/searchConfig.vue.d.ts +166 -0
  99. package/dist/components/approval/components/approvalPageConfig/tableConfig.vue.d.ts +802 -0
  100. package/dist/components/approval/components/codeHistory/codeHistory.vue.d.ts +53 -0
  101. package/dist/components/approval/components/codeHistory/codeHistoryViewModal.vue.d.ts +32 -0
  102. package/dist/components/approval/components/columnDataList.vue.d.ts +454 -0
  103. package/dist/components/approval/components/columnForm.vue.d.ts +26 -0
  104. package/dist/components/approval/components/columnTables.vue.d.ts +502 -0
  105. package/dist/components/approval/components/columnUnknown.vue.d.ts +2 -0
  106. package/dist/components/approval/components/dataStoreConfig/ConditionConfig.vue.d.ts +199 -0
  107. package/dist/components/approval/components/dataStoreConfig/ValueInput.vue.d.ts +37 -0
  108. package/dist/components/approval/components/dataStoreConfig/dataSourceDetial.vue.d.ts +22 -0
  109. package/dist/components/approval/components/dataStoreConfig/dataStoreConfig.vue.d.ts +554 -0
  110. package/dist/components/approval/components/dataStoreConfig/dataStoreConfigItem.vue.d.ts +434 -0
  111. package/dist/components/approval/components/dataStoreConfig/dataStoreTest.vue.d.ts +39 -0
  112. package/dist/components/approval/components/dataStoreConfig/dataStoreTestsItem.vue.d.ts +17 -0
  113. package/dist/components/approval/components/dataStoreConfig/formField.vue.d.ts +28 -0
  114. package/dist/components/approval/components/dataStoreConfig/formFieldMulType.vue.d.ts +96 -0
  115. package/dist/components/approval/components/dataStoreConfig/selectExcelColumn.vue.d.ts +26 -0
  116. package/dist/components/approval/components/dataStoreConfig/selectExcelType.vue.d.ts +28 -0
  117. package/dist/components/approval/components/debugCode/debugCode.vue.d.ts +214 -0
  118. package/dist/components/approval/components/drawerDataList.vue.d.ts +504 -0
  119. package/dist/components/approval/components/drawerTablesList.vue.d.ts +551 -0
  120. package/dist/components/approval/components/flowConfig/flowConfig.vue.d.ts +1097 -0
  121. package/dist/components/approval/components/flowConfig/selectCcGroup.vue.d.ts +9 -0
  122. package/dist/components/approval/components/flowConfig/selectUsers.vue.d.ts +9 -0
  123. package/dist/components/approval/components/modelTablesList.vue.d.ts +551 -0
  124. package/dist/components/approval/components/pageConfigHistory.vue.d.ts +2 -0
  125. package/dist/components/approval/components/search.vue.d.ts +238 -0
  126. package/dist/components/approval/components/searchSummary.vue.d.ts +100 -0
  127. package/dist/components/approval/components/table.vue.d.ts +416 -0
  128. package/dist/components/approval/components/tableModal.vue.d.ts +84 -0
  129. package/dist/components/approval/configs/approval/default.d.ts +11 -0
  130. package/dist/components/approval/configs/approval/recordActions.d.ts +22 -0
  131. package/dist/components/approval/core.vue.d.ts +48 -0
  132. package/dist/components/approval/example_code/example_code.d.ts +11 -0
  133. package/dist/components/approval/index.d.ts +18 -0
  134. package/dist/components/approval/index.vue.d.ts +2 -0
  135. package/dist/components/approval/migrate/index.d.ts +1 -0
  136. package/dist/components/approval/migrate/v0001.d.ts +2 -0
  137. package/dist/components/approval/store/context.d.ts +48 -0
  138. package/dist/components/approval/store/debugCode.d.ts +7 -0
  139. package/dist/components/approval/store/settingsState.d.ts +15 -0
  140. package/dist/components/approval/typing.d.ts +210 -0
  141. package/dist/components/approval/useApprovalRecordActions.d.ts +83 -0
  142. package/dist/components/approval/utils.d.ts +164 -0
  143. package/dist/components/approval_for_details.vue.d.ts +9 -0
  144. package/dist/components/flow/ElInputTag/index.vue.d.ts +46 -0
  145. package/dist/components/flow/Expression/index.vue.d.ts +48 -0
  146. package/dist/components/flow/Role/index.vue.d.ts +68 -0
  147. package/dist/components/flow/User/index.vue.d.ts +76 -0
  148. package/dist/config/packed-config.d.ts +26 -0
  149. package/dist/constants.d.ts +1 -0
  150. package/dist/core-CctSle2c.js +1629 -0
  151. package/dist/core-CctSle2c.js.map +1 -0
  152. package/dist/dataStoreSettingHistoryViewModal-D_so-KLp.js +114 -0
  153. package/dist/dataStoreSettingHistoryViewModal-D_so-KLp.js.map +1 -0
  154. package/dist/debugCode-Cm9-WiUG.js +565 -0
  155. package/dist/debugCode-Cm9-WiUG.js.map +1 -0
  156. package/dist/debugCode-dD1YnQSD.js +11 -0
  157. package/dist/debugCode-dD1YnQSD.js.map +1 -0
  158. package/dist/default-VdDMlY4e.js +560 -0
  159. package/dist/default-VdDMlY4e.js.map +1 -0
  160. package/dist/example_code-C_xF8RRG.js +129 -0
  161. package/dist/example_code-C_xF8RRG.js.map +1 -0
  162. package/dist/flowHistoryViewModal-D8DJP7Te.js +109 -0
  163. package/dist/flowHistoryViewModal-D8DJP7Te.js.map +1 -0
  164. package/dist/index.d.ts +81 -0
  165. package/dist/index.js +507 -26691
  166. package/dist/index.js.map +1 -1
  167. package/dist/init-plugin-fQTSQzui.js +48 -0
  168. package/dist/init-plugin-fQTSQzui.js.map +1 -0
  169. package/dist/init-plugin.d.ts +57 -0
  170. package/dist/leftColumn-CsPjufue.js +209 -0
  171. package/dist/leftColumn-CsPjufue.js.map +1 -0
  172. package/dist/lyflowchart.css +1 -1
  173. package/dist/middleColumn-C7M6-eVo.js +107 -0
  174. package/dist/middleColumn-C7M6-eVo.js.map +1 -0
  175. package/dist/recordActions-BgFlNsGU.js +51 -0
  176. package/dist/recordActions-BgFlNsGU.js.map +1 -0
  177. package/dist/settingsState-CI81PG-i.js +19 -0
  178. package/dist/settingsState-CI81PG-i.js.map +1 -0
  179. package/dist/style.d.ts +3 -0
  180. package/dist/styles.d.ts +7 -0
  181. package/dist/tableConfig-uLXue-BS.js +2408 -0
  182. package/dist/tableConfig-uLXue-BS.js.map +1 -0
  183. package/dist/tableModal-BcYfVL02.js +124 -0
  184. package/dist/tableModal-BcYfVL02.js.map +1 -0
  185. package/dist/useApprovalRecordActions-BQ6MgV2L.js +843 -0
  186. package/dist/useApprovalRecordActions-BQ6MgV2L.js.map +1 -0
  187. package/dist/utils/StrUtil.d.ts +52 -0
  188. package/dist/utils/function.d.ts +8 -0
  189. package/dist/utils-CLet2gLV.js +420 -0
  190. package/dist/utils-CLet2gLV.js.map +1 -0
  191. package/dist/v0001-OaBeBCXI.js +4 -0
  192. package/dist/v0001-OaBeBCXI.js.map +1 -0
  193. package/dist/{Cell_click_data_source-CUVsbkcN.js → viewer-Dv3kQsMf.js} +1551 -2415
  194. package/dist/viewer-Dv3kQsMf.js.map +1 -0
  195. package/dist/vue-print-next-HRweUmNi.js +683 -0
  196. package/dist/vue-print-next-HRweUmNi.js.map +1 -0
  197. package/package.json +39 -8
  198. package/dist/Cell_click_data_source-CUVsbkcN.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnTables-DLwtgcC7.js","names":[],"sources":["../src/components/approval/components/searchSummary.vue","../src/components/approval/components/searchSummary.vue","../src/components/approval/components/search.vue","../src/components/approval/components/search.vue","../src/components/approval/store/context.ts","../src/components/approval/components/actionsBar.vue","../src/components/approval/components/actionsBar.vue","../src/components/approval/components/table.vue","../src/components/approval/components/table.vue","../src/components/approval/components/columnTables.vue","../src/components/approval/components/columnTables.vue"],"sourcesContent":["<template>\n <span class=\"search-summary\">\n <a-tag\n v-for=\"item in dataSource\"\n :key=\"item.field_name\"\n color=\"green\"\n closable\n @close=\"handleClose(item.field_name)\"\n >\n {{ item.summary }}\n </a-tag>\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"handleRefresh\"\n >\n <RedoOutlined />\n </a-button>\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted, ref, computed } from 'vue';\nimport { Condition, SearchConfig } from '../typing';\nimport { useOperatorTypeMap, options_for_date_eq } from '../utils';\nimport { isEmpty, isNotEmpty } from '@/utils/function';\nimport { useI18n } from 'vue-i18n';\nimport moment from 'moment';\nexport default defineComponent({\n name: 'searchSummary',\n props: {\n searchConfig: {\n type: Array<SearchConfig>,\n required: true,\n },\n searchConditions: {\n type: Array<Condition>,\n required: true,\n },\n eventBus: {\n type: Object as any,\n required: false,\n },\n },\n emits: ['update:searchConditions'],\n\n setup(props, { emit }) {\n const operator_type_map = useOperatorTypeMap();\n const { t } = useI18n();\n const transferValue = (configItem, operator, value) => {\n const str_list: any = [];\n let transfer_value;\n if (operator === 'is_or_not_blank_or_null' || operator === 'is_or_not_null') {\n if (value === 'yes') {\n return t('is_or_not_blank_or_null.yes');\n } else {\n return t('is_or_not_blank_or_null.no');\n }\n } else if (operator === '_eq') {\n if (['上月', '本月', '今日', '昨日', '期初'].includes(value)) {\n return t(value);\n }\n } else if (configItem.options instanceof Array) {\n if (value instanceof Array) {\n value.forEach(item => {\n configItem.options.forEach(i => {\n if (item == i.value) {\n str_list.push(i.label);\n }\n });\n });\n return `${operator_type_map[operator]} ${str_list.join(',')}`;\n } else {\n configItem.options.forEach(i => {\n if (value == i.value) {\n transfer_value = i.label;\n }\n });\n return `${operator_type_map[operator]} ${transfer_value}`;\n }\n } else if (configItem.type == 'monthpicker' && configItem.dateFormat) {\n if (value instanceof Array) {\n const str_list = [];\n value.forEach(i => {\n if (i) {\n str_list.push(moment(i).format(configItem.dateFormat));\n } else {\n str_list.push(i);\n }\n });\n transfer_value = str_list.join(',');\n } else {\n transfer_value = moment(value).format(configItem.dateFormat);\n }\n return `${operator_type_map[operator]} ${transfer_value}`;\n } else {\n return `${operator_type_map[operator]} ${value}`;\n }\n };\n const dataSource = computed(() => {\n const searchConditionsMap = {};\n for (const condition of props.searchConditions) {\n searchConditionsMap[condition.field_name] = {\n value: condition.value,\n operator: condition.operator,\n };\n }\n return props.searchConfig\n ?.map(configItem => {\n const data = searchConditionsMap[configItem.field_name] || {\n operator: configItem.default_operator || 'eq',\n value: null,\n };\n let summary = null;\n if (\n data.value instanceof Array &&\n data.value.length > 0 &&\n !data.value.some(item => isEmpty(item))\n ) {\n summary = `${configItem.label}: ${transferValue(\n configItem,\n data.operator,\n data.value,\n )}`;\n }\n return {\n field_name: configItem.field_name,\n summary,\n };\n })\n .filter(item => item.summary);\n });\n const handleClose = (fieldName: string) => {\n emit(\n 'update:searchConditions',\n props.searchConditions.filter(item => item.field_name !== fieldName),\n );\n };\n const handleRefresh = () => {\n props.eventBus.emit('refresh');\n };\n\n return { dataSource, handleClose, handleRefresh };\n },\n components: {},\n});\n</script>\n<style lang=\"less\" scoped>\n.search-summary {\n display: inline-block;\n padding: 4px 2px;\n}\n</style>\n","<template>\n <span class=\"search-summary\">\n <a-tag\n v-for=\"item in dataSource\"\n :key=\"item.field_name\"\n color=\"green\"\n closable\n @close=\"handleClose(item.field_name)\"\n >\n {{ item.summary }}\n </a-tag>\n <a-button\n size=\"small\"\n type=\"text\"\n @click=\"handleRefresh\"\n >\n <RedoOutlined />\n </a-button>\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted, ref, computed } from 'vue';\nimport { Condition, SearchConfig } from '../typing';\nimport { useOperatorTypeMap, options_for_date_eq } from '../utils';\nimport { isEmpty, isNotEmpty } from '@/utils/function';\nimport { useI18n } from 'vue-i18n';\nimport moment from 'moment';\nexport default defineComponent({\n name: 'searchSummary',\n props: {\n searchConfig: {\n type: Array<SearchConfig>,\n required: true,\n },\n searchConditions: {\n type: Array<Condition>,\n required: true,\n },\n eventBus: {\n type: Object as any,\n required: false,\n },\n },\n emits: ['update:searchConditions'],\n\n setup(props, { emit }) {\n const operator_type_map = useOperatorTypeMap();\n const { t } = useI18n();\n const transferValue = (configItem, operator, value) => {\n const str_list: any = [];\n let transfer_value;\n if (operator === 'is_or_not_blank_or_null' || operator === 'is_or_not_null') {\n if (value === 'yes') {\n return t('is_or_not_blank_or_null.yes');\n } else {\n return t('is_or_not_blank_or_null.no');\n }\n } else if (operator === '_eq') {\n if (['上月', '本月', '今日', '昨日', '期初'].includes(value)) {\n return t(value);\n }\n } else if (configItem.options instanceof Array) {\n if (value instanceof Array) {\n value.forEach(item => {\n configItem.options.forEach(i => {\n if (item == i.value) {\n str_list.push(i.label);\n }\n });\n });\n return `${operator_type_map[operator]} ${str_list.join(',')}`;\n } else {\n configItem.options.forEach(i => {\n if (value == i.value) {\n transfer_value = i.label;\n }\n });\n return `${operator_type_map[operator]} ${transfer_value}`;\n }\n } else if (configItem.type == 'monthpicker' && configItem.dateFormat) {\n if (value instanceof Array) {\n const str_list = [];\n value.forEach(i => {\n if (i) {\n str_list.push(moment(i).format(configItem.dateFormat));\n } else {\n str_list.push(i);\n }\n });\n transfer_value = str_list.join(',');\n } else {\n transfer_value = moment(value).format(configItem.dateFormat);\n }\n return `${operator_type_map[operator]} ${transfer_value}`;\n } else {\n return `${operator_type_map[operator]} ${value}`;\n }\n };\n const dataSource = computed(() => {\n const searchConditionsMap = {};\n for (const condition of props.searchConditions) {\n searchConditionsMap[condition.field_name] = {\n value: condition.value,\n operator: condition.operator,\n };\n }\n return props.searchConfig\n ?.map(configItem => {\n const data = searchConditionsMap[configItem.field_name] || {\n operator: configItem.default_operator || 'eq',\n value: null,\n };\n let summary = null;\n if (\n data.value instanceof Array &&\n data.value.length > 0 &&\n !data.value.some(item => isEmpty(item))\n ) {\n summary = `${configItem.label}: ${transferValue(\n configItem,\n data.operator,\n data.value,\n )}`;\n }\n return {\n field_name: configItem.field_name,\n summary,\n };\n })\n .filter(item => item.summary);\n });\n const handleClose = (fieldName: string) => {\n emit(\n 'update:searchConditions',\n props.searchConditions.filter(item => item.field_name !== fieldName),\n );\n };\n const handleRefresh = () => {\n props.eventBus.emit('refresh');\n };\n\n return { dataSource, handleClose, handleRefresh };\n },\n components: {},\n});\n</script>\n<style lang=\"less\" scoped>\n.search-summary {\n display: inline-block;\n padding: 4px 2px;\n}\n</style>\n","<template>\n <span class=\"search-switch\">\n <a-button\n v-if=\"!isShowForm\"\n type=\"link\"\n size=\"small\"\n @click=\"isShowForm = true\"\n >\n <span class=\"expand-btn\">{{ $t('展开') }}</span>\n </a-button>\n <a-button\n v-else\n type=\"link\"\n size=\"small\"\n @click=\"isShowForm = false\"\n >\n {{ $t('隐藏') }}\n </a-button>\n </span>\n <search-summary\n v-if=\"!isShowForm\"\n :search-conditions=\"searchConditions\"\n :search-config=\"searchConfig\"\n :event-bus=\"eventBus\"\n @update:searchConditions=\"handleUpdateSearchConditions\"\n />\n <template v-if=\"isShowForm\">\n <a-form layout=\"inline\">\n <a-form-item\n v-for=\"(condition, k) in dataSource\"\n :key=\"condition.field_name\"\n :label=\"condition.label\"\n >\n <a-input-group\n compact\n size=\"small\"\n >\n <a-select\n v-if=\"condition.operator_list.length > 0\"\n :dropdownMatchSelectWidth=\"false\"\n :value=\"condition.operator\"\n @change=\"onChange(condition.field_name, 'operator', $event)\"\n size=\"small\"\n >\n <a-select-option\n v-for=\"item in condition.operator_list\"\n :value=\"item\"\n :key=\"item\"\n >\n {{ operator_type_map[item] }}\n </a-select-option>\n </a-select>\n <template\n v-if=\"['is_or_not_blank_or_null', 'is_or_not_null'].includes(condition.operator)\"\n >\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{\n ...condition,\n type: 'select',\n mode: 'default',\n format: 'choices',\n class_name: 'str',\n placeholder: '',\n }\"\n :formModel=\"formModel\"\n :options=\"is_or_not_blank_or_null_options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else-if=\"['input'].includes(condition.format)\">\n <template\n v-if=\"condition.operator === 'between' || condition.operator === 'notbetween'\"\n >\n <template v-if=\"condition.type === 'datepicker'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{ ...condition, type: 'rangepicker', format: condition.dateFormat }\"\n :formModel=\"formModel\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else-if=\"condition.type === 'monthpicker'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{\n ...condition,\n type: 'monthrangepicker',\n }\"\n :formModel=\"formModel\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else>\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"condition.value?.[0]\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n :field_width=\"70\"\n @update:value=\"onChange(condition.field_name, 'value', $event, 0)\"\n />\n <span class=\"range\">~</span>\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"condition.value?.[1]\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n :field_width=\"70\"\n @update:value=\"onChange(condition.field_name, 'value', $event, 1)\"\n />\n </template>\n </template>\n <template v-else-if=\"condition.operator === '_eq'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{\n ...condition,\n type: 'select',\n mode: 'default',\n format: 'choices',\n class_name: 'str',\n placeholder: '',\n }\"\n :formModel=\"formModel\"\n :options=\"options_for_date_eq\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template\n v-else-if=\"condition.type === 'datepicker' || condition.type === 'monthpicker'\"\n >\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{ ...condition, format: condition.dateFormat }\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else>\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n </template>\n <template v-else-if=\"['choices', 'remote'].includes(condition.format)\">\n <template v-if=\"condition.format === 'choices'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else-if=\"condition.format === 'remote'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{ ...condition, name: condition?.field_name }\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n </template>\n </a-input-group>\n </a-form-item>\n </a-form>\n <div class=\"btn-content\">\n <a-button\n size=\"small\"\n type=\"primary\"\n @click=\"handleRefresh\"\n >\n 查询\n </a-button>\n </div>\n </template>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from 'vue';\nimport searchSummary from './searchSummary.vue';\nimport { Condition, SearchConfig } from '../typing';\nimport { cloneDeep, cond } from 'lodash';\nimport { useI18n } from 'vue-i18n';\n// @ts-ignore\nimport { useOperatorTypeMap, options_for_date_eq, getParamsCount } from '../utils';\nimport { isEmpty, isNotEmpty } from '@/utils/function';\nexport default defineComponent({\n name: 'Search',\n props: {\n searchConfig: {\n type: Array<SearchConfig>,\n required: true,\n },\n searchConditions: {\n type: Array<Condition>,\n required: true,\n },\n eventBus: {\n type: Object as any,\n required: false,\n },\n },\n emits: ['update:searchConditions'],\n\n setup(props, { emit }) {\n const operator_type_map = useOperatorTypeMap();\n const { t } = useI18n();\n const isShowForm = ref(true);\n const searchModel = ref({});\n const formModel = ref({});\n const validateInfos = ref({});\n\n const is_or_not_blank_or_null_options = ref([\n { value: 'yes', label: t('is_or_not_blank_or_null.yes') },\n { value: 'no', label: t('is_or_not_blank_or_null.no') },\n ]);\n\n const dataSource = computed(() => {\n const searchConditionsMap = {};\n for (const condition of props.searchConditions) {\n searchConditionsMap[condition.field_name] = {\n value: condition.value,\n operator: condition.operator,\n };\n }\n return props.searchConfig?.map(configItem => {\n const data = searchConditionsMap[configItem.field_name] || {\n operator: configItem.default_operator || 'eq',\n value: null,\n };\n let formValue = data.value;\n if (isNotEmpty(data.value)) {\n const paramsCount = getParamsCount(data.operator, configItem);\n if (paramsCount === 1 && formValue instanceof Array) {\n formValue = formValue[0];\n }\n }\n formModel.value[configItem.field_name] = formValue;\n return {\n ...configItem,\n value: data.value,\n operator: data.operator,\n model: 'default',\n };\n });\n });\n const getValue = configItemAndValue => {\n const value_count = getParamsCount(configItemAndValue.operator, configItemAndValue);\n let value = configItemAndValue.value;\n if (value_count == 1) {\n if (value instanceof Array) {\n return value[0] || undefined;\n } else {\n return value || undefined;\n }\n } else if (value_count == 2) {\n if (value instanceof Array) {\n const [first, seconds] = value;\n return [first, seconds];\n } else if (value) {\n const first = value;\n return [first, null];\n } else {\n return [null, null];\n }\n } else {\n return value;\n }\n };\n const onChange = (\n field_name: string,\n type: 'value' | 'operator',\n newValue: any,\n array_index: number | undefined = undefined,\n ) => {\n const conditions = cloneDeep(props.searchConditions);\n const configItem = props.searchConfig.find(item => item.field_name === field_name);\n let value;\n let operator;\n let condition = conditions.find(item => item.field_name === field_name);\n if (type === 'value') {\n if (condition) {\n operator = condition.operator;\n } else {\n operator = configItem?.default_operator || 'eq';\n }\n if (array_index !== undefined) {\n const value_count = getParamsCount(newValue, configItem);\n if (condition) {\n value = condition.value;\n if (isEmpty(value) || !(value instanceof Array)) {\n value = [];\n for (let i = 0; i < value_count; i++) {\n value.push(null);\n }\n }\n value[array_index] = newValue;\n } else {\n value = [];\n for (let i = 0; i < value_count; i++) {\n value.push(null);\n }\n value[array_index] = newValue;\n }\n } else {\n if (isNotEmpty(newValue) && !(newValue instanceof Array)) {\n newValue = [newValue];\n }\n value = newValue;\n }\n } else if (type === 'operator') {\n operator = newValue;\n const value_count = getParamsCount(newValue, configItem);\n if (value_count) {\n value = [];\n for (let i = 0; i < value_count; i++) {\n value.push(null);\n }\n } else {\n value = undefined;\n }\n }\n if (condition) {\n condition.operator = operator;\n condition.value = value;\n } else {\n let format = 'input';\n let class_name = 'str';\n if (configItem) {\n format = configItem.format || 'input';\n class_name = configItem.class_name || 'str';\n }\n condition = {\n field_name: field_name,\n value,\n operator,\n format,\n class_name,\n };\n conditions.push(condition);\n }\n emit('update:searchConditions', conditions);\n };\n const handleUpdateSearchConditions = (newConditions: Condition[]) => {\n emit('update:searchConditions', newConditions);\n };\n const handleRefresh = () => {\n props.eventBus.emit('refresh');\n };\n return {\n isShowForm,\n searchModel,\n dataSource,\n onChange,\n operator_type_map,\n formModel,\n is_or_not_blank_or_null_options,\n validateInfos,\n options_for_date_eq,\n handleUpdateSearchConditions,\n handleRefresh,\n getValue,\n };\n },\n components: {\n searchSummary,\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.card {\n overflow: auto;\n max-height: 300px;\n background: #f2f5f7;\n}\n\n.condition-group {\n padding: 5px;\n}\n\n.close-icon {\n width: 15px;\n margin-top: 5px;\n margin-left: 5px;\n color: red;\n}\n\n.search-bar {\n background: #f2f5f7;\n text-align: right;\n}\n\n:deep(.divider .ant-divider) {\n margin: 0;\n}\n.btn-content {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n}\n.search-switch {\n display: inline-block;\n line-height: 32px;\n height: 32px;\n}\n</style>\n","<template>\n <span class=\"search-switch\">\n <a-button\n v-if=\"!isShowForm\"\n type=\"link\"\n size=\"small\"\n @click=\"isShowForm = true\"\n >\n <span class=\"expand-btn\">{{ $t('展开') }}</span>\n </a-button>\n <a-button\n v-else\n type=\"link\"\n size=\"small\"\n @click=\"isShowForm = false\"\n >\n {{ $t('隐藏') }}\n </a-button>\n </span>\n <search-summary\n v-if=\"!isShowForm\"\n :search-conditions=\"searchConditions\"\n :search-config=\"searchConfig\"\n :event-bus=\"eventBus\"\n @update:searchConditions=\"handleUpdateSearchConditions\"\n />\n <template v-if=\"isShowForm\">\n <a-form layout=\"inline\">\n <a-form-item\n v-for=\"(condition, k) in dataSource\"\n :key=\"condition.field_name\"\n :label=\"condition.label\"\n >\n <a-input-group\n compact\n size=\"small\"\n >\n <a-select\n v-if=\"condition.operator_list.length > 0\"\n :dropdownMatchSelectWidth=\"false\"\n :value=\"condition.operator\"\n @change=\"onChange(condition.field_name, 'operator', $event)\"\n size=\"small\"\n >\n <a-select-option\n v-for=\"item in condition.operator_list\"\n :value=\"item\"\n :key=\"item\"\n >\n {{ operator_type_map[item] }}\n </a-select-option>\n </a-select>\n <template\n v-if=\"['is_or_not_blank_or_null', 'is_or_not_null'].includes(condition.operator)\"\n >\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{\n ...condition,\n type: 'select',\n mode: 'default',\n format: 'choices',\n class_name: 'str',\n placeholder: '',\n }\"\n :formModel=\"formModel\"\n :options=\"is_or_not_blank_or_null_options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else-if=\"['input'].includes(condition.format)\">\n <template\n v-if=\"condition.operator === 'between' || condition.operator === 'notbetween'\"\n >\n <template v-if=\"condition.type === 'datepicker'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{ ...condition, type: 'rangepicker', format: condition.dateFormat }\"\n :formModel=\"formModel\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else-if=\"condition.type === 'monthpicker'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{\n ...condition,\n type: 'monthrangepicker',\n }\"\n :formModel=\"formModel\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else>\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"condition.value?.[0]\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n :field_width=\"70\"\n @update:value=\"onChange(condition.field_name, 'value', $event, 0)\"\n />\n <span class=\"range\">~</span>\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"condition.value?.[1]\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n :field_width=\"70\"\n @update:value=\"onChange(condition.field_name, 'value', $event, 1)\"\n />\n </template>\n </template>\n <template v-else-if=\"condition.operator === '_eq'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{\n ...condition,\n type: 'select',\n mode: 'default',\n format: 'choices',\n class_name: 'str',\n placeholder: '',\n }\"\n :formModel=\"formModel\"\n :options=\"options_for_date_eq\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template\n v-else-if=\"condition.type === 'datepicker' || condition.type === 'monthpicker'\"\n >\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{ ...condition, format: condition.dateFormat }\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else>\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n </template>\n <template v-else-if=\"['choices', 'remote'].includes(condition.format)\">\n <template v-if=\"condition.format === 'choices'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"condition\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n <template v-else-if=\"condition.format === 'remote'\">\n <SmallTableSerarchField\n :is_show_label=\"false\"\n :label=\"condition.field_name\"\n :value=\"getValue(condition)\"\n :field=\"{ ...condition, name: condition?.field_name }\"\n :formModel=\"formModel\"\n :options=\"condition.options\"\n :validateInfos=\"validateInfos\"\n @update:value=\"onChange(condition.field_name, 'value', $event)\"\n />\n </template>\n </template>\n </a-input-group>\n </a-form-item>\n </a-form>\n <div class=\"btn-content\">\n <a-button\n size=\"small\"\n type=\"primary\"\n @click=\"handleRefresh\"\n >\n 查询\n </a-button>\n </div>\n </template>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, ref } from 'vue';\nimport searchSummary from './searchSummary.vue';\nimport { Condition, SearchConfig } from '../typing';\nimport { cloneDeep, cond } from 'lodash';\nimport { useI18n } from 'vue-i18n';\n// @ts-ignore\nimport { useOperatorTypeMap, options_for_date_eq, getParamsCount } from '../utils';\nimport { isEmpty, isNotEmpty } from '@/utils/function';\nexport default defineComponent({\n name: 'Search',\n props: {\n searchConfig: {\n type: Array<SearchConfig>,\n required: true,\n },\n searchConditions: {\n type: Array<Condition>,\n required: true,\n },\n eventBus: {\n type: Object as any,\n required: false,\n },\n },\n emits: ['update:searchConditions'],\n\n setup(props, { emit }) {\n const operator_type_map = useOperatorTypeMap();\n const { t } = useI18n();\n const isShowForm = ref(true);\n const searchModel = ref({});\n const formModel = ref({});\n const validateInfos = ref({});\n\n const is_or_not_blank_or_null_options = ref([\n { value: 'yes', label: t('is_or_not_blank_or_null.yes') },\n { value: 'no', label: t('is_or_not_blank_or_null.no') },\n ]);\n\n const dataSource = computed(() => {\n const searchConditionsMap = {};\n for (const condition of props.searchConditions) {\n searchConditionsMap[condition.field_name] = {\n value: condition.value,\n operator: condition.operator,\n };\n }\n return props.searchConfig?.map(configItem => {\n const data = searchConditionsMap[configItem.field_name] || {\n operator: configItem.default_operator || 'eq',\n value: null,\n };\n let formValue = data.value;\n if (isNotEmpty(data.value)) {\n const paramsCount = getParamsCount(data.operator, configItem);\n if (paramsCount === 1 && formValue instanceof Array) {\n formValue = formValue[0];\n }\n }\n formModel.value[configItem.field_name] = formValue;\n return {\n ...configItem,\n value: data.value,\n operator: data.operator,\n model: 'default',\n };\n });\n });\n const getValue = configItemAndValue => {\n const value_count = getParamsCount(configItemAndValue.operator, configItemAndValue);\n let value = configItemAndValue.value;\n if (value_count == 1) {\n if (value instanceof Array) {\n return value[0] || undefined;\n } else {\n return value || undefined;\n }\n } else if (value_count == 2) {\n if (value instanceof Array) {\n const [first, seconds] = value;\n return [first, seconds];\n } else if (value) {\n const first = value;\n return [first, null];\n } else {\n return [null, null];\n }\n } else {\n return value;\n }\n };\n const onChange = (\n field_name: string,\n type: 'value' | 'operator',\n newValue: any,\n array_index: number | undefined = undefined,\n ) => {\n const conditions = cloneDeep(props.searchConditions);\n const configItem = props.searchConfig.find(item => item.field_name === field_name);\n let value;\n let operator;\n let condition = conditions.find(item => item.field_name === field_name);\n if (type === 'value') {\n if (condition) {\n operator = condition.operator;\n } else {\n operator = configItem?.default_operator || 'eq';\n }\n if (array_index !== undefined) {\n const value_count = getParamsCount(newValue, configItem);\n if (condition) {\n value = condition.value;\n if (isEmpty(value) || !(value instanceof Array)) {\n value = [];\n for (let i = 0; i < value_count; i++) {\n value.push(null);\n }\n }\n value[array_index] = newValue;\n } else {\n value = [];\n for (let i = 0; i < value_count; i++) {\n value.push(null);\n }\n value[array_index] = newValue;\n }\n } else {\n if (isNotEmpty(newValue) && !(newValue instanceof Array)) {\n newValue = [newValue];\n }\n value = newValue;\n }\n } else if (type === 'operator') {\n operator = newValue;\n const value_count = getParamsCount(newValue, configItem);\n if (value_count) {\n value = [];\n for (let i = 0; i < value_count; i++) {\n value.push(null);\n }\n } else {\n value = undefined;\n }\n }\n if (condition) {\n condition.operator = operator;\n condition.value = value;\n } else {\n let format = 'input';\n let class_name = 'str';\n if (configItem) {\n format = configItem.format || 'input';\n class_name = configItem.class_name || 'str';\n }\n condition = {\n field_name: field_name,\n value,\n operator,\n format,\n class_name,\n };\n conditions.push(condition);\n }\n emit('update:searchConditions', conditions);\n };\n const handleUpdateSearchConditions = (newConditions: Condition[]) => {\n emit('update:searchConditions', newConditions);\n };\n const handleRefresh = () => {\n props.eventBus.emit('refresh');\n };\n return {\n isShowForm,\n searchModel,\n dataSource,\n onChange,\n operator_type_map,\n formModel,\n is_or_not_blank_or_null_options,\n validateInfos,\n options_for_date_eq,\n handleUpdateSearchConditions,\n handleRefresh,\n getValue,\n };\n },\n components: {\n searchSummary,\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.card {\n overflow: auto;\n max-height: 300px;\n background: #f2f5f7;\n}\n\n.condition-group {\n padding: 5px;\n}\n\n.close-icon {\n width: 15px;\n margin-top: 5px;\n margin-left: 5px;\n color: red;\n}\n\n.search-bar {\n background: #f2f5f7;\n text-align: right;\n}\n\n:deep(.divider .ant-divider) {\n margin: 0;\n}\n.btn-content {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n}\n.search-switch {\n display: inline-block;\n line-height: 32px;\n height: 32px;\n}\n</style>\n","import { acceptHMRUpdate, defineStore } from 'pinia';\n\nexport interface TableContext {\n searchConditions: any[];\n selectedRowKeys: any[];\n selectedRecord: any[];\n datasource: any[];\n}\nexport interface Context {\n tables: Record<string, TableContext>;\n formModel: any;\n globalData: any;\n current_history_id?: any;\n request_history_id?: any;\n isEdit: boolean;\n editState: any;\n current_flow_history_id?: any;\n request_flow_history_id?: any;\n}\n\nexport interface ContextState {\n contexts: Record<string, Context>;\n}\n\nexport const SET_SEARCH_CONDITIONS = 'SET_SEARCH_CONDITIONS';\nexport const SET_SELECTED_ROWKEYS = 'SET_SELECTED_ROWKEYS';\nexport const SET_DATASOURCE = 'SET_DATASOURCE';\nexport const SET_FORM_MODEL = 'SET_FORM_MODEL';\nexport const SET_RAW = 'SET_RAW';\nexport const SET_CURRENT_HISTORY_ID = 'SET_CURRENT_HISTORY_ID';\nexport const SET_REQUST_HISTORY_ID = 'SET_REQUST_HISTORY_ID';\nexport const CLEAR_CONTEXT = 'CLEAR_CONTEXT';\nexport const SET_EDIT = 'SET_EDIT';\nexport const SET_CURRENT_FLOW_HISTORY_ID = 'SET_CURRENT_FLOW_HISTORY_ID';\nexport const SET_REQUST_FLOW_HISTORY_ID = 'SET_REQUST_FLOW_HISTORY_ID';\nexport const SET_GLOBAL_DATA = 'SET_GLOBAL_DATA';\n\nexport const useContextStore = defineStore('approval_context', {\n persist: false,\n state: (): ContextState => ({\n contexts: null,\n }),\n actions: {\n init(model_type: string) {\n if (!this.contexts) {\n this.contexts = {};\n }\n if (!this.contexts[model_type]) {\n this.contexts[model_type] = {\n tables: {},\n formModel: null,\n isEdit: false,\n editState: {},\n globalData: {},\n };\n }\n return this.contexts[model_type];\n },\n initTable(model_type: string, table_id: string) {\n const context = this.init(model_type);\n if (!context.tables) {\n context.tables = {};\n }\n if (!context.tables[table_id]) {\n context.tables[table_id] = {\n searchConditions: [],\n selectedRowKeys: [],\n selectedRecord: [],\n datasource: [],\n };\n }\n return context.tables[table_id];\n },\n\n [SET_SEARCH_CONDITIONS](model_type: string, table_id: string, searchConditions: any[]) {\n const table = this.initTable(model_type, table_id);\n table.searchConditions = searchConditions;\n },\n [SET_SELECTED_ROWKEYS](\n model_type: string,\n table_id: string,\n selectedRowKeys: any[],\n selectedRecord: any[],\n ) {\n const table = this.initTable(model_type, table_id);\n table.selectedRowKeys = selectedRowKeys;\n table.selectedRecord = selectedRecord;\n },\n [SET_DATASOURCE](model_type: string, table_id: string, datasource: any[]) {\n const table = this.initTable(model_type, table_id);\n table.datasource = datasource;\n },\n [SET_FORM_MODEL](model_type: string, formModel: any) {\n const context = this.init(model_type);\n context.formModel = formModel;\n },\n [SET_GLOBAL_DATA](model_type: string, globalData: any) {\n const context = this.init(model_type);\n context.globalData = globalData;\n },\n [SET_RAW](model_type: string, data: any) {\n this.init(model_type);\n this.contexts[model_type] = {\n ...data,\n current_history_id: this.contexts[model_type].current_history_id,\n current_flow_history_id: this.contexts[model_type].current_flow_history_id,\n };\n },\n\n [SET_CURRENT_HISTORY_ID](model_type: string, current_history_id: any) {\n this.init(model_type);\n this.contexts[model_type].current_history_id = current_history_id;\n },\n\n [SET_REQUST_HISTORY_ID](model_type: string, request_history_id: any) {\n this.init(model_type);\n this.contexts[model_type].request_history_id = request_history_id;\n },\n [SET_CURRENT_FLOW_HISTORY_ID](model_type: string, current_flow_history_id: any) {\n this.init(model_type);\n this.contexts[model_type].current_flow_history_id = current_flow_history_id;\n },\n [SET_REQUST_FLOW_HISTORY_ID](model_type: string, request_flow_history_id: any) {\n this.init(model_type);\n this.contexts[model_type].request_flow_history_id = request_flow_history_id;\n },\n [SET_EDIT](model_type: string, isEdit: boolean, editState: any) {\n this.init(model_type);\n this.contexts[model_type].isEdit = isEdit;\n this.contexts[model_type].editState = editState;\n },\n [CLEAR_CONTEXT](model_type: string) {\n delete this.contexts[model_type];\n },\n },\n});\n// 原来写的是 import.meta.webpackHot(webpack 专有),Vite 下不存在;\n// 改用 Vite 的 import.meta.hot + acceptHMRUpdate,类型由 vite/client 提供。\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useContextStore, import.meta.hot));\n}\n","<template>\n <div\n class=\"actions\"\n v-if=\"actions\"\n ref=\"rowActionTestRef\"\n >\n <template\n v-for=\"(action, index) in topActions\"\n :key=\"index\"\n >\n <debugCode\n :action_code_id=\"action.action_code_id\"\n v-model:code=\"action.code\"\n v-model:action=\"action.action\"\n v-model:showCode=\"action.showCode\"\n v-model:disableCode=\"action.disableCode\"\n :options=\"actionTypes\"\n :show=\"showMap[action.action_code_id]\"\n >\n <a-button\n size=\"small\"\n :type=\"action.type as ButtonType\"\n :danger=\"action.danger\"\n :loading=\"!!action.loading\"\n @click=\"handleClick(action)\"\n :disabled=\"disableMap[action.action_code_id]\"\n >\n {{ action.label }}\n </a-button>\n </debugCode>\n </template>\n <template v-for=\"group in dropDonwList\">\n <a-dropdown>\n <template #overlay>\n <a-menu>\n <template\n v-for=\"(action, index) in group.children\"\n :key=\"index\"\n >\n <debugCode\n :action_code_id=\"action.action_code_id\"\n v-model:code=\"action.code\"\n v-model:action=\"action.action\"\n v-model:showCode=\"action.showCode\"\n v-model:disableCode=\"action.disableCode\"\n :options=\"actionTypes\"\n :show=\"showMap[action.action_code_id]\"\n >\n <a-menu-item\n @click=\"handleClick(action)\"\n :disabled=\"disableMap[action.action_code_id]\"\n >\n {{ action.label }}\n </a-menu-item>\n </debugCode>\n </template>\n </a-menu>\n </template>\n <a-button\n size=\"small\"\n v-if=\"group.name\"\n >\n {{ group.name }}\n <DownOutlined />\n </a-button>\n <div\n v-else\n style=\"cursor: pointer; padding: 4px 16px\"\n >\n · · ·\n </div>\n </a-dropdown>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { ButtonType } from 'ant-design-vue/es/button';\nimport { Action } from '../typing';\nimport { useResizeObserver } from '@vueuse/core';\nimport { actionTypes } from '../utils';\nimport { executeScriptInWorker } from '@/init-plugin';\nimport { cloneDeep, debounce } from 'lodash';\n\ndefineOptions({\n name: 'actionBar',\n});\n\nconst props = withDefaults(\n defineProps<{\n actions: Action[];\n action_width?: number;\n params?: any;\n }>(),\n {\n action_width: 70,\n params: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'click', action: any): void;\n (e: 'update:action_width', width: number): void;\n}>();\n\nconst rowActionTestRef = ref(null);\nconst showMap = ref<Record<string, boolean>>({});\nconst disableMap = ref<Record<string, boolean>>({});\n\nconst topActions = computed(() => {\n return props.actions.filter(item => {\n return !item.is_dropdown;\n });\n});\n\nuseResizeObserver(rowActionTestRef, entries => {\n emit('update:action_width', entries[0].contentRect.width);\n});\n\nconst dropDonwList = computed(() => {\n const topsMap = {};\n const tops = [];\n\n for (const item of props.actions) {\n if (item.is_dropdown) {\n if (!topsMap[item.group_name]) {\n topsMap[item.group_name] = { name: item.group_name, children: [] };\n tops.push(topsMap[item.group_name]);\n }\n const data = topsMap[item.group_name];\n data.children.push(item);\n }\n }\n return tops;\n});\n\nconst showAll = () => {\n const _showMap = cloneDeep(showMap.value);\n const _disableMap = cloneDeep(disableMap.value);\n for (const item of props.actions || []) {\n _showMap[item.action_code_id] = true;\n _disableMap[item.action_code_id] = false;\n }\n showMap.value = _showMap;\n disableMap.value = _disableMap;\n};\n\nconst syncShowDisable = debounce(async params => {\n const _showMap = cloneDeep(showMap.value);\n const _disableMap = cloneDeep(disableMap.value);\n for (const item of props.actions || []) {\n _showMap[item.action_code_id] = true;\n _disableMap[item.action_code_id] = false;\n\n if (item.showCode?.enable && item.showCode?.code) {\n try {\n _showMap[item.action_code_id] = await executeScriptInWorker(item.showCode?.code, {\n ...params,\n settings: item.settings,\n });\n } catch (e) {\n console.error(e);\n }\n }\n if (item.disableCode?.enable && item.disableCode?.code) {\n try {\n _disableMap[item.action_code_id] = await executeScriptInWorker(item.disableCode?.code, {\n ...params,\n settings: item.settings,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n showMap.value = _showMap;\n disableMap.value = _disableMap;\n}, 200);\n\nwatch(\n () => [props.params, props.actions],\n (newValue, oldValue) => {\n newValue = newValue || [];\n oldValue = oldValue || [];\n let params = newValue[0];\n // if (isEqual(newValue, oldValue)) return;\n if (params === undefined) {\n showAll();\n return;\n }\n params = params || {};\n syncShowDisable(params);\n },\n {\n deep: true,\n immediate: true,\n },\n);\n\nconst handleClick = async action => {\n emit('click', action);\n};\n</script>\n<style lang=\"less\" scoped>\n.actions {\n display: flex;\n gap: 4px;\n white-space: nowrap;\n width: fit-content;\n}\n</style>\n","<template>\n <div\n class=\"actions\"\n v-if=\"actions\"\n ref=\"rowActionTestRef\"\n >\n <template\n v-for=\"(action, index) in topActions\"\n :key=\"index\"\n >\n <debugCode\n :action_code_id=\"action.action_code_id\"\n v-model:code=\"action.code\"\n v-model:action=\"action.action\"\n v-model:showCode=\"action.showCode\"\n v-model:disableCode=\"action.disableCode\"\n :options=\"actionTypes\"\n :show=\"showMap[action.action_code_id]\"\n >\n <a-button\n size=\"small\"\n :type=\"action.type as ButtonType\"\n :danger=\"action.danger\"\n :loading=\"!!action.loading\"\n @click=\"handleClick(action)\"\n :disabled=\"disableMap[action.action_code_id]\"\n >\n {{ action.label }}\n </a-button>\n </debugCode>\n </template>\n <template v-for=\"group in dropDonwList\">\n <a-dropdown>\n <template #overlay>\n <a-menu>\n <template\n v-for=\"(action, index) in group.children\"\n :key=\"index\"\n >\n <debugCode\n :action_code_id=\"action.action_code_id\"\n v-model:code=\"action.code\"\n v-model:action=\"action.action\"\n v-model:showCode=\"action.showCode\"\n v-model:disableCode=\"action.disableCode\"\n :options=\"actionTypes\"\n :show=\"showMap[action.action_code_id]\"\n >\n <a-menu-item\n @click=\"handleClick(action)\"\n :disabled=\"disableMap[action.action_code_id]\"\n >\n {{ action.label }}\n </a-menu-item>\n </debugCode>\n </template>\n </a-menu>\n </template>\n <a-button\n size=\"small\"\n v-if=\"group.name\"\n >\n {{ group.name }}\n <DownOutlined />\n </a-button>\n <div\n v-else\n style=\"cursor: pointer; padding: 4px 16px\"\n >\n · · ·\n </div>\n </a-dropdown>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { ButtonType } from 'ant-design-vue/es/button';\nimport { Action } from '../typing';\nimport { useResizeObserver } from '@vueuse/core';\nimport { actionTypes } from '../utils';\nimport { executeScriptInWorker } from '@/init-plugin';\nimport { cloneDeep, debounce } from 'lodash';\n\ndefineOptions({\n name: 'actionBar',\n});\n\nconst props = withDefaults(\n defineProps<{\n actions: Action[];\n action_width?: number;\n params?: any;\n }>(),\n {\n action_width: 70,\n params: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'click', action: any): void;\n (e: 'update:action_width', width: number): void;\n}>();\n\nconst rowActionTestRef = ref(null);\nconst showMap = ref<Record<string, boolean>>({});\nconst disableMap = ref<Record<string, boolean>>({});\n\nconst topActions = computed(() => {\n return props.actions.filter(item => {\n return !item.is_dropdown;\n });\n});\n\nuseResizeObserver(rowActionTestRef, entries => {\n emit('update:action_width', entries[0].contentRect.width);\n});\n\nconst dropDonwList = computed(() => {\n const topsMap = {};\n const tops = [];\n\n for (const item of props.actions) {\n if (item.is_dropdown) {\n if (!topsMap[item.group_name]) {\n topsMap[item.group_name] = { name: item.group_name, children: [] };\n tops.push(topsMap[item.group_name]);\n }\n const data = topsMap[item.group_name];\n data.children.push(item);\n }\n }\n return tops;\n});\n\nconst showAll = () => {\n const _showMap = cloneDeep(showMap.value);\n const _disableMap = cloneDeep(disableMap.value);\n for (const item of props.actions || []) {\n _showMap[item.action_code_id] = true;\n _disableMap[item.action_code_id] = false;\n }\n showMap.value = _showMap;\n disableMap.value = _disableMap;\n};\n\nconst syncShowDisable = debounce(async params => {\n const _showMap = cloneDeep(showMap.value);\n const _disableMap = cloneDeep(disableMap.value);\n for (const item of props.actions || []) {\n _showMap[item.action_code_id] = true;\n _disableMap[item.action_code_id] = false;\n\n if (item.showCode?.enable && item.showCode?.code) {\n try {\n _showMap[item.action_code_id] = await executeScriptInWorker(item.showCode?.code, {\n ...params,\n settings: item.settings,\n });\n } catch (e) {\n console.error(e);\n }\n }\n if (item.disableCode?.enable && item.disableCode?.code) {\n try {\n _disableMap[item.action_code_id] = await executeScriptInWorker(item.disableCode?.code, {\n ...params,\n settings: item.settings,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n showMap.value = _showMap;\n disableMap.value = _disableMap;\n}, 200);\n\nwatch(\n () => [props.params, props.actions],\n (newValue, oldValue) => {\n newValue = newValue || [];\n oldValue = oldValue || [];\n let params = newValue[0];\n // if (isEqual(newValue, oldValue)) return;\n if (params === undefined) {\n showAll();\n return;\n }\n params = params || {};\n syncShowDisable(params);\n },\n {\n deep: true,\n immediate: true,\n },\n);\n\nconst handleClick = async action => {\n emit('click', action);\n};\n</script>\n<style lang=\"less\" scoped>\n.actions {\n display: flex;\n gap: 4px;\n white-space: nowrap;\n width: fit-content;\n}\n</style>\n","<template>\n <div\n class=\"table-wraper\"\n ref=\"tableWraperRef\"\n >\n <div ref=\"searchRef\">\n <Search\n v-if=\"config.search_config\"\n :searchConfig=\"config.search_config\"\n v-model:searchConditions=\"searchConditions\"\n :event-bus=\"selfEventBus\"\n ></Search>\n </div>\n <s-table\n :columns=\"columns\"\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :data-source=\"dataSource\"\n :bordered=\"true\"\n size=\"small\"\n :scroll=\"{\n y: tableHeight,\n x: config.columns.length * 150,\n }\"\n :loading=\"loading\"\n :pagination=\"{\n current: state.current,\n pageSize: state.pageSize,\n total: state.total,\n onChange: handlePageChange,\n showSizeChanger: true,\n\n pageSizeOptions: pageSizeOptions,\n }\"\n :rowKey=\"'id'\"\n :rowSelection=\"row_selection\"\n :virtual=\"true\"\n :wrapText=\"true\"\n sticky\n stripe\n summary-fixed\n table-layout=\"auto\"\n :preserveRow=\"preserveRow\"\n @change=\"handleChange\"\n >\n <template #bodyCell=\"{ column, index, text, record }\">\n <template v-if=\"column.dataIndex == 'index'\">\n {{ index + 1 + state.pageSize * (state.current - 1) }}\n </template>\n <template v-else-if=\"column.dataIndex == '_action'\">\n <actions-bar\n :actions=\"config.row_actions\"\n @click=\"handleRowAction($event, record)\"\n :params=\"{\n table_id: config.id,\n record,\n context: context.contexts[modelType],\n }\"\n />\n </template>\n <component\n :is=\"'Cell_' + column.cellComponent\"\n v-else-if=\"column.cellComponent\"\n :cmpObj=\"{\n column: column ? column : {},\n index: index,\n text: text,\n dataSource: dataSource,\n record: record ? record : {},\n pageSize: state.pageSize ? state.pageSize : 500,\n current: state.current ? state.current : 1,\n eventBus: eventBus,\n call_cell_row_action: (title) => callRowActionByTitle(title, record),\n }\"\n ></component>\n\n <template v-else>\n {{ text }}\n </template>\n </template>\n <template\n #summary\n v-if=\"summaryColumns.length > 0\"\n >\n <s-table-summary-row>\n <s-table-summary-cell :index=\"0\">合计</s-table-summary-cell>\n <s-table-summary-cell\n v-for=\"item in summaryColumns\"\n :key=\"item.index\"\n :index=\"item.index\"\n >\n <template #default=\"{ total }\">\n <component\n :is=\"'CellSummary_' + item.cellSummaryComponent\"\n v-if=\"item.cellSummaryComponent\"\n :cmpObj=\"{\n item: item,\n total: total,\n }\"\n ></component>\n <span v-else>{{ item.total_content ? item.total_content(total) : total }}</span>\n </template>\n </s-table-summary-cell>\n </s-table-summary-row>\n </template>\n </s-table>\n <div\n ref=\"actionRef\"\n class=\"btn-wraper\"\n >\n <template v-if=\"!hideAllButtons\">\n <actions-bar\n :actions=\"config.actions\"\n @click=\"handleAction\"\n :params=\"{\n table_id: config.id,\n context: context.contexts[modelType],\n }\"\n />\n </template>\n </div>\n <!--用于测试行操作宽度-->\n <div style=\"position: fixed; width: 0; height: 0; display: block; overflow: hidden\">\n <actions-bar\n :actions=\"config.row_actions\"\n v-model:action_width=\"rowActionWidth\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n onMounted,\n ref,\n reactive,\n computed,\n watch,\n onUnmounted,\n PropType,\n} from 'vue';\nimport { executeScriptInWorker, getApiData } from '@/init-plugin';\nimport Search from './search.vue';\nimport { cloneDeep, debounce, isArray, isEqual } from 'lodash';\nimport { isNotEmpty, isEmpty } from '@/utils/function';\nimport { filterConditions, getQueryConditionParams, resolveParamValue } from '../utils';\nimport { Table, Column, ApprovalSetting } from '../typing';\nimport mitt from 'mitt';\nimport { useResizeObserver } from '@vueuse/core';\nimport {\n SET_DATASOURCE,\n SET_SEARCH_CONDITIONS,\n SET_SELECTED_ROWKEYS,\n useContextStore,\n} from '@/components/approval/store/context';\nimport actionsBar from './actionsBar.vue';\nimport { TableProps, message } from 'ant-design-vue';\nconst DEFAULT_PAGE_SIZE = 50;\nexport default defineComponent({\n name: 'ApprovalTable',\n props: {\n config: {\n type: Object as () => Table,\n required: true,\n },\n modelType: {\n type: String,\n required: false,\n },\n eventBus: {\n type: Object,\n required: false,\n },\n approvalConfig: {\n type: Object as () => ApprovalSetting,\n required: false,\n },\n rowSelectionType: {\n type: String,\n required: false,\n },\n hideAllButtons: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['selection-change'],\n setup(props, { emit }) {\n const context = useContextStore();\n const dataSource = ref([]);\n const selectedRowKeys = ref([]);\n const loading = ref(false);\n const selfEventBus = mitt();\n const searchConditions = ref([]);\n let loadDataId = null;\n const tableWraperRef = ref(null);\n const tableWraperHeight = ref(null);\n const searchRef = ref(null);\n const searchHeight = ref(null);\n const actionRef = ref(null);\n const actionHeight = ref(null);\n const rowActionWidth = ref(70);\n const sortedMap = ref({});\n const sortedList = ref([]);\n let hasGlobalConditions = false;\n let hasFormConditions = false;\n\n const pageSizeOptions = ref([\n '10',\n '20',\n '50',\n '100',\n '200',\n '500',\n '1000',\n '3000',\n '10000',\n '50000',\n '60000',\n '70000',\n ]);\n const state = reactive({\n current: 1,\n pageSize: DEFAULT_PAGE_SIZE,\n total: 0,\n });\n useResizeObserver(tableWraperRef, entries => {\n tableWraperHeight.value = entries[0].contentRect.height;\n });\n useResizeObserver(searchRef, entries => {\n searchHeight.value = entries[0].contentRect.height;\n });\n useResizeObserver(actionRef, entries => {\n actionHeight.value = entries[0].contentRect.height;\n });\n const preserveRow = () => {\n return false;\n };\n const convertBaseConditions = conditions => {\n if (!conditions) {\n return [];\n }\n // 页面配置里的查询值可能带 {{xxx}} 占位符,执行查询时在这里注入实际值\n const conditionParams = getQueryConditionParams(props.modelType);\n const current_context = context.contexts?.[props.modelType] || ({} as any);\n const formKeymap = {};\n for (const item of props.approvalConfig?.columns || []) {\n if (item.type === 'form') {\n const dynamicFieldList = item.form?.dynamicFieldList;\n if (dynamicFieldList) {\n for (const group of dynamicFieldList) {\n for (const field of group.children || []) {\n formKeymap[field.key] = field.name;\n }\n }\n }\n }\n }\n const convertItem = item => {\n let newValue = item.value;\n if (item.value_type == 'global') {\n if (item.value?.length == 2) {\n hasGlobalConditions = true;\n const temp = current_context.globalData?.[item.value[0]]?.[item.value[1]];\n if (temp) {\n newValue = [temp];\n } else {\n newValue = null;\n }\n } else {\n newValue = null;\n }\n } else if (item.value_type == 'form') {\n if (item.value?.length == 2) {\n hasFormConditions = true;\n const temp = current_context.formModel?.[formKeymap[item.value[1]]];\n if (temp) {\n newValue = [temp];\n } else {\n newValue = null;\n }\n } else {\n newValue = null;\n }\n } else {\n // fixed(或未配置 value_type):值里可能带 {{xxx}} 占位符\n newValue = resolveParamValue(item.value, conditionParams);\n }\n return {\n ...item,\n value_type: undefined,\n value: newValue,\n };\n };\n const convertGroup = group => {\n const list = Array.isArray(group) ? group : [group];\n return list.map(convertItem).filter(item => isNotEmpty(item.value));\n };\n // 兼容旧格式:若第一层不是数组(组),则整体当作单个组处理\n const isGroupFormat = conditions.length > 0 && Array.isArray(conditions[0]);\n const groups = isGroupFormat ? conditions : [conditions];\n return groups.map(convertGroup).filter(group => group.length > 0);\n };\n\n const getData = async () => {\n if (!props.config.list_url) {\n return;\n }\n const currentLoadId = Symbol();\n loadDataId = currentLoadId;\n try {\n loading.value = true;\n // 参数缺失时条件解析会直接报错:此时不能继续查(要么查不到、要么过滤失效),\n // 提示出来比静默出一张空表或错误数据更容易排查\n let baseConditions = [];\n try {\n baseConditions = convertBaseConditions(props.config.base_conditions);\n } catch (err) {\n console.error(err);\n message.error(err instanceof Error ? err.message : String(err));\n return;\n }\n const searchConditionList = filterConditions(searchConditions.value);\n // 新的条件格式:第一层为组({ op, children }),与页面输入的查询条件整合\n // 搜索条件作为一组(and),基础查询条件的各个组(组间 or)作为另一组(and)\n const conditions = [];\n if (searchConditionList.length > 0) {\n conditions.push({ op: 'and', children: searchConditionList });\n }\n if (baseConditions.length > 0) {\n conditions.push({ op: 'and', children: baseConditions });\n }\n const column_fields = props.config.columns?.map(item => {\n return item.dataIndex;\n });\n const sort_fields = [];\n for (const item of sortedList.value) {\n if (item.order == 'descend') {\n sort_fields.push('-' + item.key);\n } else {\n sort_fields.push(item.key);\n }\n }\n const params = {\n ...(props.config.query_params || {}),\n current: state.current,\n pageSize: state.pageSize,\n conditions: conditions,\n column_fields: column_fields,\n sort_fields,\n };\n const response = await getApiData(params, props.config.list_url);\n if (loadDataId !== currentLoadId) {\n return;\n }\n dataSource.value = response.data;\n if (props.modelType) {\n context[SET_DATASOURCE](props.modelType, props.config.id, dataSource.value);\n }\n state.current = response.current;\n state.total = response.total;\n } finally {\n if (loadDataId !== currentLoadId) {\n return;\n }\n loading.value = false;\n }\n };\n const delayGetDate = debounce(getData, 500);\n const handlePageChange = (page: any, pageSize: any) => {\n if (state.current == page && state.pageSize == pageSize) {\n return;\n }\n state.current = page ? page : 1;\n state.pageSize = pageSize ? pageSize : DEFAULT_PAGE_SIZE;\n getData();\n };\n const row_selection: any = computed(() => {\n const rowSelectionType =\n props.rowSelectionType || props.config.rowSelectionType || 'checkbox';\n const onChange = selectedRowKeys => {\n const selectdRecord = dataSource.value.filter(item => {\n return selectedRowKeys.includes(item.id);\n });\n if (props.modelType) {\n context[SET_SELECTED_ROWKEYS](\n props.modelType,\n props.config.id,\n selectedRowKeys,\n selectdRecord,\n );\n }\n };\n return { type: rowSelectionType, onChange };\n });\n /**\n * 已选行数上报:供上层(columnTables / tableModal)显示「已选 N 条」并做选择数量校验。\n * 用 watch 而不是写进 rowSelection.onChange,是为了覆盖所有改选途径(勾选/取消/全选等)——\n * s-table 统一通过 `update:selectedRowKeys` 回写,都在这个 ref 上。\n */\n watch(\n selectedRowKeys,\n keys => {\n emit('selection-change', (keys || []).length);\n },\n { deep: true, immediate: true },\n );\n const columns = computed(() => {\n const filterValueMap = {};\n for (const item of searchConditions.value) {\n if (['in', 'eq'].includes(item.operator)) {\n filterValueMap[item.field_name] = item.value;\n }\n }\n const sorted = sortedMap.value || {};\n const sourceColumns = cloneDeep(props.config.columns || []);\n const hasAutoWidth = sourceColumns.some(item => item.autoWidth);\n if (!hasAutoWidth && sourceColumns.length) {\n sourceColumns[sourceColumns.length - 1].autoWidth = true;\n }\n const res = sourceColumns.map(item => {\n if (item.autoWidth) {\n return {\n ...item,\n minWidth: item.width,\n width: undefined,\n filteredValue: filterValueMap[item.dataIndex] || null,\n sortOrder: sorted[item.dataIndex] || false,\n key: item.dataIndex,\n };\n } else {\n return {\n ...item,\n width: item.width,\n minWidth: undefined,\n filteredValue: filterValueMap[item.dataIndex] || null,\n sortOrder: sorted[item.dataIndex] || false,\n key: item.dataIndex,\n };\n }\n });\n if (\n props.config.row_actions &&\n props.config.row_actions.length > 0 &&\n !props.hideAllButtons\n ) {\n return [\n ...res,\n {\n title: '操作',\n dataIndex: '_action',\n width: rowActionWidth.value + 20,\n resizable: true,\n fixed: 'right',\n },\n ];\n } else {\n return res;\n }\n });\n const refresh = () => {\n getData();\n };\n //const response = await getApiData(params, props.config.list_url);\n const handleRowAction = async (action, record) => {\n if (!action.action) {\n console.error('未定义action');\n return;\n }\n if (props.eventBus) {\n props.eventBus.emit('run_action', {\n code: action.code,\n action: action,\n params: {\n table_id: props.config.id,\n record,\n context: context.contexts?.[props.modelType] || {},\n settings: action.settings,\n },\n });\n }\n };\n // cellComponent 触发行按钮:按按钮名称(label)匹配出携带代码的完整 action 对象并执行\n const callRowActionByTitle = (title, record) => {\n const actions = (props.config && props.config.row_actions) || [];\n if (!actions.length) return;\n // 仅按按钮名称 label 匹配(调用方只能传按钮名称,不允许传 action 操作标识)\n const action = actions.find(a => a.label === title);\n if (!action) {\n console.warn('cellComponent 触发的行按钮未找到:', title);\n return;\n }\n // 复用原行按钮逻辑:handleRowAction 内部 emit('run_action', { code, action, record, settings })\n handleRowAction(action, record);\n };\n // eventBus 事件处理函数(方式 B,兼容保留)\n const handleCellExecuteRowAction = ({ title, record }) => {\n callRowActionByTitle(title, record);\n };\n const handleAction = async action => {\n if (!action.action) {\n console.error('未定义action');\n return;\n }\n if (props.eventBus) {\n props.eventBus.emit('run_action', {\n code: action.code,\n action: action,\n params: {\n table_id: props.config.id,\n context: context.contexts?.[props.modelType] || {},\n settings: action.settings,\n },\n });\n }\n };\n const tableHeight = computed(() => {\n let value = tableWraperHeight.value - searchHeight.value - actionHeight.value - 130;\n if (summaryColumns.value.length > 0) {\n value -= 40;\n }\n return value;\n });\n\n const init = async () => {\n await getData();\n const savedSearchConditions =\n context.contexts?.[props.modelType]?.tables?.[props.config.id]?.searchConditions;\n if (savedSearchConditions) {\n searchConditions.value = savedSearchConditions;\n }\n };\n const eventReinit = async () => {\n init();\n };\n const eventReload = async () => {\n await getData();\n };\n const summaryColumns = computed(() => {\n const list = [];\n let index = 0;\n for (const item of columns.value) {\n if (item.approve_summary) {\n list.push({\n index: index + 1,\n cellSummaryComponent: item.cellSummaryComponent,\n });\n }\n index++;\n }\n return list;\n });\n const handleChange: TableProps['onChange'] = (pagination, filters, sorter, action) => {\n if (action.action === 'paginate') {\n return;\n } else if (action.action === 'filter') {\n const searchMap = {};\n for (const item of searchConditions.value) {\n searchMap[item.field_name] = item;\n }\n for (const key of Object.keys(filters)) {\n const value = filters[key];\n const item = searchMap[key];\n if (item) {\n if (value?.length > 1) {\n item.operator = 'in';\n } else {\n if (!['in', 'eq'].includes(item.operator)) {\n item.operator = 'in';\n }\n }\n item.value = value;\n } else {\n searchMap[key] = {\n field_name: key,\n operator: 'eq',\n value: value,\n format: 'input',\n class_name: 'str',\n };\n }\n }\n searchConditions.value = Object.values(searchMap);\n getData();\n } else if (action.action === 'sort') {\n const tmpMap = {};\n const tmpList = [];\n if (!isArray(sorter)) {\n tmpMap[sorter.columnKey] = sorter.order;\n tmpList.push({ key: sorter.columnKey, order: sorter.order });\n } else {\n for (const item of sorter) {\n tmpMap[item.columnKey] = item.order;\n tmpList.push({ key: item.columnKey, order: item.order });\n }\n }\n sortedMap.value = tmpMap;\n sortedList.value = tmpList;\n getData();\n }\n };\n\n onMounted(async () => {\n selfEventBus.on('refresh', refresh);\n if (props.eventBus) {\n props.eventBus.on('reinit', eventReinit);\n props.eventBus.on('reload_table', eventReload);\n props.eventBus.on('cell_execute_row_action', handleCellExecuteRowAction);\n }\n await init();\n const defaultSortField = props.config.columns.filter(\n column => column.sorter && column.defaultSortOrder,\n );\n defaultSortField.sort((a, b) => (a.defaultSortIndex || 0) - (b.defaultSortIndex || 0));\n for (const column of defaultSortField) {\n sortedMap.value[column.dataIndex] = column.defaultSortOrder;\n sortedList.value.push({ key: column.dataIndex, order: column.defaultSortOrder });\n }\n });\n onUnmounted(() => {\n selfEventBus.off('refresh', refresh);\n if (props.eventBus) {\n props.eventBus.off('reinit', eventReinit);\n props.eventBus.off('reload_table', eventReload);\n props.eventBus.off('cell_execute_row_action', handleCellExecuteRowAction);\n }\n });\n if (props.modelType) {\n watch(\n () => searchConditions.value,\n (newValue, oldValue) => {\n if (!isEqual(filterConditions(newValue), filterConditions(oldValue))) {\n context[SET_SEARCH_CONDITIONS](props.modelType, props.config.id, newValue);\n delayGetDate();\n }\n },\n { deep: true },\n );\n watch(\n () => cloneDeep(context.contexts[props.modelType]?.globalData),\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue) && hasGlobalConditions) {\n delayGetDate();\n }\n },\n { deep: true },\n );\n watch(\n () => cloneDeep(context.contexts[props.modelType]?.formModel),\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue) && hasFormConditions) {\n delayGetDate();\n }\n },\n { deep: true },\n );\n }\n return {\n dataSource,\n selectedRowKeys,\n loading,\n state,\n handlePageChange,\n handleRowAction,\n callRowActionByTitle,\n pageSizeOptions,\n columns,\n searchConditions,\n delayGetDate,\n selfEventBus,\n row_selection,\n handleAction,\n searchRef,\n actionRef,\n searchHeight,\n actionHeight,\n tableHeight,\n rowActionWidth,\n context,\n summaryColumns,\n preserveRow,\n handleChange,\n tableWraperHeight,\n tableWraperRef,\n };\n },\n components: {\n Search,\n actionsBar,\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.btn-wraper {\n display: flex;\n justify-content: flex-end;\n}\n.table-wraper {\n height: 100%;\n}\n</style>\n","<template>\n <div\n class=\"table-wraper\"\n ref=\"tableWraperRef\"\n >\n <div ref=\"searchRef\">\n <Search\n v-if=\"config.search_config\"\n :searchConfig=\"config.search_config\"\n v-model:searchConditions=\"searchConditions\"\n :event-bus=\"selfEventBus\"\n ></Search>\n </div>\n <s-table\n :columns=\"columns\"\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :data-source=\"dataSource\"\n :bordered=\"true\"\n size=\"small\"\n :scroll=\"{\n y: tableHeight,\n x: config.columns.length * 150,\n }\"\n :loading=\"loading\"\n :pagination=\"{\n current: state.current,\n pageSize: state.pageSize,\n total: state.total,\n onChange: handlePageChange,\n showSizeChanger: true,\n\n pageSizeOptions: pageSizeOptions,\n }\"\n :rowKey=\"'id'\"\n :rowSelection=\"row_selection\"\n :virtual=\"true\"\n :wrapText=\"true\"\n sticky\n stripe\n summary-fixed\n table-layout=\"auto\"\n :preserveRow=\"preserveRow\"\n @change=\"handleChange\"\n >\n <template #bodyCell=\"{ column, index, text, record }\">\n <template v-if=\"column.dataIndex == 'index'\">\n {{ index + 1 + state.pageSize * (state.current - 1) }}\n </template>\n <template v-else-if=\"column.dataIndex == '_action'\">\n <actions-bar\n :actions=\"config.row_actions\"\n @click=\"handleRowAction($event, record)\"\n :params=\"{\n table_id: config.id,\n record,\n context: context.contexts[modelType],\n }\"\n />\n </template>\n <component\n :is=\"'Cell_' + column.cellComponent\"\n v-else-if=\"column.cellComponent\"\n :cmpObj=\"{\n column: column ? column : {},\n index: index,\n text: text,\n dataSource: dataSource,\n record: record ? record : {},\n pageSize: state.pageSize ? state.pageSize : 500,\n current: state.current ? state.current : 1,\n eventBus: eventBus,\n call_cell_row_action: (title) => callRowActionByTitle(title, record),\n }\"\n ></component>\n\n <template v-else>\n {{ text }}\n </template>\n </template>\n <template\n #summary\n v-if=\"summaryColumns.length > 0\"\n >\n <s-table-summary-row>\n <s-table-summary-cell :index=\"0\">合计</s-table-summary-cell>\n <s-table-summary-cell\n v-for=\"item in summaryColumns\"\n :key=\"item.index\"\n :index=\"item.index\"\n >\n <template #default=\"{ total }\">\n <component\n :is=\"'CellSummary_' + item.cellSummaryComponent\"\n v-if=\"item.cellSummaryComponent\"\n :cmpObj=\"{\n item: item,\n total: total,\n }\"\n ></component>\n <span v-else>{{ item.total_content ? item.total_content(total) : total }}</span>\n </template>\n </s-table-summary-cell>\n </s-table-summary-row>\n </template>\n </s-table>\n <div\n ref=\"actionRef\"\n class=\"btn-wraper\"\n >\n <template v-if=\"!hideAllButtons\">\n <actions-bar\n :actions=\"config.actions\"\n @click=\"handleAction\"\n :params=\"{\n table_id: config.id,\n context: context.contexts[modelType],\n }\"\n />\n </template>\n </div>\n <!--用于测试行操作宽度-->\n <div style=\"position: fixed; width: 0; height: 0; display: block; overflow: hidden\">\n <actions-bar\n :actions=\"config.row_actions\"\n v-model:action_width=\"rowActionWidth\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n onMounted,\n ref,\n reactive,\n computed,\n watch,\n onUnmounted,\n PropType,\n} from 'vue';\nimport { executeScriptInWorker, getApiData } from '@/init-plugin';\nimport Search from './search.vue';\nimport { cloneDeep, debounce, isArray, isEqual } from 'lodash';\nimport { isNotEmpty, isEmpty } from '@/utils/function';\nimport { filterConditions, getQueryConditionParams, resolveParamValue } from '../utils';\nimport { Table, Column, ApprovalSetting } from '../typing';\nimport mitt from 'mitt';\nimport { useResizeObserver } from '@vueuse/core';\nimport {\n SET_DATASOURCE,\n SET_SEARCH_CONDITIONS,\n SET_SELECTED_ROWKEYS,\n useContextStore,\n} from '@/components/approval/store/context';\nimport actionsBar from './actionsBar.vue';\nimport { TableProps, message } from 'ant-design-vue';\nconst DEFAULT_PAGE_SIZE = 50;\nexport default defineComponent({\n name: 'ApprovalTable',\n props: {\n config: {\n type: Object as () => Table,\n required: true,\n },\n modelType: {\n type: String,\n required: false,\n },\n eventBus: {\n type: Object,\n required: false,\n },\n approvalConfig: {\n type: Object as () => ApprovalSetting,\n required: false,\n },\n rowSelectionType: {\n type: String,\n required: false,\n },\n hideAllButtons: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['selection-change'],\n setup(props, { emit }) {\n const context = useContextStore();\n const dataSource = ref([]);\n const selectedRowKeys = ref([]);\n const loading = ref(false);\n const selfEventBus = mitt();\n const searchConditions = ref([]);\n let loadDataId = null;\n const tableWraperRef = ref(null);\n const tableWraperHeight = ref(null);\n const searchRef = ref(null);\n const searchHeight = ref(null);\n const actionRef = ref(null);\n const actionHeight = ref(null);\n const rowActionWidth = ref(70);\n const sortedMap = ref({});\n const sortedList = ref([]);\n let hasGlobalConditions = false;\n let hasFormConditions = false;\n\n const pageSizeOptions = ref([\n '10',\n '20',\n '50',\n '100',\n '200',\n '500',\n '1000',\n '3000',\n '10000',\n '50000',\n '60000',\n '70000',\n ]);\n const state = reactive({\n current: 1,\n pageSize: DEFAULT_PAGE_SIZE,\n total: 0,\n });\n useResizeObserver(tableWraperRef, entries => {\n tableWraperHeight.value = entries[0].contentRect.height;\n });\n useResizeObserver(searchRef, entries => {\n searchHeight.value = entries[0].contentRect.height;\n });\n useResizeObserver(actionRef, entries => {\n actionHeight.value = entries[0].contentRect.height;\n });\n const preserveRow = () => {\n return false;\n };\n const convertBaseConditions = conditions => {\n if (!conditions) {\n return [];\n }\n // 页面配置里的查询值可能带 {{xxx}} 占位符,执行查询时在这里注入实际值\n const conditionParams = getQueryConditionParams(props.modelType);\n const current_context = context.contexts?.[props.modelType] || ({} as any);\n const formKeymap = {};\n for (const item of props.approvalConfig?.columns || []) {\n if (item.type === 'form') {\n const dynamicFieldList = item.form?.dynamicFieldList;\n if (dynamicFieldList) {\n for (const group of dynamicFieldList) {\n for (const field of group.children || []) {\n formKeymap[field.key] = field.name;\n }\n }\n }\n }\n }\n const convertItem = item => {\n let newValue = item.value;\n if (item.value_type == 'global') {\n if (item.value?.length == 2) {\n hasGlobalConditions = true;\n const temp = current_context.globalData?.[item.value[0]]?.[item.value[1]];\n if (temp) {\n newValue = [temp];\n } else {\n newValue = null;\n }\n } else {\n newValue = null;\n }\n } else if (item.value_type == 'form') {\n if (item.value?.length == 2) {\n hasFormConditions = true;\n const temp = current_context.formModel?.[formKeymap[item.value[1]]];\n if (temp) {\n newValue = [temp];\n } else {\n newValue = null;\n }\n } else {\n newValue = null;\n }\n } else {\n // fixed(或未配置 value_type):值里可能带 {{xxx}} 占位符\n newValue = resolveParamValue(item.value, conditionParams);\n }\n return {\n ...item,\n value_type: undefined,\n value: newValue,\n };\n };\n const convertGroup = group => {\n const list = Array.isArray(group) ? group : [group];\n return list.map(convertItem).filter(item => isNotEmpty(item.value));\n };\n // 兼容旧格式:若第一层不是数组(组),则整体当作单个组处理\n const isGroupFormat = conditions.length > 0 && Array.isArray(conditions[0]);\n const groups = isGroupFormat ? conditions : [conditions];\n return groups.map(convertGroup).filter(group => group.length > 0);\n };\n\n const getData = async () => {\n if (!props.config.list_url) {\n return;\n }\n const currentLoadId = Symbol();\n loadDataId = currentLoadId;\n try {\n loading.value = true;\n // 参数缺失时条件解析会直接报错:此时不能继续查(要么查不到、要么过滤失效),\n // 提示出来比静默出一张空表或错误数据更容易排查\n let baseConditions = [];\n try {\n baseConditions = convertBaseConditions(props.config.base_conditions);\n } catch (err) {\n console.error(err);\n message.error(err instanceof Error ? err.message : String(err));\n return;\n }\n const searchConditionList = filterConditions(searchConditions.value);\n // 新的条件格式:第一层为组({ op, children }),与页面输入的查询条件整合\n // 搜索条件作为一组(and),基础查询条件的各个组(组间 or)作为另一组(and)\n const conditions = [];\n if (searchConditionList.length > 0) {\n conditions.push({ op: 'and', children: searchConditionList });\n }\n if (baseConditions.length > 0) {\n conditions.push({ op: 'and', children: baseConditions });\n }\n const column_fields = props.config.columns?.map(item => {\n return item.dataIndex;\n });\n const sort_fields = [];\n for (const item of sortedList.value) {\n if (item.order == 'descend') {\n sort_fields.push('-' + item.key);\n } else {\n sort_fields.push(item.key);\n }\n }\n const params = {\n ...(props.config.query_params || {}),\n current: state.current,\n pageSize: state.pageSize,\n conditions: conditions,\n column_fields: column_fields,\n sort_fields,\n };\n const response = await getApiData(params, props.config.list_url);\n if (loadDataId !== currentLoadId) {\n return;\n }\n dataSource.value = response.data;\n if (props.modelType) {\n context[SET_DATASOURCE](props.modelType, props.config.id, dataSource.value);\n }\n state.current = response.current;\n state.total = response.total;\n } finally {\n if (loadDataId !== currentLoadId) {\n return;\n }\n loading.value = false;\n }\n };\n const delayGetDate = debounce(getData, 500);\n const handlePageChange = (page: any, pageSize: any) => {\n if (state.current == page && state.pageSize == pageSize) {\n return;\n }\n state.current = page ? page : 1;\n state.pageSize = pageSize ? pageSize : DEFAULT_PAGE_SIZE;\n getData();\n };\n const row_selection: any = computed(() => {\n const rowSelectionType =\n props.rowSelectionType || props.config.rowSelectionType || 'checkbox';\n const onChange = selectedRowKeys => {\n const selectdRecord = dataSource.value.filter(item => {\n return selectedRowKeys.includes(item.id);\n });\n if (props.modelType) {\n context[SET_SELECTED_ROWKEYS](\n props.modelType,\n props.config.id,\n selectedRowKeys,\n selectdRecord,\n );\n }\n };\n return { type: rowSelectionType, onChange };\n });\n /**\n * 已选行数上报:供上层(columnTables / tableModal)显示「已选 N 条」并做选择数量校验。\n * 用 watch 而不是写进 rowSelection.onChange,是为了覆盖所有改选途径(勾选/取消/全选等)——\n * s-table 统一通过 `update:selectedRowKeys` 回写,都在这个 ref 上。\n */\n watch(\n selectedRowKeys,\n keys => {\n emit('selection-change', (keys || []).length);\n },\n { deep: true, immediate: true },\n );\n const columns = computed(() => {\n const filterValueMap = {};\n for (const item of searchConditions.value) {\n if (['in', 'eq'].includes(item.operator)) {\n filterValueMap[item.field_name] = item.value;\n }\n }\n const sorted = sortedMap.value || {};\n const sourceColumns = cloneDeep(props.config.columns || []);\n const hasAutoWidth = sourceColumns.some(item => item.autoWidth);\n if (!hasAutoWidth && sourceColumns.length) {\n sourceColumns[sourceColumns.length - 1].autoWidth = true;\n }\n const res = sourceColumns.map(item => {\n if (item.autoWidth) {\n return {\n ...item,\n minWidth: item.width,\n width: undefined,\n filteredValue: filterValueMap[item.dataIndex] || null,\n sortOrder: sorted[item.dataIndex] || false,\n key: item.dataIndex,\n };\n } else {\n return {\n ...item,\n width: item.width,\n minWidth: undefined,\n filteredValue: filterValueMap[item.dataIndex] || null,\n sortOrder: sorted[item.dataIndex] || false,\n key: item.dataIndex,\n };\n }\n });\n if (\n props.config.row_actions &&\n props.config.row_actions.length > 0 &&\n !props.hideAllButtons\n ) {\n return [\n ...res,\n {\n title: '操作',\n dataIndex: '_action',\n width: rowActionWidth.value + 20,\n resizable: true,\n fixed: 'right',\n },\n ];\n } else {\n return res;\n }\n });\n const refresh = () => {\n getData();\n };\n //const response = await getApiData(params, props.config.list_url);\n const handleRowAction = async (action, record) => {\n if (!action.action) {\n console.error('未定义action');\n return;\n }\n if (props.eventBus) {\n props.eventBus.emit('run_action', {\n code: action.code,\n action: action,\n params: {\n table_id: props.config.id,\n record,\n context: context.contexts?.[props.modelType] || {},\n settings: action.settings,\n },\n });\n }\n };\n // cellComponent 触发行按钮:按按钮名称(label)匹配出携带代码的完整 action 对象并执行\n const callRowActionByTitle = (title, record) => {\n const actions = (props.config && props.config.row_actions) || [];\n if (!actions.length) return;\n // 仅按按钮名称 label 匹配(调用方只能传按钮名称,不允许传 action 操作标识)\n const action = actions.find(a => a.label === title);\n if (!action) {\n console.warn('cellComponent 触发的行按钮未找到:', title);\n return;\n }\n // 复用原行按钮逻辑:handleRowAction 内部 emit('run_action', { code, action, record, settings })\n handleRowAction(action, record);\n };\n // eventBus 事件处理函数(方式 B,兼容保留)\n const handleCellExecuteRowAction = ({ title, record }) => {\n callRowActionByTitle(title, record);\n };\n const handleAction = async action => {\n if (!action.action) {\n console.error('未定义action');\n return;\n }\n if (props.eventBus) {\n props.eventBus.emit('run_action', {\n code: action.code,\n action: action,\n params: {\n table_id: props.config.id,\n context: context.contexts?.[props.modelType] || {},\n settings: action.settings,\n },\n });\n }\n };\n const tableHeight = computed(() => {\n let value = tableWraperHeight.value - searchHeight.value - actionHeight.value - 130;\n if (summaryColumns.value.length > 0) {\n value -= 40;\n }\n return value;\n });\n\n const init = async () => {\n await getData();\n const savedSearchConditions =\n context.contexts?.[props.modelType]?.tables?.[props.config.id]?.searchConditions;\n if (savedSearchConditions) {\n searchConditions.value = savedSearchConditions;\n }\n };\n const eventReinit = async () => {\n init();\n };\n const eventReload = async () => {\n await getData();\n };\n const summaryColumns = computed(() => {\n const list = [];\n let index = 0;\n for (const item of columns.value) {\n if (item.approve_summary) {\n list.push({\n index: index + 1,\n cellSummaryComponent: item.cellSummaryComponent,\n });\n }\n index++;\n }\n return list;\n });\n const handleChange: TableProps['onChange'] = (pagination, filters, sorter, action) => {\n if (action.action === 'paginate') {\n return;\n } else if (action.action === 'filter') {\n const searchMap = {};\n for (const item of searchConditions.value) {\n searchMap[item.field_name] = item;\n }\n for (const key of Object.keys(filters)) {\n const value = filters[key];\n const item = searchMap[key];\n if (item) {\n if (value?.length > 1) {\n item.operator = 'in';\n } else {\n if (!['in', 'eq'].includes(item.operator)) {\n item.operator = 'in';\n }\n }\n item.value = value;\n } else {\n searchMap[key] = {\n field_name: key,\n operator: 'eq',\n value: value,\n format: 'input',\n class_name: 'str',\n };\n }\n }\n searchConditions.value = Object.values(searchMap);\n getData();\n } else if (action.action === 'sort') {\n const tmpMap = {};\n const tmpList = [];\n if (!isArray(sorter)) {\n tmpMap[sorter.columnKey] = sorter.order;\n tmpList.push({ key: sorter.columnKey, order: sorter.order });\n } else {\n for (const item of sorter) {\n tmpMap[item.columnKey] = item.order;\n tmpList.push({ key: item.columnKey, order: item.order });\n }\n }\n sortedMap.value = tmpMap;\n sortedList.value = tmpList;\n getData();\n }\n };\n\n onMounted(async () => {\n selfEventBus.on('refresh', refresh);\n if (props.eventBus) {\n props.eventBus.on('reinit', eventReinit);\n props.eventBus.on('reload_table', eventReload);\n props.eventBus.on('cell_execute_row_action', handleCellExecuteRowAction);\n }\n await init();\n const defaultSortField = props.config.columns.filter(\n column => column.sorter && column.defaultSortOrder,\n );\n defaultSortField.sort((a, b) => (a.defaultSortIndex || 0) - (b.defaultSortIndex || 0));\n for (const column of defaultSortField) {\n sortedMap.value[column.dataIndex] = column.defaultSortOrder;\n sortedList.value.push({ key: column.dataIndex, order: column.defaultSortOrder });\n }\n });\n onUnmounted(() => {\n selfEventBus.off('refresh', refresh);\n if (props.eventBus) {\n props.eventBus.off('reinit', eventReinit);\n props.eventBus.off('reload_table', eventReload);\n props.eventBus.off('cell_execute_row_action', handleCellExecuteRowAction);\n }\n });\n if (props.modelType) {\n watch(\n () => searchConditions.value,\n (newValue, oldValue) => {\n if (!isEqual(filterConditions(newValue), filterConditions(oldValue))) {\n context[SET_SEARCH_CONDITIONS](props.modelType, props.config.id, newValue);\n delayGetDate();\n }\n },\n { deep: true },\n );\n watch(\n () => cloneDeep(context.contexts[props.modelType]?.globalData),\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue) && hasGlobalConditions) {\n delayGetDate();\n }\n },\n { deep: true },\n );\n watch(\n () => cloneDeep(context.contexts[props.modelType]?.formModel),\n (newValue, oldValue) => {\n if (!isEqual(newValue, oldValue) && hasFormConditions) {\n delayGetDate();\n }\n },\n { deep: true },\n );\n }\n return {\n dataSource,\n selectedRowKeys,\n loading,\n state,\n handlePageChange,\n handleRowAction,\n callRowActionByTitle,\n pageSizeOptions,\n columns,\n searchConditions,\n delayGetDate,\n selfEventBus,\n row_selection,\n handleAction,\n searchRef,\n actionRef,\n searchHeight,\n actionHeight,\n tableHeight,\n rowActionWidth,\n context,\n summaryColumns,\n preserveRow,\n handleChange,\n tableWraperHeight,\n tableWraperRef,\n };\n },\n components: {\n Search,\n actionsBar,\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.btn-wraper {\n display: flex;\n justify-content: flex-end;\n}\n.table-wraper {\n height: 100%;\n}\n</style>\n","<template>\n <div class=\"approval-column-tables\">\n <div\n v-for=\"(config, index) in filterTables\"\n :key=\"index\"\n class=\"table-item\"\n >\n <div class=\"title\">\n <span class=\"title-text\">{{ config.title }}</span>\n <span\n v-if=\"getSelectLimit(config.id)\"\n class=\"select-limit\"\n :class=\"{ 'is-invalid': isSelectCountInvalid(config.id) }\"\n >\n ({{ getSelectLimitText(config.id) }} · 已选 {{ getSelectedCount(config.id) }} 条)\n </span>\n </div>\n <ApprovalTable\n :config=\"config\"\n :modelType=\"modelType\"\n :eventBus=\"eventBus\"\n :approvalConfig=\"approvalConfig\"\n :hideAllButtons=\"hideAllButtons\"\n :rowSelectionType=\"rowSelectionTypeMap[config.id]\"\n @selection-change=\"handleSelectionChange(config.id, $event)\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, reactive, ref } from 'vue';\nimport ApprovalTable from './table.vue';\nimport { ApprovalSetting } from '../typing';\nimport {\n getTableSelectLimit,\n getTableSelectLimitText,\n isTableSelectCountInvalid,\n TableSelectLimit,\n} from '../utils';\n\nexport default defineComponent({\n name: 'ApprovalColumnTables',\n\n props: {\n columnConfig: {\n type: Object,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n eventBus: {\n type: Object,\n required: true,\n },\n modelType: {\n type: String,\n required: true,\n },\n approvalConfig: {\n type: Object as PropType<ApprovalSetting>,\n required: true,\n },\n groupTitle: {\n type: String,\n required: false,\n },\n filterTables: {\n type: Array as PropType<any[]>,\n default: () => [],\n required: false,\n },\n hideAllButtons: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['selected-counts-change'],\n setup(props, { emit }) {\n const activeKey = ref([]);\n onMounted(() => {\n activeKey.value = props.columnConfig.tables?.map((_, index) => index);\n });\n const filterTables = computed(() => {\n let filterKeys = props.filterTables.map(table => table.id);\n return props.columnConfig.tables.filter(table => {\n if (filterKeys && filterKeys.length > 0) {\n return filterKeys.includes(table.id);\n }\n if (props.groupTitle) {\n const group_title = table.group_title || '未命名';\n return group_title === props.groupTitle;\n }\n return true;\n });\n });\n const rowSelectionTypeMap = computed(() => {\n const res = {};\n for (const table of props.filterTables) {\n res[table.id] = table.isMul ? 'checkbox' : 'radio';\n }\n return res;\n });\n /**\n * 各表的选择数量限制。只认 showTables 入参(filterTables)上的 min_count / max_count,\n * 未配置的表不提示、不参与校验;抽屉/模型列表面板(不传 filterTables)天然不受影响。\n */\n const limitMap = computed<Record<string, TableSelectLimit>>(() => {\n const res: Record<string, TableSelectLimit> = {};\n for (const table of props.filterTables || []) {\n const limit = getTableSelectLimit(table);\n if (limit) {\n res[table.id] = limit;\n }\n }\n return res;\n });\n /** 表 id → 已选条数(由 ApprovalTable 的 selection-change 实时上报) */\n const selectedCountMap = reactive<Record<string, number>>({});\n const getSelectLimit = (tableId: string): TableSelectLimit | null =>\n limitMap.value[tableId] || null;\n const getSelectLimitText = (tableId: string): string =>\n getTableSelectLimitText(getSelectLimit(tableId));\n const getSelectedCount = (tableId: string): number => selectedCountMap[tableId] || 0;\n const isSelectCountInvalid = (tableId: string): boolean =>\n isTableSelectCountInvalid(getSelectLimit(tableId), getSelectedCount(tableId));\n const handleSelectionChange = (tableId: string, count: number) => {\n selectedCountMap[tableId] = Number(count) || 0;\n // 向上抛出纯对象副本:弹窗按同一份数据做校验,避免两处各算一套\n emit('selected-counts-change', { ...selectedCountMap });\n };\n return {\n activeKey,\n filterTables,\n rowSelectionTypeMap,\n getSelectLimit,\n getSelectLimitText,\n getSelectedCount,\n isSelectCountInvalid,\n handleSelectionChange,\n };\n },\n components: {\n ApprovalTable,\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.approval-column-tables {\n height: 100%;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.table-item {\n flex: 1; /* 均分可用空间 */\n\n overflow: hidden; /* 防止子元素撑开 */\n border: solid 1px #dcdfe6;\n border-radius: 4px;\n padding: 4px;\n .title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n line-height: 22px;\n padding-left: 8px;\n padding-right: 8px;\n background-color: #f5f5f5;\n .title-text {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n /* 选择数量规则 + 实时已选条数(仅在 showTables 入参配置了 min_count/max_count 时出现) */\n .select-limit {\n flex: 0 0 auto;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n .select-limit.is-invalid {\n color: #ff4d4f;\n font-weight: 600;\n }\n }\n}\n</style>\n","<template>\n <div class=\"approval-column-tables\">\n <div\n v-for=\"(config, index) in filterTables\"\n :key=\"index\"\n class=\"table-item\"\n >\n <div class=\"title\">\n <span class=\"title-text\">{{ config.title }}</span>\n <span\n v-if=\"getSelectLimit(config.id)\"\n class=\"select-limit\"\n :class=\"{ 'is-invalid': isSelectCountInvalid(config.id) }\"\n >\n ({{ getSelectLimitText(config.id) }} · 已选 {{ getSelectedCount(config.id) }} 条)\n </span>\n </div>\n <ApprovalTable\n :config=\"config\"\n :modelType=\"modelType\"\n :eventBus=\"eventBus\"\n :approvalConfig=\"approvalConfig\"\n :hideAllButtons=\"hideAllButtons\"\n :rowSelectionType=\"rowSelectionTypeMap[config.id]\"\n @selection-change=\"handleSelectionChange(config.id, $event)\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, reactive, ref } from 'vue';\nimport ApprovalTable from './table.vue';\nimport { ApprovalSetting } from '../typing';\nimport {\n getTableSelectLimit,\n getTableSelectLimitText,\n isTableSelectCountInvalid,\n TableSelectLimit,\n} from '../utils';\n\nexport default defineComponent({\n name: 'ApprovalColumnTables',\n\n props: {\n columnConfig: {\n type: Object,\n required: true,\n },\n height: {\n type: Number,\n required: true,\n },\n eventBus: {\n type: Object,\n required: true,\n },\n modelType: {\n type: String,\n required: true,\n },\n approvalConfig: {\n type: Object as PropType<ApprovalSetting>,\n required: true,\n },\n groupTitle: {\n type: String,\n required: false,\n },\n filterTables: {\n type: Array as PropType<any[]>,\n default: () => [],\n required: false,\n },\n hideAllButtons: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['selected-counts-change'],\n setup(props, { emit }) {\n const activeKey = ref([]);\n onMounted(() => {\n activeKey.value = props.columnConfig.tables?.map((_, index) => index);\n });\n const filterTables = computed(() => {\n let filterKeys = props.filterTables.map(table => table.id);\n return props.columnConfig.tables.filter(table => {\n if (filterKeys && filterKeys.length > 0) {\n return filterKeys.includes(table.id);\n }\n if (props.groupTitle) {\n const group_title = table.group_title || '未命名';\n return group_title === props.groupTitle;\n }\n return true;\n });\n });\n const rowSelectionTypeMap = computed(() => {\n const res = {};\n for (const table of props.filterTables) {\n res[table.id] = table.isMul ? 'checkbox' : 'radio';\n }\n return res;\n });\n /**\n * 各表的选择数量限制。只认 showTables 入参(filterTables)上的 min_count / max_count,\n * 未配置的表不提示、不参与校验;抽屉/模型列表面板(不传 filterTables)天然不受影响。\n */\n const limitMap = computed<Record<string, TableSelectLimit>>(() => {\n const res: Record<string, TableSelectLimit> = {};\n for (const table of props.filterTables || []) {\n const limit = getTableSelectLimit(table);\n if (limit) {\n res[table.id] = limit;\n }\n }\n return res;\n });\n /** 表 id → 已选条数(由 ApprovalTable 的 selection-change 实时上报) */\n const selectedCountMap = reactive<Record<string, number>>({});\n const getSelectLimit = (tableId: string): TableSelectLimit | null =>\n limitMap.value[tableId] || null;\n const getSelectLimitText = (tableId: string): string =>\n getTableSelectLimitText(getSelectLimit(tableId));\n const getSelectedCount = (tableId: string): number => selectedCountMap[tableId] || 0;\n const isSelectCountInvalid = (tableId: string): boolean =>\n isTableSelectCountInvalid(getSelectLimit(tableId), getSelectedCount(tableId));\n const handleSelectionChange = (tableId: string, count: number) => {\n selectedCountMap[tableId] = Number(count) || 0;\n // 向上抛出纯对象副本:弹窗按同一份数据做校验,避免两处各算一套\n emit('selected-counts-change', { ...selectedCountMap });\n };\n return {\n activeKey,\n filterTables,\n rowSelectionTypeMap,\n getSelectLimit,\n getSelectLimitText,\n getSelectedCount,\n isSelectCountInvalid,\n handleSelectionChange,\n };\n },\n components: {\n ApprovalTable,\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.approval-column-tables {\n height: 100%;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.table-item {\n flex: 1; /* 均分可用空间 */\n\n overflow: hidden; /* 防止子元素撑开 */\n border: solid 1px #dcdfe6;\n border-radius: 4px;\n padding: 4px;\n .title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n line-height: 22px;\n padding-left: 8px;\n padding-right: 8px;\n background-color: #f5f5f5;\n .title-text {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n /* 选择数量规则 + 实时已选条数(仅在 showTables 入参配置了 min_count/max_count 时出现) */\n .select-limit {\n flex: 0 0 auto;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n .select-limit.is-invalid {\n color: #ff4d4f;\n font-weight: 600;\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ type __VLS_Props = {
2
+ cmpObj: Record<string, any>;
3
+ };
4
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ export default _default;
@@ -0,0 +1,6 @@
1
+ declare const _default: import("vue").DefineComponent<{
2
+ cmpObj: Record<string, any>;
3
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
4
+ cmpObj: Record<string, any>;
5
+ }> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ export default _default;
@@ -0,0 +1,8 @@
1
+ export function createListenerObject(moddle: any, options: any, isTask: any, prefix: any): any;
2
+ export function createSystemListenerObject(moddle: any, options: any, isTask: any, prefix: any): any;
3
+ export function changeListenerObject(options: any): any;
4
+ export function createFieldObject(moddle: any, option: any, prefix: any): any;
5
+ export function createScriptObject(moddle: any, options: any, prefix: any): any;
6
+ export function updateElementExtensions(moddle: any, modeling: any, element: any, extensionList: any): void;
7
+ export function uuid(length: number, chars: any): string;
8
+ export function translateNodeName(node: any): any;
@@ -0,0 +1,16 @@
1
+ declare namespace _default {
2
+ export { modelerStore };
3
+ }
4
+ export default _default;
5
+ declare namespace modelerStore {
6
+ let userList: any[];
7
+ let roleList: any[];
8
+ let expList: any[];
9
+ let modeler: any;
10
+ let modeling: any;
11
+ let moddle: any;
12
+ let canvas: any;
13
+ let bpmnFactory: any;
14
+ let elRegistry: any;
15
+ let element: any;
16
+ }
@@ -0,0 +1,5 @@
1
+ export function CustomViewer(options: any): void;
2
+ export class CustomViewer {
3
+ constructor(options: any);
4
+ _modules: any[];
5
+ }
@@ -0,0 +1,60 @@
1
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ value: {
3
+ type: () => Array<any>;
4
+ required: true;
5
+ };
6
+ options: {
7
+ type: () => Array<any>;
8
+ required: false;
9
+ default: any[];
10
+ };
11
+ labelKey: {
12
+ type: StringConstructor;
13
+ required: false;
14
+ default: string;
15
+ };
16
+ valueKey: {
17
+ type: StringConstructor;
18
+ required: false;
19
+ default: string;
20
+ };
21
+ placeholder: {
22
+ type: StringConstructor;
23
+ required: false;
24
+ };
25
+ }>, {
26
+ handleChange: (value: any) => void;
27
+ getType: (value: any) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
28
+ getDisplay: (value: any) => any;
29
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:value"[], "update:value", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
30
+ value: {
31
+ type: () => Array<any>;
32
+ required: true;
33
+ };
34
+ options: {
35
+ type: () => Array<any>;
36
+ required: false;
37
+ default: any[];
38
+ };
39
+ labelKey: {
40
+ type: StringConstructor;
41
+ required: false;
42
+ default: string;
43
+ };
44
+ valueKey: {
45
+ type: StringConstructor;
46
+ required: false;
47
+ default: string;
48
+ };
49
+ placeholder: {
50
+ type: StringConstructor;
51
+ required: false;
52
+ };
53
+ }>> & Readonly<{
54
+ "onUpdate:value"?: (...args: any[]) => any;
55
+ }>, {
56
+ options: any[];
57
+ labelKey: string;
58
+ valueKey: string;
59
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
60
+ export default _default;
@@ -0,0 +1,74 @@
1
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ value: {
3
+ type: any;
4
+ required: true;
5
+ };
6
+ placeholder: {
7
+ type: StringConstructor;
8
+ default: string;
9
+ };
10
+ style: {
11
+ type: any;
12
+ default: () => {};
13
+ };
14
+ options: {
15
+ type: () => Array<any>;
16
+ required: false;
17
+ default: any[];
18
+ };
19
+ labelKey: {
20
+ type: StringConstructor;
21
+ required: false;
22
+ default: string;
23
+ };
24
+ valueKey: {
25
+ type: StringConstructor;
26
+ required: false;
27
+ default: string;
28
+ };
29
+ }>, {
30
+ innerValue: import("vue").ComputedRef<any>;
31
+ innerOptions: import("vue").Ref<any[], any[]>;
32
+ updateValue: (value: any) => void;
33
+ valueType: import("vue").ComputedRef<"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function">;
34
+ handleSearch: (str: any) => void;
35
+ findOptions: (value: any) => any;
36
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("select" | "update:value")[], "select" | "update:value", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
37
+ value: {
38
+ type: any;
39
+ required: true;
40
+ };
41
+ placeholder: {
42
+ type: StringConstructor;
43
+ default: string;
44
+ };
45
+ style: {
46
+ type: any;
47
+ default: () => {};
48
+ };
49
+ options: {
50
+ type: () => Array<any>;
51
+ required: false;
52
+ default: any[];
53
+ };
54
+ labelKey: {
55
+ type: StringConstructor;
56
+ required: false;
57
+ default: string;
58
+ };
59
+ valueKey: {
60
+ type: StringConstructor;
61
+ required: false;
62
+ default: string;
63
+ };
64
+ }>> & Readonly<{
65
+ onSelect?: (...args: any[]) => any;
66
+ "onUpdate:value"?: (...args: any[]) => any;
67
+ }>, {
68
+ style: any;
69
+ placeholder: string;
70
+ options: any[];
71
+ labelKey: string;
72
+ valueKey: string;
73
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
74
+ export default _default;
@@ -0,0 +1,51 @@
1
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ value: {
3
+ type: StringConstructor;
4
+ required: true;
5
+ };
6
+ columnNameList: {
7
+ type: ArrayConstructor;
8
+ required: true;
9
+ };
10
+ placeholder: {
11
+ type: StringConstructor;
12
+ required: false;
13
+ default: string;
14
+ };
15
+ loading: {
16
+ type: BooleanConstructor;
17
+ required: false;
18
+ default: boolean;
19
+ };
20
+ }>, {
21
+ columnNameOptions: import("vue").Ref<any[], any[]>;
22
+ handleColumnSearch: (str: any) => void;
23
+ handleUpdate: (value: any) => void;
24
+ findColumn: (value: any) => any;
25
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("select" | "update:value")[], "select" | "update:value", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
26
+ value: {
27
+ type: StringConstructor;
28
+ required: true;
29
+ };
30
+ columnNameList: {
31
+ type: ArrayConstructor;
32
+ required: true;
33
+ };
34
+ placeholder: {
35
+ type: StringConstructor;
36
+ required: false;
37
+ default: string;
38
+ };
39
+ loading: {
40
+ type: BooleanConstructor;
41
+ required: false;
42
+ default: boolean;
43
+ };
44
+ }>> & Readonly<{
45
+ onSelect?: (...args: any[]) => any;
46
+ "onUpdate:value"?: (...args: any[]) => any;
47
+ }>, {
48
+ placeholder: string;
49
+ loading: boolean;
50
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
51
+ export default _default;