lyflowchart 1.0.137 → 1.0.152

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 (68) hide show
  1. package/dist/ActionsConfig-BrfcGMc2.js +521 -0
  2. package/dist/{ApprovalEditorModal-19j5zbe2.js → ApprovalEditorModal-HuU6SRJe.js} +1 -1
  3. package/dist/{Cell_click_approve-BGDZUzTS.js → Cell_click_approve-DiMuUB1k.js} +22 -20
  4. package/dist/{MyProcess-FWGEwQcv.js → MyProcess-C6fgOFiw.js} +1 -1
  5. package/dist/{approval-BW2WjPxY.js → approval-1GfOMaS4.js} +3 -3
  6. package/dist/{approval-BaD4Bmw6.js → approval-BlbNEsGQ.js} +1 -1
  7. package/dist/{approvalHistory-B2gpQbFC.js → approvalHistory-D-5rRWNw.js} +1 -1
  8. package/dist/{approvalPageConfig-D0zPXOUf.js → approvalPageConfig-4VU81v-x.js} +13 -13
  9. package/dist/{columnTables-DLwtgcC7.js → columnTables-DFwoawLF.js} +76 -69
  10. package/dist/components/approval/ApprovalEditorModal.vue.d.ts +2 -0
  11. package/dist/components/approval/components/approvalPageConfig/ActionsConfig.vue.d.ts +481 -0
  12. package/dist/components/approval/components/approvalPageConfig/leftColumn.vue.d.ts +1210 -0
  13. package/dist/components/approval/components/approvalPageConfig/middleColumn.vue.d.ts +605 -0
  14. package/dist/components/approval/components/approvalPageConfig/tableConfig.vue.d.ts +605 -0
  15. package/dist/components/approval/core.vue.d.ts +2 -0
  16. package/dist/components/approval/typing.d.ts +1 -1
  17. package/dist/components/approval/useApprovalRecordActions.d.ts +3 -1
  18. package/dist/constants.d.ts +26 -0
  19. package/dist/{core-Cv0Erg9E.js → core-BkpI8NUK.js} +355 -314
  20. package/dist/{debugCode-Cm9-WiUG.js → debugCode-CQm5weGM.js} +1 -1
  21. package/dist/{default-VdDMlY4e.js → default-kv1XZD9P.js} +28 -21
  22. package/dist/{example_code-C_xF8RRG.js → example_code-DKjqP7KK.js} +6 -0
  23. package/dist/index.js +18 -16
  24. package/dist/{leftColumn-CsPjufue.js → leftColumn-OrLOxcyw.js} +2 -2
  25. package/dist/lyflowchart.css +1 -1
  26. package/dist/{middleColumn-C7M6-eVo.js → middleColumn-DUBZPkDG.js} +2 -2
  27. package/dist/{recordActions-BgFlNsGU.js → recordActions-3vqHADOf.js} +1 -1
  28. package/dist/{tableConfig-uLXue-BS.js → tableConfig-W9yGeZs-.js} +41 -41
  29. package/dist/{tableModal-BcYfVL02.js → tableModal-H0SGP8PM.js} +2 -2
  30. package/dist/{useApprovalRecordActions-BQ6MgV2L.js → useApprovalRecordActions-B82xPY8g.js} +63 -63
  31. package/dist/{utils-CLet2gLV.js → utils-B1lkML14.js} +5 -1
  32. package/dist/{viewer-Dv3kQsMf.js → viewer-C_OHXXRU.js} +915 -916
  33. package/package.json +1 -1
  34. package/dist/ActionsConfig-BuvSvRbv.js +0 -395
  35. package/dist/ActionsConfig-BuvSvRbv.js.map +0 -1
  36. package/dist/ApprovalEditorModal-19j5zbe2.js.map +0 -1
  37. package/dist/CancelModal-BUi3ieI8.js.map +0 -1
  38. package/dist/Cell_click_approve-BGDZUzTS.js.map +0 -1
  39. package/dist/JsonTags-BbWLqghI.js.map +0 -1
  40. package/dist/MyProcess-FWGEwQcv.js.map +0 -1
  41. package/dist/approval-BW2WjPxY.js.map +0 -1
  42. package/dist/approval-BaD4Bmw6.js.map +0 -1
  43. package/dist/approvalHistory-B2gpQbFC.js.map +0 -1
  44. package/dist/approvalHistoryViewModal-DgLpv2ot.js.map +0 -1
  45. package/dist/approvalPageConfig-D0zPXOUf.js.map +0 -1
  46. package/dist/approveLeftConfig-BOU_UgHp.js.map +0 -1
  47. package/dist/codeHistoryViewModal-BfSjIbEU.js.map +0 -1
  48. package/dist/columnTables-DLwtgcC7.js.map +0 -1
  49. package/dist/core-Cv0Erg9E.js.map +0 -1
  50. package/dist/dataStoreSettingHistoryViewModal-D_so-KLp.js.map +0 -1
  51. package/dist/debugCode-Cm9-WiUG.js.map +0 -1
  52. package/dist/debugCode-dD1YnQSD.js.map +0 -1
  53. package/dist/default-VdDMlY4e.js.map +0 -1
  54. package/dist/example_code-C_xF8RRG.js.map +0 -1
  55. package/dist/flowHistoryViewModal-D8DJP7Te.js.map +0 -1
  56. package/dist/index.js.map +0 -1
  57. package/dist/init-plugin-fQTSQzui.js.map +0 -1
  58. package/dist/leftColumn-CsPjufue.js.map +0 -1
  59. package/dist/middleColumn-C7M6-eVo.js.map +0 -1
  60. package/dist/recordActions-BgFlNsGU.js.map +0 -1
  61. package/dist/settingsState-CI81PG-i.js.map +0 -1
  62. package/dist/tableConfig-uLXue-BS.js.map +0 -1
  63. package/dist/tableModal-BcYfVL02.js.map +0 -1
  64. package/dist/useApprovalRecordActions-BQ6MgV2L.js.map +0 -1
  65. package/dist/utils-CLet2gLV.js.map +0 -1
  66. package/dist/v0001-OaBeBCXI.js.map +0 -1
  67. package/dist/viewer-Dv3kQsMf.js.map +0 -1
  68. package/dist/vue-print-next-HRweUmNi.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataStoreSettingHistoryViewModal-D_so-KLp.js","names":[],"sources":["../src/components/approval/components/approvalHistory/dataStoreSettingHistoryViewModal.vue","../src/components/approval/components/approvalHistory/dataStoreSettingHistoryViewModal.vue"],"sourcesContent":["<template>\n <a-modal\n :open=\"true\"\n :title=\"$t('历史版本')\"\n width=\"100%\"\n wrap-class-name=\"full-modal\"\n @cancel=\"handleCancel\"\n >\n <template #footer></template>\n <a-tabs\n type=\"card\"\n size=\"middle\"\n class=\"tab-content\"\n >\n <a-tab-pane\n :key=\"0\"\n v-if=\"history_ids.length === 2\"\n :tab=\"$t('版本比较')\"\n >\n <TextDiff\n :left=\"history_records[0] || {}\"\n :right=\"history_records[1] || {}\"\n />\n </a-tab-pane>\n <a-tab-pane\n v-for=\"record in history_records\"\n :tab=\"record.name\"\n :key=\"record.name\"\n >\n <div class=\"json-obj-container\">\n <json-obj\n v-model:value=\"record.data\"\n :mainMenuBar=\"true\"\n :readOnly=\"true\"\n :mode=\"'text'\"\n :fullWidthButton=\"true\"\n :darkTheme=\"true\"\n />\n </div>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { getApiData } from '@/init-plugin';\nexport default defineComponent({\n name: 'DataStoreSettingHistoryViewModal',\n props: {\n height: {\n type: Number,\n default: () => 1000,\n },\n history_ids: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n org_id: {\n type: Number,\n default: () => 0,\n },\n },\n components: {\n },\n emits: ['ok', 'cancel'],\n\n setup(props, { emit }) {\n const handleCancel = () => {\n emit('cancel');\n };\n const handleOk = () => {};\n const loading = ref(false);\n const history_records = ref([]);\n const getHistoryRecords = async () => {\n const conditions = [\n {\n field_name: 'id',\n operator: 'in',\n value: props.history_ids,\n format: 'input',\n class_name: 'str',\n },\n ];\n\n const queryParams = {\n org_id: props.org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_data_store_setting_history_list')\n .then((res: any) => {\n const tmpMap = {};\n loading.value = true;\n res.data.forEach((item: any) => {\n tmpMap[item.id] = {\n name: `[${item.id}]${item.create_time}`,\n content: item.content,\n data: JSON.parse(item.content),\n };\n });\n history_records.value.length = 0;\n props.history_ids.forEach(id => {\n history_records.value.push(tmpMap[id]);\n });\n loading.value = false;\n })\n .catch(() => {\n loading.value = false;\n });\n };\n onMounted(() => {\n getHistoryRecords();\n });\n return {\n handleCancel,\n handleOk,\n loading,\n history_records,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.ant-layout-content,\n.ant-layout-sider {\n overflow: auto;\n background-color: white;\n outline: 1px #ebeef5 solid;\n}\n.tab-content {\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.ant-tabs {\n height: 100%;\n\n ::v-deep(.ant-tabs-content-top) {\n height: 100%;\n }\n}\n.json-obj-container {\n height: 100%;\n overflow-y: auto;\n}\n</style>\n","<template>\n <a-modal\n :open=\"true\"\n :title=\"$t('历史版本')\"\n width=\"100%\"\n wrap-class-name=\"full-modal\"\n @cancel=\"handleCancel\"\n >\n <template #footer></template>\n <a-tabs\n type=\"card\"\n size=\"middle\"\n class=\"tab-content\"\n >\n <a-tab-pane\n :key=\"0\"\n v-if=\"history_ids.length === 2\"\n :tab=\"$t('版本比较')\"\n >\n <TextDiff\n :left=\"history_records[0] || {}\"\n :right=\"history_records[1] || {}\"\n />\n </a-tab-pane>\n <a-tab-pane\n v-for=\"record in history_records\"\n :tab=\"record.name\"\n :key=\"record.name\"\n >\n <div class=\"json-obj-container\">\n <json-obj\n v-model:value=\"record.data\"\n :mainMenuBar=\"true\"\n :readOnly=\"true\"\n :mode=\"'text'\"\n :fullWidthButton=\"true\"\n :darkTheme=\"true\"\n />\n </div>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { getApiData } from '@/init-plugin';\nexport default defineComponent({\n name: 'DataStoreSettingHistoryViewModal',\n props: {\n height: {\n type: Number,\n default: () => 1000,\n },\n history_ids: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n org_id: {\n type: Number,\n default: () => 0,\n },\n },\n components: {\n },\n emits: ['ok', 'cancel'],\n\n setup(props, { emit }) {\n const handleCancel = () => {\n emit('cancel');\n };\n const handleOk = () => {};\n const loading = ref(false);\n const history_records = ref([]);\n const getHistoryRecords = async () => {\n const conditions = [\n {\n field_name: 'id',\n operator: 'in',\n value: props.history_ids,\n format: 'input',\n class_name: 'str',\n },\n ];\n\n const queryParams = {\n org_id: props.org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_data_store_setting_history_list')\n .then((res: any) => {\n const tmpMap = {};\n loading.value = true;\n res.data.forEach((item: any) => {\n tmpMap[item.id] = {\n name: `[${item.id}]${item.create_time}`,\n content: item.content,\n data: JSON.parse(item.content),\n };\n });\n history_records.value.length = 0;\n props.history_ids.forEach(id => {\n history_records.value.push(tmpMap[id]);\n });\n loading.value = false;\n })\n .catch(() => {\n loading.value = false;\n });\n };\n onMounted(() => {\n getHistoryRecords();\n });\n return {\n handleCancel,\n handleOk,\n loading,\n history_records,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.ant-layout-content,\n.ant-layout-sider {\n overflow: auto;\n background-color: white;\n outline: 1px #ebeef5 solid;\n}\n.tab-content {\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.ant-tabs {\n height: 100%;\n\n ::v-deep(.ant-tabs-content-top) {\n height: 100%;\n }\n}\n.json-obj-container {\n height: 100%;\n overflow-y: auto;\n}\n</style>\n"],"mappings":";;;AA8CA,IAAA,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,QAAQ;GACN,MAAM;GACN,eAAe;GAChB;EACD,aAAa;GACX,MAAM;GACN,eAAe,EAAE;GAClB;EACD,QAAQ;GACN,MAAM;GACN,eAAe;GAChB;EACF;CACD,YAAY,EACX;CACD,OAAO,CAAC,MAAM,SAAS;CAEvB,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,UAAqB;AACzB,KAAK,SAAS;KAEV,UAAiB,IACjB,IAAU,EAAI,GAAM,EACpB,IAAkB,EAAI,EAAE,CAAC,EACzB,IAAoB,YAAY;GACpC,IAAM,IAAa,CACjB;IACE,YAAY;IACZ,UAAU;IACV,OAAO,EAAM;IACb,QAAQ;IACR,YAAY;IACb,CACF;AASD,KAPoB;IAClB,QAAQ,EAAM;IACd,eAAe;IACf,eAAe;KAAC;KAAM;KAAe;KAAU;IAC/C,aAAa,CAAC,MAAM;IACpB,YAAY,CAAC,EAAW;IACzB,EACuB,iDAAgD,CACrE,MAAM,MAAa;IAClB,IAAM,IAAS,EAAE;AAajB,IAZA,EAAQ,QAAQ,IAChB,EAAI,KAAK,SAAS,MAAc;AAC9B,OAAO,EAAK,MAAM;MAChB,MAAM,IAAI,EAAK,GAAG,GAAG,EAAK;MAC1B,SAAS,EAAK;MACd,MAAM,KAAK,MAAM,EAAK,QAAQ;MAC/B;MACD,EACF,EAAgB,MAAM,SAAS,GAC/B,EAAM,YAAY,SAAQ,MAAM;AAC9B,OAAgB,MAAM,KAAK,EAAO,GAAI;MACtC,EACF,EAAQ,QAAQ;KACjB,CACA,YAAY;AACX,MAAQ,QAAQ;KAChB;;AAKN,SAHA,QAAgB;AACd,MAAmB;IACnB,EACK;GACL;GACA;GACA;GACA;GACD;;CAEJ,CAAC,QC7FW,OAAM,sBAAoB;;;aA5BrC,EAwCU,GAAA;EAvCP,MAAM;EACN,OAAO,EAAA,GAAE,OAAA;EACV,OAAM;EACN,mBAAgB;EACf,UAAQ,EAAA;;EAEE,QAAM,QAAY,CAAA,GAAA,AAAA,EAAA,OAAA,EAAA,CAAA,CAAA;mBAgCpB,CA/BT,EA+BS,GAAA;GA9BP,MAAK;GACL,MAAK;GACL,OAAM;;oBAWO,CAPL,EAAA,YAAY,WAAM,KAAA,GAAA,EAF1B,EASa,GAAA;IARV,KAAK;IAEL,KAAK,EAAA,GAAE,OAAA;;qBAKN,CAHF,EAGE,GAAA;KAFC,MAAM,EAAA,gBAAe,MAAA,EAAA;KACrB,OAAO,EAAA,gBAAe,MAAA,EAAA;;;wCAG3B,EAea,GAAA,MAAA,EAdM,EAAA,kBAAV,YADT,EAea,GAAA;IAbV,KAAK,EAAO;IACZ,KAAK,EAAO;;qBAWP,CATN,EASM,OATN,GASM,CARJ,EAOE,GAAA;KANQ,OAAO,EAAO;8BAAP,EAAO,OAAI;KACzB,aAAa;KACb,UAAU;KACV,MAAM;KACN,iBAAiB;KACjB,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"debugCode-Cm9-WiUG.js","names":[],"sources":["../src/components/approval/components/codeHistory/codeHistory.vue","../src/components/approval/components/codeHistory/codeHistory.vue","../src/components/approval/components/debugCode/debugCode.vue","../src/components/approval/components/debugCode/debugCode.vue"],"sourcesContent":["<template>\n <!-- 历史记录表格布局 -->\n <div class=\"history-toolbar\">\n <span class=\"history-toolbar-label\">{{ $t('时间范围') }}:</span>\n <a-range-picker\n v-model:value=\"dateRange\"\n style=\"width: 320px; margin-right: 16px\"\n :allowClear=\"true\"\n :placeholder=\"[$t('开始时间'), $t('结束时间')]\"\n :showTime=\"{ format: 'YYYY-MM-DD HH:mm:ss' }\"\n :value-format=\"'YYYY-MM-DD HH:mm:ss'\"\n @change=\"handleDateChange\"\n />\n <a-button-group>\n <a-button\n type=\"primary\"\n @click=\"handleCompareClick\"\n :disabled=\"selectedRowKeys.length !== 2\"\n >\n {{ $t('比较所选') }}\n </a-button>\n <a-button\n type=\"primary\"\n @click=\"getHistoryList\"\n >\n <template #icon>\n <ReloadOutlined />\n </template>\n {{ $t('刷新') }}\n </a-button>\n </a-button-group>\n </div>\n <div class=\"history-table-container\">\n <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\n :scroll=\"{ y: height - 400 }\"\n :pagination=\"{\n current: current,\n pageSize: pageSize,\n total: total,\n onChange: handlePageChange,\n showSizeChanger: true,\n showQuickJumper: true,\n pageSizeOptions: pageOptions,\n }\"\n rowKey=\"id\"\n >\n <template #bodyCell=\"{ column, record }\">\n <template v-if=\"column.dataIndex === 'diff_len'\">\n <a-progress\n v-if=\"record.diff_len > 1\"\n :percent=\"getDiffPercent(record.diff_len)\"\n :stroke-width=\"8\"\n style=\"width: 120px\"\n :show-info=\"false\"\n :strokeColor=\"\n getDiffPercent(record.diff_len) > 90\n ? '#f5222d'\n : getDiffPercent(record.diff_len) > 50\n ? '#faad14'\n : '#ccc'\n \"\n />\n <span v-else>{{ $t('无') }}</span>\n </template>\n <template v-else-if=\"column.dataIndex === '__action__'\">\n <a-button\n type=\"link\"\n size=\"small\"\n :disabled=\"record.last_id === null\"\n @click=\"handleViewHistory([record.last_id, record.id])\"\n >\n {{ $t('比较') }}\n </a-button>\n\n <a-button\n type=\"link\"\n size=\"small\"\n danger\n @click=\"handleApplyHistory(record.id)\"\n >\n {{ $t('应用') }}\n </a-button>\n </template>\n <template v-else>\n {{ record[column.dataIndex] }}\n </template>\n </template>\n </s-table>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions } from '@/init-plugin';\nimport { computed, defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nexport default defineComponent({\n name: 'codeHistory',\n props: {\n action_code_id: {\n type: String,\n required: true,\n },\n modelType: {\n type: String,\n required: true,\n },\n },\n components: {},\n emits: ['apply'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const oldData = ref('');\n const newData = ref('');\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n const tableData = ref([]);\n const selectedRowKeys = ref([]);\n const height = ref(0);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\n width: 60,\n },\n {\n title: '操作类型',\n dataIndex: 'action',\n width: 60,\n },\n {\n title: t('时间'),\n dataIndex: 'create_time',\n width: 180,\n },\n {\n title: t('差异量'),\n dataIndex: 'diff_len',\n width: 180,\n },\n {\n title: t('操作'),\n dataIndex: '__action__',\n width: 220,\n },\n ];\n const getHistoryList = () => {\n loading.value = true;\n const conditions = [\n {\n field_name: 'action_code_setting__action_code_id',\n operator: 'eq',\n value: [props.action_code_id],\n format: 'input',\n class_name: 'str',\n },\n {\n field_name: 'action_code_setting__menu_flag',\n operator: 'eq',\n value: [props.modelType],\n format: 'input',\n class_name: 'str',\n },\n ];\n if (dateRange.value?.length > 0) {\n conditions.push({\n field_name: 'create_time',\n operator: 'between',\n value: [dateRange.value[0], dateRange.value[1]],\n format: 'input',\n class_name: 'str',\n });\n }\n const queryParams = {\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'action_code_id', 'action', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_action_code_setting_history_list').then(\n (res: any) => {\n tableData.value = res.data;\n total.value = res.total;\n current.value = res.current;\n pageSize.value = res.pageSize;\n loading.value = false;\n },\n );\n };\n const handleDateChange = () => {\n getHistoryList();\n };\n const pageOptions = computed(() => {\n return pageSelectOptions.map((item: any) => item.value);\n });\n const rowSelection = {\n type: 'checkbox',\n };\n const handleCompareClick = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const handlePageChange = (page: number, size: number) => {\n if (current.value === page && pageSize.value === size) {\n return;\n }\n current.value = page || 1;\n pageSize.value = size || 50;\n getHistoryList();\n };\n const getDiffPercent = (diff_len: number) => {\n return diff_len / 2;\n };\n const handleViewHistory = (ids: Array<string>) => {\n const tempModal = reactive({\n component: 'codeHistoryViewModal',\n history_ids: ids,\n height: height.value,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n\n const handleApplyHistory = (action_code_id: any) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(action_code_id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (history_id: number) => {\n const conditions = [\n {\n field_name: 'id',\n operator: 'eq',\n value: [history_id],\n format: 'input',\n class_name: 'str',\n },\n ];\n const queryParams = {\n is_pagination: false,\n column_fields: ['id', 'code', 'action', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_action_code_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n await getApiData(\n { action_code_id: props.action_code_id, action: data.action, code: data.code },\n '/approve/update_action_code',\n );\n emit('apply', data);\n return true;\n } else {\n return false;\n }\n };\n const applyHistory = async (id: number) => {\n loading.value = true;\n try {\n const res = await applyHistoryByHistoryId(id);\n if (res) {\n message.success(t('应用成功'));\n } else {\n message.error(t('应用失败'));\n }\n } catch (error) {\n message.error(t('应用失败'));\n } finally {\n loading.value = false;\n }\n };\n const resize = () => {\n height.value = window.innerHeight - 145;\n };\n\n onMounted(() => {\n window.addEventListener('resize', resize);\n resize();\n getHistoryList();\n });\n onUnmounted(() => {\n window.removeEventListener('resize', resize);\n });\n\n return {\n loading,\n oldData,\n newData,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareClick,\n selectedRowKeys,\n current,\n pageSize,\n total,\n pageSelectOptions,\n handlePageChange,\n pageOptions,\n getHistoryList,\n handleDateChange,\n getDiffPercent,\n handleViewHistory,\n handleApplyHistory,\n height,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.ant-tabs {\n height: 100%;\n margin: 0;\n\n ::v-deep(.ant-tabs-content-top) {\n height: 100%;\n }\n}\n\n.setting-container {\n background-color: #ffffff;\n padding: 5px;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n}\n.history-table-container {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n.empty-content {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n direction: column;\n}\n\n.setting-content {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.setting-content-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n gap: 16px;\n\n .header-right {\n display: flex;\n gap: 8px;\n }\n}\n\n.action-button-group {\n display: flex;\n justify-content: flex-end;\n direction: row;\n gap: 0;\n}\n\n.tree-select-title-container {\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-direction: column;\n}\n\n.tree-select-title-label {\n font-size: 14px;\n}\n\n.tree-select-title-value {\n font-size: 12px;\n color: #999;\n}\n\n.drag-handle {\n cursor: move;\n padding: 8px;\n text-align: center;\n\n &:hover {\n background-color: #fafafa;\n }\n}\n\n:deep(.ant-table-tbody > tr > td) {\n padding: 8px;\n vertical-align: middle;\n}\n\n.history-toolbar {\n display: flex;\n align-items: center;\n margin-bottom: 16px;\n .history-toolbar-label {\n font-size: 15px;\n color: #333;\n margin-right: 8px;\n }\n}\n</style>\n","<template>\n <!-- 历史记录表格布局 -->\n <div class=\"history-toolbar\">\n <span class=\"history-toolbar-label\">{{ $t('时间范围') }}:</span>\n <a-range-picker\n v-model:value=\"dateRange\"\n style=\"width: 320px; margin-right: 16px\"\n :allowClear=\"true\"\n :placeholder=\"[$t('开始时间'), $t('结束时间')]\"\n :showTime=\"{ format: 'YYYY-MM-DD HH:mm:ss' }\"\n :value-format=\"'YYYY-MM-DD HH:mm:ss'\"\n @change=\"handleDateChange\"\n />\n <a-button-group>\n <a-button\n type=\"primary\"\n @click=\"handleCompareClick\"\n :disabled=\"selectedRowKeys.length !== 2\"\n >\n {{ $t('比较所选') }}\n </a-button>\n <a-button\n type=\"primary\"\n @click=\"getHistoryList\"\n >\n <template #icon>\n <ReloadOutlined />\n </template>\n {{ $t('刷新') }}\n </a-button>\n </a-button-group>\n </div>\n <div class=\"history-table-container\">\n <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\n :scroll=\"{ y: height - 400 }\"\n :pagination=\"{\n current: current,\n pageSize: pageSize,\n total: total,\n onChange: handlePageChange,\n showSizeChanger: true,\n showQuickJumper: true,\n pageSizeOptions: pageOptions,\n }\"\n rowKey=\"id\"\n >\n <template #bodyCell=\"{ column, record }\">\n <template v-if=\"column.dataIndex === 'diff_len'\">\n <a-progress\n v-if=\"record.diff_len > 1\"\n :percent=\"getDiffPercent(record.diff_len)\"\n :stroke-width=\"8\"\n style=\"width: 120px\"\n :show-info=\"false\"\n :strokeColor=\"\n getDiffPercent(record.diff_len) > 90\n ? '#f5222d'\n : getDiffPercent(record.diff_len) > 50\n ? '#faad14'\n : '#ccc'\n \"\n />\n <span v-else>{{ $t('无') }}</span>\n </template>\n <template v-else-if=\"column.dataIndex === '__action__'\">\n <a-button\n type=\"link\"\n size=\"small\"\n :disabled=\"record.last_id === null\"\n @click=\"handleViewHistory([record.last_id, record.id])\"\n >\n {{ $t('比较') }}\n </a-button>\n\n <a-button\n type=\"link\"\n size=\"small\"\n danger\n @click=\"handleApplyHistory(record.id)\"\n >\n {{ $t('应用') }}\n </a-button>\n </template>\n <template v-else>\n {{ record[column.dataIndex] }}\n </template>\n </template>\n </s-table>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions } from '@/init-plugin';\nimport { computed, defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nexport default defineComponent({\n name: 'codeHistory',\n props: {\n action_code_id: {\n type: String,\n required: true,\n },\n modelType: {\n type: String,\n required: true,\n },\n },\n components: {},\n emits: ['apply'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const oldData = ref('');\n const newData = ref('');\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n const tableData = ref([]);\n const selectedRowKeys = ref([]);\n const height = ref(0);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\n width: 60,\n },\n {\n title: '操作类型',\n dataIndex: 'action',\n width: 60,\n },\n {\n title: t('时间'),\n dataIndex: 'create_time',\n width: 180,\n },\n {\n title: t('差异量'),\n dataIndex: 'diff_len',\n width: 180,\n },\n {\n title: t('操作'),\n dataIndex: '__action__',\n width: 220,\n },\n ];\n const getHistoryList = () => {\n loading.value = true;\n const conditions = [\n {\n field_name: 'action_code_setting__action_code_id',\n operator: 'eq',\n value: [props.action_code_id],\n format: 'input',\n class_name: 'str',\n },\n {\n field_name: 'action_code_setting__menu_flag',\n operator: 'eq',\n value: [props.modelType],\n format: 'input',\n class_name: 'str',\n },\n ];\n if (dateRange.value?.length > 0) {\n conditions.push({\n field_name: 'create_time',\n operator: 'between',\n value: [dateRange.value[0], dateRange.value[1]],\n format: 'input',\n class_name: 'str',\n });\n }\n const queryParams = {\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'action_code_id', 'action', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_action_code_setting_history_list').then(\n (res: any) => {\n tableData.value = res.data;\n total.value = res.total;\n current.value = res.current;\n pageSize.value = res.pageSize;\n loading.value = false;\n },\n );\n };\n const handleDateChange = () => {\n getHistoryList();\n };\n const pageOptions = computed(() => {\n return pageSelectOptions.map((item: any) => item.value);\n });\n const rowSelection = {\n type: 'checkbox',\n };\n const handleCompareClick = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const handlePageChange = (page: number, size: number) => {\n if (current.value === page && pageSize.value === size) {\n return;\n }\n current.value = page || 1;\n pageSize.value = size || 50;\n getHistoryList();\n };\n const getDiffPercent = (diff_len: number) => {\n return diff_len / 2;\n };\n const handleViewHistory = (ids: Array<string>) => {\n const tempModal = reactive({\n component: 'codeHistoryViewModal',\n history_ids: ids,\n height: height.value,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n\n const handleApplyHistory = (action_code_id: any) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(action_code_id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (history_id: number) => {\n const conditions = [\n {\n field_name: 'id',\n operator: 'eq',\n value: [history_id],\n format: 'input',\n class_name: 'str',\n },\n ];\n const queryParams = {\n is_pagination: false,\n column_fields: ['id', 'code', 'action', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_action_code_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n await getApiData(\n { action_code_id: props.action_code_id, action: data.action, code: data.code },\n '/approve/update_action_code',\n );\n emit('apply', data);\n return true;\n } else {\n return false;\n }\n };\n const applyHistory = async (id: number) => {\n loading.value = true;\n try {\n const res = await applyHistoryByHistoryId(id);\n if (res) {\n message.success(t('应用成功'));\n } else {\n message.error(t('应用失败'));\n }\n } catch (error) {\n message.error(t('应用失败'));\n } finally {\n loading.value = false;\n }\n };\n const resize = () => {\n height.value = window.innerHeight - 145;\n };\n\n onMounted(() => {\n window.addEventListener('resize', resize);\n resize();\n getHistoryList();\n });\n onUnmounted(() => {\n window.removeEventListener('resize', resize);\n });\n\n return {\n loading,\n oldData,\n newData,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareClick,\n selectedRowKeys,\n current,\n pageSize,\n total,\n pageSelectOptions,\n handlePageChange,\n pageOptions,\n getHistoryList,\n handleDateChange,\n getDiffPercent,\n handleViewHistory,\n handleApplyHistory,\n height,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.ant-tabs {\n height: 100%;\n margin: 0;\n\n ::v-deep(.ant-tabs-content-top) {\n height: 100%;\n }\n}\n\n.setting-container {\n background-color: #ffffff;\n padding: 5px;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n}\n.history-table-container {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n.empty-content {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n direction: column;\n}\n\n.setting-content {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.setting-content-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n gap: 16px;\n\n .header-right {\n display: flex;\n gap: 8px;\n }\n}\n\n.action-button-group {\n display: flex;\n justify-content: flex-end;\n direction: row;\n gap: 0;\n}\n\n.tree-select-title-container {\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-direction: column;\n}\n\n.tree-select-title-label {\n font-size: 14px;\n}\n\n.tree-select-title-value {\n font-size: 12px;\n color: #999;\n}\n\n.drag-handle {\n cursor: move;\n padding: 8px;\n text-align: center;\n\n &:hover {\n background-color: #fafafa;\n }\n}\n\n:deep(.ant-table-tbody > tr > td) {\n padding: 8px;\n vertical-align: middle;\n}\n\n.history-toolbar {\n display: flex;\n align-items: center;\n margin-bottom: 16px;\n .history-toolbar-label {\n font-size: 15px;\n color: #333;\n margin-right: 8px;\n }\n}\n</style>\n","<template>\n <a-dropdown v-if=\"debugCodeStor.enable\">\n <span :class=\"{ 'debug-hide': !show && show != null }\">\n <slot></slot>\n </span>\n <template #overlay>\n <a-menu>\n <a-menu-item\n key=\"1\"\n @click=\"handleEditClick\"\n v-if=\"action_code_id\"\n >\n 编辑点击事件\n </a-menu-item>\n <a-menu-item\n v-if=\"showCode?.enable\"\n key=\"2\"\n @click=\"handleEditShow\"\n >\n 编辑显示控制\n </a-menu-item>\n <a-menu-item\n v-if=\"disableCode?.enable\"\n key=\"3\"\n @click=\"handleEditDisable\"\n >\n 编辑禁用控制\n </a-menu-item>\n <a-menu-item\n v-if=\"valueCode\"\n key=\"3\"\n @click=\"handleEditValue\"\n >\n 编辑值控制\n </a-menu-item>\n <a-menu-item\n v-if=\"dynamicTitle\"\n key=\"4\"\n @click=\"handleEditDynamicTitle\"\n >\n 编辑动态标题\n </a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <slot v-else-if=\"show == null || show\"></slot>\n <a-modal\n v-if=\"showEdit\"\n v-model:open=\"showEdit\"\n :title=\"title\"\n @ok=\"setCode\"\n width=\"80%\"\n >\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane\n tab=\"编辑\"\n :key=\"1\"\n >\n <a-form\n layout=\"vertical\"\n v-if=\"activeKey === 1\"\n >\n <a-form-item\n label=\"操作\"\n v-if=\"showActionSelect\"\n >\n <a-select\n show-search\n v-model:value=\"tmpAction\"\n :options=\"options\"\n ></a-select>\n </a-form-item>\n <a-form-item label=\"示例代码\">\n <a-row :gutter=\"10\">\n <a-col :span=\"20\">\n <a-select\n v-model:value=\"exampleCode\"\n show-search\n >\n <a-select-option\n v-for=\"item in filterExampleCodeList\"\n :value=\"item.value\"\n :key=\"item.value\"\n >\n <a-tooltip\n overlayClassName=\"debug-code-code-view\"\n color=\"blue\"\n >\n <template #title>\n <pre>{{ item.value }}</pre>\n </template>\n {{ item.label }}\n </a-tooltip>\n </a-select-option>\n </a-select>\n </a-col>\n <a-col :span=\"4\">\n <a-button-group>\n <a-button\n type=\"primary\"\n @click=\"handleAppendCode\"\n >\n 附加\n </a-button>\n <a-button\n type=\"primary\"\n @click=\"handleReplaceCode\"\n >\n 替换\n </a-button>\n </a-button-group>\n </a-col>\n </a-row>\n </a-form-item>\n <a-form-item label=\"代码\">\n <code-editor\n :editorValue=\"tmpCode || ''\"\n @update:editorValue=\"updateCode\"\n mode=\"javascript\"\n :lineWrapping=\"false\"\n />\n </a-form-item>\n </a-form>\n </a-tab-pane>\n <a-tab-pane\n tab=\"历史记录\"\n :key=\"2\"\n >\n <code-history\n :action_code_id=\"self_action_code_id\"\n :modelType=\"modelType\"\n @apply=\"applyHistory\"\n ></code-history>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\nimport { useDebugCodeStore } from '../../store/debugCode';\nimport { getApiData } from '@/init-plugin';\nimport codeHistory from '../codeHistory/codeHistory.vue';\nimport { exampleCodeList } from '../../example_code/example_code';\nimport { Modal } from 'ant-design-vue';\nimport { useRoute } from 'vue-router';\nconst EDIT_TYPE_CLICK = 'click';\nconst EDIT_TYPE_SHOW = 'show';\nconst EDIT_TYPE_DISABLE = 'disable';\nconst EDIT_TYPE_VALUE = 'value';\nconst EDIT_TYPE_DYNAMIC_TITLE = 'dynamic_title';\n\nexport default defineComponent({\n name: 'debugCode',\n props: {\n action_code_id: {\n type: String,\n required: true,\n },\n code: {\n type: String as PropType<string | undefined>,\n required: true,\n },\n action: {\n type: String as PropType<String | undefined>,\n required: false,\n },\n options: {\n type: Array,\n required: false,\n },\n showCode: {\n type: Object as PropType<\n { action_code_id: String; enable: boolean; code: string } | undefined\n >,\n required: false,\n },\n disableCode: {\n type: Object as PropType<\n { action_code_id: String; enable: boolean; code: string } | undefined\n >,\n required: false,\n },\n params: {\n required: false,\n },\n show: {\n required: false,\n },\n valueCode: {\n type: Object as PropType<{ code: string; action_code_id: string } | undefined>,\n required: false,\n },\n dynamicTitle: {\n type: Object as PropType<{ code: string; action_code_id: string } | undefined>,\n required: false,\n },\n },\n emits: [\n 'update:code',\n 'update:action',\n 'update:showCode',\n 'update:disableCode',\n 'update:valueCode',\n 'update:dynamicTitle',\n ],\n\n setup(props, { emit }) {\n const route = useRoute();\n const showEdit = ref(false);\n const tmpCode = ref<string>(props.code);\n const tmpAction = ref<string | null>(props.action as any);\n const debugCodeStor = useDebugCodeStore();\n const activeKey = ref(1);\n const exampleCode = ref(null);\n const editType = ref(EDIT_TYPE_CLICK);\n const title = ref('编辑代码');\n const modelType = ref('');\n\n const showActionSelect = computed(() => {\n if (editType.value === EDIT_TYPE_CLICK) {\n return tmpAction != null;\n } else {\n return false;\n }\n });\n const handleEditClick = () => {\n editType.value = EDIT_TYPE_CLICK;\n tmpCode.value = props.code;\n tmpAction.value = props.action as any;\n showEdit.value = true;\n title.value = '编辑点击事件';\n };\n const handleEditShow = () => {\n editType.value = EDIT_TYPE_SHOW;\n tmpCode.value = props.showCode?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑显示控制';\n };\n const handleEditDisable = () => {\n editType.value = EDIT_TYPE_DISABLE;\n tmpCode.value = props.disableCode?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑禁用控制';\n };\n const handleEditValue = () => {\n editType.value = EDIT_TYPE_VALUE;\n tmpCode.value = props.valueCode?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑值控制';\n };\n const handleEditDynamicTitle = () => {\n editType.value = EDIT_TYPE_DYNAMIC_TITLE;\n tmpCode.value = props.dynamicTitle?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑动态标题';\n };\n const updateCode = value => {\n tmpCode.value = value;\n };\n const self_action_code_id = computed(() => {\n if (editType.value === EDIT_TYPE_CLICK) {\n return props.action_code_id;\n } else if (editType.value === EDIT_TYPE_SHOW) {\n return props.showCode?.action_code_id;\n } else if (editType.value === EDIT_TYPE_DISABLE) {\n return props.disableCode?.action_code_id;\n } else if (editType.value === EDIT_TYPE_VALUE) {\n return props.valueCode?.action_code_id;\n } else if (editType.value === EDIT_TYPE_DYNAMIC_TITLE) {\n return props.dynamicTitle?.action_code_id;\n }\n });\n const applyHistory = async data => {\n if (editType.value === EDIT_TYPE_CLICK) {\n emit('update:code', data.code);\n if (data.action != null) {\n emit('update:action', data.action);\n }\n } else if (editType.value === EDIT_TYPE_SHOW) {\n emit('update:showCode', { ...props.showCode, code: data.code });\n } else if (editType.value === EDIT_TYPE_DISABLE) {\n emit('update:disableCode', { ...props.disableCode, code: data.code });\n } else if (editType.value === EDIT_TYPE_VALUE) {\n props.valueCode.code = data.code;\n } else if (editType.value === EDIT_TYPE_DYNAMIC_TITLE) {\n props.dynamicTitle.code = data.code;\n }\n\n tmpCode.value = data.code;\n tmpAction.value = data.action;\n };\n const setCode = async () => {\n await getApiData(\n {\n action_code_id: self_action_code_id.value,\n menu_flag: modelType.value,\n action: tmpAction.value,\n code: tmpCode.value,\n },\n '/approve/update_action_code',\n );\n if (editType.value === EDIT_TYPE_CLICK) {\n emit('update:code', tmpCode.value);\n if (tmpAction.value != null) {\n emit('update:action', tmpAction.value);\n }\n } else if (editType.value === EDIT_TYPE_SHOW) {\n emit('update:showCode', { ...props.showCode, code: tmpCode.value });\n } else if (editType.value === EDIT_TYPE_DISABLE) {\n emit('update:disableCode', { ...props.disableCode, code: tmpCode.value });\n } else if (editType.value === EDIT_TYPE_VALUE) {\n props.valueCode.code = tmpCode.value;\n } else if (editType.value === EDIT_TYPE_DYNAMIC_TITLE) {\n props.dynamicTitle.code = tmpCode.value;\n }\n\n showEdit.value = false;\n };\n const handleReplaceCode = () => {\n if (!exampleCode.value) {\n return;\n }\n if (tmpCode.value) {\n Modal.confirm({\n title: '提示',\n content: '是否确认要替换现有代码',\n onOk() {\n tmpCode.value = exampleCode.value;\n },\n onCancel() {},\n });\n } else {\n tmpCode.value = exampleCode.value;\n }\n };\n const handleAppendCode = () => {\n if (!exampleCode.value) {\n return;\n }\n tmpCode.value = `${tmpCode.value || ''}\\n${exampleCode.value}`;\n };\n const filterExampleCodeList = computed(() => {\n return exampleCodeList.filter(item => {\n if (editType.value === EDIT_TYPE_CLICK) {\n return (\n item.types.includes(EDIT_TYPE_CLICK) && item.actions.includes(tmpAction.value || null)\n );\n } else {\n return item.types.includes(editType.value);\n }\n });\n });\n onMounted(() => {\n const path_arr = route.path.split('/');\n modelType.value = path_arr[path_arr.length - 1];\n });\n return {\n handleEditClick,\n showEdit,\n updateCode,\n tmpCode,\n setCode,\n tmpAction,\n debugCodeStor,\n applyHistory,\n activeKey,\n exampleCodeList,\n exampleCode,\n handleReplaceCode,\n handleAppendCode,\n filterExampleCodeList,\n showActionSelect,\n self_action_code_id,\n handleEditDisable,\n handleEditShow,\n handleEditValue,\n title,\n modelType,\n handleEditDynamicTitle,\n };\n },\n components: {\n codeHistory,\n },\n});\n</script>\n<style lang=\"less\">\n.debug-code-code-view {\n width: 500px;\n .ant-tooltip-inner {\n width: fit-content;\n }\n}\n.debug-hide {\n button {\n span::after {\n content: '【隐藏】';\n }\n }\n li {\n span::after {\n content: '【隐藏】';\n }\n }\n}\n</style>\n","<template>\n <a-dropdown v-if=\"debugCodeStor.enable\">\n <span :class=\"{ 'debug-hide': !show && show != null }\">\n <slot></slot>\n </span>\n <template #overlay>\n <a-menu>\n <a-menu-item\n key=\"1\"\n @click=\"handleEditClick\"\n v-if=\"action_code_id\"\n >\n 编辑点击事件\n </a-menu-item>\n <a-menu-item\n v-if=\"showCode?.enable\"\n key=\"2\"\n @click=\"handleEditShow\"\n >\n 编辑显示控制\n </a-menu-item>\n <a-menu-item\n v-if=\"disableCode?.enable\"\n key=\"3\"\n @click=\"handleEditDisable\"\n >\n 编辑禁用控制\n </a-menu-item>\n <a-menu-item\n v-if=\"valueCode\"\n key=\"3\"\n @click=\"handleEditValue\"\n >\n 编辑值控制\n </a-menu-item>\n <a-menu-item\n v-if=\"dynamicTitle\"\n key=\"4\"\n @click=\"handleEditDynamicTitle\"\n >\n 编辑动态标题\n </a-menu-item>\n </a-menu>\n </template>\n </a-dropdown>\n <slot v-else-if=\"show == null || show\"></slot>\n <a-modal\n v-if=\"showEdit\"\n v-model:open=\"showEdit\"\n :title=\"title\"\n @ok=\"setCode\"\n width=\"80%\"\n >\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane\n tab=\"编辑\"\n :key=\"1\"\n >\n <a-form\n layout=\"vertical\"\n v-if=\"activeKey === 1\"\n >\n <a-form-item\n label=\"操作\"\n v-if=\"showActionSelect\"\n >\n <a-select\n show-search\n v-model:value=\"tmpAction\"\n :options=\"options\"\n ></a-select>\n </a-form-item>\n <a-form-item label=\"示例代码\">\n <a-row :gutter=\"10\">\n <a-col :span=\"20\">\n <a-select\n v-model:value=\"exampleCode\"\n show-search\n >\n <a-select-option\n v-for=\"item in filterExampleCodeList\"\n :value=\"item.value\"\n :key=\"item.value\"\n >\n <a-tooltip\n overlayClassName=\"debug-code-code-view\"\n color=\"blue\"\n >\n <template #title>\n <pre>{{ item.value }}</pre>\n </template>\n {{ item.label }}\n </a-tooltip>\n </a-select-option>\n </a-select>\n </a-col>\n <a-col :span=\"4\">\n <a-button-group>\n <a-button\n type=\"primary\"\n @click=\"handleAppendCode\"\n >\n 附加\n </a-button>\n <a-button\n type=\"primary\"\n @click=\"handleReplaceCode\"\n >\n 替换\n </a-button>\n </a-button-group>\n </a-col>\n </a-row>\n </a-form-item>\n <a-form-item label=\"代码\">\n <code-editor\n :editorValue=\"tmpCode || ''\"\n @update:editorValue=\"updateCode\"\n mode=\"javascript\"\n :lineWrapping=\"false\"\n />\n </a-form-item>\n </a-form>\n </a-tab-pane>\n <a-tab-pane\n tab=\"历史记录\"\n :key=\"2\"\n >\n <code-history\n :action_code_id=\"self_action_code_id\"\n :modelType=\"modelType\"\n @apply=\"applyHistory\"\n ></code-history>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\nimport { useDebugCodeStore } from '../../store/debugCode';\nimport { getApiData } from '@/init-plugin';\nimport codeHistory from '../codeHistory/codeHistory.vue';\nimport { exampleCodeList } from '../../example_code/example_code';\nimport { Modal } from 'ant-design-vue';\nimport { useRoute } from 'vue-router';\nconst EDIT_TYPE_CLICK = 'click';\nconst EDIT_TYPE_SHOW = 'show';\nconst EDIT_TYPE_DISABLE = 'disable';\nconst EDIT_TYPE_VALUE = 'value';\nconst EDIT_TYPE_DYNAMIC_TITLE = 'dynamic_title';\n\nexport default defineComponent({\n name: 'debugCode',\n props: {\n action_code_id: {\n type: String,\n required: true,\n },\n code: {\n type: String as PropType<string | undefined>,\n required: true,\n },\n action: {\n type: String as PropType<String | undefined>,\n required: false,\n },\n options: {\n type: Array,\n required: false,\n },\n showCode: {\n type: Object as PropType<\n { action_code_id: String; enable: boolean; code: string } | undefined\n >,\n required: false,\n },\n disableCode: {\n type: Object as PropType<\n { action_code_id: String; enable: boolean; code: string } | undefined\n >,\n required: false,\n },\n params: {\n required: false,\n },\n show: {\n required: false,\n },\n valueCode: {\n type: Object as PropType<{ code: string; action_code_id: string } | undefined>,\n required: false,\n },\n dynamicTitle: {\n type: Object as PropType<{ code: string; action_code_id: string } | undefined>,\n required: false,\n },\n },\n emits: [\n 'update:code',\n 'update:action',\n 'update:showCode',\n 'update:disableCode',\n 'update:valueCode',\n 'update:dynamicTitle',\n ],\n\n setup(props, { emit }) {\n const route = useRoute();\n const showEdit = ref(false);\n const tmpCode = ref<string>(props.code);\n const tmpAction = ref<string | null>(props.action as any);\n const debugCodeStor = useDebugCodeStore();\n const activeKey = ref(1);\n const exampleCode = ref(null);\n const editType = ref(EDIT_TYPE_CLICK);\n const title = ref('编辑代码');\n const modelType = ref('');\n\n const showActionSelect = computed(() => {\n if (editType.value === EDIT_TYPE_CLICK) {\n return tmpAction != null;\n } else {\n return false;\n }\n });\n const handleEditClick = () => {\n editType.value = EDIT_TYPE_CLICK;\n tmpCode.value = props.code;\n tmpAction.value = props.action as any;\n showEdit.value = true;\n title.value = '编辑点击事件';\n };\n const handleEditShow = () => {\n editType.value = EDIT_TYPE_SHOW;\n tmpCode.value = props.showCode?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑显示控制';\n };\n const handleEditDisable = () => {\n editType.value = EDIT_TYPE_DISABLE;\n tmpCode.value = props.disableCode?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑禁用控制';\n };\n const handleEditValue = () => {\n editType.value = EDIT_TYPE_VALUE;\n tmpCode.value = props.valueCode?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑值控制';\n };\n const handleEditDynamicTitle = () => {\n editType.value = EDIT_TYPE_DYNAMIC_TITLE;\n tmpCode.value = props.dynamicTitle?.code;\n tmpAction.value = null;\n showEdit.value = true;\n title.value = '编辑动态标题';\n };\n const updateCode = value => {\n tmpCode.value = value;\n };\n const self_action_code_id = computed(() => {\n if (editType.value === EDIT_TYPE_CLICK) {\n return props.action_code_id;\n } else if (editType.value === EDIT_TYPE_SHOW) {\n return props.showCode?.action_code_id;\n } else if (editType.value === EDIT_TYPE_DISABLE) {\n return props.disableCode?.action_code_id;\n } else if (editType.value === EDIT_TYPE_VALUE) {\n return props.valueCode?.action_code_id;\n } else if (editType.value === EDIT_TYPE_DYNAMIC_TITLE) {\n return props.dynamicTitle?.action_code_id;\n }\n });\n const applyHistory = async data => {\n if (editType.value === EDIT_TYPE_CLICK) {\n emit('update:code', data.code);\n if (data.action != null) {\n emit('update:action', data.action);\n }\n } else if (editType.value === EDIT_TYPE_SHOW) {\n emit('update:showCode', { ...props.showCode, code: data.code });\n } else if (editType.value === EDIT_TYPE_DISABLE) {\n emit('update:disableCode', { ...props.disableCode, code: data.code });\n } else if (editType.value === EDIT_TYPE_VALUE) {\n props.valueCode.code = data.code;\n } else if (editType.value === EDIT_TYPE_DYNAMIC_TITLE) {\n props.dynamicTitle.code = data.code;\n }\n\n tmpCode.value = data.code;\n tmpAction.value = data.action;\n };\n const setCode = async () => {\n await getApiData(\n {\n action_code_id: self_action_code_id.value,\n menu_flag: modelType.value,\n action: tmpAction.value,\n code: tmpCode.value,\n },\n '/approve/update_action_code',\n );\n if (editType.value === EDIT_TYPE_CLICK) {\n emit('update:code', tmpCode.value);\n if (tmpAction.value != null) {\n emit('update:action', tmpAction.value);\n }\n } else if (editType.value === EDIT_TYPE_SHOW) {\n emit('update:showCode', { ...props.showCode, code: tmpCode.value });\n } else if (editType.value === EDIT_TYPE_DISABLE) {\n emit('update:disableCode', { ...props.disableCode, code: tmpCode.value });\n } else if (editType.value === EDIT_TYPE_VALUE) {\n props.valueCode.code = tmpCode.value;\n } else if (editType.value === EDIT_TYPE_DYNAMIC_TITLE) {\n props.dynamicTitle.code = tmpCode.value;\n }\n\n showEdit.value = false;\n };\n const handleReplaceCode = () => {\n if (!exampleCode.value) {\n return;\n }\n if (tmpCode.value) {\n Modal.confirm({\n title: '提示',\n content: '是否确认要替换现有代码',\n onOk() {\n tmpCode.value = exampleCode.value;\n },\n onCancel() {},\n });\n } else {\n tmpCode.value = exampleCode.value;\n }\n };\n const handleAppendCode = () => {\n if (!exampleCode.value) {\n return;\n }\n tmpCode.value = `${tmpCode.value || ''}\\n${exampleCode.value}`;\n };\n const filterExampleCodeList = computed(() => {\n return exampleCodeList.filter(item => {\n if (editType.value === EDIT_TYPE_CLICK) {\n return (\n item.types.includes(EDIT_TYPE_CLICK) && item.actions.includes(tmpAction.value || null)\n );\n } else {\n return item.types.includes(editType.value);\n }\n });\n });\n onMounted(() => {\n const path_arr = route.path.split('/');\n modelType.value = path_arr[path_arr.length - 1];\n });\n return {\n handleEditClick,\n showEdit,\n updateCode,\n tmpCode,\n setCode,\n tmpAction,\n debugCodeStor,\n applyHistory,\n activeKey,\n exampleCodeList,\n exampleCode,\n handleReplaceCode,\n handleAppendCode,\n filterExampleCodeList,\n showActionSelect,\n self_action_code_id,\n handleEditDisable,\n handleEditShow,\n handleEditValue,\n title,\n modelType,\n handleEditDynamicTitle,\n };\n },\n components: {\n codeHistory,\n },\n});\n</script>\n<style lang=\"less\">\n.debug-code-code-view {\n width: 500px;\n .ant-tooltip-inner {\n width: fit-content;\n }\n}\n.debug-hide {\n button {\n span::after {\n content: '【隐藏】';\n }\n }\n li {\n span::after {\n content: '【隐藏】';\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"debugCode-dD1YnQSD.js","names":[],"sources":["../src/components/approval/store/debugCode.ts"],"sourcesContent":["import { acceptHMRUpdate, defineStore } from 'pinia';\n\nexport interface DebugCodeState {\n enable: boolean;\n}\n\nexport const SET_ENABLE = 'SET_ENABLE';\n\nexport const useDebugCodeStore = defineStore('debugCode', {\n persist: true,\n state: (): DebugCodeState => ({\n enable: null,\n }),\n actions: {\n [SET_ENABLE](enable: boolean) {\n this.enable = enable;\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(useDebugCodeStore, import.meta.hot));\n}\n"],"mappings":";;AAMA,IAAa,IAAa,cAEb,IAAoB,EAAY,aAAa;CACxD,SAAS;CACT,cAA8B,EAC5B,QAAQ,MACT;CACD,SAAS,EACP,CAAC,GAAY,GAAiB;AAC5B,OAAK,SAAS;IAEjB;CACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-VdDMlY4e.js","names":[],"sources":["../src/components/approval/configs/approval/default.ts"],"sourcesContent":["import { ApprovalSetting, DataListSection } from '../../typing';\n// 修改/删除两个 action 的「判断 + 取数」片段抽到 recordActions.ts:\n// 列表页行按钮与详情页按钮共用同一份来源,避免两边逻辑漂移。\nimport { getCancelAgreeApproveAction, getEditApproveAction } from './recordActions';\n\n/**\n * 「审批列表」列的默认配置。\n *\n * 不带任何入参:配置里与节点相关的东西一律用 {{xxx}} 占位符表示(见 menu_flag 条件),\n * 实际值由执行查询处注入(src/views/approval/utils.ts::resolveParamValue)。\n * 这样同一份配置可以直接同步到其他节点,不需要按节点改写。\n */\nexport const getDataListConfig = (): DataListSection => {\n return {\n type: 'data_list',\n table: {\n actions: [\n {\n danger: false,\n disableCode: {\n code: \"async function run({ context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\",\n enable: false,\n },\n label: '提交',\n settings: {},\n showCode: {\n code: \"async function run({ context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\",\n enable: false,\n },\n type: 'primary',\n action: 'commit_approve',\n code: \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const table = tables['approve-approve_record'];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n if (!selectedRowKeys || selectedRowKeys.length == 0) {\\n throw new Error('请选择未提交的审批数据');\\n }\\n for (const item of selectedRecord) {\\n if (item.process_status != 'init') {\\n throw new Error('仅能提交未提交的审批数据');\\n }\\n }\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { ids: selectedRowKeys };\\n}\\n\",\n },\n ],\n base_conditions: [\n [\n {\n class_name: 'bool',\n field_name: 'is_active',\n format: 'choices',\n operator: 'eq',\n value: [true],\n value_type: 'fixed',\n },\n {\n class_name: 'str',\n field_name: 'menu_flag',\n format: 'input',\n operator: 'eq',\n value: ['{{menu_flag}}'],\n value_type: 'fixed',\n },\n ],\n ],\n columns: [\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: null,\n dataIndex: 'number',\n ellipsis: true,\n resizable: true,\n title: '流水号',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'click_approve',\n dataIndex: 'context',\n ellipsis: true,\n resizable: true,\n title: '流程主题',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: null,\n dataIndex: 'send_person__realname',\n ellipsis: true,\n resizable: true,\n title: '发起人',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'json_tag',\n dataIndex: 'approve_persons_m2m_json',\n ellipsis: true,\n resizable: true,\n title: '待审批人',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'json_tag',\n dataIndex: 'approved_persons_m2m_json',\n ellipsis: true,\n resizable: true,\n title: '已审批人',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'datetime',\n dataIndex: 'start_time',\n ellipsis: true,\n resizable: true,\n title: '开始时间',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'datetime',\n dataIndex: 'finish_time',\n ellipsis: true,\n resizable: true,\n title: '结束时间',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'tag',\n colorMap: {\n 待提交: 'green',\n 审批中: 'cyan',\n 审批通过: 'blue',\n 驳回待提交: 'purple',\n 已撤销: 'pink',\n },\n contentMap: {\n 待提交: '待提交',\n 审批中: '审批中',\n 审批通过: '审批通过',\n 驳回待提交: '驳回待提交',\n 已撤销: '已撤销',\n },\n dataIndex: 'display_process_status',\n ellipsis: true,\n filterMultiple: true,\n filters: [\n {\n value: '待提交',\n text: '待提交',\n },\n {\n value: '审批中',\n text: '审批中',\n },\n {\n value: '审批通过',\n text: '审批通过',\n },\n {\n value: '驳回待提交',\n text: '驳回待提交',\n },\n {\n value: '已撤销',\n text: '已撤销',\n },\n ],\n resizable: true,\n title: '流程状态',\n width: 150,\n },\n\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'tag',\n colorMap: {\n ok: 'green',\n error: 'cyan',\n },\n contentMap: {\n ok: '通过',\n error: '错误',\n },\n dataIndex: 'data_check_status',\n ellipsis: true,\n filterMultiple: true,\n filters: [\n {\n value: 'ok',\n text: '通过',\n },\n {\n value: 'error',\n text: '错误',\n },\n ],\n resizable: true,\n title: '校验状态',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'modal',\n dataIndex: 'message',\n ellipsis: true,\n resizable: true,\n title: '校验信息',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'datetime',\n dataIndex: 'cancel_time',\n ellipsis: true,\n resizable: true,\n title: '删除时间',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: null,\n dataIndex: 'cancel_bz',\n ellipsis: true,\n resizable: true,\n title: '删除原因',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'tag',\n colorMap: {\n 正常: 'green',\n 已修改: 'orange',\n 已删除: 'red',\n },\n contentMap: {\n 正常: '正常',\n 已修改: '已修改',\n 已删除: '已删除',\n },\n dataIndex: 'modify_status',\n ellipsis: true,\n filterMultiple: true,\n filters: [\n {\n value: '正常',\n text: '正常',\n },\n {\n value: '已修改',\n text: '已修改',\n },\n {\n value: '已删除',\n text: '已删除',\n },\n ],\n resizable: true,\n title: '修改状态',\n width: 120,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: null,\n dataIndex: 'modify_source__number',\n ellipsis: true,\n resizable: true,\n title: '修改来源',\n width: 150,\n },\n {\n autoHeight: false,\n autoWidth: false,\n cellComponent: 'tag',\n colorMap: {\n true: 'green',\n false: 'default',\n },\n contentMap: {\n true: '可修改',\n false: '不可修改',\n },\n dataIndex: 'is_modifiable',\n ellipsis: true,\n resizable: true,\n title: '是否可修改',\n width: 120,\n },\n ],\n id: 'approve-approve_record',\n is_normal_model: true,\n list_url: '/approve/query_approve_record_list',\n modelType: 'approve-approve_record',\n query_params: {\n is_my_send: true,\n },\n row_actions: [\n {\n danger: false,\n disableCode: {\n enable: true,\n code: \"async function run({ table_id, record, context, settings }) {\\n return record.process_status !== 'init' && record.result_status!=='reject';\\n}\\n\",\n },\n is_dropdown: true,\n label: '提交',\n settings: {},\n type: 'primary',\n action: 'commit_approve',\n code: \"async function run({ table_id, record, context, settings }) {\\n // console.log('record', JSON.stringify(record));\\n // console.log('context', JSON.stringify(context));\\n // console.log('settings', JSON.stringify(settings));\\n // const { tables, formModel } = context;\\n // const currentTable = tables[table_id];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n if (record.process_status != 'init' && record.result_status != 'reject') {\\n throw new Error('仅能提交未提交或驳回的审批数据');\\n }\\n return { ids: [record.id] };\\n}\\n\",\n },\n getEditApproveAction(),\n {\n danger: false,\n is_dropdown: true,\n label: '复制',\n settings: {},\n type: 'default',\n action: 'copy_approve',\n code: 'async function run({ table_id, record, context, settings }) {\\n // 复制为新审批:取数、清空只读动态值、重算单据编号/流水号等逻辑统一由 copy_approve handler 处理\\n return { id: record.id };\\n}\\n',\n },\n {\n danger: false,\n disableCode: {\n enable: true,\n code: \"async function run({ table_id, record, context, settings }) {\\n const cancellable = record.process_status === 'init'\\n || record.result_status === 'reject'\\n || record.process_status === 'approving';\\n return !cancellable;\\n}\\n\",\n },\n is_dropdown: true,\n label: '撤销',\n settings: {},\n type: 'primary',\n action: 'cancel_approve',\n code: \"async function run({ table_id, record, context, settings }) {\\n const cancellable = record.process_status === 'init'\\n || record.result_status === 'reject'\\n || record.process_status === 'approving';\\n if (!cancellable) {\\n throw new Error('仅能撤销未提交、驳回或审批中的审批数据');\\n }\\n return { ids: [record.id] };\\n}\",\n },\n {\n danger: false,\n disableCode: {\n enable: true,\n code: \"async function run({ table_id, record, context, settings }) {\\n return record.process_status !== 'approving';\\n}\\n\",\n },\n is_dropdown: true,\n label: '催办',\n settings: {},\n type: 'primary',\n action: 'send_reminder',\n code: \"async function run({ table_id, record, context, settings }) {\\n if (record.process_status != 'approving') {\\n throw new Error('仅能催办审批中的审批');\\n }\\n return { ids: [record.process_instance_id] };\\n}\\n\",\n },\n getCancelAgreeApproveAction(),\n ],\n search_config: [\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'str',\n field_name: 'number',\n format: 'input',\n inputType: 'text',\n label: '流水号',\n operator_list: ['eq', 'contains', 'startswith', 'not_eq', 'is_or_not_blank_or_null'],\n type: 'input',\n },\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'str',\n field_name: 'display_process_status',\n format: 'choices',\n label: '流程状态',\n mode: 'tags',\n operator_list: ['eq', 'in', 'notin'],\n options: [\n {\n value: '待提交',\n label: '待提交',\n },\n {\n value: '审批中',\n label: '审批中',\n },\n {\n value: '审批通过',\n label: '审批通过',\n },\n {\n value: '驳回待提交',\n label: '驳回待提交',\n },\n {\n value: '已撤销',\n label: '已撤销',\n },\n ],\n size: 'small',\n type: 'select',\n },\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'datetime',\n dateFormat: 'YYYY-MM-DD',\n field_name: 'start_time',\n format: 'input',\n label: '开始时间',\n operator_list: [\n 'between',\n 'gt',\n 'lt',\n 'eq',\n 'gte',\n 'lte',\n 'notbetween',\n '_eq',\n 'is_or_not_null',\n 'not_eq',\n ],\n showTime: false,\n size: 'small',\n type: 'datepicker',\n valueFormat: 'YYYY-MM-DD',\n },\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'datetime',\n dateFormat: 'YYYY-MM-DD',\n field_name: 'finish_time',\n format: 'input',\n label: '结束时间',\n operator_list: [\n 'between',\n 'gt',\n 'lt',\n 'eq',\n 'gte',\n 'lte',\n 'notbetween',\n '_eq',\n 'is_or_not_null',\n 'not_eq',\n ],\n showTime: false,\n size: 'small',\n type: 'datepicker',\n valueFormat: 'YYYY-MM-DD',\n },\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'str',\n field_name: 'modify_status',\n format: 'choices',\n label: '修改状态',\n mode: 'tags',\n operator_list: ['eq', 'in', 'notin'],\n options: [\n {\n value: '正常',\n label: '正常',\n },\n {\n value: '已修改',\n label: '已修改',\n },\n {\n value: '已删除',\n label: '已删除',\n },\n ],\n size: 'small',\n type: 'select',\n },\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'str',\n field_name: 'modify_source__number',\n format: 'input',\n inputType: 'text',\n label: '修改来源',\n operator_list: ['eq', 'contains', 'is_or_not_blank_or_null'],\n type: 'input',\n },\n {\n allowClear: true,\n autocomplete: 'off',\n class_name: 'bool',\n field_name: 'is_modifiable',\n format: 'choices',\n label: '是否可修改',\n mode: 'tags',\n operator_list: ['eq', 'in', 'notin'],\n options: [\n {\n value: true,\n label: '可修改',\n },\n {\n value: false,\n label: '不可修改',\n },\n ],\n size: 'small',\n type: 'select',\n },\n ],\n title: '',\n },\n };\n};\n// 默认配置不带入参:配置内容必须与节点无关(与节点相关的东西一律用 {{xxx}} 占位符 +\n// 执行查询时注入),所以这里不再接收 menu_flag。\nexport default () => {\n const config: ApprovalSetting = {\n version: 1,\n columns: [\n {\n type: 'tables',\n tables: [],\n },\n {\n type: 'form',\n title: '',\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n dynamicFieldList: [\n {\n group_name: '',\n children: [],\n },\n ],\n model: {\n update_field_list: [],\n },\n rules: {},\n options: {},\n },\n actions: [\n {\n danger: false,\n label: '保存',\n settings: {},\n showCode: {\n code: 'async function run({ context, settings }) {\\n const { isEdit } = context;\\n return !isEdit;\\n}\\n',\n enable: false,\n },\n type: 'primary',\n action: 'save_approve',\n code: 'async function run({ context, settings }) {\\n const { tables, formModel } = context;\\n return { data: context.formModel };\\n}\\n',\n },\n {\n danger: false,\n label: '新建',\n settings: {},\n showCode: {\n enable: true,\n code: 'async function run({ context, settings }) {\\n const { isEdit } = context;\\n return !!isEdit;\\n}\\n',\n },\n type: 'default',\n action: 'clear_form',\n },\n ],\n },\n getDataListConfig(),\n ],\n };\n return config;\n};\n"],"mappings":";;AAYA,IAAa,WACJ;CACL,MAAM;CACN,OAAO;EACL,SAAS,CACP;GACE,QAAQ;GACR,aAAa;IACX,MAAM;IACN,QAAQ;IACT;GACD,OAAO;GACP,UAAU,EAAE;GACZ,UAAU;IACR,MAAM;IACN,QAAQ;IACT;GACD,MAAM;GACN,QAAQ;GACR,MAAM;GACP,CACF;EACD,iBAAiB,CACf,CACE;GACE,YAAY;GACZ,YAAY;GACZ,QAAQ;GACR,UAAU;GACV,OAAO,CAAC,GAAK;GACb,YAAY;GACb,EACD;GACE,YAAY;GACZ,YAAY;GACZ,QAAQ;GACR,UAAU;GACV,OAAO,CAAC,gBAAgB;GACxB,YAAY;GACb,CACF,CACF;EACD,SAAS;GACP;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,UAAU;KACR,KAAK;KACL,KAAK;KACL,MAAM;KACN,OAAO;KACP,KAAK;KACN;IACD,YAAY;KACV,KAAK;KACL,KAAK;KACL,MAAM;KACN,OAAO;KACP,KAAK;KACN;IACD,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,SAAS;KACP;MACE,OAAO;MACP,MAAM;MACP;KACD;MACE,OAAO;MACP,MAAM;MACP;KACD;MACE,OAAO;MACP,MAAM;MACP;KACD;MACE,OAAO;MACP,MAAM;MACP;KACD;MACE,OAAO;MACP,MAAM;MACP;KACF;IACD,WAAW;IACX,OAAO;IACP,OAAO;IACR;GAED;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,UAAU;KACR,IAAI;KACJ,OAAO;KACR;IACD,YAAY;KACV,IAAI;KACJ,OAAO;KACR;IACD,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,SAAS,CACP;KACE,OAAO;KACP,MAAM;KACP,EACD;KACE,OAAO;KACP,MAAM;KACP,CACF;IACD,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,UAAU;KACR,IAAI;KACJ,KAAK;KACL,KAAK;KACN;IACD,YAAY;KACV,IAAI;KACJ,KAAK;KACL,KAAK;KACN;IACD,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,SAAS;KACP;MACE,OAAO;MACP,MAAM;MACP;KACD;MACE,OAAO;MACP,MAAM;MACP;KACD;MACE,OAAO;MACP,MAAM;MACP;KACF;IACD,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACR;GACD;IACE,YAAY;IACZ,WAAW;IACX,eAAe;IACf,UAAU;KACR,MAAM;KACN,OAAO;KACR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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"example_code-C_xF8RRG.js","names":[],"sources":["../src/components/approval/example_code/table_row_process.js?raw","../src/components/approval/example_code/table_bottom_process.js?raw","../src/components/approval/example_code/form_bottom_process.js?raw","../src/components/approval/example_code/form_bottom_save.js?raw","../src/components/approval/example_code/approve_table_row_edit.js?raw","../src/components/approval/example_code/bottom_edit.js?raw","../src/components/approval/example_code/approve_table_row_commit.js?raw","../src/components/approval/example_code/bottom_commit.js?raw","../src/components/approval/example_code/approve_table_row_delete.js?raw","../src/components/approval/example_code/bottom_delete.js?raw","../src/components/approval/example_code/remote_table_pro_add.js?raw","../src/components/approval/example_code/remote_table_pro_update.js?raw","../src/components/approval/example_code/table_row_show.js?raw","../src/components/approval/example_code/table_bottom_show.js?raw","../src/components/approval/example_code/form_bottom_show.js?raw","../src/components/approval/example_code/table_row_disable.js?raw","../src/components/approval/example_code/table_bottom_disable.js?raw","../src/components/approval/example_code/form_bottom_disable.js?raw","../src/components/approval/example_code/form_bottom_show_for_save.js?raw","../src/components/approval/example_code/form_bottom_show_for_edit.js?raw","../src/components/approval/example_code/approve_table_row_send_reminder.js?raw","../src/components/approval/example_code/bottom_send_reminder.js?raw","../src/components/approval/example_code/example_code.ts"],"sourcesContent":["export default \"async function run({ table_id, record, context, settings }) {\\n console.log('record', JSON.stringify(record));\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const currentTable = tables[table_id];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { ...formModel, name: 'test' };\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const currentTable = tables[table_id];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { ...formModel, name: 'test' };\\n}\\n\"","export default \"async function run({ context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { ...formModel, name: 'test' };\\n}\\n\"","export default \"async function run({ context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { data: context.formModel };\\n}\\n\"","export default \"async function run({ table_id, record, context, settings }) {\\n // console.log('record', JSON.stringify(record));\\n // console.log('context', JSON.stringify(context));\\n // console.log('settings', JSON.stringify(settings));\\n // const { tables, formModel } = context;\\n // const currentTable = tables[table_id];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n if (record.process_status != 'init') {\\n throw new Error('仅能编辑未提交的审批数据');\\n }\\n return { id: record.id };\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const table = tables['approve-approve_record'];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n if (!selectedRowKeys || selectedRowKeys.length != 1) {\\n throw new Error('请选择一条未提交的审批数据');\\n }\\n for (const item of selectedRecord) {\\n if (item.process_status != 'init') {\\n throw new Error('仅能编辑未提交的审批数据');\\n }\\n }\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { id: selectedRowKeys[0] };\\n}\\n\"","export default \"async function run({ table_id, record, context, settings }) {\\n // console.log('record', JSON.stringify(record));\\n // console.log('context', JSON.stringify(context));\\n // console.log('settings', JSON.stringify(settings));\\n // const { tables, formModel } = context;\\n // const currentTable = tables[table_id];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n if (record.process_status != 'init') {\\n throw new Error('仅能提交未提交的审批数据');\\n }\\n return { ids: [record.id] };\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const table = tables['approve-approve_record'];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n if (!selectedRowKeys || selectedRowKeys.length == 0) {\\n throw new Error('请选择未提交的审批数据');\\n }\\n for (const item of selectedRecord) {\\n if (item.process_status != 'init') {\\n throw new Error('仅能提交未提交的审批数据');\\n }\\n }\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { ids: selectedRowKeys };\\n}\\n\"","export default \"async function run({ table_id, record, context, settings }) {\\n // console.log('record', JSON.stringify(record));\\n // console.log('context', JSON.stringify(context));\\n // console.log('settings', JSON.stringify(settings));\\n // const { tables, formModel } = context;\\n // const currentTable = tables[table_id];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n if (record.process_status != 'init') {\\n throw new Error('仅能删除未提交的审批数据');\\n }\\n return { ids: [record.id] };\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const table = tables['approve-approve_record'];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n if (!selectedRecord || selectedRecord.length == 0) {\\n throw new Error('请选择需要删除的数据');\\n }\\n for (const item of selectedRecord) {\\n if (item.process_status != 'init') {\\n throw new Error('仅能删除未提交的审批数据');\\n }\\n }\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { ids: selectedRowKeys };\\n}\\n\"","export default \"async function run({ context, value }) {\\n // value 为数组,对应明细的当前值\\n console.log('context', JSON.stringify(context));\\n const { tables, formModel } = context;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n // 返回新的记录\\n return { name: 'test' };\\n}\\n\"","export default \"async function run({ context, value }) {\\n // value 为数组,对应明细的当前值\\n console.log('context', JSON.stringify(context));\\n const { tables, formModel } = context;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n // 返回数组,明细最终的值\\n return [{ name: 'test' }];\\n}\\n\"","export default \"async function run({ table_id, record, context, settings }) {\\n console.log('record', JSON.stringify(record));\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const currentTable = tables[table_id];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const currentTable = tables[table_id];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\"","export default \"async function run({ context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\"","export default \"async function run({ table_id, record, context, settings }) {\\n console.log('record', JSON.stringify(record));\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const currentTable = tables[table_id];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n const currentTable = tables[table_id];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = currentTable;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\"","export default \"async function run({ context, settings }) {\\n console.log('context', JSON.stringify(context));\\n console.log('settings', JSON.stringify(settings));\\n const { tables, formModel } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return true;\\n}\\n\"","export default \"async function run({ context, settings }) {\\n // console.log('context', JSON.stringify(context));\\n // console.log('settings', JSON.stringify(settings));\\n const { isEdit } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return !isEdit;\\n}\\n\"","export default \"async function run({ context, settings }) {\\n // console.log('context', JSON.stringify(context));\\n // console.log('settings', JSON.stringify(settings));\\n const { isEdit } = context;\\n // const table = tables['approve-approve_record'];\\n // const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return !!isEdit;\\n}\\n\"","export default \"async function run({ table_id, record, context, settings }) {\\n if (record.process_status != 'approving') {\\n throw new Error('仅能催办审批中的审批');\\n }\\n return { ids: [record.process_instance_id] };\\n}\\n\"","export default \"async function run({ table_id, context, settings }) {\\n const { tables, formModel } = context;\\n const table = tables['approve-approve_record'];\\n const { searchConditions, selectedRowKeys, selectedRecord, datasource } = table;\\n if (!selectedRowKeys || selectedRowKeys.length == 0) {\\n throw new Error('请选择审批中的审批数据');\\n }\\n const process_instance_id_ids = [];\\n for (const item of selectedRecord) {\\n if (item.process_status != 'approving') {\\n throw new Error('仅能催办审批中的审批');\\n }\\n process_instance_id_ids.push(item.process_instance_id);\\n }\\n return { ids: process_instance_id_ids };\\n}\\n\"","import table_row_process from './table_row_process.js?raw';\nimport table_bottom_process from './table_bottom_process.js?raw';\nimport form_bottom_process from './form_bottom_process.js?raw';\nimport form_bottom_save from './form_bottom_save.js?raw';\nimport approve_table_row_edit from './approve_table_row_edit.js?raw';\nimport bottom_edit from './bottom_edit.js?raw';\nimport approve_table_row_commit from './approve_table_row_commit.js?raw';\nimport bottom_commit from './bottom_commit.js?raw';\nimport approve_table_row_delete from './approve_table_row_delete.js?raw';\nimport bottom_delete from './bottom_delete.js?raw';\nimport remote_table_pro_add from './remote_table_pro_add.js?raw';\nimport remote_table_pro_update from './remote_table_pro_update.js?raw';\nimport table_row_show from './table_row_show.js?raw';\nimport table_bottom_show from './table_bottom_show.js?raw';\nimport form_bottom_show from './form_bottom_show.js?raw';\nimport table_row_disable from './table_row_disable.js?raw';\nimport table_bottom_disable from './table_bottom_disable.js?raw';\nimport form_bottom_disable from './form_bottom_disable.js?raw';\nimport form_bottom_show_for_save from './form_bottom_show_for_save.js?raw';\nimport form_bottom_show_for_edit from './form_bottom_show_for_edit.js?raw';\nimport approve_table_row_send_reminder from './approve_table_row_send_reminder.js?raw';\nimport bottom_send_reminder from './bottom_send_reminder.js?raw';\nexport const exampleCodeList = [\n {\n label: '表格行数据处理',\n value: table_row_process,\n actions: ['process', null],\n types: ['click'],\n },\n {\n label: '表格底部数据处理',\n value: table_bottom_process,\n actions: ['process', null],\n types: ['click'],\n },\n {\n label: '表单底部数据处理',\n value: form_bottom_process,\n actions: ['process', null],\n types: ['click'],\n },\n { label: '审批保存', value: form_bottom_save, actions: ['save_approve'], types: ['click'] },\n {\n label: '审批表格行编辑',\n value: approve_table_row_edit,\n actions: ['edit_approve'],\n types: ['click'],\n },\n { label: '底部按钮编辑审批', value: bottom_edit, actions: ['edit_approve'], types: ['click'] },\n {\n label: '审批表格行提交',\n value: approve_table_row_commit,\n actions: ['commit_approve'],\n types: ['click'],\n },\n {\n label: '底部按钮提交审批',\n value: bottom_commit,\n actions: ['commit_approve'],\n types: ['click'],\n },\n {\n label: '审批表格行删除',\n value: approve_table_row_delete,\n actions: ['delete_approve'],\n types: ['click'],\n },\n {\n label: '底部按钮删除审批',\n value: bottom_delete,\n actions: ['delete_approve'],\n types: ['click'],\n },\n {\n label: '审批表格行催办',\n value: approve_table_row_send_reminder,\n actions: ['send_reminder'],\n types: ['click'],\n },\n {\n label: '底部按钮催办审批',\n value: bottom_send_reminder,\n actions: ['send_reminder'],\n types: ['click'],\n },\n { label: '明细添加', value: remote_table_pro_add, actions: ['add'], types: ['click'] },\n { label: '明细整体更新', value: remote_table_pro_update, actions: ['update'], types: ['click'] },\n { label: '表格行按钮显示控制', value: table_row_show, types: ['show'] },\n { label: '表格底部按钮显示控制', value: table_bottom_show, types: ['show'] },\n { label: '表单底部按钮显示控制', value: form_bottom_show, types: ['show'] },\n { label: '表格行按钮禁用控制', value: table_row_disable, types: ['disable'] },\n { label: '表格底部按钮禁用控制', value: table_bottom_disable, types: ['disable'] },\n { label: '表单底部按钮禁用控制', value: form_bottom_disable, types: ['disable'] },\n { label: '审批表单保存按钮', value: form_bottom_show_for_save, types: ['show'] },\n { label: '审批表单编辑按钮', value: form_bottom_show_for_edit, types: ['show'] },\n];\n"],"mappings":";AAAA,IAAA,IAAe,kmBCAf,IAAe,wiBCAf,IAAe,siBCAf,IAAe,miBCAf,IAAe,4rBCAf,IAAe,gxBCAf,IAAe,+rBCAf,IAAe,4wBCAf,IAAe,+rBCAf,IAAe,2wBCAf,IAAe,wXCAf,IAAe,+XCAf,IAAe,wkBCAf,IAAe,8gBCAf,IAAe,4gBCAf,IAAe,wkBCAf,IAAe,8gBCAf,IAAe,4gBKsBF,IAAkB;CAC7B;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,WAAW,KAAK;EAC1B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,WAAW,KAAK;EAC1B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,WAAW,KAAK;EAC1B,OAAO,CAAC,QAAQ;EACjB;CACD;EAAE,OAAO;EAAQ,OAAO;EAAkB,SAAS,CAAC,eAAe;EAAE,OAAO,CAAC,QAAQ;EAAE;CACvF;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,OAAO,CAAC,QAAQ;EACjB;CACD;EAAE,OAAO;EAAY,OAAO;EAAa,SAAS,CAAC,eAAe;EAAE,OAAO,CAAC,QAAQ;EAAE;CACtF;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,iBAAiB;EAC3B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,iBAAiB;EAC3B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,iBAAiB;EAC3B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,OAAO;EACP,SAAS,CAAC,iBAAiB;EAC3B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,OF3EW;EE4EX,SAAS,CAAC,gBAAgB;EAC1B,OAAO,CAAC,QAAQ;EACjB;CACD;EACE,OAAO;EACP,ODjFW;ECkFX,SAAS,CAAC,gBAAgB;EAC1B,OAAO,CAAC,QAAQ;EACjB;CACD;EAAE,OAAO;EAAQ,OAAO;EAAsB,SAAS,CAAC,MAAM;EAAE,OAAO,CAAC,QAAQ;EAAE;CAClF;EAAE,OAAO;EAAU,OAAO;EAAyB,SAAS,CAAC,SAAS;EAAE,OAAO,CAAC,QAAQ;EAAE;CAC1F;EAAE,OAAO;EAAa,OAAO;EAAgB,OAAO,CAAC,OAAO;EAAE;CAC9D;EAAE,OAAO;EAAc,OAAO;EAAmB,OAAO,CAAC,OAAO;EAAE;CAClE;EAAE,OAAO;EAAc,OAAO;EAAkB,OAAO,CAAC,OAAO;EAAE;CACjE;EAAE,OAAO;EAAa,OAAO;EAAmB,OAAO,CAAC,UAAU;EAAE;CACpE;EAAE,OAAO;EAAc,OAAO;EAAsB,OAAO,CAAC,UAAU;EAAE;CACxE;EAAE,OAAO;EAAc,OAAO;EAAqB,OAAO,CAAC,UAAU;EAAE;CACvE;EAAE,OAAO;EAAY,OJ7FR;EI6F0C,OAAO,CAAC,OAAO;EAAE;CACxE;EAAE,OAAO;EAAY,OH9FR;EG8F0C,OAAO,CAAC,OAAO;EAAE;CACzE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowHistoryViewModal-D8DJP7Te.js","names":[],"sources":["../src/components/approval/components/approvalHistory/flowHistoryViewModal.vue","../src/components/approval/components/approvalHistory/flowHistoryViewModal.vue"],"sourcesContent":["<template>\n <a-modal\n :open=\"true\"\n :title=\"$t('历史版本')\"\n width=\"100%\"\n wrap-class-name=\"full-modal\"\n @cancel=\"handleCancel\"\n >\n <template #footer></template>\n <a-tabs\n type=\"card\"\n size=\"middle\"\n class=\"tab-content\"\n >\n <a-tab-pane\n :key=\"0\"\n v-if=\"history_ids.length === 2\"\n :tab=\"$t('版本比较')\"\n >\n <TextDiff\n :left=\"history_records[0] || {}\"\n :right=\"history_records[1] || {}\"\n />\n </a-tab-pane>\n <a-tab-pane\n v-for=\"record in history_records\"\n :tab=\"record.name\"\n :key=\"record.name\"\n >\n <div class=\"json-obj-container\">\n <code-editor\n :editorValue=\"record.content\"\n mode=\"xml\"\n :lineWrapping=\"true\"\n />\n </div>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { getApiData } from '@/init-plugin';\nexport default defineComponent({\n name: 'flowHistoryViewModal',\n props: {\n height: {\n type: Number,\n default: () => 1000,\n },\n history_ids: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n org_id: {\n type: Number,\n default: () => 0,\n },\n },\n components: {\n },\n emits: ['ok', 'cancel'],\n\n setup(props, { emit }) {\n const handleCancel = () => {\n emit('cancel');\n };\n const handleOk = () => {};\n const loading = ref(false);\n const history_records = ref([]);\n const getHistoryRecords = async () => {\n const conditions = [\n {\n field_name: 'id',\n operator: 'in',\n value: props.history_ids,\n format: 'input',\n class_name: 'str',\n },\n ];\n\n const queryParams = {\n org_id: props.org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_flow_setting_history_list')\n .then((res: any) => {\n const tmpMap = {};\n loading.value = true;\n res.data.forEach((item: any) => {\n tmpMap[item.id] = {\n name: `[${item.id}]${item.create_time}`,\n content: item.content,\n };\n });\n history_records.value.length = 0;\n props.history_ids.forEach(id => {\n history_records.value.push(tmpMap[id]);\n });\n loading.value = false;\n })\n .catch(() => {\n loading.value = false;\n });\n };\n onMounted(() => {\n getHistoryRecords();\n });\n return {\n handleCancel,\n handleOk,\n loading,\n history_records,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.ant-layout-content,\n.ant-layout-sider {\n overflow: auto;\n background-color: white;\n outline: 1px #ebeef5 solid;\n}\n.tab-content {\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.ant-tabs {\n height: 100%;\n\n ::v-deep(.ant-tabs-content-top) {\n height: 100%;\n }\n}\n.json-obj-container {\n height: 100%;\n overflow-y: auto;\n}\n</style>\n","<template>\n <a-modal\n :open=\"true\"\n :title=\"$t('历史版本')\"\n width=\"100%\"\n wrap-class-name=\"full-modal\"\n @cancel=\"handleCancel\"\n >\n <template #footer></template>\n <a-tabs\n type=\"card\"\n size=\"middle\"\n class=\"tab-content\"\n >\n <a-tab-pane\n :key=\"0\"\n v-if=\"history_ids.length === 2\"\n :tab=\"$t('版本比较')\"\n >\n <TextDiff\n :left=\"history_records[0] || {}\"\n :right=\"history_records[1] || {}\"\n />\n </a-tab-pane>\n <a-tab-pane\n v-for=\"record in history_records\"\n :tab=\"record.name\"\n :key=\"record.name\"\n >\n <div class=\"json-obj-container\">\n <code-editor\n :editorValue=\"record.content\"\n mode=\"xml\"\n :lineWrapping=\"true\"\n />\n </div>\n </a-tab-pane>\n </a-tabs>\n </a-modal>\n</template>\n<script lang=\"ts\">\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { getApiData } from '@/init-plugin';\nexport default defineComponent({\n name: 'flowHistoryViewModal',\n props: {\n height: {\n type: Number,\n default: () => 1000,\n },\n history_ids: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n org_id: {\n type: Number,\n default: () => 0,\n },\n },\n components: {\n },\n emits: ['ok', 'cancel'],\n\n setup(props, { emit }) {\n const handleCancel = () => {\n emit('cancel');\n };\n const handleOk = () => {};\n const loading = ref(false);\n const history_records = ref([]);\n const getHistoryRecords = async () => {\n const conditions = [\n {\n field_name: 'id',\n operator: 'in',\n value: props.history_ids,\n format: 'input',\n class_name: 'str',\n },\n ];\n\n const queryParams = {\n org_id: props.org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_flow_setting_history_list')\n .then((res: any) => {\n const tmpMap = {};\n loading.value = true;\n res.data.forEach((item: any) => {\n tmpMap[item.id] = {\n name: `[${item.id}]${item.create_time}`,\n content: item.content,\n };\n });\n history_records.value.length = 0;\n props.history_ids.forEach(id => {\n history_records.value.push(tmpMap[id]);\n });\n loading.value = false;\n })\n .catch(() => {\n loading.value = false;\n });\n };\n onMounted(() => {\n getHistoryRecords();\n });\n return {\n handleCancel,\n handleOk,\n loading,\n history_records,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.ant-layout-content,\n.ant-layout-sider {\n overflow: auto;\n background-color: white;\n outline: 1px #ebeef5 solid;\n}\n.tab-content {\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.ant-tabs {\n height: 100%;\n\n ::v-deep(.ant-tabs-content-top) {\n height: 100%;\n }\n}\n.json-obj-container {\n height: 100%;\n overflow-y: auto;\n}\n</style>\n"],"mappings":";;;AA2CA,IAAA,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,QAAQ;GACN,MAAM;GACN,eAAe;GAChB;EACD,aAAa;GACX,MAAM;GACN,eAAe,EAAE;GAClB;EACD,QAAQ;GACN,MAAM;GACN,eAAe;GAChB;EACF;CACD,YAAY,EACX;CACD,OAAO,CAAC,MAAM,SAAS;CAEvB,MAAM,GAAO,EAAE,WAAQ;EACrB,IAAM,UAAqB;AACzB,KAAK,SAAS;KAEV,UAAiB,IACjB,IAAU,EAAI,GAAM,EACpB,IAAkB,EAAI,EAAE,CAAC,EACzB,IAAoB,YAAY;GACpC,IAAM,IAAa,CACjB;IACE,YAAY;IACZ,UAAU;IACV,OAAO,EAAM;IACb,QAAQ;IACR,YAAY;IACb,CACF;AASD,KAPoB;IAClB,QAAQ,EAAM;IACd,eAAe;IACf,eAAe;KAAC;KAAM;KAAe;KAAU;IAC/C,aAAa,CAAC,MAAM;IACpB,YAAY,CAAC,EAAW;IACzB,EACuB,2CAA0C,CAC/D,MAAM,MAAa;IAClB,IAAM,IAAS,EAAE;AAYjB,IAXA,EAAQ,QAAQ,IAChB,EAAI,KAAK,SAAS,MAAc;AAC9B,OAAO,EAAK,MAAM;MAChB,MAAM,IAAI,EAAK,GAAG,GAAG,EAAK;MAC1B,SAAS,EAAK;MACf;MACD,EACF,EAAgB,MAAM,SAAS,GAC/B,EAAM,YAAY,SAAQ,MAAM;AAC9B,OAAgB,MAAM,KAAK,EAAO,GAAI;MACtC,EACF,EAAQ,QAAQ;KACjB,CACA,YAAY;AACX,MAAQ,QAAQ;KAChB;;AAKN,SAHA,QAAgB;AACd,MAAmB;IACnB,EACK;GACL;GACA;GACA;GACA;GACD;;CAEJ,CAAC,QCzFW,OAAM,sBAAoB;;;aA5BrC,EAqCU,GAAA;EApCP,MAAM;EACN,OAAO,EAAA,GAAE,OAAA;EACV,OAAM;EACN,mBAAgB;EACf,UAAQ,EAAA;;EAEE,QAAM,QAAY,CAAA,GAAA,AAAA,EAAA,OAAA,EAAA,CAAA,CAAA;mBA6BpB,CA5BT,EA4BS,GAAA;GA3BP,MAAK;GACL,MAAK;GACL,OAAM;;oBAWO,CAPL,EAAA,YAAY,WAAM,KAAA,GAAA,EAF1B,EASa,GAAA;IARV,KAAK;IAEL,KAAK,EAAA,GAAE,OAAA;;qBAKN,CAHF,EAGE,GAAA;KAFC,MAAM,EAAA,gBAAe,MAAA,EAAA;KACrB,OAAO,EAAA,gBAAe,MAAA,EAAA;;;wCAG3B,EAYa,GAAA,MAAA,EAXM,EAAA,kBAAV,YADT,EAYa,GAAA;IAVV,KAAK,EAAO;IACZ,KAAK,EAAO;;qBAQP,CANN,EAMM,OANN,GAMM,CALJ,EAIE,GAAA;KAHC,aAAa,EAAO;KACrB,MAAK;KACJ,cAAc"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../node_modules/codemirror/mode/xml/xml.js","../node_modules/codemirror/lib/codemirror.css","../src/components/Cell_click_data_source.vue","../src/components/Cell_click_data_source.vue","../src/index.ts"],"sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function lower(tagName) {\n return tagName && tagName.toLowerCase();\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) ||\n !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName)))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(lower(context.tagName))) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[lower(context.tagName)];\n if (grabbers && grabbers.hasOwnProperty(lower(tagAfter[2])))\n context = context.prev;\n else\n break;\n }\n }\n while (context && context.prev && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return state.baseIndent || 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n },\n\n xmlCurrentTag: function(state) {\n return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n },\n\n xmlCurrentContext: function(state) {\n var context = []\n for (var cx = state.context; cx; cx = cx.prev)\n context.push(cx.tagName)\n return context.reverse()\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","/* BASICS */\n\n.CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-family: monospace;\n height: 300px;\n color: black;\n direction: ltr;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n z-index: 1;\n}\n.cm-fat-cursor .CodeMirror-line::selection,\n.cm-fat-cursor .CodeMirror-line > span::selection, \n.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }\n.cm-fat-cursor .CodeMirror-line::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }\n.cm-fat-cursor { caret-color: transparent; }\n@-moz-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@-webkit-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n position: absolute;\n left: 0; right: 0; top: -50px; bottom: 0;\n overflow: hidden;\n}\n.CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0; bottom: 0;\n position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n position: relative;\n overflow: hidden;\n background: white;\n}\n\n.CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px; margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n z-index: 0;\n}\n.CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 6;\n display: none;\n outline: none;\n}\n.CodeMirror-vscrollbar {\n right: 0; top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n bottom: 0; left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n position: absolute; left: 0; top: 0;\n min-height: 100%;\n z-index: 3;\n}\n.CodeMirror-gutter {\n white-space: normal;\n height: 100%;\n display: inline-block;\n vertical-align: top;\n margin-bottom: -50px;\n}\n.CodeMirror-gutter-wrapper {\n position: absolute;\n z-index: 4;\n background: none !important;\n border: none !important;\n}\n.CodeMirror-gutter-background {\n position: absolute;\n top: 0; bottom: 0;\n z-index: 4;\n}\n.CodeMirror-gutter-elt {\n position: absolute;\n cursor: default;\n z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n /* Reset some styles that the rest of the page might have set */\n -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: inherit;\n color: inherit;\n z-index: 2;\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre.CodeMirror-line,\n.CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n}\n\n.CodeMirror-linebackground {\n position: absolute;\n left: 0; right: 0; top: 0; bottom: 0;\n z-index: 0;\n}\n\n.CodeMirror-linewidget {\n position: relative;\n z-index: 2;\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n}\n\n.CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n background-color: #ffa;\n background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n /* Hide the cursor when printing */\n .CodeMirror div.CodeMirror-cursors {\n visibility: hidden;\n }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n","<template>\n <a-button\n :title=\"display_text\"\n :disabled=\"!hasText\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ hasText ? display_text : '—' }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"数据来源\"\n @close=\"onClose\"\n >\n <a-spin :spinning=\"loading\">\n <a-tabs v-model:activeKey=\"active_tab\">\n <!--\n 修改 / 删除 / 打印放在 tabs 的 #rightExtra:按钮属于「审批单」这条记录,\n 不属于「基础信息」tab,所以必须等切到审批单 tab 才显示(v-if 看 active_tab)。\n 是否显示与点击行为统一由 useApproveRecordActions 封装 —— 与 Cell_click_approve\n 抽屉右上角是同一份 composable、同一段按钮写法。\n -->\n <template #rightExtra>\n <template v-if=\"active_tab === 'approve'\">\n <a-button\n v-if=\"canShow('edit_approve')\"\n :loading=\"actionsLoading\"\n type=\"primary\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n </template>\n <a-tab-pane\n key=\"base\"\n tab=\"基础信息\"\n >\n <a-descriptions\n bordered\n :column=\"3\"\n size=\"small\"\n >\n <a-descriptions-item label=\"数据ID\">\n {{ excel_item.id }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"文件名称\"\n >\n {{ excel_item.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据类型\">\n {{ excel_item.excel_type__name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据来源\">\n {{ excel_item.source_type_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"状态\">\n {{ excel_item.status_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传人\">\n {{ excel_item.real_name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传时间\">\n {{ excel_item.create_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"更新时间\">\n {{ excel_item.update_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"在用数据\">\n {{ excel_item.is_used ? '在用' : '禁用' }}\n </a-descriptions-item>\n <a-descriptions-item label=\"正确记录数\">\n {{ excel_item.good_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"错误记录数\">\n {{ excel_item.error_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"导入数量\">\n {{ excel_item.import_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"最大行号\">\n {{ excel_item.max_row_index }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"备注\"\n >\n {{ excel_item.bz }}\n </a-descriptions-item>\n </a-descriptions>\n </a-tab-pane>\n <a-tab-pane\n v-if=\"approve_record\"\n key=\"approve\"\n tab=\"审批单\"\n >\n <!--\n :show-actions=\"false\" —— 修改/删除/打印按钮已移到上面 tabs 的 #rightExtra,\n 关掉详情组件自带的那一份,避免同一个抽屉里出现两套同名按钮。\n 外层包一层 ref 是打印区域:runAction('print') 打的就是它。\n -->\n <div ref=\"printAreaRef\">\n <approval-for-details\n ref=\"detailRef\"\n :key=\"approve_record.id\"\n :record=\"approve_record\"\n :show-actions=\"false\"\n />\n </div>\n </a-tab-pane>\n </a-tabs>\n </a-spin>\n </a-drawer>\n <!--\n 两个模态框按需渲染(v-if 用 editorOpen / removeOpen):只要 <ApprovalEditorModal>\n 进了 vdom,异步加载器就会触发 chunk 下载(core.vue → bpmn-js 约 1MB 的重链),\n 所以必须等真正点「修改」了才渲染。\n -->\n <ApprovalEditorModal\n v-if=\"editorOpen\"\n v-model:open=\"editorOpen\"\n v-bind=\"editorProps\"\n />\n <cancel-modal\n v-if=\"removeOpen\"\n v-model:cancel-modal-show=\"removeOpen\"\n v-bind=\"removeProps\"\n />\n</template>\n\n<script lang=\"ts\">\n// ⚠️ 这段在普通 <script> 块中:模块加载时只执行一次,缓存才是真正的全局共享。\n// (<script setup> 内的代码编译后进入 setup(),每个实例创建都会重新执行,放那里等于没缓存)\nconst INFO_CACHE_TTL = 5 * 60 * 1000;\nconst infoCache = new Map<string, { data: Record<string, any>; time: number }>();\nconst infoPending = new Map<string, Promise<Record<string, any>>>();\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent, onMounted, ref } from 'vue';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport CancelModal from './approval/components/CancelModal.vue';\nimport { useApproveRecordActions } from './approval/useApprovalRecordActions';\nimport { useGetApiData, useUserStore } from '../init-plugin';\n\ndefineOptions({\n name: 'Cell_click_data_source',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst getApiData = useGetApiData();\nconst userStore = useUserStore();\nconst current_org = userStore?.current_org;\n\nconst open = ref(false);\nconst loading = ref(false);\nconst active_tab = ref('base');\nconst loaded = ref(false);\nconst display_text = ref(props.cmpObj?.text);\n/**\n * `cmpObj.text` 是数据来源记录 id;为空(null / undefined / 空串)时这条单元格\n * 没有可点击的数据来源:按钮禁用、显示横杠、禁止拉接口。\n */\nconst hasText = computed(() => {\n const t = props.cmpObj?.text;\n return t !== null && t !== undefined && t !== '';\n});\nconst excel_item = ref<Record<string, any>>({});\nconst approve_record = ref<Record<string, any> | null>(null);\nconst printAreaRef = ref<HTMLElement | null>(null);\n/** 详情组件实例:修改保存 / 作废成功后调它的 reload() 重拉详情 */\nconst detailRef = ref<{ reload: () => void } | null>(null);\n\n/**\n * 修改 / 删除 / 打印的统一封装(是否显示 + 点击行为),按钮渲染在 tabs 的 #rightExtra。\n *\n * ⚠️ `recordId` 里的 `open.value ?` 门条件不能去掉:\n * 本组件是**单元格组件**,列表里每一行都会渲染一个实例;`useApproveRecordActions`\n * 内部的 immediate watch 会对非空 recordId 立即拉 `/approve/get_approve_record`,\n * 不加门就是一页 50 行 = 50 个请求。抽屉没开(或这条数据没有审批单)时保持 null。\n */\nconst {\n canShow,\n runAction,\n loading: actionsLoading,\n editorOpen,\n editorProps,\n removeOpen,\n removeProps,\n} = useApproveRecordActions({\n recordId: () => (open.value ? (approve_record.value?.id ?? null) : null),\n modelType: () => approve_record.value?.menu_flag,\n getPrintElement: () => printAreaRef.value,\n printTitle: '审批信息',\n onChange: () => {\n // 详情组件的 :key 是 approve_record.id,保存后 id 不变,必须手动调 reload 重拉\n detailRef.value?.reload();\n },\n});\n\n/**\n * 编辑模态框必须**异步**引入(与 approval_for_details / Cell_click_approve 同一个理由):\n * 本组件在 install() 里是静态注册的,静态 import 会把\n * ApprovalEditorModal → core.vue → bpmn-js 这条约 1MB 的重链拉回首屏静态闭包。\n */\nconst ApprovalEditorModal = defineAsyncComponent(\n () => import('./approval/ApprovalEditorModal.vue'),\n);\n\nconst fetch_info = async (excel_item_id: string) => {\n const cached = infoCache.get(excel_item_id);\n if (cached && Date.now() - cached.time < INFO_CACHE_TTL) {\n return cached.data;\n }\n // 并发去重:多个实例同时挂载时只发一次请求\n let pending = infoPending.get(excel_item_id);\n if (!pending) {\n pending = getApiData(\n {\n org_id: current_org?.id,\n excel_item_id,\n },\n '/approve/get_excel_item_source_info',\n ).finally(() => {\n infoPending.delete(excel_item_id);\n });\n infoPending.set(excel_item_id, pending);\n }\n const res: any = await pending;\n const data = {\n excel_item: res?.excel_item || {},\n approve_record: res?.approve_record || null,\n };\n infoCache.set(excel_item_id, { data, time: Date.now() });\n return data;\n};\n\nconst load_info = async () => {\n loading.value = true;\n try {\n const data = await fetch_info(props.cmpObj.text);\n excel_item.value = data.excel_item;\n approve_record.value = data.approve_record;\n if (excel_item.value.name) {\n display_text.value = excel_item.value.name;\n }\n loaded.value = true;\n } finally {\n loading.value = false;\n }\n};\n// 挂载时预取一次(有模块级缓存兜底),让按钮点击前就显示文件名称\nonMounted(() => {\n if (hasText.value) {\n load_info();\n }\n});\nconst is_open = async () => {\n if (!hasText.value) {\n return;\n }\n open.value = true;\n active_tab.value = 'base';\n if (!loaded.value) {\n await load_info();\n }\n};\nconst onClose = () => {\n open.value = false;\n};\n</script>\n","<template>\n <a-button\n :title=\"display_text\"\n :disabled=\"!hasText\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ hasText ? display_text : '—' }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"数据来源\"\n @close=\"onClose\"\n >\n <a-spin :spinning=\"loading\">\n <a-tabs v-model:activeKey=\"active_tab\">\n <!--\n 修改 / 删除 / 打印放在 tabs 的 #rightExtra:按钮属于「审批单」这条记录,\n 不属于「基础信息」tab,所以必须等切到审批单 tab 才显示(v-if 看 active_tab)。\n 是否显示与点击行为统一由 useApproveRecordActions 封装 —— 与 Cell_click_approve\n 抽屉右上角是同一份 composable、同一段按钮写法。\n -->\n <template #rightExtra>\n <template v-if=\"active_tab === 'approve'\">\n <a-button\n v-if=\"canShow('edit_approve')\"\n :loading=\"actionsLoading\"\n type=\"primary\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n </template>\n <a-tab-pane\n key=\"base\"\n tab=\"基础信息\"\n >\n <a-descriptions\n bordered\n :column=\"3\"\n size=\"small\"\n >\n <a-descriptions-item label=\"数据ID\">\n {{ excel_item.id }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"文件名称\"\n >\n {{ excel_item.name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据类型\">\n {{ excel_item.excel_type__name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"数据来源\">\n {{ excel_item.source_type_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"状态\">\n {{ excel_item.status_display }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传人\">\n {{ excel_item.real_name }}\n </a-descriptions-item>\n <a-descriptions-item label=\"上传时间\">\n {{ excel_item.create_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"更新时间\">\n {{ excel_item.update_time }}\n </a-descriptions-item>\n <a-descriptions-item label=\"在用数据\">\n {{ excel_item.is_used ? '在用' : '禁用' }}\n </a-descriptions-item>\n <a-descriptions-item label=\"正确记录数\">\n {{ excel_item.good_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"错误记录数\">\n {{ excel_item.error_record_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"导入数量\">\n {{ excel_item.import_num }}\n </a-descriptions-item>\n <a-descriptions-item label=\"最大行号\">\n {{ excel_item.max_row_index }}\n </a-descriptions-item>\n <a-descriptions-item\n :span=\"2\"\n label=\"备注\"\n >\n {{ excel_item.bz }}\n </a-descriptions-item>\n </a-descriptions>\n </a-tab-pane>\n <a-tab-pane\n v-if=\"approve_record\"\n key=\"approve\"\n tab=\"审批单\"\n >\n <!--\n :show-actions=\"false\" —— 修改/删除/打印按钮已移到上面 tabs 的 #rightExtra,\n 关掉详情组件自带的那一份,避免同一个抽屉里出现两套同名按钮。\n 外层包一层 ref 是打印区域:runAction('print') 打的就是它。\n -->\n <div ref=\"printAreaRef\">\n <approval-for-details\n ref=\"detailRef\"\n :key=\"approve_record.id\"\n :record=\"approve_record\"\n :show-actions=\"false\"\n />\n </div>\n </a-tab-pane>\n </a-tabs>\n </a-spin>\n </a-drawer>\n <!--\n 两个模态框按需渲染(v-if 用 editorOpen / removeOpen):只要 <ApprovalEditorModal>\n 进了 vdom,异步加载器就会触发 chunk 下载(core.vue → bpmn-js 约 1MB 的重链),\n 所以必须等真正点「修改」了才渲染。\n -->\n <ApprovalEditorModal\n v-if=\"editorOpen\"\n v-model:open=\"editorOpen\"\n v-bind=\"editorProps\"\n />\n <cancel-modal\n v-if=\"removeOpen\"\n v-model:cancel-modal-show=\"removeOpen\"\n v-bind=\"removeProps\"\n />\n</template>\n\n<script lang=\"ts\">\n// ⚠️ 这段在普通 <script> 块中:模块加载时只执行一次,缓存才是真正的全局共享。\n// (<script setup> 内的代码编译后进入 setup(),每个实例创建都会重新执行,放那里等于没缓存)\nconst INFO_CACHE_TTL = 5 * 60 * 1000;\nconst infoCache = new Map<string, { data: Record<string, any>; time: number }>();\nconst infoPending = new Map<string, Promise<Record<string, any>>>();\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent, onMounted, ref } from 'vue';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport CancelModal from './approval/components/CancelModal.vue';\nimport { useApproveRecordActions } from './approval/useApprovalRecordActions';\nimport { useGetApiData, useUserStore } from '../init-plugin';\n\ndefineOptions({\n name: 'Cell_click_data_source',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst getApiData = useGetApiData();\nconst userStore = useUserStore();\nconst current_org = userStore?.current_org;\n\nconst open = ref(false);\nconst loading = ref(false);\nconst active_tab = ref('base');\nconst loaded = ref(false);\nconst display_text = ref(props.cmpObj?.text);\n/**\n * `cmpObj.text` 是数据来源记录 id;为空(null / undefined / 空串)时这条单元格\n * 没有可点击的数据来源:按钮禁用、显示横杠、禁止拉接口。\n */\nconst hasText = computed(() => {\n const t = props.cmpObj?.text;\n return t !== null && t !== undefined && t !== '';\n});\nconst excel_item = ref<Record<string, any>>({});\nconst approve_record = ref<Record<string, any> | null>(null);\nconst printAreaRef = ref<HTMLElement | null>(null);\n/** 详情组件实例:修改保存 / 作废成功后调它的 reload() 重拉详情 */\nconst detailRef = ref<{ reload: () => void } | null>(null);\n\n/**\n * 修改 / 删除 / 打印的统一封装(是否显示 + 点击行为),按钮渲染在 tabs 的 #rightExtra。\n *\n * ⚠️ `recordId` 里的 `open.value ?` 门条件不能去掉:\n * 本组件是**单元格组件**,列表里每一行都会渲染一个实例;`useApproveRecordActions`\n * 内部的 immediate watch 会对非空 recordId 立即拉 `/approve/get_approve_record`,\n * 不加门就是一页 50 行 = 50 个请求。抽屉没开(或这条数据没有审批单)时保持 null。\n */\nconst {\n canShow,\n runAction,\n loading: actionsLoading,\n editorOpen,\n editorProps,\n removeOpen,\n removeProps,\n} = useApproveRecordActions({\n recordId: () => (open.value ? (approve_record.value?.id ?? null) : null),\n modelType: () => approve_record.value?.menu_flag,\n getPrintElement: () => printAreaRef.value,\n printTitle: '审批信息',\n onChange: () => {\n // 详情组件的 :key 是 approve_record.id,保存后 id 不变,必须手动调 reload 重拉\n detailRef.value?.reload();\n },\n});\n\n/**\n * 编辑模态框必须**异步**引入(与 approval_for_details / Cell_click_approve 同一个理由):\n * 本组件在 install() 里是静态注册的,静态 import 会把\n * ApprovalEditorModal → core.vue → bpmn-js 这条约 1MB 的重链拉回首屏静态闭包。\n */\nconst ApprovalEditorModal = defineAsyncComponent(\n () => import('./approval/ApprovalEditorModal.vue'),\n);\n\nconst fetch_info = async (excel_item_id: string) => {\n const cached = infoCache.get(excel_item_id);\n if (cached && Date.now() - cached.time < INFO_CACHE_TTL) {\n return cached.data;\n }\n // 并发去重:多个实例同时挂载时只发一次请求\n let pending = infoPending.get(excel_item_id);\n if (!pending) {\n pending = getApiData(\n {\n org_id: current_org?.id,\n excel_item_id,\n },\n '/approve/get_excel_item_source_info',\n ).finally(() => {\n infoPending.delete(excel_item_id);\n });\n infoPending.set(excel_item_id, pending);\n }\n const res: any = await pending;\n const data = {\n excel_item: res?.excel_item || {},\n approve_record: res?.approve_record || null,\n };\n infoCache.set(excel_item_id, { data, time: Date.now() });\n return data;\n};\n\nconst load_info = async () => {\n loading.value = true;\n try {\n const data = await fetch_info(props.cmpObj.text);\n excel_item.value = data.excel_item;\n approve_record.value = data.approve_record;\n if (excel_item.value.name) {\n display_text.value = excel_item.value.name;\n }\n loaded.value = true;\n } finally {\n loading.value = false;\n }\n};\n// 挂载时预取一次(有模块级缓存兜底),让按钮点击前就显示文件名称\nonMounted(() => {\n if (hasText.value) {\n load_info();\n }\n});\nconst is_open = async () => {\n if (!hasText.value) {\n return;\n }\n open.value = true;\n active_tab.value = 'base';\n if (!loaded.value) {\n await load_info();\n }\n};\nconst onClose = () => {\n open.value = false;\n};\n</script>\n","// 导出组件,供外部 import 使用\nimport './styles';\nimport MyProcess from './MyProcess.vue';\nimport MyProcessViewer from './components/Process/viewer/index.vue';\nimport ApprovalForDetails from './components/approval_for_details.vue';\nimport CellClickDataSource from './components/Cell_click_data_source.vue';\n/**\n * 审批作废(= 删除)弹窗:填作废原因 → `/approve/cancel_agree_approve_record`。\n *\n * ⚠️ **静态**导出(不包 `defineAsyncComponent`):本文件自己的 `import` 就把它放进了\n * 宿主首屏静态闭包,而它本身只有约 2KB;再包一层异步外壳会产出\n * 「同一个模块既被静态 import 又被 `import()`」的形状,宿主构建随即报\n * `INEFFECTIVE_DYNAMIC_IMPORT`,对一个已加载的小模块也没有意义。\n * (历史上它还被 `approval_for_details.vue` 静态引用过;现在按钮/弹窗都已外置到\n * `Cell_click_approve` / `Cell_click_data_source`,本组件不再引用它。)\n */\nimport ApprovalCancelModal from './components/approval/components/CancelModal.vue';\nimport { depsInit, HOST_COMPONENTS } from './init-plugin';\nimport { defineAsyncComponent } from 'vue';\nimport type { Component } from 'vue';\n\n/**\n * 审批相关的 4 个组件走**懒加载导出**(`defineAsyncComponent` + 动态 `import()`)。\n *\n * 为什么:静态 import 会让整块审批代码 —— 包括它依赖的 bpmn-js 流程图引擎 —— 一起进入宿主的\n * **首屏静态闭包**(实测宿主里是约 1 018 KiB 的 `dist-*.js`,被入口 `main-*.js` 静态 `from` 引入),\n * 而宿主可能整场会话都不会渲染审批页。改成动态 import 后构建器会把它拆成独立 chunk,\n * 宿主只在真正路由过去 / 挂载该组件时才下载。\n *\n * 宿主侧的用法**完全不变**(`componentMap: { '...': ApprovalIndex }`、\n * `settingsExtra.tabs[].component = ApprovalSettings`),**不需要**再套一层\n * `defineAsyncComponent(() => ApprovalIndex)` —— 那会变成双层异步包装。\n *\n * 其余静态导出(MyProcess / MyProcessViewer / ApprovalForDetails / CellClickDataSource /\n * ApprovalCancelModal)引用方拿到的依然是**同步组件** —— `ApprovalCancelModal` 是静态的,\n * 原因见文件顶部它 import 处的注释。\n *\n * ⚠️ `: Component` 这个显式注解**不能删**:不加注解时 TS 会把 `defineAsyncComponent` 的推导弹出\n * 类型写进 `dist/index.d.ts`,而该类型引用了 `.vue` 文件里没有导出的私有 `Props`\n * (`error TS4023: Exported variable 'ApprovalSettings' has or is using name 'Props' from external\n * module \".../approvalPageConfig/index.vue\" but cannot be named`),后果是整个 `index.d.ts`\n * 静默不产出、宿主全部解析失败。注解成公开类型 `Component` 就能切断这条私有名的传播链。\n */\nconst ApprovalIndex: Component = defineAsyncComponent(\n () => import('./components/approval/index.vue'),\n);\nconst ApprovalSettings: Component = defineAsyncComponent(\n () => import('./components/approval/components/approvalPageConfig/index.vue'),\n);\nconst ApprovalHistory: Component = defineAsyncComponent(\n () => import('./components/approval/components/approvalHistory/index.vue'),\n);\nconst ApprovalDebugCode: Component = defineAsyncComponent(\n () => import('./components/approval/components/debugCode/debugCode.vue'),\n);\n/**\n * 全屏编辑模态框(详情页/列表单元格上的「修改」用它打开)。\n * 同样必须懒加载:它内部是 core.vue → formConfig/flowConfig → bpmn-js 那条重链。\n * 宿主用法:`<ApprovalEditorModal v-if=\"editorOpen\" v-model:open=\"editorOpen\" v-bind=\"editorProps\" />`\n * —— `v-if` 不能省,否则异步加载器在挂载时就会被触发,懒加载形同虚设。\n */\nconst ApprovalEditorModal: Component = defineAsyncComponent(\n () => import('./components/approval/ApprovalEditorModal.vue'),\n);\n/**\n * 「审批」单元格组件(表格里那个点开看审批详情的链接按钮)—— 从\n * `PSM_ApproveSystemPC/src/components/cellComponent/Cell_click_approve.vue` 移植进库。\n *\n * ⚠️ 必须**懒加载导出 + 懒加载注册**(`install()` 里 `.component('Cell_click_approve', CellClickApprove)`):\n * - 通用表格是用**单元格类型字符串**找组件的(`resolveAsset` 只查全局注册与 `components` 选项),\n * 所以名字必须真的注册进 app 组件表,否则那一格渲染空白、只留一行 warning;\n * - 它内部整条链(`approval_for_details` / `core.vue` / bpmn-js)很重,而**大部分页面根本用不到这一格**,\n * 所以连组件自身也走异步:宿主首屏不为它付任何体积,代价是每一格按钮比同行晚一帧出现。\n *\n * ⛔ 别顺手改成静态 `import`:一旦本文件静态引入它,同时 `install()` 里又保留这层 `defineAsyncComponent`,\n * 就构成「同一 chunk 既静态 import 又被 `import()`」→ 宿主构建直接报 `INEFFECTIVE_DYNAMIC_IMPORT`。\n * (`CancelModal` 正好是相反的情形:它必须静态,原因见文件顶部。)\n *\n * `: Component` 注解同样不能删(TS4023,见上面 ApprovalIndex 处的说明)。\n */\nconst CellClickApprove: Component = defineAsyncComponent(\n () => import('./components/Cell_click_approve.vue'),\n);\n\nexport {\n MyProcess,\n MyProcessViewer,\n ApprovalForDetails,\n CellClickDataSource,\n CellClickApprove,\n ApprovalIndex,\n ApprovalSettings,\n ApprovalHistory,\n ApprovalDebugCode,\n ApprovalEditorModal,\n ApprovalCancelModal,\n};\n\n/**\n * 审批记录「修改 / 删除 / 打印」的**统一封装**:是否显示(判断函数)+ 点击行为。\n *\n * 纯逻辑模块(只依赖 init-plugin 与一份 action 配置片段),可以静态导出:\n * 它不会把审批页或 bpmn 拖进来。宿主/详情壳的按钮都应当走它,别再各写一遍判断,\n * 否则详情页与列表页行按钮的行为迟早漂移。\n */\nexport {\n useApproveRecordActions,\n APPROVE_DETAIL_ACTION_KEYS,\n} from './components/approval/useApprovalRecordActions';\nexport type {\n ApproveDetailActionKey,\n UseApproveRecordActionsOptions,\n} from './components/approval/useApprovalRecordActions';\n\n/** 审批模块内部按名称弹窗的 modal(走宿主 modalBox -> 宿主 basic-layout 的全局组件解析) */\nconst APPROVAL_MODALS: Record<string, () => Promise<any>> = {\n codeHistoryViewModal: () => import('./components/approval/components/codeHistory/codeHistoryViewModal.vue'),\n approvalHistoryViewModal: () =>\n import('./components/approval/components/approvalHistory/approvalHistoryViewModal.vue'),\n flowHistoryViewModal: () =>\n import('./components/approval/components/approvalHistory/flowHistoryViewModal.vue'),\n};\n\nexport default {\n install(app: any, options: any) {\n // 宿主依赖统一收口(request / useUserStore / getApiData / modalBox / 常量 / 组件 ...),\n // 详见 src/init-plugin.ts\n app.use(depsInit(options || {}));\n\n // 宿主传入的组件在这里全局注册:Options API 的模板只会查 components 选项与全局注册,\n // 注入进来的组件无法写进 components 选项,所以必须走全局注册。\n for (const key of Object.keys(HOST_COMPONENTS)) {\n const component = options?.[key];\n if (component) {\n app.component(HOST_COMPONENTS[key], component);\n }\n }\n\n // 审批内部按名称弹窗的 modal,必须全局注册宿主才能通过 modalBox({ component: 'xxx' }) 解析到\n for (const name of Object.keys(APPROVAL_MODALS)) {\n app.component(\n name,\n defineAsyncComponent(APPROVAL_MODALS[name]),\n );\n }\n\n // 这里注册的都是文件顶部那批**已经包装好**的组件引用(`CellClickApprove` / `approvalIndex` /\n // `approvalSettings` / `approvalHistory` 是懒加载包装过的,`CellClickDataSource` 是同步组件)。\n // 别在这里再套一层 `defineAsyncComponent(() => import('...'))`:虽然同一个模块被两处动态\n // import 会被合并到同一个 chunk,但会多出一层无意义的异步包装;更要紧的是,一旦日后有人把\n // 这些组件加回静态 import,就会触发 INEFFECTIVE_DYNAMIC_IMPORT(拆不出独立 chunk)。\n app\n // ⚠️ 这两个单元格组件**必须按名字全局注册**:通用表格的单元格类型是字符串,\n // 解析走的是全局注册表(resolveAsset 不查 <script setup> 的顶层绑定)。\n // `Cell_click_data_source` 是同步注册(它本来就静态导出,且详情组件已在静态闭包内);\n // `Cell_click_approve` 自 2026-09-21 从 PSM_ApproveSystemPC 移植进来,走**异步注册**\n // (宿主首屏不为它付体积,见上面 CellClickApprove 处的说明)。\n .component('Cell_click_data_source', CellClickDataSource)\n .component('Cell_click_approve', CellClickApprove)\n .component('approvalIndex', ApprovalIndex)\n .component('approvalSettings', ApprovalSettings)\n .component('approvalHistory', ApprovalHistory);\n },\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-plugin-fQTSQzui.js","names":[],"sources":["../src/init-plugin.ts"],"sourcesContent":["import { App } from 'vue';\n\n/**\n * 宿主依赖注入表。\n *\n * lyflowchart 是独立维护、独立构建、被多个业务项目(PSMSystem2PC / PSM_ApproveSystemPC 等)共用的公共库,\n * 内部**不允许**直接 import liyu-pc-lib / liyu-pc-base:\n * - 有些依赖是宿主单例,必须用宿主那一份(request 实例、pinia store、api 请求封装、宿主事件总线 modalBox);\n * - 有些依赖带宿主上下文(executeScriptInWorker 依赖宿主注册的 worker 函数、cellComponentList 含宿主注册的自定义单元格);\n * - 组件则需要宿主把 liyu-pc-lib 里的组件实例传进来(公共库自己拿不到)。\n *\n * 约定:\n * 1. 宿主在 main.ts 里 `app.use(lyflowchart, { ...deps })` 一次性传入;\n * 2. `depsInit` 是写入器,由 src/index.ts 的 install 调用;\n * 3. 其余导出都是读取器。与原型同名的(getApiData / modalBox / executeScriptInWorker ...)直接导出转发函数,\n * 这样业务代码只换 import 来源,调用点一行都不用改;\n * 4. 常量统一用 useXxx() 读取(宿主注入时机早于任何组件渲染,setup 里取值即可)。\n *\n * 缺项一律直接抛错终止,不静默降级 —— 漏注入属于配置错误,早失败好过页面半死不活。\n */\nconst _data: Record<string, any> = {};\n\n/** 宿主需要传入的组件:键名即 options 字段名,值即全局注册时使用的组件名 */\nexport const HOST_COMPONENTS: Record<string, string> = {\n ColumnLayout: 'ColumnLayout',\n RowLayout: 'RowLayout',\n TextDiff: 'TextDiff',\n CodeEditor: 'CodeEditor',\n debugCode: 'debugCode',\n SmallTableSerarchField: 'SmallTableSerarchField',\n columnNameField: 'columnNameField',\n};\n\n/** 宿主注入项的完整清单(组件之外的普通字段),供文档与调用方对照 */\nexport const HOST_DEPS: string[] = [\n 'request',\n 'useUserStore',\n 'getApiData',\n 'cachedGetApiData',\n 'executeScriptInWorker',\n 'get_org_id',\n 'cellComponentList',\n 'modalBox',\n 'pageSelectOptions',\n 'modelOperator',\n 'modelTypeList',\n 'ConditionOperatorMap',\n 'operator_params_count',\n // 可选:业务项目自定义页面配置,键为 getApprovalConfig(key) 的 key\n 'customConfigs',\n];\n\nexport function depsInit(deps: Record<string, any>) {\n return {\n install(_app: App) {\n for (const key of Object.keys(deps || {})) {\n if (deps[key] !== undefined && deps[key] !== null) {\n _data[key] = deps[key];\n }\n }\n },\n };\n}\n\nconst _require = (key: string) => {\n const value = _data[key];\n if (value === undefined || value === null) {\n throw new Error(\n `[lyflowchart] 缺少宿主注入项 \"${key}\",请在 main.ts 的 app.use(lyflowchart, { ${key} }) 中传入`,\n );\n }\n return value;\n};\n\n/* ---------------- 宿主单例 / 宿主态函数 ---------------- */\n\n/** 宿主 request 实例(liyu-pc-lib/utils/request) */\nexport const useRequest = () => _require('request');\n\n/** 宿主的 getApiData(liyu-pc-lib/api/api-model),返回函数本身,调用方自行调用 */\nexport const useGetApiData = () => _require('getApiData');\n\n/**\n * 宿主 user store(liyu-pc-lib/store/user 的 useUserStore)。\n * 直接返回 store 实例,调用点写 `const userStore = useUserStore()`。\n */\nexport function useUserStore(...args: any[]) {\n return _require('useUserStore')(...args);\n}\n\nexport function getApiData(...args: any[]) {\n return _require('getApiData')(...args);\n}\n\nexport function cachedGetApiData(...args: any[]) {\n return _require('cachedGetApiData')(...args);\n}\n\n/** 在 Worker 里执行页面配置里的自定义脚本(依赖宿主注册的 workerHostFunctions) */\nexport function executeScriptInWorker(...args: any[]) {\n return _require('executeScriptInWorker')(...args);\n}\n\nexport function get_org_id(...args: any[]) {\n return _require('get_org_id')(...args);\n}\n\n/** 可选单元格组件(含宿主注册的自定义单元格) */\nexport function cellComponentList(...args: any[]) {\n return _require('cellComponentList')(...args);\n}\n\n/** 弹窗(走宿主事件总线 modal.add,必须与宿主 basic-layout 的监听同一个 bus 实例) */\nexport function modalBox(...args: any[]) {\n return _require('modalBox')(...args);\n}\n\n/* ---------------- 宿主常量 ---------------- */\n\nexport const usePageSelectOptions = (): Array<{ name: string; value: string }> =>\n _require('pageSelectOptions');\n\n/** 字段类型 -> 可用操作符 */\nexport const useModelOperator = (): Record<string, string[]> => _require('modelOperator');\n\n/** 字段类型 -> 可用组件类型 */\nexport const useModelTypeList = (): Record<string, any> => _require('modelTypeList');\n\n/** 操作符 -> 展示文案 */\nexport const useConditionOperatorMap = (): Record<string, string> =>\n _require('ConditionOperatorMap');\n\n/** 操作符 -> 入参个数 */\nexport const useOperatorParamsCount = (): Record<string, number> =>\n _require('operator_params_count');\n\n/* ---------------- 可选注入项 ---------------- */\n\n/**\n * 业务项目自定义的页面配置(可选,不传则只用本库自带的 configs)。\n *\n * 本库自带的 `src/components/approval/configs/<分组>/<key>.ts` 是在**库构建时**\n * 由 `import.meta.glob` 固化的,宿主项目没法再往这个目录里塞文件;而页面配置天然是\n * 按业务/菜单定制的东西,所以额外开放这个入口:\n *\n * app.use(lyflowchart, {\n * customConfigs: {\n * // key 即 getApprovalConfig(key) 的 key(menu_flag),命中同名文件名的配置\n * my_menu_flag: () => import('./approval-configs/my_menu_flag'),\n * default: () => import('./approval-configs/default'),\n * },\n * });\n *\n * 同名 key 由宿主覆盖本库自带的配置。取值形式与库自带的 glob 一致:\n * 一个返回 `{ default: ... }` 的懒加载函数。\n */\nexport const useCustomConfigs = (): Record<string, () => Promise<any>> =>\n _data.customConfigs || {};\n"],"mappings":";;;;;GAoBM,IAA6B,EAAE,EAGxB,IAA0C;CACrD,cAAc;CACd,WAAW;CACX,UAAU;CACV,YAAY;CACZ,WAAW;CACX,wBAAwB;CACxB,iBAAiB;CAClB;AAqBD,SAAgB,EAAS,GAA2B;AAClD,QAAO,EACL,QAAQ,GAAW;AACjB,OAAK,IAAM,KAAO,OAAO,KAAK,KAAQ,EAAE,CAAC,CACvC,CAAI,EAAK,OAAS,KAAA,KAAa,EAAK,OAAS,SAC3C,EAAM,KAAO,EAAK;IAIzB;;AAGH,IAAM,KAAY,MAAgB;CAChC,IAAM,IAAQ,EAAM;AACpB,KAAI,KAAiC,KACnC,OAAU,MACR,0BAA0B,EAAI,wCAAwC,EAAI,SAC3E;AAEH,QAAO;GAMI,UAAmB,EAAS,UAAU,EAGtC,UAAsB,EAAS,aAAa;AAMzD,SAAgB,EAAa,GAAG,GAAa;AAC3C,QAAO,EAAS,eAAe,CAAC,GAAG,EAAK;;AAG1C,SAAgB,EAAW,GAAG,GAAa;AACzC,QAAO,EAAS,aAAa,CAAC,GAAG,EAAK;;AAGxC,SAAgB,EAAiB,GAAG,GAAa;AAC/C,QAAO,EAAS,mBAAmB,CAAC,GAAG,EAAK;;AAI9C,SAAgB,EAAsB,GAAG,GAAa;AACpD,QAAO,EAAS,wBAAwB,CAAC,GAAG,EAAK;;AAGnD,SAAgB,EAAW,GAAG,GAAa;AACzC,QAAO,EAAS,aAAa,CAAC,GAAG,EAAK;;AAIxC,SAAgB,EAAkB,GAAG,GAAa;AAChD,QAAO,EAAS,oBAAoB,CAAC,GAAG,EAAK;;AAI/C,SAAgB,EAAS,GAAG,GAAa;AACvC,QAAO,EAAS,WAAW,CAAC,GAAG,EAAK;;AAKtC,IAAa,UACX,EAAS,oBAAoB,EAGlB,UAAmD,EAAS,gBAAgB,EAG5E,UAA8C,EAAS,gBAAgB,EAGvE,UACX,EAAS,uBAAuB,EAGrB,UACX,EAAS,wBAAwB,EAsBtB,UACX,EAAM,iBAAiB,EAAE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"leftColumn-CsPjufue.js","names":[],"sources":["../src/components/approval/components/approvalPageConfig/leftColumn.vue","../src/components/approval/components/approvalPageConfig/leftColumn.vue"],"sourcesContent":["<template>\n <div>\n <div>表格配置</div>\n <s-table\n :columns=\"columns\"\n :data-source=\"dataSource.tables\"\n row-key=\"id\"\n :pagination=\"false\"\n :row-selection=\"rowSelection\"\n :custom-row=\"customRow\"\n :row-class-name=\"rowClassName\"\n :range-selection=\"false\"\n >\n <template #bodyCell=\"{ column, record, text }\">\n <template v-if=\"column.key === 'action'\">\n <a-button\n type=\"link\"\n :danger=\"true\"\n @click.stop=\"handleDelete(record.id)\"\n >\n 删除\n </a-button>\n </template>\n <template v-else-if=\"column.key === 'is_normal_model'\">\n <a-tag\n color=\"green\"\n v-if=\"text\"\n >\n 是\n </a-tag>\n <a-tag\n color=\"red\"\n v-else\n >\n 否\n </a-tag>\n </template>\n </template>\n </s-table>\n <div class=\"tables-bottom\">\n <a-button\n type=\"primary\"\n @click=\"handleAdd\"\n >\n 添加表格\n </a-button>\n </div>\n <table-config\n v-if=\"selectedRow\"\n :data-source=\"selectedRow\"\n :has-id=\"true\"\n table-type=\"tables\"\n :formData=\"formData\"\n :eventBus=\"eventBus\"\n @update:dataSource=\"handleUpdateRow\"\n @change_id=\"handleChangeid\"\n ></table-config>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, ref, computed, PropType } from 'vue';\nimport BasicQueryConditions from './BaseConditions.vue';\nimport ButtonConfig from './ActionsConfig.vue';\nimport tableConfig from './tableConfig.vue';\nimport { TablesSection } from '../../typing';\n\nexport default defineComponent({\n components: {\n BasicQueryConditions,\n ButtonConfig,\n tableConfig,\n },\n props: {\n dataSource: {\n type: Object as PropType<TablesSection>,\n required: true,\n },\n formData: {\n type: Object,\n default: () => ({}),\n },\n eventBus: {\n type: Object as any,\n },\n },\n emits: ['update:dataSource'],\n setup(props, { emit }) {\n const columns = [\n {\n title: '表格标识',\n dataIndex: 'id',\n key: 'id',\n rowDrag: true,\n },\n {\n title: '标题',\n dataIndex: 'title',\n key: 'title',\n },\n {\n title: '是否为标准模型查询',\n dataIndex: 'is_normal_model',\n key: 'is_normal_model',\n },\n {\n title: '对应模型',\n dataIndex: 'modelType',\n key: 'model',\n },\n {\n title: '组名',\n dataIndex: 'group_title',\n key: 'group_title',\n },\n {\n title: '操作',\n key: 'action',\n },\n ];\n\n const activeKey = ref('1');\n\n const formState = reactive({\n name: 'example',\n isStandard: true,\n model: 'lucy',\n listUrl: 'example',\n });\n\n const handleUpdateRow = updatedRow => {\n const rowIndex = props.dataSource.tables.findIndex(row => row.id === updatedRow.id);\n if (rowIndex !== -1) {\n const newTables = [...props.dataSource.tables];\n newTables[rowIndex] = updatedRow;\n emit('update:dataSource', { ...props.dataSource, tables: newTables });\n }\n };\n const handleDelete = (id: string) => {\n const newTables = props.dataSource.tables.filter(item => item.id !== id);\n emit('update:dataSource', { ...props.dataSource, tables: newTables });\n };\n\n const handleAdd = () => {\n let newId = 1;\n if (props.dataSource.tables.length > 0) {\n while (props.dataSource.tables.some(item => item.id === String(newId))) {\n newId++;\n }\n }\n\n const newRow = {\n id: String(newId),\n title: '新表格',\n group_title: '新表格',\n is_normal_model: true,\n modelType: '',\n list_url: '',\n columns: [],\n actions: [],\n search_config: [],\n query_params: {},\n base_conditions: [\n [\n {\n field_name: 'is_active',\n operator: 'eq',\n value: [true],\n format: 'choices',\n class_name: 'bool',\n value_type: 'fixed',\n },\n ],\n ],\n };\n const newTables = [...props.dataSource.tables, newRow];\n emit('update:dataSource', { ...props.dataSource, tables: newTables });\n };\n\n const selectedRowKeys = ref<string[]>([]);\n\n const onSelectChange = (keys: string[]) => {\n selectedRowKeys.value = keys;\n };\n\n const rowSelection = computed(() => {\n return {\n selectedRowKeys: selectedRowKeys.value,\n onChange: onSelectChange,\n type: 'radio',\n };\n });\n\n const customRow = (record: { id: string }) => {\n return {\n onClick: () => {\n selectedRowKeys.value = [record.id];\n },\n };\n };\n\n const rowClassName = (record: { id: string }) => {\n return record.id === selectedRowKeys.value[0] ? 'selected-row' : '';\n };\n\n const selectedRow = computed(() => {\n if (selectedRowKeys.value.length > 0) {\n return props.dataSource.tables.find(item => item.id === selectedRowKeys.value[0]);\n }\n return undefined;\n });\n const handleChangeid = table => {\n let findcount = 0;\n for (const item of props.dataSource.tables) {\n if (item.id === table.id) {\n findcount++;\n }\n }\n if (findcount > 1) {\n const old_id = table.id;\n let newId = 1;\n while (props.dataSource.tables.some(item => item.id === `${old_id}_${newId}`)) {\n newId++;\n }\n table.id = `${old_id}_${newId}`;\n }\n selectedRowKeys.value = [table.id];\n };\n\n return {\n columns,\n activeKey,\n formState,\n handleDelete,\n selectedRowKeys,\n rowSelection,\n customRow,\n rowClassName,\n selectedRow,\n handleUpdateRow,\n handleAdd,\n handleChangeid,\n };\n },\n});\n</script>\n\n<style scoped lang=\"less\">\n:deep(.selected-row) {\n background-color: #e6f7ff;\n}\n.tables-bottom {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n}\n</style>\n","<template>\n <div>\n <div>表格配置</div>\n <s-table\n :columns=\"columns\"\n :data-source=\"dataSource.tables\"\n row-key=\"id\"\n :pagination=\"false\"\n :row-selection=\"rowSelection\"\n :custom-row=\"customRow\"\n :row-class-name=\"rowClassName\"\n :range-selection=\"false\"\n >\n <template #bodyCell=\"{ column, record, text }\">\n <template v-if=\"column.key === 'action'\">\n <a-button\n type=\"link\"\n :danger=\"true\"\n @click.stop=\"handleDelete(record.id)\"\n >\n 删除\n </a-button>\n </template>\n <template v-else-if=\"column.key === 'is_normal_model'\">\n <a-tag\n color=\"green\"\n v-if=\"text\"\n >\n 是\n </a-tag>\n <a-tag\n color=\"red\"\n v-else\n >\n 否\n </a-tag>\n </template>\n </template>\n </s-table>\n <div class=\"tables-bottom\">\n <a-button\n type=\"primary\"\n @click=\"handleAdd\"\n >\n 添加表格\n </a-button>\n </div>\n <table-config\n v-if=\"selectedRow\"\n :data-source=\"selectedRow\"\n :has-id=\"true\"\n table-type=\"tables\"\n :formData=\"formData\"\n :eventBus=\"eventBus\"\n @update:dataSource=\"handleUpdateRow\"\n @change_id=\"handleChangeid\"\n ></table-config>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, reactive, ref, computed, PropType } from 'vue';\nimport BasicQueryConditions from './BaseConditions.vue';\nimport ButtonConfig from './ActionsConfig.vue';\nimport tableConfig from './tableConfig.vue';\nimport { TablesSection } from '../../typing';\n\nexport default defineComponent({\n components: {\n BasicQueryConditions,\n ButtonConfig,\n tableConfig,\n },\n props: {\n dataSource: {\n type: Object as PropType<TablesSection>,\n required: true,\n },\n formData: {\n type: Object,\n default: () => ({}),\n },\n eventBus: {\n type: Object as any,\n },\n },\n emits: ['update:dataSource'],\n setup(props, { emit }) {\n const columns = [\n {\n title: '表格标识',\n dataIndex: 'id',\n key: 'id',\n rowDrag: true,\n },\n {\n title: '标题',\n dataIndex: 'title',\n key: 'title',\n },\n {\n title: '是否为标准模型查询',\n dataIndex: 'is_normal_model',\n key: 'is_normal_model',\n },\n {\n title: '对应模型',\n dataIndex: 'modelType',\n key: 'model',\n },\n {\n title: '组名',\n dataIndex: 'group_title',\n key: 'group_title',\n },\n {\n title: '操作',\n key: 'action',\n },\n ];\n\n const activeKey = ref('1');\n\n const formState = reactive({\n name: 'example',\n isStandard: true,\n model: 'lucy',\n listUrl: 'example',\n });\n\n const handleUpdateRow = updatedRow => {\n const rowIndex = props.dataSource.tables.findIndex(row => row.id === updatedRow.id);\n if (rowIndex !== -1) {\n const newTables = [...props.dataSource.tables];\n newTables[rowIndex] = updatedRow;\n emit('update:dataSource', { ...props.dataSource, tables: newTables });\n }\n };\n const handleDelete = (id: string) => {\n const newTables = props.dataSource.tables.filter(item => item.id !== id);\n emit('update:dataSource', { ...props.dataSource, tables: newTables });\n };\n\n const handleAdd = () => {\n let newId = 1;\n if (props.dataSource.tables.length > 0) {\n while (props.dataSource.tables.some(item => item.id === String(newId))) {\n newId++;\n }\n }\n\n const newRow = {\n id: String(newId),\n title: '新表格',\n group_title: '新表格',\n is_normal_model: true,\n modelType: '',\n list_url: '',\n columns: [],\n actions: [],\n search_config: [],\n query_params: {},\n base_conditions: [\n [\n {\n field_name: 'is_active',\n operator: 'eq',\n value: [true],\n format: 'choices',\n class_name: 'bool',\n value_type: 'fixed',\n },\n ],\n ],\n };\n const newTables = [...props.dataSource.tables, newRow];\n emit('update:dataSource', { ...props.dataSource, tables: newTables });\n };\n\n const selectedRowKeys = ref<string[]>([]);\n\n const onSelectChange = (keys: string[]) => {\n selectedRowKeys.value = keys;\n };\n\n const rowSelection = computed(() => {\n return {\n selectedRowKeys: selectedRowKeys.value,\n onChange: onSelectChange,\n type: 'radio',\n };\n });\n\n const customRow = (record: { id: string }) => {\n return {\n onClick: () => {\n selectedRowKeys.value = [record.id];\n },\n };\n };\n\n const rowClassName = (record: { id: string }) => {\n return record.id === selectedRowKeys.value[0] ? 'selected-row' : '';\n };\n\n const selectedRow = computed(() => {\n if (selectedRowKeys.value.length > 0) {\n return props.dataSource.tables.find(item => item.id === selectedRowKeys.value[0]);\n }\n return undefined;\n });\n const handleChangeid = table => {\n let findcount = 0;\n for (const item of props.dataSource.tables) {\n if (item.id === table.id) {\n findcount++;\n }\n }\n if (findcount > 1) {\n const old_id = table.id;\n let newId = 1;\n while (props.dataSource.tables.some(item => item.id === `${old_id}_${newId}`)) {\n newId++;\n }\n table.id = `${old_id}_${newId}`;\n }\n selectedRowKeys.value = [table.id];\n };\n\n return {\n columns,\n activeKey,\n formState,\n handleDelete,\n selectedRowKeys,\n rowSelection,\n customRow,\n rowClassName,\n selectedRow,\n handleUpdateRow,\n handleAdd,\n handleChangeid,\n };\n },\n});\n</script>\n\n<style scoped lang=\"less\">\n:deep(.selected-row) {\n background-color: #e6f7ff;\n}\n.tables-bottom {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n}\n</style>\n"],"mappings":"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"}