lyflowchart 1.0.130 → 1.0.133
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ApprovalEditorModal-DZfXupU3.js → ApprovalEditorModal-suKPJ-vN.js} +1 -1
- package/dist/{ApprovalEditorModal-DZfXupU3.js.map → ApprovalEditorModal-suKPJ-vN.js.map} +1 -1
- package/dist/{Cell_click_approve-CBh0j--6.js → Cell_click_approve-Dr83RkI-.js} +1 -1
- package/dist/{Cell_click_approve-CBh0j--6.js.map → Cell_click_approve-Dr83RkI-.js.map} +1 -1
- package/dist/{approval-CuUNtG9u.js → approval-BaVHder3.js} +1 -1
- package/dist/{approval-CuUNtG9u.js.map → approval-BaVHder3.js.map} +1 -1
- package/dist/components/approval/core.vue.d.ts +5 -0
- package/dist/{core-CctSle2c.js → core-BOc9ch_5.js} +11 -9
- package/dist/{core-CctSle2c.js.map → core-BOc9ch_5.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/lyflowchart.css +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./core-
|
|
1
|
+
import { t as e } from "./core-BOc9ch_5.js";
|
|
2
2
|
import { createBlock as t, createCommentVNode as n, defineComponent as r, mergeModels as i, openBlock as a, resolveComponent as o, useModel as s, withCtx as c } from "vue";
|
|
3
3
|
//#endregion
|
|
4
4
|
//#region src/components/approval/ApprovalEditorModal.vue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalEditorModal-
|
|
1
|
+
{"version":3,"file":"ApprovalEditorModal-suKPJ-vN.js","names":[],"sources":["../src/components/approval/ApprovalEditorModal.vue","../src/components/approval/ApprovalEditorModal.vue"],"sourcesContent":["<template>\n <a-modal\n v-model:open=\"open\"\n :title=\"title\"\n :width=\"'100%'\"\n :footer=\"null\"\n :mask-closable=\"false\"\n wrap-class-name=\"approve-editor-full-modal\"\n @cancel=\"handleCancel\"\n >\n <!--\n `v-if=\"open\"` 是必须的:审批上下文(useContextStore)按 modelType 存,\n 每次打开都要重新 initConfig + 按 approveRecordId 重新进入编辑态。\n 配合 a-modal 默认的 destroyOnClose,关闭即销毁,避免上一次的编辑态残留。\n -->\n <ApprovalCore\n v-if=\"open\"\n :model-type=\"modelType\"\n :approve-record-id=\"approveRecordId\"\n @saved=\"emit('saved', $event)\"\n />\n </a-modal>\n</template>\n\n<script setup lang=\"ts\">\nimport ApprovalCore from './core.vue';\n\n/**\n * 审批「左中右三栏」的**全屏模态框** —— 详情页/列表单元格上的「修改」用它打开。\n *\n * 与路由页面(`approval/index.vue`)共用同一个 `core.vue`,所以两边行为天然一致;\n * 本文件只负责「全屏容器 + 关闭语义」这两件事:\n * - `modelType`:菜单标识,由调用方给(详情场景从权威记录的 `menu_flag` 取);\n * - `approveRecordId`:传了就**打开即进入编辑态**。编辑态的**种类**(普通编辑 / 修改已通过 /\n * 再次编辑修改单)由记录字段自动派生,调用方不需要判断,见 `core.vue::applyApproveRecord`。\n *\n * ⚠️ 不要写 `import { defineProps, defineEmits, defineModel } from 'vue'`:\n * 它们是**编译器宏**,不是 vue 的运行时导出,`@vue/compiler-sfc` 会直接报\n * \"is a compiler macro and no longer needs to be imported\"。\n *\n * ⚠️ 另一个真实踩过的坑:`defineProps<{...}>` 后面必须跟**调用括号** —— 写成 `}>);`\n * (漏掉 `(`)时,babel 会把 `<` 当成**比较运算符**,报错位置指向 `>` 且信息是\n * `Missing semicolon`,极具误导性。改这里时请连同 `}>();` 一起核对。\n */\ndefineOptions({ name: 'ApprovalEditorModal' });\n\ndefineProps<{\n /** 页面配置的菜单标识(menu_flag) */\n modelType: string;\n /** 打开即进入编辑态的审批记录 id */\n approveRecordId?: number | null;\n /** 模态框标题 */\n title?: string;\n}>();\n\nconst emit = defineEmits<{\n /** 转发 core 的保存成功事件(payload.isEdit 为真表示这是一次「修改」而非「新建」)。\n * 外壳**不**因此关闭 —— 保存只是暂存,用户还要在右侧继续「提交」;关闭只走右上角关闭按钮。 */\n (e: 'saved', payload: { isEdit?: boolean }): void;\n (e: 'cancel'): void;\n}>();\n\nconst open = defineModel<boolean>('open', { default: false });\n\nconst handleCancel = () => {\n open.value = false;\n emit('cancel');\n};\n</script>\n\n<!--\n 非 scoped:模态框会被 teleport 到 body,scoped 选择器命中不到。\n 这里靠唯一的 wrap-class-name(approve-editor-full-modal)收敛作用域,\n 与 tableModal.vue 的 approve-table-full-modal 是同一套做法。\n-->\n<style>\n.approve-editor-full-modal {\n .ant-modal {\n top: 0;\n margin: 0 auto;\n padding-bottom: 0;\n max-width: 100vw;\n }\n .ant-modal-content {\n display: flex;\n flex-direction: column;\n height: 100vh;\n border-radius: 0;\n padding: 46px 10px 4px 10px !important;\n }\n .ant-modal-header {\n flex: 0 0 auto;\n margin-bottom: 0;\n }\n .ant-modal-body {\n flex: 1;\n padding: 25px;\n overflow: hidden;\n }\n\n .approval-view {\n position: relative;\n height: 100%;\n\n .drawer-tables-list {\n top: 0;\n left: -23px;\n }\n .drawer-data-list {\n top: 0;\n right: -23px;\n }\n }\n}\n</style>\n","<template>\n <a-modal\n v-model:open=\"open\"\n :title=\"title\"\n :width=\"'100%'\"\n :footer=\"null\"\n :mask-closable=\"false\"\n wrap-class-name=\"approve-editor-full-modal\"\n @cancel=\"handleCancel\"\n >\n <!--\n `v-if=\"open\"` 是必须的:审批上下文(useContextStore)按 modelType 存,\n 每次打开都要重新 initConfig + 按 approveRecordId 重新进入编辑态。\n 配合 a-modal 默认的 destroyOnClose,关闭即销毁,避免上一次的编辑态残留。\n -->\n <ApprovalCore\n v-if=\"open\"\n :model-type=\"modelType\"\n :approve-record-id=\"approveRecordId\"\n @saved=\"emit('saved', $event)\"\n />\n </a-modal>\n</template>\n\n<script setup lang=\"ts\">\nimport ApprovalCore from './core.vue';\n\n/**\n * 审批「左中右三栏」的**全屏模态框** —— 详情页/列表单元格上的「修改」用它打开。\n *\n * 与路由页面(`approval/index.vue`)共用同一个 `core.vue`,所以两边行为天然一致;\n * 本文件只负责「全屏容器 + 关闭语义」这两件事:\n * - `modelType`:菜单标识,由调用方给(详情场景从权威记录的 `menu_flag` 取);\n * - `approveRecordId`:传了就**打开即进入编辑态**。编辑态的**种类**(普通编辑 / 修改已通过 /\n * 再次编辑修改单)由记录字段自动派生,调用方不需要判断,见 `core.vue::applyApproveRecord`。\n *\n * ⚠️ 不要写 `import { defineProps, defineEmits, defineModel } from 'vue'`:\n * 它们是**编译器宏**,不是 vue 的运行时导出,`@vue/compiler-sfc` 会直接报\n * \"is a compiler macro and no longer needs to be imported\"。\n *\n * ⚠️ 另一个真实踩过的坑:`defineProps<{...}>` 后面必须跟**调用括号** —— 写成 `}>);`\n * (漏掉 `(`)时,babel 会把 `<` 当成**比较运算符**,报错位置指向 `>` 且信息是\n * `Missing semicolon`,极具误导性。改这里时请连同 `}>();` 一起核对。\n */\ndefineOptions({ name: 'ApprovalEditorModal' });\n\ndefineProps<{\n /** 页面配置的菜单标识(menu_flag) */\n modelType: string;\n /** 打开即进入编辑态的审批记录 id */\n approveRecordId?: number | null;\n /** 模态框标题 */\n title?: string;\n}>();\n\nconst emit = defineEmits<{\n /** 转发 core 的保存成功事件(payload.isEdit 为真表示这是一次「修改」而非「新建」)。\n * 外壳**不**因此关闭 —— 保存只是暂存,用户还要在右侧继续「提交」;关闭只走右上角关闭按钮。 */\n (e: 'saved', payload: { isEdit?: boolean }): void;\n (e: 'cancel'): void;\n}>();\n\nconst open = defineModel<boolean>('open', { default: false });\n\nconst handleCancel = () => {\n open.value = false;\n emit('cancel');\n};\n</script>\n\n<!--\n 非 scoped:模态框会被 teleport 到 body,scoped 选择器命中不到。\n 这里靠唯一的 wrap-class-name(approve-editor-full-modal)收敛作用域,\n 与 tableModal.vue 的 approve-table-full-modal 是同一套做法。\n-->\n<style>\n.approve-editor-full-modal {\n .ant-modal {\n top: 0;\n margin: 0 auto;\n padding-bottom: 0;\n max-width: 100vw;\n }\n .ant-modal-content {\n display: flex;\n flex-direction: column;\n height: 100vh;\n border-radius: 0;\n padding: 46px 10px 4px 10px !important;\n }\n .ant-modal-header {\n flex: 0 0 auto;\n margin-bottom: 0;\n }\n .ant-modal-body {\n flex: 1;\n padding: 25px;\n overflow: hidden;\n }\n\n .approval-view {\n position: relative;\n height: 100%;\n\n .drawer-tables-list {\n top: 0;\n left: -23px;\n }\n .drawer-data-list {\n top: 0;\n right: -23px;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAuDA,IAAM,IAAO,GAOP,IAAO,EAAoB,GAAC,OAA2B,EAEvD,UAAqB;AAEzB,GADA,EAAK,QAAQ,IACb,EAAK,SAAS;;;;eAjEd,EAoBU,GAAA;IAnBA,MAAM,EAAA;uCAAI,QAAA;IACjB,OAAO,EAAA;IACP,OAAO;IACP,QAAQ;IACR,iBAAe;IAChB,mBAAgB;IACf,UAAQ;;qBAYP,CAJM,EAAA,SAAA,GAAA,EADR,EAKE,GAAA;;KAHC,cAAY,EAAA;KACZ,qBAAmB,EAAA;KACnB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,SAAU,EAAM"}
|
|
@@ -24,7 +24,7 @@ var E = { style: {
|
|
|
24
24
|
onChange: () => {
|
|
25
25
|
I.value?.reload(), q();
|
|
26
26
|
}
|
|
27
|
-
}), W = p(() => import("./ApprovalEditorModal-
|
|
27
|
+
}), W = p(() => import("./ApprovalEditorModal-suKPJ-vN.js")), G = async () => {
|
|
28
28
|
k.value = !0;
|
|
29
29
|
let e = await n({
|
|
30
30
|
org_id: O?.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cell_click_approve-CBh0j--6.js","names":[],"sources":["../src/components/Cell_click_approve.vue","../src/components/Cell_click_approve.vue"],"sourcesContent":["<template>\n <a-button\n :title=\"cmpObj.text\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ cmpObj.text }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"审批信息\"\n @close=\"onClose\"\n >\n <template #extra>\n <!-- 以下 4 个是本单元格特有的流程动作,不属于审批记录上的「修改/删除」,保持原样 -->\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading1\"\n type=\"primary\"\n @click=\"commitApprove(cmpObj.record)\"\n >\n 提交\n </a-button>\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading2\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"cancelApprove(cmpObj.record)\"\n >\n 撤销\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading3\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"handleApprove('agree')\"\n >\n 审批通过\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading4\"\n style=\"margin-left: 10px\"\n danger\n type=\"primary\"\n @click=\"handleApprove('refuse')\"\n >\n 审批拒绝\n </a-button>\n\n <!--\n 修改 / 删除 / 打印:按钮「各自在外部提供」,但**是否显示**与**点击行为**统一由\n `useApproveRecordActions` 封装(与审批列表页行按钮跑同一份 `recordActions.ts` 逻辑)。\n 所以这里既看不到判断表达式,也看不到接口调用 —— 都在 composable 里。\n -->\n <a-button\n v-if=\"canShow('edit_approve')\"\n :loading=\"actionsLoading\"\n style=\"margin-left: 10px\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n <div ref=\"printAreaRef\">\n <!--\n :show-actions=\"false\" —— 修改/删除/打印按钮已在上面的 #extra 里,\n 关掉详情组件自带的那一份,避免同一个抽屉里出现两套同名按钮。\n -->\n <approval-for-details\n ref=\"detailRef\"\n :record=\"cmpObj.record\"\n :show-actions=\"false\"\n />\n </div>\n </a-drawer>\n <!--\n 两个模态框按需渲染(v-if 用 editorOpen / removeOpen,而不是恒真的 true):\n 只要 `<ApprovalEditorModal>` 进了 vdom,异步加载器就会触发 chunk 下载,\n 所以必须等真正要用了才渲染。\n -->\n <ApprovalEditorModal\n v-if=\"editorOpen\"\n v-model:open=\"editorOpen\"\n v-bind=\"editorProps\"\n />\n <ApprovalCancelModal\n v-if=\"removeOpen\"\n v-model:cancel-modal-show=\"removeOpen\"\n v-bind=\"removeProps\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { defineAsyncComponent, reactive, ref } from 'vue';\nimport { message, Modal } from 'ant-design-vue';\n// ⚠️ 这三项都是宿主的「转发函数」(库不得反向依赖 liyu-pc-lib,见 src/init-plugin.ts 顶部铁律):\n// getApiData ← liyu-pc-lib/api/api-model\n// useUserStore← liyu-pc-lib/store/user\n// modalBox ← liyu-pc-lib/components/form-modal/modal-tools(默认导出)\n// 调用签名与宿主侧完全一致,只是换了个 import 来源。\nimport { getApiData, modalBox, useUserStore } from '../init-plugin';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport ApprovalCancelModal from './approval/components/CancelModal.vue';\nimport { useApproveRecordActions } from './approval/useApprovalRecordActions';\n\n/**\n * 「审批」单元格组件:表格里显示一个链接按钮,点开右侧抽屉看审批详情。\n *\n * 从 `PSM_ApproveSystemPC/src/components/cellComponent/Cell_click_approve.vue` **原样移植**进公共库,\n * 与 `Cell_click_data_source.vue` 走同一套形态:库内实现 + `src/index.ts` 的 install() 里\n * **按名字全局注册**(`cellComponentList` 里的单元格类型就是靠组件名解析的,只查全局注册)。\n * 宿主侧因此不再需要这个文件,也不需要 `app.component('Cell_click_approve', …)`。\n *\n * 除「依赖来源」外与宿主版本**逐字一致**(含 4 个流程动作、接口路径、报错与刷新行为),\n * 移植时只做了三类替换:依赖 → init-plugin;库内组件 → 相对路径 import;编辑器 → 异步引入(见下)。\n */\ndefineOptions({\n name: 'Cell_click_approve',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst userStore = useUserStore();\nconst current_org = userStore.currentOrg;\nconst open = ref(false);\nconst loading1 = ref(false);\nconst loading2 = ref(false);\nconst loading3 = ref(false);\nconst loading4 = ref(false);\nconst task_id = ref<string | null>(null);\nconst printAreaRef = ref<HTMLElement | null>(null);\n/** 详情组件实例:操作成功后调它的 reload() 重拉详情 */\nconst detailRef = ref<{ reload: () => void } | null>(null);\n\n/**\n * 修改 / 删除 / 打印的统一封装(是否显示 + 点击行为)。\n *\n * ⚠️ `recordId` 里那个 `open.value ?` 不能去掉:\n * 本组件是**单元格组件**,列表里每一行都会渲染一个实例。若不带这个门条件,\n * `useApproveRecordActions` 内部的 immediate watch 会让**每一行**都在挂载时去拉\n * `/approve/get_approve_record` —— 列表一页 50 行就是 50 个请求。\n * 加上之后,只有用户真正点开某一行的抽屉才会取数。\n */\nconst {\n canShow,\n runAction,\n loading: actionsLoading,\n editorOpen,\n editorProps,\n removeOpen,\n removeProps,\n} = useApproveRecordActions({\n recordId: () => (open.value ? props.cmpObj?.record?.id : null),\n modelType: () => props.cmpObj?.record?.menu_flag,\n getPrintElement: () => printAreaRef.value,\n printTitle: '审批信息',\n onChange: () => {\n // 抽屉里的详情重拉 + 通知外层列表刷新\n detailRef.value?.reload();\n refresh();\n },\n});\n\n/**\n * 编辑模态框必须**异步**引入 —— 与 `approval_for_details.vue` 里同一个理由:\n *\n * 本组件在 `install()` 里是**静态注册**的(`app.component('Cell_click_approve', …)`),\n * 所以它的静态依赖会整块进入宿主**首屏静态闭包**;而\n * `ApprovalEditorModal` → `core.vue` → `flowConfig.vue` → bpmn-js 是一条约 1.1 MB 的重链\n * (宿主实测:上一轮刚把它从首屏摘掉,静态 import 会原样拉回来)。\n *\n * 这里**不能**写成 `import { ApprovalEditorModal } from '../index'`:`index.ts` 又 import 了本文件,\n * 会构成循环依赖,而 `defineAsyncComponent(...)` 在模块求值时就要读那个绑定。\n * 所以就地再包一层 —— 同一个模块被**两处动态 import** 没有问题(合并进同一个 chunk),\n * 危险的是「一处静态 + 一处动态」(那会报 `INEFFECTIVE_DYNAMIC_IMPORT`,拆不出独立 chunk)。\n */\nconst ApprovalEditorModal = defineAsyncComponent(\n () => import('./approval/ApprovalEditorModal.vue'),\n);\n\nconst is_open = async () => {\n open.value = true;\n const res = await getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: props.cmpObj.record.id,\n },\n '/approve/get_approve_record_info',\n );\n if (res?.current_task?.id) {\n task_id.value = res.current_task.id;\n }\n};\nconst onClose = () => {\n open.value = false;\n};\nconst refresh = () => {\n if (props.cmpObj?.eventBus) {\n props.cmpObj.eventBus.emit('reinit');\n }\n if (props.cmpObj?.event_obj) {\n props.cmpObj.event_obj.emit('refresh');\n }\n};\nconst commitApprove = (record: any) => {\n loading1.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要发起审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/commit_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading1.value = false;\n });\n },\n onCancel() {\n loading1.value = false;\n },\n });\n};\nconst cancelApprove = (record: any) => {\n loading2.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要撤销审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/cancel_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading2.value = false;\n });\n },\n onCancel() {\n loading2.value = false;\n },\n });\n};\nconst handleApprove = (is_reject: any) => {\n const rules: any = reactive({});\n if (is_reject == 'refuse') {\n rules.comment = [{ required: true, message: '请输入审批意见' }];\n loading4.value = true;\n } else {\n loading3.value = true;\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n title: '审批意见',\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: [\n {\n type: 'textarea',\n name: 'comment',\n label: '审批意见',\n disabled: false,\n allowClear: true,\n inputType: 'text',\n maxlength: 200,\n defaultValue: '',\n placeholder: '请输入审批意见',\n },\n ],\n rules: rules,\n model: reactive({\n comment: null,\n }),\n },\n options: {},\n ok: (obj: any) => {\n return new Promise(function (resolve) {\n tempModal.open = false;\n getApiData(\n {\n org_id: current_org?.id,\n task_id: task_id.value,\n comment: obj.comment,\n approval_result: is_reject,\n },\n '/lyapprove/claim_and_complete_task',\n )\n .then(() => {\n message.success(is_reject == 'refuse' ? '审批拒绝' : '审批通过');\n refresh();\n resolve(null);\n })\n .finally(() => {\n loading3.value = false;\n loading4.value = false;\n });\n });\n },\n onCancel() {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n};\n</script>\n","<template>\n <a-button\n :title=\"cmpObj.text\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ cmpObj.text }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"审批信息\"\n @close=\"onClose\"\n >\n <template #extra>\n <!-- 以下 4 个是本单元格特有的流程动作,不属于审批记录上的「修改/删除」,保持原样 -->\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading1\"\n type=\"primary\"\n @click=\"commitApprove(cmpObj.record)\"\n >\n 提交\n </a-button>\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading2\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"cancelApprove(cmpObj.record)\"\n >\n 撤销\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading3\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"handleApprove('agree')\"\n >\n 审批通过\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading4\"\n style=\"margin-left: 10px\"\n danger\n type=\"primary\"\n @click=\"handleApprove('refuse')\"\n >\n 审批拒绝\n </a-button>\n\n <!--\n 修改 / 删除 / 打印:按钮「各自在外部提供」,但**是否显示**与**点击行为**统一由\n `useApproveRecordActions` 封装(与审批列表页行按钮跑同一份 `recordActions.ts` 逻辑)。\n 所以这里既看不到判断表达式,也看不到接口调用 —— 都在 composable 里。\n -->\n <a-button\n v-if=\"canShow('edit_approve')\"\n :loading=\"actionsLoading\"\n style=\"margin-left: 10px\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n <div ref=\"printAreaRef\">\n <!--\n :show-actions=\"false\" —— 修改/删除/打印按钮已在上面的 #extra 里,\n 关掉详情组件自带的那一份,避免同一个抽屉里出现两套同名按钮。\n -->\n <approval-for-details\n ref=\"detailRef\"\n :record=\"cmpObj.record\"\n :show-actions=\"false\"\n />\n </div>\n </a-drawer>\n <!--\n 两个模态框按需渲染(v-if 用 editorOpen / removeOpen,而不是恒真的 true):\n 只要 `<ApprovalEditorModal>` 进了 vdom,异步加载器就会触发 chunk 下载,\n 所以必须等真正要用了才渲染。\n -->\n <ApprovalEditorModal\n v-if=\"editorOpen\"\n v-model:open=\"editorOpen\"\n v-bind=\"editorProps\"\n />\n <ApprovalCancelModal\n v-if=\"removeOpen\"\n v-model:cancel-modal-show=\"removeOpen\"\n v-bind=\"removeProps\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { defineAsyncComponent, reactive, ref } from 'vue';\nimport { message, Modal } from 'ant-design-vue';\n// ⚠️ 这三项都是宿主的「转发函数」(库不得反向依赖 liyu-pc-lib,见 src/init-plugin.ts 顶部铁律):\n// getApiData ← liyu-pc-lib/api/api-model\n// useUserStore← liyu-pc-lib/store/user\n// modalBox ← liyu-pc-lib/components/form-modal/modal-tools(默认导出)\n// 调用签名与宿主侧完全一致,只是换了个 import 来源。\nimport { getApiData, modalBox, useUserStore } from '../init-plugin';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport ApprovalCancelModal from './approval/components/CancelModal.vue';\nimport { useApproveRecordActions } from './approval/useApprovalRecordActions';\n\n/**\n * 「审批」单元格组件:表格里显示一个链接按钮,点开右侧抽屉看审批详情。\n *\n * 从 `PSM_ApproveSystemPC/src/components/cellComponent/Cell_click_approve.vue` **原样移植**进公共库,\n * 与 `Cell_click_data_source.vue` 走同一套形态:库内实现 + `src/index.ts` 的 install() 里\n * **按名字全局注册**(`cellComponentList` 里的单元格类型就是靠组件名解析的,只查全局注册)。\n * 宿主侧因此不再需要这个文件,也不需要 `app.component('Cell_click_approve', …)`。\n *\n * 除「依赖来源」外与宿主版本**逐字一致**(含 4 个流程动作、接口路径、报错与刷新行为),\n * 移植时只做了三类替换:依赖 → init-plugin;库内组件 → 相对路径 import;编辑器 → 异步引入(见下)。\n */\ndefineOptions({\n name: 'Cell_click_approve',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst userStore = useUserStore();\nconst current_org = userStore.currentOrg;\nconst open = ref(false);\nconst loading1 = ref(false);\nconst loading2 = ref(false);\nconst loading3 = ref(false);\nconst loading4 = ref(false);\nconst task_id = ref<string | null>(null);\nconst printAreaRef = ref<HTMLElement | null>(null);\n/** 详情组件实例:操作成功后调它的 reload() 重拉详情 */\nconst detailRef = ref<{ reload: () => void } | null>(null);\n\n/**\n * 修改 / 删除 / 打印的统一封装(是否显示 + 点击行为)。\n *\n * ⚠️ `recordId` 里那个 `open.value ?` 不能去掉:\n * 本组件是**单元格组件**,列表里每一行都会渲染一个实例。若不带这个门条件,\n * `useApproveRecordActions` 内部的 immediate watch 会让**每一行**都在挂载时去拉\n * `/approve/get_approve_record` —— 列表一页 50 行就是 50 个请求。\n * 加上之后,只有用户真正点开某一行的抽屉才会取数。\n */\nconst {\n canShow,\n runAction,\n loading: actionsLoading,\n editorOpen,\n editorProps,\n removeOpen,\n removeProps,\n} = useApproveRecordActions({\n recordId: () => (open.value ? props.cmpObj?.record?.id : null),\n modelType: () => props.cmpObj?.record?.menu_flag,\n getPrintElement: () => printAreaRef.value,\n printTitle: '审批信息',\n onChange: () => {\n // 抽屉里的详情重拉 + 通知外层列表刷新\n detailRef.value?.reload();\n refresh();\n },\n});\n\n/**\n * 编辑模态框必须**异步**引入 —— 与 `approval_for_details.vue` 里同一个理由:\n *\n * 本组件在 `install()` 里是**静态注册**的(`app.component('Cell_click_approve', …)`),\n * 所以它的静态依赖会整块进入宿主**首屏静态闭包**;而\n * `ApprovalEditorModal` → `core.vue` → `flowConfig.vue` → bpmn-js 是一条约 1.1 MB 的重链\n * (宿主实测:上一轮刚把它从首屏摘掉,静态 import 会原样拉回来)。\n *\n * 这里**不能**写成 `import { ApprovalEditorModal } from '../index'`:`index.ts` 又 import 了本文件,\n * 会构成循环依赖,而 `defineAsyncComponent(...)` 在模块求值时就要读那个绑定。\n * 所以就地再包一层 —— 同一个模块被**两处动态 import** 没有问题(合并进同一个 chunk),\n * 危险的是「一处静态 + 一处动态」(那会报 `INEFFECTIVE_DYNAMIC_IMPORT`,拆不出独立 chunk)。\n */\nconst ApprovalEditorModal = defineAsyncComponent(\n () => import('./approval/ApprovalEditorModal.vue'),\n);\n\nconst is_open = async () => {\n open.value = true;\n const res = await getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: props.cmpObj.record.id,\n },\n '/approve/get_approve_record_info',\n );\n if (res?.current_task?.id) {\n task_id.value = res.current_task.id;\n }\n};\nconst onClose = () => {\n open.value = false;\n};\nconst refresh = () => {\n if (props.cmpObj?.eventBus) {\n props.cmpObj.eventBus.emit('reinit');\n }\n if (props.cmpObj?.event_obj) {\n props.cmpObj.event_obj.emit('refresh');\n }\n};\nconst commitApprove = (record: any) => {\n loading1.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要发起审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/commit_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading1.value = false;\n });\n },\n onCancel() {\n loading1.value = false;\n },\n });\n};\nconst cancelApprove = (record: any) => {\n loading2.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要撤销审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/cancel_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading2.value = false;\n });\n },\n onCancel() {\n loading2.value = false;\n },\n });\n};\nconst handleApprove = (is_reject: any) => {\n const rules: any = reactive({});\n if (is_reject == 'refuse') {\n rules.comment = [{ required: true, message: '请输入审批意见' }];\n loading4.value = true;\n } else {\n loading3.value = true;\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n title: '审批意见',\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: [\n {\n type: 'textarea',\n name: 'comment',\n label: '审批意见',\n disabled: false,\n allowClear: true,\n inputType: 'text',\n maxlength: 200,\n defaultValue: '',\n placeholder: '请输入审批意见',\n },\n ],\n rules: rules,\n model: reactive({\n comment: null,\n }),\n },\n options: {},\n ok: (obj: any) => {\n return new Promise(function (resolve) {\n tempModal.open = false;\n getApiData(\n {\n org_id: current_org?.id,\n task_id: task_id.value,\n comment: obj.comment,\n approval_result: is_reject,\n },\n '/lyapprove/claim_and_complete_task',\n )\n .then(() => {\n message.success(is_reject == 'refuse' ? '审批拒绝' : '审批通过');\n refresh();\n resolve(null);\n })\n .finally(() => {\n loading3.value = false;\n loading4.value = false;\n });\n });\n },\n onCancel() {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n};\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Cell_click_approve-Dr83RkI-.js","names":[],"sources":["../src/components/Cell_click_approve.vue","../src/components/Cell_click_approve.vue"],"sourcesContent":["<template>\n <a-button\n :title=\"cmpObj.text\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ cmpObj.text }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"审批信息\"\n @close=\"onClose\"\n >\n <template #extra>\n <!-- 以下 4 个是本单元格特有的流程动作,不属于审批记录上的「修改/删除」,保持原样 -->\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading1\"\n type=\"primary\"\n @click=\"commitApprove(cmpObj.record)\"\n >\n 提交\n </a-button>\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading2\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"cancelApprove(cmpObj.record)\"\n >\n 撤销\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading3\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"handleApprove('agree')\"\n >\n 审批通过\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading4\"\n style=\"margin-left: 10px\"\n danger\n type=\"primary\"\n @click=\"handleApprove('refuse')\"\n >\n 审批拒绝\n </a-button>\n\n <!--\n 修改 / 删除 / 打印:按钮「各自在外部提供」,但**是否显示**与**点击行为**统一由\n `useApproveRecordActions` 封装(与审批列表页行按钮跑同一份 `recordActions.ts` 逻辑)。\n 所以这里既看不到判断表达式,也看不到接口调用 —— 都在 composable 里。\n -->\n <a-button\n v-if=\"canShow('edit_approve')\"\n :loading=\"actionsLoading\"\n style=\"margin-left: 10px\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n <div ref=\"printAreaRef\">\n <!--\n :show-actions=\"false\" —— 修改/删除/打印按钮已在上面的 #extra 里,\n 关掉详情组件自带的那一份,避免同一个抽屉里出现两套同名按钮。\n -->\n <approval-for-details\n ref=\"detailRef\"\n :record=\"cmpObj.record\"\n :show-actions=\"false\"\n />\n </div>\n </a-drawer>\n <!--\n 两个模态框按需渲染(v-if 用 editorOpen / removeOpen,而不是恒真的 true):\n 只要 `<ApprovalEditorModal>` 进了 vdom,异步加载器就会触发 chunk 下载,\n 所以必须等真正要用了才渲染。\n -->\n <ApprovalEditorModal\n v-if=\"editorOpen\"\n v-model:open=\"editorOpen\"\n v-bind=\"editorProps\"\n />\n <ApprovalCancelModal\n v-if=\"removeOpen\"\n v-model:cancel-modal-show=\"removeOpen\"\n v-bind=\"removeProps\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { defineAsyncComponent, reactive, ref } from 'vue';\nimport { message, Modal } from 'ant-design-vue';\n// ⚠️ 这三项都是宿主的「转发函数」(库不得反向依赖 liyu-pc-lib,见 src/init-plugin.ts 顶部铁律):\n// getApiData ← liyu-pc-lib/api/api-model\n// useUserStore← liyu-pc-lib/store/user\n// modalBox ← liyu-pc-lib/components/form-modal/modal-tools(默认导出)\n// 调用签名与宿主侧完全一致,只是换了个 import 来源。\nimport { getApiData, modalBox, useUserStore } from '../init-plugin';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport ApprovalCancelModal from './approval/components/CancelModal.vue';\nimport { useApproveRecordActions } from './approval/useApprovalRecordActions';\n\n/**\n * 「审批」单元格组件:表格里显示一个链接按钮,点开右侧抽屉看审批详情。\n *\n * 从 `PSM_ApproveSystemPC/src/components/cellComponent/Cell_click_approve.vue` **原样移植**进公共库,\n * 与 `Cell_click_data_source.vue` 走同一套形态:库内实现 + `src/index.ts` 的 install() 里\n * **按名字全局注册**(`cellComponentList` 里的单元格类型就是靠组件名解析的,只查全局注册)。\n * 宿主侧因此不再需要这个文件,也不需要 `app.component('Cell_click_approve', …)`。\n *\n * 除「依赖来源」外与宿主版本**逐字一致**(含 4 个流程动作、接口路径、报错与刷新行为),\n * 移植时只做了三类替换:依赖 → init-plugin;库内组件 → 相对路径 import;编辑器 → 异步引入(见下)。\n */\ndefineOptions({\n name: 'Cell_click_approve',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst userStore = useUserStore();\nconst current_org = userStore.currentOrg;\nconst open = ref(false);\nconst loading1 = ref(false);\nconst loading2 = ref(false);\nconst loading3 = ref(false);\nconst loading4 = ref(false);\nconst task_id = ref<string | null>(null);\nconst printAreaRef = ref<HTMLElement | null>(null);\n/** 详情组件实例:操作成功后调它的 reload() 重拉详情 */\nconst detailRef = ref<{ reload: () => void } | null>(null);\n\n/**\n * 修改 / 删除 / 打印的统一封装(是否显示 + 点击行为)。\n *\n * ⚠️ `recordId` 里那个 `open.value ?` 不能去掉:\n * 本组件是**单元格组件**,列表里每一行都会渲染一个实例。若不带这个门条件,\n * `useApproveRecordActions` 内部的 immediate watch 会让**每一行**都在挂载时去拉\n * `/approve/get_approve_record` —— 列表一页 50 行就是 50 个请求。\n * 加上之后,只有用户真正点开某一行的抽屉才会取数。\n */\nconst {\n canShow,\n runAction,\n loading: actionsLoading,\n editorOpen,\n editorProps,\n removeOpen,\n removeProps,\n} = useApproveRecordActions({\n recordId: () => (open.value ? props.cmpObj?.record?.id : null),\n modelType: () => props.cmpObj?.record?.menu_flag,\n getPrintElement: () => printAreaRef.value,\n printTitle: '审批信息',\n onChange: () => {\n // 抽屉里的详情重拉 + 通知外层列表刷新\n detailRef.value?.reload();\n refresh();\n },\n});\n\n/**\n * 编辑模态框必须**异步**引入 —— 与 `approval_for_details.vue` 里同一个理由:\n *\n * 本组件在 `install()` 里是**静态注册**的(`app.component('Cell_click_approve', …)`),\n * 所以它的静态依赖会整块进入宿主**首屏静态闭包**;而\n * `ApprovalEditorModal` → `core.vue` → `flowConfig.vue` → bpmn-js 是一条约 1.1 MB 的重链\n * (宿主实测:上一轮刚把它从首屏摘掉,静态 import 会原样拉回来)。\n *\n * 这里**不能**写成 `import { ApprovalEditorModal } from '../index'`:`index.ts` 又 import 了本文件,\n * 会构成循环依赖,而 `defineAsyncComponent(...)` 在模块求值时就要读那个绑定。\n * 所以就地再包一层 —— 同一个模块被**两处动态 import** 没有问题(合并进同一个 chunk),\n * 危险的是「一处静态 + 一处动态」(那会报 `INEFFECTIVE_DYNAMIC_IMPORT`,拆不出独立 chunk)。\n */\nconst ApprovalEditorModal = defineAsyncComponent(\n () => import('./approval/ApprovalEditorModal.vue'),\n);\n\nconst is_open = async () => {\n open.value = true;\n const res = await getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: props.cmpObj.record.id,\n },\n '/approve/get_approve_record_info',\n );\n if (res?.current_task?.id) {\n task_id.value = res.current_task.id;\n }\n};\nconst onClose = () => {\n open.value = false;\n};\nconst refresh = () => {\n if (props.cmpObj?.eventBus) {\n props.cmpObj.eventBus.emit('reinit');\n }\n if (props.cmpObj?.event_obj) {\n props.cmpObj.event_obj.emit('refresh');\n }\n};\nconst commitApprove = (record: any) => {\n loading1.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要发起审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/commit_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading1.value = false;\n });\n },\n onCancel() {\n loading1.value = false;\n },\n });\n};\nconst cancelApprove = (record: any) => {\n loading2.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要撤销审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/cancel_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading2.value = false;\n });\n },\n onCancel() {\n loading2.value = false;\n },\n });\n};\nconst handleApprove = (is_reject: any) => {\n const rules: any = reactive({});\n if (is_reject == 'refuse') {\n rules.comment = [{ required: true, message: '请输入审批意见' }];\n loading4.value = true;\n } else {\n loading3.value = true;\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n title: '审批意见',\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: [\n {\n type: 'textarea',\n name: 'comment',\n label: '审批意见',\n disabled: false,\n allowClear: true,\n inputType: 'text',\n maxlength: 200,\n defaultValue: '',\n placeholder: '请输入审批意见',\n },\n ],\n rules: rules,\n model: reactive({\n comment: null,\n }),\n },\n options: {},\n ok: (obj: any) => {\n return new Promise(function (resolve) {\n tempModal.open = false;\n getApiData(\n {\n org_id: current_org?.id,\n task_id: task_id.value,\n comment: obj.comment,\n approval_result: is_reject,\n },\n '/lyapprove/claim_and_complete_task',\n )\n .then(() => {\n message.success(is_reject == 'refuse' ? '审批拒绝' : '审批通过');\n refresh();\n resolve(null);\n })\n .finally(() => {\n loading3.value = false;\n loading4.value = false;\n });\n });\n },\n onCancel() {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n};\n</script>\n","<template>\n <a-button\n :title=\"cmpObj.text\"\n style=\"padding-left: 1px; width: 100%\"\n type=\"link\"\n @click=\"is_open()\"\n >\n <span\n style=\"\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n user-select: text;\n text-align: left;\n \"\n >\n {{ cmpObj.text }}\n </span>\n </a-button>\n <a-drawer\n :body-style=\"{ padding: '10px 20px' }\"\n :footer=\"null\"\n :open=\"open\"\n :width=\"1120\"\n title=\"审批信息\"\n @close=\"onClose\"\n >\n <template #extra>\n <!-- 以下 4 个是本单元格特有的流程动作,不属于审批记录上的「修改/删除」,保持原样 -->\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading1\"\n type=\"primary\"\n @click=\"commitApprove(cmpObj.record)\"\n >\n 提交\n </a-button>\n <a-button\n v-if=\"cmpObj.record.process_status === 'init' || cmpObj.record.result_status === 'reject'\"\n :loading=\"loading2\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"cancelApprove(cmpObj.record)\"\n >\n 撤销\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading3\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"handleApprove('agree')\"\n >\n 审批通过\n </a-button>\n <a-button\n v-if=\"task_id\"\n :loading=\"loading4\"\n style=\"margin-left: 10px\"\n danger\n type=\"primary\"\n @click=\"handleApprove('refuse')\"\n >\n 审批拒绝\n </a-button>\n\n <!--\n 修改 / 删除 / 打印:按钮「各自在外部提供」,但**是否显示**与**点击行为**统一由\n `useApproveRecordActions` 封装(与审批列表页行按钮跑同一份 `recordActions.ts` 逻辑)。\n 所以这里既看不到判断表达式,也看不到接口调用 —— 都在 composable 里。\n -->\n <a-button\n v-if=\"canShow('edit_approve')\"\n :loading=\"actionsLoading\"\n style=\"margin-left: 10px\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n <div ref=\"printAreaRef\">\n <!--\n :show-actions=\"false\" —— 修改/删除/打印按钮已在上面的 #extra 里,\n 关掉详情组件自带的那一份,避免同一个抽屉里出现两套同名按钮。\n -->\n <approval-for-details\n ref=\"detailRef\"\n :record=\"cmpObj.record\"\n :show-actions=\"false\"\n />\n </div>\n </a-drawer>\n <!--\n 两个模态框按需渲染(v-if 用 editorOpen / removeOpen,而不是恒真的 true):\n 只要 `<ApprovalEditorModal>` 进了 vdom,异步加载器就会触发 chunk 下载,\n 所以必须等真正要用了才渲染。\n -->\n <ApprovalEditorModal\n v-if=\"editorOpen\"\n v-model:open=\"editorOpen\"\n v-bind=\"editorProps\"\n />\n <ApprovalCancelModal\n v-if=\"removeOpen\"\n v-model:cancel-modal-show=\"removeOpen\"\n v-bind=\"removeProps\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { defineAsyncComponent, reactive, ref } from 'vue';\nimport { message, Modal } from 'ant-design-vue';\n// ⚠️ 这三项都是宿主的「转发函数」(库不得反向依赖 liyu-pc-lib,见 src/init-plugin.ts 顶部铁律):\n// getApiData ← liyu-pc-lib/api/api-model\n// useUserStore← liyu-pc-lib/store/user\n// modalBox ← liyu-pc-lib/components/form-modal/modal-tools(默认导出)\n// 调用签名与宿主侧完全一致,只是换了个 import 来源。\nimport { getApiData, modalBox, useUserStore } from '../init-plugin';\nimport ApprovalForDetails from './approval_for_details.vue';\nimport ApprovalCancelModal from './approval/components/CancelModal.vue';\nimport { useApproveRecordActions } from './approval/useApprovalRecordActions';\n\n/**\n * 「审批」单元格组件:表格里显示一个链接按钮,点开右侧抽屉看审批详情。\n *\n * 从 `PSM_ApproveSystemPC/src/components/cellComponent/Cell_click_approve.vue` **原样移植**进公共库,\n * 与 `Cell_click_data_source.vue` 走同一套形态:库内实现 + `src/index.ts` 的 install() 里\n * **按名字全局注册**(`cellComponentList` 里的单元格类型就是靠组件名解析的,只查全局注册)。\n * 宿主侧因此不再需要这个文件,也不需要 `app.component('Cell_click_approve', …)`。\n *\n * 除「依赖来源」外与宿主版本**逐字一致**(含 4 个流程动作、接口路径、报错与刷新行为),\n * 移植时只做了三类替换:依赖 → init-plugin;库内组件 → 相对路径 import;编辑器 → 异步引入(见下)。\n */\ndefineOptions({\n name: 'Cell_click_approve',\n});\n\nconst props = defineProps<{\n cmpObj: Record<string, any>;\n}>();\n\nconst userStore = useUserStore();\nconst current_org = userStore.currentOrg;\nconst open = ref(false);\nconst loading1 = ref(false);\nconst loading2 = ref(false);\nconst loading3 = ref(false);\nconst loading4 = ref(false);\nconst task_id = ref<string | null>(null);\nconst printAreaRef = ref<HTMLElement | null>(null);\n/** 详情组件实例:操作成功后调它的 reload() 重拉详情 */\nconst detailRef = ref<{ reload: () => void } | null>(null);\n\n/**\n * 修改 / 删除 / 打印的统一封装(是否显示 + 点击行为)。\n *\n * ⚠️ `recordId` 里那个 `open.value ?` 不能去掉:\n * 本组件是**单元格组件**,列表里每一行都会渲染一个实例。若不带这个门条件,\n * `useApproveRecordActions` 内部的 immediate watch 会让**每一行**都在挂载时去拉\n * `/approve/get_approve_record` —— 列表一页 50 行就是 50 个请求。\n * 加上之后,只有用户真正点开某一行的抽屉才会取数。\n */\nconst {\n canShow,\n runAction,\n loading: actionsLoading,\n editorOpen,\n editorProps,\n removeOpen,\n removeProps,\n} = useApproveRecordActions({\n recordId: () => (open.value ? props.cmpObj?.record?.id : null),\n modelType: () => props.cmpObj?.record?.menu_flag,\n getPrintElement: () => printAreaRef.value,\n printTitle: '审批信息',\n onChange: () => {\n // 抽屉里的详情重拉 + 通知外层列表刷新\n detailRef.value?.reload();\n refresh();\n },\n});\n\n/**\n * 编辑模态框必须**异步**引入 —— 与 `approval_for_details.vue` 里同一个理由:\n *\n * 本组件在 `install()` 里是**静态注册**的(`app.component('Cell_click_approve', …)`),\n * 所以它的静态依赖会整块进入宿主**首屏静态闭包**;而\n * `ApprovalEditorModal` → `core.vue` → `flowConfig.vue` → bpmn-js 是一条约 1.1 MB 的重链\n * (宿主实测:上一轮刚把它从首屏摘掉,静态 import 会原样拉回来)。\n *\n * 这里**不能**写成 `import { ApprovalEditorModal } from '../index'`:`index.ts` 又 import 了本文件,\n * 会构成循环依赖,而 `defineAsyncComponent(...)` 在模块求值时就要读那个绑定。\n * 所以就地再包一层 —— 同一个模块被**两处动态 import** 没有问题(合并进同一个 chunk),\n * 危险的是「一处静态 + 一处动态」(那会报 `INEFFECTIVE_DYNAMIC_IMPORT`,拆不出独立 chunk)。\n */\nconst ApprovalEditorModal = defineAsyncComponent(\n () => import('./approval/ApprovalEditorModal.vue'),\n);\n\nconst is_open = async () => {\n open.value = true;\n const res = await getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: props.cmpObj.record.id,\n },\n '/approve/get_approve_record_info',\n );\n if (res?.current_task?.id) {\n task_id.value = res.current_task.id;\n }\n};\nconst onClose = () => {\n open.value = false;\n};\nconst refresh = () => {\n if (props.cmpObj?.eventBus) {\n props.cmpObj.eventBus.emit('reinit');\n }\n if (props.cmpObj?.event_obj) {\n props.cmpObj.event_obj.emit('refresh');\n }\n};\nconst commitApprove = (record: any) => {\n loading1.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要发起审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/commit_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading1.value = false;\n });\n },\n onCancel() {\n loading1.value = false;\n },\n });\n};\nconst cancelApprove = (record: any) => {\n loading2.value = true;\n Modal.confirm({\n title: '提示',\n content: '是否确认要撤销审批',\n async onOk() {\n getApiData(\n {\n org_id: current_org?.id,\n approve_record_id: record.id,\n },\n '/approve/cancel_approve_record',\n )\n .then(() => {\n message.success('操作成功');\n refresh();\n })\n .finally(() => {\n loading2.value = false;\n });\n },\n onCancel() {\n loading2.value = false;\n },\n });\n};\nconst handleApprove = (is_reject: any) => {\n const rules: any = reactive({});\n if (is_reject == 'refuse') {\n rules.comment = [{ required: true, message: '请输入审批意见' }];\n loading4.value = true;\n } else {\n loading3.value = true;\n }\n const tempModal = reactive({\n open: true,\n loading: false,\n title: '审批意见',\n form: {\n settings: {\n labelAlign: 'right',\n layout: 'vertical',\n col: [],\n },\n fields: [\n {\n type: 'textarea',\n name: 'comment',\n label: '审批意见',\n disabled: false,\n allowClear: true,\n inputType: 'text',\n maxlength: 200,\n defaultValue: '',\n placeholder: '请输入审批意见',\n },\n ],\n rules: rules,\n model: reactive({\n comment: null,\n }),\n },\n options: {},\n ok: (obj: any) => {\n return new Promise(function (resolve) {\n tempModal.open = false;\n getApiData(\n {\n org_id: current_org?.id,\n task_id: task_id.value,\n comment: obj.comment,\n approval_result: is_reject,\n },\n '/lyapprove/claim_and_complete_task',\n )\n .then(() => {\n message.success(is_reject == 'refuse' ? '审批拒绝' : '审批通过');\n refresh();\n resolve(null);\n })\n .finally(() => {\n loading3.value = false;\n loading4.value = false;\n });\n });\n },\n onCancel() {\n tempModal.open = false;\n },\n });\n modalBox(tempModal);\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EA6JA,IAAM,IAAQ,GAKR,IADY,GAAc,CACF,YACxB,IAAO,EAAI,GAAM,EACjB,IAAW,EAAI,GAAM,EACrB,IAAW,EAAI,GAAM,EACrB,IAAW,EAAI,GAAM,EACrB,IAAW,EAAI,GAAM,EACrB,IAAU,EAAmB,KAAK,EAClC,IAAe,EAAwB,KAAK,EAE5C,IAAY,EAAmC,KAAK,EAWpD,EACJ,YACA,cACA,SAAS,GACT,eACA,gBACA,eACA,mBACE,EAAwB;GAC1B,gBAAiB,EAAK,QAAQ,EAAM,QAAQ,QAAQ,KAAK;GACzD,iBAAiB,EAAM,QAAQ,QAAQ;GACvC,uBAAuB,EAAa;GACpC,YAAY;GACZ,gBAAgB;AAGd,IADA,EAAU,OAAO,QAAQ,EACzB,GAAS;;GAEZ,CAAC,EAeI,IAAsB,QACpB,OAAO,qCACd,EAEK,IAAU,YAAY;AAC1B,KAAK,QAAQ;GACb,IAAM,IAAM,MAAM,EAChB;IACE,QAAQ,GAAa;IACrB,mBAAmB,EAAM,OAAO,OAAO;IACxC,EACD,mCACD;AACD,GAAI,GAAK,cAAc,OACrB,EAAQ,QAAQ,EAAI,aAAa;KAG/B,UAAgB;AACpB,KAAK,QAAQ;KAET,UAAgB;AAIpB,GAHI,EAAM,QAAQ,YAChB,EAAM,OAAO,SAAS,KAAK,SAAS,EAElC,EAAM,QAAQ,aAChB,EAAM,OAAO,UAAU,KAAK,UAAU;KAGpC,KAAiB,MAAgB;AAErC,GADA,EAAS,QAAQ,IACjB,EAAM,QAAQ;IACZ,OAAO;IACP,SAAS;IACT,MAAM,OAAO;AACX,OACE;MACE,QAAQ,GAAa;MACrB,mBAAmB,EAAO;MAC3B,EACD,iCACF,CACG,WAAW;AAEV,MADA,EAAQ,QAAQ,OAAO,EACvB,GAAS;OACV,CACA,cAAc;AACb,QAAS,QAAQ;OACjB;;IAEN,WAAW;AACT,OAAS,QAAQ;;IAEpB,CAAC;KAEE,KAAiB,MAAgB;AAErC,GADA,EAAS,QAAQ,IACjB,EAAM,QAAQ;IACZ,OAAO;IACP,SAAS;IACT,MAAM,OAAO;AACX,OACE;MACE,QAAQ,GAAa;MACrB,mBAAmB,EAAO;MAC3B,EACD,iCACF,CACG,WAAW;AAEV,MADA,EAAQ,QAAQ,OAAO,EACvB,GAAS;OACV,CACA,cAAc;AACb,QAAS,QAAQ;OACjB;;IAEN,WAAW;AACT,OAAS,QAAQ;;IAEpB,CAAC;KAEE,KAAiB,MAAmB;GACxC,IAAM,IAAa,EAAS,EAAE,CAAC;AAC/B,GAAI,KAAa,YACf,EAAM,UAAU,CAAC;IAAE,UAAU;IAAM,SAAS;IAAW,CAAC,EACxD,EAAS,QAAQ,MAEjB,EAAS,QAAQ;GAEnB,IAAM,IAAY,EAAS;IACzB,MAAM;IACN,SAAS;IACT,OAAO;IACP,MAAM;KACJ,UAAU;MACR,YAAY;MACZ,QAAQ;MACR,KAAK,EAAE;MACR;KACD,QAAQ,CACN;MACE,MAAM;MACN,MAAM;MACN,OAAO;MACP,UAAU;MACV,YAAY;MACZ,WAAW;MACX,WAAW;MACX,cAAc;MACd,aAAa;MACd,CACF;KACM;KACP,OAAO,EAAS,EACd,SAAS,MACV,CAAC;KACH;IACD,SAAS,EAAE;IACX,KAAK,MACI,IAAI,QAAQ,SAAU,GAAS;AAEpC,KADA,EAAU,OAAO,IACjB,EACE;MACE,QAAQ,GAAa;MACrB,SAAS,EAAQ;MACjB,SAAS,EAAI;MACb,iBAAiB;MAClB,EACD,qCACF,CACG,WAAW;AAGV,MAFA,EAAQ,QAAQ,KAAa,WAAW,SAAS,OAAO,EACxD,GAAS,EACT,EAAQ,KAAK;OACd,CACA,cAAc;AAEb,MADA,EAAS,QAAQ,IACjB,EAAS,QAAQ;OACjB;MACJ;IAEJ,WAAW;AACT,OAAU,OAAO;;IAEpB,CAAC;AACF,KAAS,EAAU;;;;;IAtWnB,EAkBW,GAAA;KAjBR,OAAO,EAAA,OAAO;KACf,OAAA;MAAA,gBAAA;MAAA,OAAA;MAAsC;KACtC,MAAK;KACJ,SAAK,AAAA,EAAA,QAAA,MAAE,GAAO;;sBAaR,CAXP,EAWO,QAXP,GAWO,EADF,EAAA,OAAO,KAAI,EAAA,EAAA,CAAA,CAAA;;;IAGlB,EA2FW,GAAA;KA1FR,cAAY,EAAA,SAAA,aAAwB;KACpC,QAAQ;KACR,MAAM,EAAA;KACN,OAAO;KACR,OAAM;KACE;;KAEG,OAAK,QASH;MANH,EAAA,OAAO,OAAO,mBAAc,UAAe,EAAA,OAAO,OAAO,kBAAa,YAAA,GAAA,EAD9E,EAOW,GAAA;;OALR,SAAS,EAAA;OACV,MAAK;OACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAc,EAAA,OAAO,OAAM;;wBAGrC,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,QAED,GAAA,CAAA,CAAA,CAAA;;;MAEQ,EAAA,OAAO,OAAO,mBAAc,UAAe,EAAA,OAAO,OAAO,kBAAa,YAAA,GAAA,EAD9E,EASW,GAAA;;OAPR,SAAS,EAAA;OACV,QAAA;OACA,OAAA,EAAA,eAAA,QAAyB;OACzB,MAAK;OACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAc,EAAA,OAAO,OAAM;;wBAGrC,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,QAED,GAAA,CAAA,CAAA,CAAA;;;MAEQ,EAAA,SAAA,GAAA,EADR,EAQW,GAAA;;OANR,SAAS,EAAA;OACV,OAAA,EAAA,eAAA,QAAyB;OACzB,MAAK;OACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAa,QAAA;;wBAGvB,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,UAED,GAAA,CAAA,CAAA,CAAA;;;MAEQ,EAAA,SAAA,GAAA,EADR,EASW,GAAA;;OAPR,SAAS,EAAA;OACV,OAAA,EAAA,eAAA,QAAyB;OACzB,QAAA;OACA,MAAK;OACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAa,SAAA;;wBAGvB,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,UAED,GAAA,CAAA,CAAA,CAAA;;;MAQQ,EAAA,EAAO,CAAA,eAAA,IAAA,GAAA,EADf,EAOW,GAAA;;OALR,SAAS,EAAA,EAAc;OACxB,OAAA,EAAA,eAAA,QAAyB;OACxB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,EAAS,CAAA,eAAA;;wBAGnB,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,QAED,GAAA,CAAA,CAAA,CAAA;;;MAEQ,EAAA,EAAO,CAAA,uBAAA,IAAA,GAAA,EADf,EASW,GAAA;;OAPR,SAAS,EAAA,EAAc;OACxB,QAAA;OACA,OAAA,EAAA,eAAA,QAAyB;OACzB,MAAK;OACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,EAAS,CAAA,uBAAA;;wBAGnB,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,QAED,GAAA,CAAA,CAAA,CAAA;;;MAEQ,EAAA,EAAO,CAAA,QAAA,IAAA,GAAA,EADf,EAOW,GAAA;;OALT,OAAA,EAAA,eAAA,QAAyB;OACzB,MAAK;OACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,EAAS,CAAA,QAAA;;wBAGnB,CAAA,GAAA,AAAA,EAAA,QAAA,CAAA,EAFC,QAED,GAAA,CAAA,CAAA,CAAA;;;;sBAYI,CAVN,EAUM,OAAA;eAVG;MAAJ,KAAI;SAKP,EAIE,GAAA;eAHI;MAAJ,KAAI;MACH,QAAQ,EAAA,OAAO;MACf,gBAAc;;;;IAUb,EAAA,EAAU,IAAA,GAAA,EADlB,EAIE,EAAA,EAAA,EAJF,EAIE;;KAFQ,MAAM,EAAA,EAAU;+CAAA,QAAA,IAAA;OAChB,EAAA,EAAW,CAAA,EAAA,MAAA,IAAA,CAAA,OAAA,CAAA,IAAA,EAAA,IAAA,GAAA;IAGb,EAAA,EAAU,IAAA,GAAA,EADlB,EAIE,GAJF,EAIE;;KAFQ,qBAAmB,EAAA,EAAU;0DAAA,QAAA,IAAA;OAC7B,EAAA,EAAW,CAAA,EAAA,MAAA,IAAA,CAAA,oBAAA,CAAA,IAAA,EAAA,IAAA,GAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-
|
|
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"}
|
|
@@ -27,6 +27,11 @@ export interface ApprovalCoreProps {
|
|
|
27
27
|
*/
|
|
28
28
|
approveRecordId?: number | null;
|
|
29
29
|
}
|
|
30
|
+
declare global {
|
|
31
|
+
interface Window {
|
|
32
|
+
setDebugCode?: (checked: boolean) => void;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
30
35
|
declare const _default: import("vue").DefineComponent<ApprovalCoreProps, {
|
|
31
36
|
/** 按审批记录 id 进入编辑态(编辑态种类由记录字段派生,见上方注释) */
|
|
32
37
|
applyApproveRecord: (id: number) => Promise<void>;
|
|
@@ -1489,17 +1489,19 @@ var at = /* @__PURE__ */ i(rt, [["render", it]]), ot = ["id"], st = /* @__PURE__
|
|
|
1489
1489
|
}, ve = async (e) => {
|
|
1490
1490
|
let t = await r({ approve_record_id: e }, "/approve/get_approve_record"), { page_setting_history_id: n, flow_setting_history_id: i, data: a, number: o, process_status: s, result_status: c, is_modifiable: l, modify_status: u } = t, f = t.modify_source_id ?? (t.modify_source && t.modify_source.id) ?? null;
|
|
1491
1491
|
if (d[m](v.value, n), d[p](v.value, i), k.value = a.globalData, d[g](v.value, k.value), await Y(), await q({ skip_auto_numbering: !0 }), s === "approved" && c === "pass" && l === !0 && u === "正常") {
|
|
1492
|
-
let
|
|
1493
|
-
if (!
|
|
1494
|
-
H.error(
|
|
1492
|
+
let n = await r({ approve_record_id: e }, "/approve/check_approve_can_modify");
|
|
1493
|
+
if (!n || !n.can_modify) {
|
|
1494
|
+
H.error(n && n.msg || "该审批记录不可修改");
|
|
1495
1495
|
return;
|
|
1496
1496
|
}
|
|
1497
|
-
let
|
|
1498
|
-
k.value.number =
|
|
1497
|
+
let i = X(o);
|
|
1498
|
+
k.value.number = i;
|
|
1499
|
+
let s = X(t.context || a?.globalData?.context?.context || "");
|
|
1500
|
+
s && (k.value.context = { context: s }), d[g](v.value, k.value), _.emit("update_form", {
|
|
1499
1501
|
data: a,
|
|
1500
1502
|
state: {
|
|
1501
1503
|
id: e,
|
|
1502
|
-
number:
|
|
1504
|
+
number: i,
|
|
1503
1505
|
modifyMode: !0,
|
|
1504
1506
|
source_approve_record_id: e,
|
|
1505
1507
|
modify_source_id: f
|
|
@@ -1521,7 +1523,7 @@ var at = /* @__PURE__ */ i(rt, [["render", it]]), ot = ["id"], st = /* @__PURE__
|
|
|
1521
1523
|
try {
|
|
1522
1524
|
n = await t(e, i);
|
|
1523
1525
|
} catch (e) {
|
|
1524
|
-
console.error(e), H.error(e.message);
|
|
1526
|
+
console.error(e), H.error(e instanceof Error ? e.message : String(e));
|
|
1525
1527
|
return;
|
|
1526
1528
|
}
|
|
1527
1529
|
let { id: r } = n;
|
|
@@ -1536,7 +1538,7 @@ var at = /* @__PURE__ */ i(rt, [["render", it]]), ot = ["id"], st = /* @__PURE__
|
|
|
1536
1538
|
try {
|
|
1537
1539
|
n = await t(e, i);
|
|
1538
1540
|
} catch (e) {
|
|
1539
|
-
console.error(e), H.error(e.message);
|
|
1541
|
+
console.error(e), H.error(e instanceof Error ? e.message : String(e));
|
|
1540
1542
|
return;
|
|
1541
1543
|
}
|
|
1542
1544
|
let { id: a } = n || {};
|
|
@@ -1624,6 +1626,6 @@ var at = /* @__PURE__ */ i(rt, [["render", it]]), ot = ["id"], st = /* @__PURE__
|
|
|
1624
1626
|
}, 8, ["theme"]);
|
|
1625
1627
|
};
|
|
1626
1628
|
}
|
|
1627
|
-
}), [["__scopeId", "data-v-
|
|
1629
|
+
}), [["__scopeId", "data-v-ae889e17"]]);
|
|
1628
1630
|
//#endregion
|
|
1629
1631
|
export { st as t };
|