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":"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-BaD4Bmw6.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"}