lyflowchart 1.0.135 → 1.0.139

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 (42) hide show
  1. package/dist/{ApprovalEditorModal-suKPJ-vN.js → ApprovalEditorModal-19j5zbe2.js} +1 -1
  2. package/dist/{Cell_click_approve-DoemsGnY.js → Cell_click_approve-BGDZUzTS.js} +1 -1
  3. package/dist/{approval-BaVHder3.js → approval-BaD4Bmw6.js} +1 -1
  4. package/dist/components/approval/utils.d.ts +1 -0
  5. package/dist/{core-BOc9ch_5.js → core-Cv0Erg9E.js} +10 -11
  6. package/dist/index.js +2 -2
  7. package/dist/lyflowchart.css +1 -1
  8. package/package.json +1 -1
  9. package/dist/ActionsConfig-BuvSvRbv.js.map +0 -1
  10. package/dist/ApprovalEditorModal-suKPJ-vN.js.map +0 -1
  11. package/dist/CancelModal-BUi3ieI8.js.map +0 -1
  12. package/dist/Cell_click_approve-DoemsGnY.js.map +0 -1
  13. package/dist/JsonTags-BbWLqghI.js.map +0 -1
  14. package/dist/MyProcess-FWGEwQcv.js.map +0 -1
  15. package/dist/approval-BW2WjPxY.js.map +0 -1
  16. package/dist/approval-BaVHder3.js.map +0 -1
  17. package/dist/approvalHistory-B2gpQbFC.js.map +0 -1
  18. package/dist/approvalHistoryViewModal-DgLpv2ot.js.map +0 -1
  19. package/dist/approvalPageConfig-D0zPXOUf.js.map +0 -1
  20. package/dist/approveLeftConfig-BOU_UgHp.js.map +0 -1
  21. package/dist/codeHistoryViewModal-BfSjIbEU.js.map +0 -1
  22. package/dist/columnTables-DLwtgcC7.js.map +0 -1
  23. package/dist/core-BOc9ch_5.js.map +0 -1
  24. package/dist/dataStoreSettingHistoryViewModal-D_so-KLp.js.map +0 -1
  25. package/dist/debugCode-Cm9-WiUG.js.map +0 -1
  26. package/dist/debugCode-dD1YnQSD.js.map +0 -1
  27. package/dist/default-VdDMlY4e.js.map +0 -1
  28. package/dist/example_code-C_xF8RRG.js.map +0 -1
  29. package/dist/flowHistoryViewModal-D8DJP7Te.js.map +0 -1
  30. package/dist/index.js.map +0 -1
  31. package/dist/init-plugin-fQTSQzui.js.map +0 -1
  32. package/dist/leftColumn-CsPjufue.js.map +0 -1
  33. package/dist/middleColumn-C7M6-eVo.js.map +0 -1
  34. package/dist/recordActions-BgFlNsGU.js.map +0 -1
  35. package/dist/settingsState-CI81PG-i.js.map +0 -1
  36. package/dist/tableConfig-uLXue-BS.js.map +0 -1
  37. package/dist/tableModal-BcYfVL02.js.map +0 -1
  38. package/dist/useApprovalRecordActions-BQ6MgV2L.js.map +0 -1
  39. package/dist/utils-CLet2gLV.js.map +0 -1
  40. package/dist/v0001-OaBeBCXI.js.map +0 -1
  41. package/dist/viewer-Dv3kQsMf.js.map +0 -1
  42. package/dist/vue-print-next-HRweUmNi.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"approval-BW2WjPxY.js","names":[],"sources":["../src/components/approval/migrate/index.ts","../src/components/approval/index.ts"],"sourcesContent":["/** 迁移脚本模块的形状:默认导出迁移函数 */\ntype MigrationModule = { default: (data: any) => any };\n\nconst getAllMigrations = async () => {\n // 库构建时 glob 必须是相对当前文件的路径(原为 '/src/views/approval/migrate/**/v*.ts',\n // 是业务项目里的绝对路径,移到公共库后不再成立)\n // 显式给泛型,否则 vite/client 默认推成 unknown,取 module.default 会报 TS2339\n const modules = import.meta.glob<MigrationModule>('./**/v*.ts');\n const migrationPromises = Object.keys(modules).map(async path => {\n const match = path.match(/v(\\d+)\\.ts$/);\n if (!match) {\n return null;\n }\n\n const version = parseInt(match[1], 10);\n const moduleLoader = modules[path];\n const module = await moduleLoader();\n\n if (module && typeof module.default === 'function') {\n return { version, script: module.default };\n }\n return null;\n });\n\n const resolvedMigrations = await Promise.all(migrationPromises);\n const validMigrations = resolvedMigrations.filter(m => m !== null);\n validMigrations.sort((a, b) => a.version - b.version);\n\n return validMigrations;\n};\n\nconst migrationScriptsPromise = getAllMigrations();\n\nexport const migrate = async data => {\n if (!data) {\n return data;\n }\n const migrationScripts = await migrationScriptsPromise;\n const currentVersion = data.version || 0;\n\n const migrationsToRun = migrationScripts.filter(m => m.version > currentVersion);\n\n let migratedData = { ...data };\n for (const migration of migrationsToRun) {\n migratedData = migration.script(migratedData);\n migratedData.version = migration.version;\n }\n\n return migratedData;\n};\n","import { cloneDeep } from 'lodash';\nimport {\n Action,\n ApprovalSection,\n ApprovalSetting,\n DataStoreConfigType,\n TablesSection,\n} from './typing';\nimport { getApiData, useCustomConfigs } from '@/init-plugin';\nimport { migrate } from './migrate';\nimport { genID, stripDataStoreConfigHints } from './utils';\nimport { getDataListConfig } from './configs/approval/default';\n\nconst custom_config: { [key: string]: any } = {};\nconst get_custom_config = async (key: string): Promise<() => any> => {\n if (Object.keys(custom_config).length > 0) {\n if (custom_config[key]) {\n const obj = await custom_config[key]();\n return obj.default;\n } else {\n const obj = await custom_config['default']();\n return obj.default;\n }\n }\n // 库自带配置(构建期由 glob 固化)+ 宿主注入的配置(同名 key 由宿主覆盖)。\n // 宿主注入入口见 src/init-plugin.ts 的 useCustomConfigs 说明。\n const allComponents: Record<string, () => Promise<any>> = {\n ...import.meta.glob<{ default: any }>('./configs/*/*.ts', {\n eager: false,\n }),\n ...useCustomConfigs(),\n };\n for (const full_file_name in allComponents) {\n const file_name_list = full_file_name.split('/');\n const file_name = file_name_list[file_name_list.length - 1].replace('.ts', '');\n custom_config[file_name] = allComponents[full_file_name];\n }\n\n if (custom_config[key]) {\n const obj = await custom_config[key]();\n return obj.default;\n } else {\n const obj = await custom_config['default']();\n return obj.default;\n }\n};\n\nconst overrideBaseColumns = (config: any, overrideConfig: any) => {\n if (!config) {\n return;\n }\n config.forEach(item => {\n const dataIndex = item.dataIndex;\n if (overrideConfig[dataIndex]) {\n for (const key in overrideConfig[dataIndex]) {\n if (overrideConfig[dataIndex][key] === null) {\n delete item[key];\n } else {\n item[key] = overrideConfig[dataIndex][key];\n }\n }\n }\n });\n return config;\n};\nconst overrideBaseSearchConditionConfigList = (config: any, overrideConfig: any) => {\n if (!config) {\n return;\n }\n config.forEach(item => {\n const field_name = item.field_name;\n if (overrideConfig[field_name]) {\n for (const key in overrideConfig[field_name]) {\n if (overrideConfig[field_name][key] === null) {\n delete item[key];\n } else {\n item[key] = overrideConfig[field_name][key];\n }\n }\n }\n });\n\n return config;\n};\n\nconst overrideDataFunc = {\n baseColumns: ['columns', overrideBaseColumns],\n base_search_condition_config_list: ['search_config', overrideBaseSearchConditionConfigList],\n};\nconst overrideData = (config: any, overrideConfig: any) => {\n const res = cloneDeep(config);\n // Object.assign(mergedData, customConfig);\n Object.keys(overrideConfig).forEach(key => {\n if (overrideDataFunc[key]) {\n const config_key = overrideDataFunc[key][0];\n const func = overrideDataFunc[key][1];\n config[config_key] = func(config[config_key], overrideConfig[key]);\n }\n });\n return res;\n};\n\nconst processRemotetablepro = (field: any, allCodes: Record<string, any>, renew_id: boolean) => {\n if (field.children) {\n processFormGroups(field.children, allCodes, renew_id);\n }\n if (field.custom_btn_list) {\n processActionsList(field.custom_btn_list, allCodes, renew_id);\n }\n};\nconst processFormGroups = (\n dynamicFieldList: any[],\n allCodes: Record<string, any>,\n renew_id: boolean,\n) => {\n for (const group of dynamicFieldList) {\n processActionsList(group.custom_btn_list || [], allCodes, renew_id);\n if (group.children) {\n for (const field of group.children) {\n if (field.type === 'remotetablepro') {\n processRemotetablepro(field, allCodes, renew_id);\n } else if (field.type === 'button') {\n processAction(field, allCodes, renew_id);\n } else if (field.type === 'formtemplate') {\n if (field.form?.dynamicFieldList) {\n processFormGroups(field.form.dynamicFieldList, allCodes, renew_id);\n }\n if (field.custom_btn_list) {\n processActionsList(field.custom_btn_list, allCodes, renew_id);\n }\n if (field.dynamicTitle?.enable) {\n processAction(field.dynamicTitle, allCodes, renew_id);\n }\n } else if (field.type === 'dynamicvaluefield') {\n processAction(field, allCodes, renew_id);\n }\n }\n }\n }\n};\n\nconst processAction = (actionItem: any, allCodes: Record<string, any>, renew_id: boolean) => {\n if (!actionItem.action_code_id) {\n actionItem.action_code_id = genID();\n }\n if (actionItem.showCode?.enable && !actionItem.showCode.action_code_id) {\n actionItem.showCode.action_code_id = genID();\n }\n if (actionItem.disableCode?.enable && !actionItem.disableCode.action_code_id) {\n actionItem.disableCode.action_code_id = genID();\n }\n if (allCodes[actionItem.action_code_id]) {\n const code_data = allCodes[actionItem.action_code_id];\n if (code_data.action) {\n actionItem.action = code_data.action;\n }\n if (code_data.code) {\n actionItem.code = code_data.code;\n }\n }\n if (actionItem.showCode?.enable && allCodes[actionItem.showCode.action_code_id]) {\n actionItem.showCode.code = allCodes[actionItem.showCode.action_code_id].code;\n }\n if (actionItem.disableCode?.enable && allCodes[actionItem.disableCode.action_code_id]) {\n actionItem.disableCode.code = allCodes[actionItem.disableCode.action_code_id].code;\n }\n if (renew_id) {\n actionItem.action_code_id = genID();\n if (actionItem.showCode?.enable) {\n actionItem.showCode.action_code_id = genID();\n }\n if (actionItem.disableCode?.enable) {\n actionItem.disableCode.action_code_id = genID();\n }\n }\n};\nconst processActionsList = (data: Action[], allCodes: Record<string, any>, renew_id: boolean) => {\n for (const actionItem of data) {\n processAction(actionItem, allCodes, renew_id);\n }\n};\nconst processTables = async (\n data: TablesSection,\n allCodes: Record<string, any>,\n renew_id: boolean,\n) => {\n if (data.tables) {\n const overridePromise = [];\n for (const tableItem of data.tables) {\n if (!tableItem.id) {\n tableItem.id = Math.random().toString(36).substr(2);\n }\n if (!tableItem.group_title) {\n tableItem.group_title = tableItem.title;\n }\n\n if (tableItem.actions) {\n processActionsList(tableItem.actions, allCodes, renew_id);\n }\n if (tableItem.row_actions) {\n processActionsList(tableItem.row_actions, allCodes, renew_id);\n }\n if (tableItem.is_normal_model) {\n overridePromise.push(\n (async () => {\n const app_flag = tableItem.modelType.split('-')[0];\n const model_name = tableItem.modelType.split('-')[1];\n const res = await getApiData(\n { api_url: tableItem.list_url, model_name },\n `/${app_flag}/override_column_config`,\n false,\n {\n skip_error: true,\n },\n );\n if (res) {\n overrideData(tableItem, res);\n }\n })(),\n );\n }\n }\n await Promise.all(overridePromise);\n }\n};\nconst processData = async (data: ApprovalSetting, allCodes: Record<string, any>) => {\n if (!data) {\n return data;\n }\n if (data.number_prefix == null) {\n data.number_prefix = 'FHD';\n }\n if (data.number_suffix == null) {\n data.number_suffix = '';\n }\n if (!data.number_digit_place) {\n data.number_digit_place = 6;\n }\n let renew_id = false;\n if (data.renew_id) {\n renew_id = true;\n delete data.renew_id;\n }\n const columns = data?.columns || [];\n\n for (const item of columns) {\n if (item.type === 'tables') {\n await processTables(item, allCodes, renew_id);\n } else if (item.type === 'form') {\n if (item.actions) {\n processActionsList(item.actions, allCodes, renew_id);\n }\n if (item.form?.dynamicFieldList) {\n processFormGroups(item.form.dynamicFieldList, allCodes, renew_id);\n }\n } else if (item.type === 'data_list') {\n if (item.table?.actions) {\n processActionsList(item.table.actions, allCodes, renew_id);\n }\n if (item.table?.row_actions) {\n processActionsList(item.table.row_actions, allCodes, renew_id);\n }\n if (item.table?.is_normal_model) {\n const app_flag = item.table.modelType.split('-')[0];\n const model_name = item.table.modelType.split('-')[1];\n const res = await getApiData(\n { api_url: item.table.list_url, model_name },\n `/${app_flag}/override_column_config`,\n false,\n {\n skip_error: true,\n },\n );\n if (res) {\n overrideData(item.table, res);\n }\n }\n }\n }\n return data;\n};\n\nconst mergeColumnConfig = (\n base: ApprovalSection,\n override: ApprovalSection,\n column_key: string,\n base_type: string,\n override_type: string,\n detial: Array<any> | null = null,\n): ApprovalSection => {\n const conf = cloneDeep(base);\n const override_keys = {};\n for (const key of Object.keys(override)) {\n const value = override[key];\n if (value) {\n conf[key] = value;\n override_keys[key] = true;\n }\n }\n if (detial instanceof Array) {\n for (const key of Object.keys(conf)) {\n let source_type = null;\n if (override_keys[key]) {\n source_type = override_type;\n } else {\n source_type = base_type;\n }\n const item = {\n column_key,\n key,\n source_type,\n value: conf[key],\n };\n detial.push(item);\n }\n }\n return conf;\n};\n\nconst mergeConfig = (\n base_config: ApprovalSetting,\n override_config: ApprovalSetting,\n base_type: string,\n override_type: string,\n detial: Array<any> | null = null,\n): ApprovalSetting => {\n if (!override_config) {\n return base_config;\n }\n const base_columns_map = {};\n const override_columns_map = {};\n const base_columns = base_config?.columns || [];\n const allKeys = {};\n for (const item of base_columns) {\n base_columns_map[item.type] = item;\n allKeys[item.type] = true;\n }\n const override_columns = override_config?.columns || [];\n for (const item of override_columns) {\n override_columns_map[item.type] = item;\n allKeys[item.type] = true;\n }\n const res_columns: any = [];\n for (const key of Object.keys(allKeys)) {\n const res = mergeColumnConfig(\n base_columns_map[key] || {},\n override_columns_map[key] || {},\n key,\n base_type,\n override_type,\n detial,\n );\n res_columns.push(res);\n }\n const res = cloneDeep(base_config);\n Object.assign(res, override_config);\n Object.assign(res, {\n columns: res_columns,\n });\n return res;\n};\n\nexport const getApprovalConfig = async (\n key: string,\n detial: Array<any> | null = null,\n history_id: Number | null = null,\n): Promise<{ config: ApprovalSetting; current_history_id: any }> => {\n const config = await get_custom_config(key);\n const [server_res, allCodes] = await Promise.all([\n getApiData({ menu_flag: key, history_id: history_id }, '/approve/get_page_setting'),\n getApiData({ menu_flag: key }, '/approve/get_action_code_for_menu'),\n ]);\n // 本地默认配置不带任何入参(配置内容与节点无关,见 configs/approval/default.ts 说明)\n const local_config = config();\n if (detial instanceof Array) {\n detial.length = 0;\n }\n let server_config = null;\n let current_history_id = null;\n if (server_res) {\n server_config = server_res.content;\n current_history_id = server_res.history_id;\n }\n\n const res = mergeConfig(\n await migrate(local_config),\n await migrate(server_config),\n 'local',\n 'server',\n detial,\n );\n // const tablesColumns = res.columns.find(item => {\n // return item.type === 'tables';\n // });\n // if (tablesColumns) {\n // tablesColumns.tables.forEach(item => {\n // if (!item.id) {\n // item.id = Math.random().toString(36).substr(2);\n // }\n // });\n // }\n // for (const item of res?.columns || []) {\n // if (item.type === 'data_list') {\n // Object.assign(item, getDataListConfig());\n // }\n // }\n await processData(res, allCodes);\n return { config: res, current_history_id: current_history_id };\n};\n\nexport const getFlowConfig = async (key: string, history_id: Number | null = null) => {\n const server_res = await getApiData(\n { menu_flag: key, history_id: history_id },\n '/approve/get_flow_setting',\n );\n\n return {\n content: server_res?.content,\n name: server_res?.name,\n enable_flow: server_res?.enable_flow || false,\n cc_approval_position: server_res?.cc_approval_position,\n cc_position: server_res?.cc_position || 'finish',\n cc_users: server_res?.cc_users,\n current_history_id: server_res?.history_id,\n };\n};\n\nconst processDataStoreConfig = (data: DataStoreConfigType) => {\n // 历史数据里可能残留上一次「规则更新」落的临时标记,读取时一律过滤掉,\n // 避免重新进入页面时把旧的「新增/变更」标记当成当前状态渲染出来\n stripDataStoreConfigHints(data);\n for (const item of data) {\n if (!item.key) {\n item.key = genID();\n }\n if (!item.import_type) {\n item.import_type = 'pass_import';\n }\n if (item.order === null || item.order === undefined) {\n item.order = 0;\n }\n }\n};\nexport const getDataStoreConfig = async (\n key: string,\n history_id: Number | null = null,\n): Promise<{ config: DataStoreConfigType; current_history_id: any }> => {\n const server_res = await getApiData(\n { menu_flag: key, history_id: history_id },\n '/approve/get_data_store_setting',\n );\n let config = [];\n let current_history_id = null;\n if (server_res) {\n config = server_res.content || [];\n current_history_id = server_res.history_id;\n }\n processDataStoreConfig(config);\n config.sort((a, b) => (a.order || 0) - (b.order || 0));\n return { config: config, current_history_id: current_history_id };\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"approval-BaVHder3.js","names":[],"sources":["../src/components/approval/index.vue","../src/components/approval/index.vue"],"sourcesContent":["<template>\n <ApprovalCore :model-type=\"modelType\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useRoute } from 'vue-router';\nimport ApprovalCore from './core.vue';\n\n/**\n * 审批页的**路由入口薄壳**。\n *\n * 这里只剩一件事:把当前路由末段当作 `modelType`(= 页面配置的 menu_flag)传下去。\n * 三栏渲染、页面配置加载、各类 action 处理全在 `core.vue` 里,与全屏模态框\n * (`ApprovalEditorModal.vue`)**共用同一份实现**。\n *\n * ⚠️ `name: 'ApprovalView'` 必须保留:\n * - 宿主的 `componentMap` 把菜单 component 路径映射到本组件,`keep-alive` 依赖组件名缓存;\n * - 库内 `settingsExtra.tabs[].isShow` 会判断 `currentMenuObj.component === '@/views/approval/index.vue'`,\n * 与组件名无关,但也别顺手把这个文件删了改成直接注册 core —— 那会让路由页失去 modelType 来源。\n */\ndefineOptions({ name: 'ApprovalView' });\n\nconst route = useRoute();\nconst modelType = computed(() => {\n const path_arr = route.path.split('/');\n return path_arr[path_arr.length - 1];\n});\n</script>\n","<template>\n <ApprovalCore :model-type=\"modelType\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useRoute } from 'vue-router';\nimport ApprovalCore from './core.vue';\n\n/**\n * 审批页的**路由入口薄壳**。\n *\n * 这里只剩一件事:把当前路由末段当作 `modelType`(= 页面配置的 menu_flag)传下去。\n * 三栏渲染、页面配置加载、各类 action 处理全在 `core.vue` 里,与全屏模态框\n * (`ApprovalEditorModal.vue`)**共用同一份实现**。\n *\n * ⚠️ `name: 'ApprovalView'` 必须保留:\n * - 宿主的 `componentMap` 把菜单 component 路径映射到本组件,`keep-alive` 依赖组件名缓存;\n * - 库内 `settingsExtra.tabs[].isShow` 会判断 `currentMenuObj.component === '@/views/approval/index.vue'`,\n * 与组件名无关,但也别顺手把这个文件删了改成直接注册 core —— 那会让路由页失去 modelType 来源。\n */\ndefineOptions({ name: 'ApprovalView' });\n\nconst route = useRoute();\nconst modelType = computed(() => {\n const path_arr = route.path.split('/');\n return path_arr[path_arr.length - 1];\n});\n</script>\n"],"mappings":";;;;;;;;;EAuBA,IAAM,IAAQ,GAAU,EAClB,IAAY,QAAe;GAC/B,IAAM,IAAW,EAAM,KAAK,MAAM,IAAI;AACtC,UAAO,EAAS,EAAS,SAAS;IAClC;yBA1BA,EAAwC,GAAA,EAAzB,cAAY,EAAA,OAAS,EAAA,MAAA,GAAA,CAAA,aAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"approvalHistory-B2gpQbFC.js","names":[],"sources":["../src/components/approval/components/approvalHistory/pageSettingHistory.vue","../src/components/approval/components/approvalHistory/pageSettingHistory.vue","../src/components/approval/components/approvalHistory/flowSettingHistory.vue","../src/components/approval/components/approvalHistory/flowSettingHistory.vue","../src/components/approval/components/approvalHistory/dataStoreSettingHistory.vue","../src/components/approval/components/approvalHistory/dataStoreSettingHistory.vue","../src/components/approval/components/approvalHistory/index.vue","../src/components/approval/components/approvalHistory/index.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=\"handleCompareSelected\"\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 <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\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 :scroll=\"{ y: height - 220 }\"\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</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nexport default defineComponent({\n name: 'pageSettingHistory',\n props: {\n modelType: {\n type: String,\n default: null,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {},\n emits: ['changeHistory'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const userStore = useUserStore();\n const current_org = userStore.currentOrg; // 当前组织org\n const showDebug = ref(false);\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n // mock数据\n const tableData = ref([]);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\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 selectedRowKeys = ref([]);\n const getHistoryList = () => {\n if (!props.modelType) {\n return;\n }\n loading.value = true;\n const conditions = [\n {\n field_name: 'page_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 org_id: current_org?.id,\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_page_setting_history_list').then((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 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 handleCompareSelected = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const findSelectedNode = (list: any[], key: string) => {\n const node = list.find((item: any) => item.state === key);\n if (node) {\n return node;\n } else {\n for (let i = 0; i < list.length; i++) {\n if (list[i].children instanceof Array) {\n const result = findSelectedNode(list[i].children, key);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\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: 'approvalHistoryViewModal',\n history_ids: ids,\n org_id: current_org?.id,\n height: props.height,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n const handleApplyHistory = (id: number) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (\n history_id: number,\n org_id: number,\n modal_type: string,\n ) => {\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 org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_page_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n const menu_flag = modal_type;\n await getApiData({ org_id, menu_flag, content: data.content }, '/approve/set_page_setting');\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, current_org?.id, props.modelType);\n if (res) {\n emit('changeHistory');\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 watch(\n () => props.modelType,\n () => {\n getHistoryList();\n },\n );\n onMounted(() => {\n getHistoryList();\n });\n\n return {\n current_org,\n loading,\n showDebug,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareSelected,\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 };\n },\n});\n</script>\n<style scoped lang=\"less\">\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 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=\"handleCompareSelected\"\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 <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\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 :scroll=\"{ y: height - 220 }\"\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</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nexport default defineComponent({\n name: 'pageSettingHistory',\n props: {\n modelType: {\n type: String,\n default: null,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {},\n emits: ['changeHistory'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const userStore = useUserStore();\n const current_org = userStore.currentOrg; // 当前组织org\n const showDebug = ref(false);\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n // mock数据\n const tableData = ref([]);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\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 selectedRowKeys = ref([]);\n const getHistoryList = () => {\n if (!props.modelType) {\n return;\n }\n loading.value = true;\n const conditions = [\n {\n field_name: 'page_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 org_id: current_org?.id,\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_page_setting_history_list').then((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 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 handleCompareSelected = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const findSelectedNode = (list: any[], key: string) => {\n const node = list.find((item: any) => item.state === key);\n if (node) {\n return node;\n } else {\n for (let i = 0; i < list.length; i++) {\n if (list[i].children instanceof Array) {\n const result = findSelectedNode(list[i].children, key);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\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: 'approvalHistoryViewModal',\n history_ids: ids,\n org_id: current_org?.id,\n height: props.height,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n const handleApplyHistory = (id: number) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (\n history_id: number,\n org_id: number,\n modal_type: string,\n ) => {\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 org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_page_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n const menu_flag = modal_type;\n await getApiData({ org_id, menu_flag, content: data.content }, '/approve/set_page_setting');\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, current_org?.id, props.modelType);\n if (res) {\n emit('changeHistory');\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 watch(\n () => props.modelType,\n () => {\n getHistoryList();\n },\n );\n onMounted(() => {\n getHistoryList();\n });\n\n return {\n current_org,\n loading,\n showDebug,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareSelected,\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 };\n },\n});\n</script>\n<style scoped lang=\"less\">\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 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=\"handleCompareSelected\"\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 <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\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 :scroll=\"{ y: height - 220 }\"\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</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nexport default defineComponent({\n name: 'flowSettingHistory',\n props: {\n modelType: {\n type: String,\n default: null,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {},\n emits: ['changeHistory'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const userStore = useUserStore();\n const current_org = userStore.currentOrg; // 当前组织org\n const showDebug = ref(false);\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n // mock数据\n const tableData = ref([]);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\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 selectedRowKeys = ref([]);\n const getHistoryList = () => {\n if (!props.modelType) {\n return;\n }\n loading.value = true;\n const conditions = [\n {\n field_name: 'flow_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 org_id: current_org?.id,\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_flow_setting_history_list').then((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 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 handleCompareSelected = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const findSelectedNode = (list: any[], key: string) => {\n const node = list.find((item: any) => item.state === key);\n if (node) {\n return node;\n } else {\n for (let i = 0; i < list.length; i++) {\n if (list[i].children instanceof Array) {\n const result = findSelectedNode(list[i].children, key);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\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: 'flowHistoryViewModal',\n history_ids: ids,\n org_id: current_org?.id,\n height: props.height,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n const handleApplyHistory = (id: number) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (\n history_id: number,\n org_id: number,\n modal_type: string,\n ) => {\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 org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_flow_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n const menu_flag = modal_type;\n await getApiData({ org_id, menu_flag, content: data.content }, '/approve/set_flow_setting');\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, current_org?.id, props.modelType);\n if (res) {\n emit('changeHistory');\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 watch(\n () => props.modelType,\n () => {\n getHistoryList();\n },\n );\n onMounted(() => {\n getHistoryList();\n });\n\n return {\n current_org,\n loading,\n showDebug,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareSelected,\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 };\n },\n});\n</script>\n<style scoped lang=\"less\">\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 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=\"handleCompareSelected\"\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 <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\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 :scroll=\"{ y: height - 220 }\"\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</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nexport default defineComponent({\n name: 'flowSettingHistory',\n props: {\n modelType: {\n type: String,\n default: null,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {},\n emits: ['changeHistory'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const userStore = useUserStore();\n const current_org = userStore.currentOrg; // 当前组织org\n const showDebug = ref(false);\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n // mock数据\n const tableData = ref([]);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\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 selectedRowKeys = ref([]);\n const getHistoryList = () => {\n if (!props.modelType) {\n return;\n }\n loading.value = true;\n const conditions = [\n {\n field_name: 'flow_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 org_id: current_org?.id,\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_flow_setting_history_list').then((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 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 handleCompareSelected = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const findSelectedNode = (list: any[], key: string) => {\n const node = list.find((item: any) => item.state === key);\n if (node) {\n return node;\n } else {\n for (let i = 0; i < list.length; i++) {\n if (list[i].children instanceof Array) {\n const result = findSelectedNode(list[i].children, key);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\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: 'flowHistoryViewModal',\n history_ids: ids,\n org_id: current_org?.id,\n height: props.height,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n const handleApplyHistory = (id: number) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (\n history_id: number,\n org_id: number,\n modal_type: string,\n ) => {\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 org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_flow_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n const menu_flag = modal_type;\n await getApiData({ org_id, menu_flag, content: data.content }, '/approve/set_flow_setting');\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, current_org?.id, props.modelType);\n if (res) {\n emit('changeHistory');\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 watch(\n () => props.modelType,\n () => {\n getHistoryList();\n },\n );\n onMounted(() => {\n getHistoryList();\n });\n\n return {\n current_org,\n loading,\n showDebug,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareSelected,\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 };\n },\n});\n</script>\n<style scoped lang=\"less\">\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 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=\"handleCompareSelected\"\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 <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\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 :scroll=\"{ y: height - 220 }\"\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</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n onMounted,\n reactive,\n ref,\n watch,\n} from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { stripDataStoreConfigHints } from '../../utils';\nexport default defineComponent({\n name: 'dataStoreSettingHistory',\n props: {\n modelType: {\n type: String,\n default: null,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {},\n emits: ['changeHistory'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const userStore = useUserStore();\n const current_org = userStore.currentOrg; // 当前组织org\n const showDebug = ref(false);\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n // mock数据\n const tableData = ref([]);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\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 selectedRowKeys = ref([]);\n const getHistoryList = () => {\n if (!props.modelType) {\n return;\n }\n loading.value = true;\n const conditions = [\n {\n field_name: 'data_store_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 org_id: current_org?.id,\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_data_store_setting_history_list').then((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 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 handleCompareSelected = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const findSelectedNode = (list: any[], key: string) => {\n const node = list.find((item: any) => item.state === key);\n if (node) {\n return node;\n } else {\n for (let i = 0; i < list.length; i++) {\n if (list[i].children instanceof Array) {\n const result = findSelectedNode(list[i].children, key);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\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: defineAsyncComponent(() => import('./dataStoreSettingHistoryViewModal.vue')),\n history_ids: ids,\n org_id: current_org?.id,\n height: props.height,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n const handleApplyHistory = (id: number) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (\n history_id: number,\n org_id: number,\n modal_type: string,\n ) => {\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 org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_data_store_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n const menu_flag = modal_type;\n await getApiData(\n // 历史快照里可能带着当时「规则更新」落的临时标记,应用历史版本时一并剥离\n { org_id, menu_flag, content: stripDataStoreConfigHints(data.content) },\n '/approve/set_data_store_setting',\n );\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, current_org?.id, props.modelType);\n if (res) {\n emit('changeHistory');\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 watch(\n () => props.modelType,\n () => {\n getHistoryList();\n },\n );\n onMounted(() => {\n getHistoryList();\n });\n\n return {\n current_org,\n loading,\n showDebug,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareSelected,\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 };\n },\n});\n</script>\n<style scoped lang=\"less\">\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 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=\"handleCompareSelected\"\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 <s-table\n v-model:selectedRowKeys=\"selectedRowKeys\"\n :dataSource=\"tableData\"\n :columns=\"columns\"\n :loading=\"loading\"\n :rowSelection=\"rowSelection\"\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 :scroll=\"{ y: height - 220 }\"\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</template>\n\n<script lang=\"ts\">\nimport { message, Modal } from 'ant-design-vue';\nimport { getApiData, modalBox, usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n onMounted,\n reactive,\n ref,\n watch,\n} from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { stripDataStoreConfigHints } from '../../utils';\nexport default defineComponent({\n name: 'dataStoreSettingHistory',\n props: {\n modelType: {\n type: String,\n default: null,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {},\n emits: ['changeHistory'],\n setup(props, { emit }) {\n const pageSelectOptions = usePageSelectOptions();\n const { t } = useI18n();\n const loading = ref(false);\n const userStore = useUserStore();\n const current_org = userStore.currentOrg; // 当前组织org\n const showDebug = ref(false);\n const dateRange = ref([]);\n const current = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n // mock数据\n const tableData = ref([]);\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\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 selectedRowKeys = ref([]);\n const getHistoryList = () => {\n if (!props.modelType) {\n return;\n }\n loading.value = true;\n const conditions = [\n {\n field_name: 'data_store_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 org_id: current_org?.id,\n current: current.value,\n pageSize: pageSize.value,\n is_pagination: true,\n column_fields: ['id', 'create_time', 'diff_len', 'last_id'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n getApiData(queryParams, '/approve/query_data_store_setting_history_list').then((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 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 handleCompareSelected = () => {\n handleViewHistory(selectedRowKeys.value);\n };\n\n const findSelectedNode = (list: any[], key: string) => {\n const node = list.find((item: any) => item.state === key);\n if (node) {\n return node;\n } else {\n for (let i = 0; i < list.length; i++) {\n if (list[i].children instanceof Array) {\n const result = findSelectedNode(list[i].children, key);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\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: defineAsyncComponent(() => import('./dataStoreSettingHistoryViewModal.vue')),\n history_ids: ids,\n org_id: current_org?.id,\n height: props.height,\n ok: (data: any) => {},\n cancel: () => {},\n });\n modalBox(tempModal);\n };\n const handleApplyHistory = (id: number) => {\n Modal.confirm({\n title: t('确定应用该历史记录吗?'),\n onOk: () => {\n applyHistory(id);\n },\n });\n };\n\n const applyHistoryByHistoryId = async (\n history_id: number,\n org_id: number,\n modal_type: string,\n ) => {\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 org_id,\n is_pagination: false,\n column_fields: ['id', 'create_time', 'content'],\n sort_fields: ['-id'],\n conditions: [conditions],\n };\n const res = await getApiData(queryParams, '/approve/query_data_store_setting_history_list');\n if (res.data.length > 0) {\n const data = res.data[0];\n const menu_flag = modal_type;\n await getApiData(\n // 历史快照里可能带着当时「规则更新」落的临时标记,应用历史版本时一并剥离\n { org_id, menu_flag, content: stripDataStoreConfigHints(data.content) },\n '/approve/set_data_store_setting',\n );\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, current_org?.id, props.modelType);\n if (res) {\n emit('changeHistory');\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 watch(\n () => props.modelType,\n () => {\n getHistoryList();\n },\n );\n onMounted(() => {\n getHistoryList();\n });\n\n return {\n current_org,\n loading,\n showDebug,\n tableData,\n columns,\n rowSelection,\n dateRange,\n handleCompareSelected,\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 };\n },\n});\n</script>\n<style scoped lang=\"less\">\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 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 <div>\n <a-layout :style=\"{ height: bodyHeight + 'px' }\">\n <a-layout-sider\n class=\"approve-config-left\"\n style=\"width: 500px\"\n :width=\"220\"\n >\n <approveLeftConfig @change=\"onChange\"></approveLeftConfig>\n </a-layout-sider>\n <a-layout-content class=\"setting-container\">\n <div\n v-if=\"!selectedNode\"\n class=\"empty-content\"\n >\n <a-empty :description=\"$t('请选择菜单')\" />\n </div>\n <template v-else>\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane\n tab=\"页面历史\"\n key=\"page_setting_history\"\n >\n <page-setting-history\n :model-type=\"selectedNode?.state\"\n :height=\"height\"\n ></page-setting-history>\n </a-tab-pane>\n <a-tab-pane\n tab=\"流程历史\"\n key=\"flow_setting_history\"\n >\n <flow-setting-history\n :model-type=\"selectedNode?.state\"\n :height=\"height\"\n ></flow-setting-history>\n </a-tab-pane>\n <a-tab-pane\n tab=\"数据存储配置历史\"\n key=\"data_store_setting_history\"\n >\n <data-store-setting-history\n :model-type=\"selectedNode?.state\"\n :height=\"height\"\n ></data-store-setting-history>\n </a-tab-pane>\n </a-tabs>\n </template>\n </a-layout-content>\n </a-layout>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport { computed, defineComponent, PropType, ref, watch } from 'vue';\nimport pageSettingHistory from './pageSettingHistory.vue';\nimport flowSettingHistory from './flowSettingHistory.vue';\nimport dataStoreSettingHistory from './dataStoreSettingHistory.vue';\nimport approveLeftConfig from '../approvalPageConfig/approveLeftConfig.vue';\nexport default defineComponent({\n name: 'ApprovalHistory',\n props: {\n sideTreeData: {\n type: Object as PropType<{\n expandedKeys: Array<string>;\n treeData: Array<any>;\n fieldNames: Object;\n dataSource: Array<any>;\n }>,\n required: true,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {\n pageSettingHistory,\n flowSettingHistory,\n dataStoreSettingHistory,\n approveLeftConfig,\n },\n\n setup(props) {\n const pageSelectOptions = usePageSelectOptions();\n const activeKey = ref('page_setting_history');\n const loading = ref(false);\n const userStore = useUserStore();\n const userid = userStore.userid;\n const bodyHeight = computed(() => {\n return props.height + 45;\n });\n const selectedNode = ref<any>(null);\n const onChange = (obj: any) => {\n selectedNode.value = obj;\n };\n\n return {\n userid,\n loading,\n pageSelectOptions,\n activeKey,\n bodyHeight,\n selectedNode,\n onChange,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.approve-config-left {\n background-color: white !important;\n padding: 8px;\n}\n.ant-tabs {\n display: flex;\n flex-direction: column;\n height: 100%;\n margin: 0;\n\n ::v-deep(.ant-tabs-content-holder) {\n overflow: auto;\n flex: 1;\n }\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}\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 <div>\n <a-layout :style=\"{ height: bodyHeight + 'px' }\">\n <a-layout-sider\n class=\"approve-config-left\"\n style=\"width: 500px\"\n :width=\"220\"\n >\n <approveLeftConfig @change=\"onChange\"></approveLeftConfig>\n </a-layout-sider>\n <a-layout-content class=\"setting-container\">\n <div\n v-if=\"!selectedNode\"\n class=\"empty-content\"\n >\n <a-empty :description=\"$t('请选择菜单')\" />\n </div>\n <template v-else>\n <a-tabs v-model:activeKey=\"activeKey\">\n <a-tab-pane\n tab=\"页面历史\"\n key=\"page_setting_history\"\n >\n <page-setting-history\n :model-type=\"selectedNode?.state\"\n :height=\"height\"\n ></page-setting-history>\n </a-tab-pane>\n <a-tab-pane\n tab=\"流程历史\"\n key=\"flow_setting_history\"\n >\n <flow-setting-history\n :model-type=\"selectedNode?.state\"\n :height=\"height\"\n ></flow-setting-history>\n </a-tab-pane>\n <a-tab-pane\n tab=\"数据存储配置历史\"\n key=\"data_store_setting_history\"\n >\n <data-store-setting-history\n :model-type=\"selectedNode?.state\"\n :height=\"height\"\n ></data-store-setting-history>\n </a-tab-pane>\n </a-tabs>\n </template>\n </a-layout-content>\n </a-layout>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { usePageSelectOptions, useUserStore } from '@/init-plugin';\nimport { computed, defineComponent, PropType, ref, watch } from 'vue';\nimport pageSettingHistory from './pageSettingHistory.vue';\nimport flowSettingHistory from './flowSettingHistory.vue';\nimport dataStoreSettingHistory from './dataStoreSettingHistory.vue';\nimport approveLeftConfig from '../approvalPageConfig/approveLeftConfig.vue';\nexport default defineComponent({\n name: 'ApprovalHistory',\n props: {\n sideTreeData: {\n type: Object as PropType<{\n expandedKeys: Array<string>;\n treeData: Array<any>;\n fieldNames: Object;\n dataSource: Array<any>;\n }>,\n required: true,\n },\n height: {\n type: Number,\n default: 500,\n },\n },\n components: {\n pageSettingHistory,\n flowSettingHistory,\n dataStoreSettingHistory,\n approveLeftConfig,\n },\n\n setup(props) {\n const pageSelectOptions = usePageSelectOptions();\n const activeKey = ref('page_setting_history');\n const loading = ref(false);\n const userStore = useUserStore();\n const userid = userStore.userid;\n const bodyHeight = computed(() => {\n return props.height + 45;\n });\n const selectedNode = ref<any>(null);\n const onChange = (obj: any) => {\n selectedNode.value = obj;\n };\n\n return {\n userid,\n loading,\n pageSelectOptions,\n activeKey,\n bodyHeight,\n selectedNode,\n onChange,\n };\n },\n});\n</script>\n<style scoped lang=\"less\">\n.approve-config-left {\n background-color: white !important;\n padding: 8px;\n}\n.ant-tabs {\n display: flex;\n flex-direction: column;\n height: 100%;\n margin: 0;\n\n ::v-deep(.ant-tabs-content-holder) {\n overflow: auto;\n flex: 1;\n }\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}\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"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"approvalHistoryViewModal-DgLpv2ot.js","names":[],"sources":["../src/components/approval/components/approvalHistory/approvalHistoryViewModal.vue","../src/components/approval/components/approvalHistory/approvalHistoryViewModal.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: 'approvalHistoryViewModal',\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_page_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: 'approvalHistoryViewModal',\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_page_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,2CAA0C,CAC/D,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"}