lyflowchart 1.0.135 → 1.0.139

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{ApprovalEditorModal-suKPJ-vN.js → ApprovalEditorModal-19j5zbe2.js} +1 -1
  2. package/dist/{Cell_click_approve-DoemsGnY.js → Cell_click_approve-BGDZUzTS.js} +1 -1
  3. package/dist/{approval-BaVHder3.js → approval-BaD4Bmw6.js} +1 -1
  4. package/dist/components/approval/utils.d.ts +1 -0
  5. package/dist/{core-BOc9ch_5.js → core-Cv0Erg9E.js} +10 -11
  6. package/dist/index.js +2 -2
  7. package/dist/lyflowchart.css +1 -1
  8. package/package.json +1 -1
  9. package/dist/ActionsConfig-BuvSvRbv.js.map +0 -1
  10. package/dist/ApprovalEditorModal-suKPJ-vN.js.map +0 -1
  11. package/dist/CancelModal-BUi3ieI8.js.map +0 -1
  12. package/dist/Cell_click_approve-DoemsGnY.js.map +0 -1
  13. package/dist/JsonTags-BbWLqghI.js.map +0 -1
  14. package/dist/MyProcess-FWGEwQcv.js.map +0 -1
  15. package/dist/approval-BW2WjPxY.js.map +0 -1
  16. package/dist/approval-BaVHder3.js.map +0 -1
  17. package/dist/approvalHistory-B2gpQbFC.js.map +0 -1
  18. package/dist/approvalHistoryViewModal-DgLpv2ot.js.map +0 -1
  19. package/dist/approvalPageConfig-D0zPXOUf.js.map +0 -1
  20. package/dist/approveLeftConfig-BOU_UgHp.js.map +0 -1
  21. package/dist/codeHistoryViewModal-BfSjIbEU.js.map +0 -1
  22. package/dist/columnTables-DLwtgcC7.js.map +0 -1
  23. package/dist/core-BOc9ch_5.js.map +0 -1
  24. package/dist/dataStoreSettingHistoryViewModal-D_so-KLp.js.map +0 -1
  25. package/dist/debugCode-Cm9-WiUG.js.map +0 -1
  26. package/dist/debugCode-dD1YnQSD.js.map +0 -1
  27. package/dist/default-VdDMlY4e.js.map +0 -1
  28. package/dist/example_code-C_xF8RRG.js.map +0 -1
  29. package/dist/flowHistoryViewModal-D8DJP7Te.js.map +0 -1
  30. package/dist/index.js.map +0 -1
  31. package/dist/init-plugin-fQTSQzui.js.map +0 -1
  32. package/dist/leftColumn-CsPjufue.js.map +0 -1
  33. package/dist/middleColumn-C7M6-eVo.js.map +0 -1
  34. package/dist/recordActions-BgFlNsGU.js.map +0 -1
  35. package/dist/settingsState-CI81PG-i.js.map +0 -1
  36. package/dist/tableConfig-uLXue-BS.js.map +0 -1
  37. package/dist/tableModal-BcYfVL02.js.map +0 -1
  38. package/dist/useApprovalRecordActions-BQ6MgV2L.js.map +0 -1
  39. package/dist/utils-CLet2gLV.js.map +0 -1
  40. package/dist/v0001-OaBeBCXI.js.map +0 -1
  41. package/dist/viewer-Dv3kQsMf.js.map +0 -1
  42. package/dist/vue-print-next-HRweUmNi.js.map +0 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "lyflowchart",
3
3
  "type": "module",
4
4
  "license": "MIT",
5
- "version": "1.0.135",
5
+ "version": "1.0.139",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "scripts": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionsConfig-BuvSvRbv.js","names":[],"sources":["../src/components/approval/components/approvalPageConfig/JsonText.vue","../src/components/approval/components/approvalPageConfig/JsonText.vue","../src/components/approval/components/approvalPageConfig/CodeEditorWraper.vue","../src/components/approval/components/approvalPageConfig/CodeEditorWraper.vue","../src/components/approval/components/approvalPageConfig/default_action_code.js?raw","../src/components/approval/components/approvalPageConfig/ActionsConfig.vue","../src/components/approval/components/approvalPageConfig/ActionsConfig.vue"],"sourcesContent":["<template>\n <a-textarea\n :value=\"_value\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n @update:value=\"handleChange\"\n />\n <a-tag>{{ valueType }}</a-tag>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nexport default defineComponent({\n name: 'JsonTags',\n props: {\n value: {\n type: Object,\n required: true,\n },\n placeholder: {\n type: String,\n required: false,\n },\n rows: {\n type: Number,\n default: 3,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const _value = computed(() => {\n if (typeof props.value === 'string') {\n return props.value;\n } else {\n return JSON.stringify(props.value);\n }\n });\n const handleChange = value => {\n let res = null;\n try {\n res = JSON.parse(value);\n } catch {\n res = value;\n }\n emit('update:value', res);\n };\n const valueType = computed(() => {\n return typeof props.value;\n });\n return {\n _value,\n handleChange,\n valueType,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.type {\n color: #1890ff;\n}\n</style>\n","<template>\n <a-textarea\n :value=\"_value\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n @update:value=\"handleChange\"\n />\n <a-tag>{{ valueType }}</a-tag>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nexport default defineComponent({\n name: 'JsonTags',\n props: {\n value: {\n type: Object,\n required: true,\n },\n placeholder: {\n type: String,\n required: false,\n },\n rows: {\n type: Number,\n default: 3,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const _value = computed(() => {\n if (typeof props.value === 'string') {\n return props.value;\n } else {\n return JSON.stringify(props.value);\n }\n });\n const handleChange = value => {\n let res = null;\n try {\n res = JSON.parse(value);\n } catch {\n res = value;\n }\n emit('update:value', res);\n };\n const valueType = computed(() => {\n return typeof props.value;\n });\n return {\n _value,\n handleChange,\n valueType,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.type {\n color: #1890ff;\n}\n</style>\n","<template>\n <div>\n <div>\n <a-button\n type=\"link\"\n @click=\"isCodeVisible = !isCodeVisible\"\n >\n {{ isCodeVisible ? '隐藏代码' : '显示代码' }}\n </a-button>\n </div>\n <div v-if=\"isCodeVisible\">\n <a-form>\n <a-form-item label=\"示例代码\">\n <a-row :gutter=\"10\">\n <a-col :span=\"20\">\n <a-select\n v-model:value=\"exampleCode\"\n show-search\n >\n <a-select-option\n v-for=\"item in filterExampleCodeList\"\n :value=\"item.value\"\n :key=\"item.value\"\n >\n <a-tooltip\n overlayClassName=\"debug-code-code-view\"\n color=\"blue\"\n >\n <template #title>\n <pre>{{ item.value }}</pre>\n </template>\n {{ item.label }}\n </a-tooltip>\n </a-select-option>\n </a-select>\n </a-col>\n <a-col :span=\"4\">\n <a-button-group>\n <a-button\n type=\"primary\"\n @click=\"handleAppendCode\"\n >\n 附加\n </a-button>\n <a-button\n type=\"primary\"\n @click=\"handleReplaceCode\"\n >\n 替换\n </a-button>\n </a-button-group>\n </a-col>\n </a-row>\n </a-form-item>\n </a-form>\n <code-editor\n :editorValue=\"value\"\n @update:editorValue=\"update\"\n mode=\"javascript\"\n :lineWrapping=\"true\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\nimport { exampleCodeList } from '../../example_code/example_code';\nimport { Modal } from 'ant-design-vue';\nconst EDIT_TYPE_CLICK = 'click';\nconst EDIT_TYPE_SHOW = 'show';\nconst EDIT_TYPE_DISABLE = 'disable';\nconst EDIT_TYPE_VALUE = 'value';\nexport default defineComponent({\n name: 'CodeEditorWraper',\n components: {\n },\n props: {\n value: {\n type: String,\n default: '',\n },\n editType: {\n type: String,\n default: '',\n },\n action: {\n type: String,\n default: '',\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const isCodeVisible = ref(false);\n const exampleCode = ref('');\n const update = value => {\n emit('update:value', value);\n };\n const filterExampleCodeList = computed(() => {\n return exampleCodeList.filter(item => {\n if (props.editType === EDIT_TYPE_CLICK) {\n return (\n item.types.includes(EDIT_TYPE_CLICK) && item.actions.includes(props.action || null)\n );\n } else {\n return item.types.includes(props.editType);\n }\n });\n });\n const handleAppendCode = () => {\n if (!exampleCode.value) {\n return;\n }\n const value = `${props.value || ''}\\n${exampleCode.value}`;\n emit('update:value', value);\n };\n\n const handleReplaceCode = () => {\n if (!exampleCode.value) {\n return;\n }\n if (props.value) {\n Modal.confirm({\n title: '提示',\n content: '是否确认要替换现有代码',\n onOk() {\n emit('update:value', exampleCode.value);\n },\n onCancel() {},\n });\n } else {\n emit('update:value', exampleCode.value);\n }\n };\n return {\n update,\n isCodeVisible,\n exampleCode,\n filterExampleCodeList,\n handleAppendCode,\n handleReplaceCode,\n };\n },\n});\n</script>\n\n<style scoped lang=\"less\"></style>\n","<template>\n <div>\n <div>\n <a-button\n type=\"link\"\n @click=\"isCodeVisible = !isCodeVisible\"\n >\n {{ isCodeVisible ? '隐藏代码' : '显示代码' }}\n </a-button>\n </div>\n <div v-if=\"isCodeVisible\">\n <a-form>\n <a-form-item label=\"示例代码\">\n <a-row :gutter=\"10\">\n <a-col :span=\"20\">\n <a-select\n v-model:value=\"exampleCode\"\n show-search\n >\n <a-select-option\n v-for=\"item in filterExampleCodeList\"\n :value=\"item.value\"\n :key=\"item.value\"\n >\n <a-tooltip\n overlayClassName=\"debug-code-code-view\"\n color=\"blue\"\n >\n <template #title>\n <pre>{{ item.value }}</pre>\n </template>\n {{ item.label }}\n </a-tooltip>\n </a-select-option>\n </a-select>\n </a-col>\n <a-col :span=\"4\">\n <a-button-group>\n <a-button\n type=\"primary\"\n @click=\"handleAppendCode\"\n >\n 附加\n </a-button>\n <a-button\n type=\"primary\"\n @click=\"handleReplaceCode\"\n >\n 替换\n </a-button>\n </a-button-group>\n </a-col>\n </a-row>\n </a-form-item>\n </a-form>\n <code-editor\n :editorValue=\"value\"\n @update:editorValue=\"update\"\n mode=\"javascript\"\n :lineWrapping=\"true\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref } from 'vue';\nimport { exampleCodeList } from '../../example_code/example_code';\nimport { Modal } from 'ant-design-vue';\nconst EDIT_TYPE_CLICK = 'click';\nconst EDIT_TYPE_SHOW = 'show';\nconst EDIT_TYPE_DISABLE = 'disable';\nconst EDIT_TYPE_VALUE = 'value';\nexport default defineComponent({\n name: 'CodeEditorWraper',\n components: {\n },\n props: {\n value: {\n type: String,\n default: '',\n },\n editType: {\n type: String,\n default: '',\n },\n action: {\n type: String,\n default: '',\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const isCodeVisible = ref(false);\n const exampleCode = ref('');\n const update = value => {\n emit('update:value', value);\n };\n const filterExampleCodeList = computed(() => {\n return exampleCodeList.filter(item => {\n if (props.editType === EDIT_TYPE_CLICK) {\n return (\n item.types.includes(EDIT_TYPE_CLICK) && item.actions.includes(props.action || null)\n );\n } else {\n return item.types.includes(props.editType);\n }\n });\n });\n const handleAppendCode = () => {\n if (!exampleCode.value) {\n return;\n }\n const value = `${props.value || ''}\\n${exampleCode.value}`;\n emit('update:value', value);\n };\n\n const handleReplaceCode = () => {\n if (!exampleCode.value) {\n return;\n }\n if (props.value) {\n Modal.confirm({\n title: '提示',\n content: '是否确认要替换现有代码',\n onOk() {\n emit('update:value', exampleCode.value);\n },\n onCancel() {},\n });\n } else {\n emit('update:value', exampleCode.value);\n }\n };\n return {\n update,\n isCodeVisible,\n exampleCode,\n filterExampleCodeList,\n handleAppendCode,\n handleReplaceCode,\n };\n },\n});\n</script>\n\n<style scoped lang=\"less\"></style>\n","export default \"async function run(params) {\\n console.log(JSON.stringify(params));\\n // try {\\n // const res = await self.callHost('getApiData')({}, '/test/');\\n // } catch (e) {\\n // console.error('call error', JSON.stringify(e));\\n // }\\n return { name: 'test' };\\n}\\n\"","<template>\n <div>\n <div\n v-for=\"(button, index) in dataSource\"\n :key=\"index\"\n class=\"button-config-item\"\n >\n <div class=\"item-index\">({{ index + 1 }})</div>\n <div class=\"config-body\">\n <a-row\n :gutter=\"16\"\n align=\"top\"\n >\n <a-col :span=\"5\">\n <label>名称</label>\n <a-input v-model:value=\"button.label\" />\n </a-col>\n <a-col :span=\"3\">\n <label>下拉菜单</label>\n <div>\n <a-switch v-model:checked=\"button.is_dropdown\" />\n </div>\n </a-col>\n <template v-if=\"!button.is_dropdown\">\n <a-col :span=\"3\">\n <label>危险按钮</label>\n <div>\n <a-switch v-model:checked=\"button.danger\" />\n </div>\n </a-col>\n <a-col :span=\"5\">\n <label>显示类型</label>\n <a-select\n v-model:value=\"button.type\"\n class=\"w-full\"\n >\n <a-select-option\n v-for=\"(item, index) in typeList\"\n :value=\"item\"\n :key=\"index\"\n >\n <a-button\n size=\"small\"\n :type=\"item as any\"\n :danger=\"button.danger\"\n >\n {{ item }}\n </a-button>\n </a-select-option>\n </a-select>\n </a-col>\n </template>\n <template v-else>\n <a-col :span=\"5\">\n <label>组名</label>\n <a-input v-model:value=\"button.group_name\" />\n </a-col>\n </template>\n </a-row>\n <a-row :gutter=\"16\">\n <a-col :span=\"24\">\n <label>操作类型</label>\n <a-select\n v-model:value=\"button.action\"\n class=\"w-full\"\n :options=\"actionTypes\"\n ></a-select>\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"24\">\n <label>配置</label>\n <json-text\n v-model:value=\"button.settings\"\n :rows=\"3\"\n />\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"24\">\n <label>点击事件代码</label>\n <code-editor-wraper\n v-model:value=\"button.code\"\n :edit-type=\"'click'\"\n :action=\"button.action\"\n />\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"2\">\n <label>显示控制</label>\n <a-switch\n :checked=\"button.showCode?.enable\"\n @change=\"showCodeEnableChange(button, $event)\"\n ></a-switch>\n </a-col>\n <a-col\n :span=\"22\"\n v-if=\"button.showCode?.enable\"\n >\n <label>显示控制代码</label>\n <code-editor-wraper\n v-model:value=\"button.showCode.code\"\n :edit-type=\"'show'\"\n />\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"2\">\n <label>禁用控制</label>\n <a-switch\n :checked=\"button.disableCode?.enable\"\n @change=\"disableCodeEnableChange(button, $event)\"\n ></a-switch>\n </a-col>\n <a-col\n :span=\"22\"\n v-if=\"button.disableCode?.enable\"\n >\n <label>禁用制代码</label>\n <code-editor-wraper\n v-model:value=\"button.disableCode.code\"\n :edit-type=\"'disable'\"\n />\n </a-col>\n </a-row>\n </div>\n <div class=\"config-actions\">\n <delete-outlined\n @click=\"removeButton(index)\"\n class=\"delete-icon\"\n />\n </div>\n </div>\n <a-button\n type=\"link\"\n @click=\"addButton\"\n >\n 添加按钮\n </a-button>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue';\nimport { Action } from '../../typing';\nimport JsonText from './JsonText.vue';\nimport { actionTypes } from '../../utils';\nimport CodeEditorWraper from './CodeEditorWraper.vue';\nimport default_action_cdoe from './default_action_code.js?raw';\nimport form_bottom_show from '../../example_code/form_bottom_show.js?raw';\nimport form_bottom_disable from '../../example_code/form_bottom_disable.js?raw';\n\nexport default defineComponent({\n name: 'ActionsConfig',\n components: {\n JsonText,\n CodeEditorWraper,\n },\n props: {\n dataSource: {\n type: Object as PropType<Array<Action>>,\n required: true,\n },\n },\n emits: ['update:dataSource'],\n setup(props, { emit }) {\n const addButton = () => {\n const data = props.dataSource || [];\n emit('update:dataSource', [\n ...data,\n {\n label: '',\n type: 'primary',\n action: 'process',\n danger: false,\n settings: {},\n code: default_action_cdoe,\n },\n ]);\n };\n const showCodeEnableChange = (item: Action, enable) => {\n item.showCode = {\n ...(item.showCode || { code: form_bottom_show }),\n enable: enable,\n };\n };\n const disableCodeEnableChange = (item: Action, enable) => {\n item.disableCode = {\n ...(item.showCode || { code: form_bottom_disable }),\n enable: enable,\n };\n };\n\n const removeButton = (index: number) => {\n props.dataSource.splice(index, 1);\n };\n const typeList = ['primary', 'default', 'dashed', 'link', 'text'];\n\n return {\n addButton,\n removeButton,\n typeList,\n actionTypes,\n showCodeEnableChange,\n disableCodeEnableChange,\n };\n },\n});\n</script>\n\n<style scoped lang=\"less\">\n.button-config-item {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 16px;\n margin-bottom: 16px;\n\n &:last-child {\n border-bottom: none;\n margin-bottom: 0;\n }\n}\n\n.config-body {\n flex: 1;\n}\n\n.delete-icon {\n font-size: 18px;\n color: #ff4d4f;\n cursor: pointer;\n}\n\nlabel {\n display: block;\n margin-bottom: 4px;\n}\n\n.w-full {\n width: 100%;\n}\n</style>\n","<template>\n <div>\n <div\n v-for=\"(button, index) in dataSource\"\n :key=\"index\"\n class=\"button-config-item\"\n >\n <div class=\"item-index\">({{ index + 1 }})</div>\n <div class=\"config-body\">\n <a-row\n :gutter=\"16\"\n align=\"top\"\n >\n <a-col :span=\"5\">\n <label>名称</label>\n <a-input v-model:value=\"button.label\" />\n </a-col>\n <a-col :span=\"3\">\n <label>下拉菜单</label>\n <div>\n <a-switch v-model:checked=\"button.is_dropdown\" />\n </div>\n </a-col>\n <template v-if=\"!button.is_dropdown\">\n <a-col :span=\"3\">\n <label>危险按钮</label>\n <div>\n <a-switch v-model:checked=\"button.danger\" />\n </div>\n </a-col>\n <a-col :span=\"5\">\n <label>显示类型</label>\n <a-select\n v-model:value=\"button.type\"\n class=\"w-full\"\n >\n <a-select-option\n v-for=\"(item, index) in typeList\"\n :value=\"item\"\n :key=\"index\"\n >\n <a-button\n size=\"small\"\n :type=\"item as any\"\n :danger=\"button.danger\"\n >\n {{ item }}\n </a-button>\n </a-select-option>\n </a-select>\n </a-col>\n </template>\n <template v-else>\n <a-col :span=\"5\">\n <label>组名</label>\n <a-input v-model:value=\"button.group_name\" />\n </a-col>\n </template>\n </a-row>\n <a-row :gutter=\"16\">\n <a-col :span=\"24\">\n <label>操作类型</label>\n <a-select\n v-model:value=\"button.action\"\n class=\"w-full\"\n :options=\"actionTypes\"\n ></a-select>\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"24\">\n <label>配置</label>\n <json-text\n v-model:value=\"button.settings\"\n :rows=\"3\"\n />\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"24\">\n <label>点击事件代码</label>\n <code-editor-wraper\n v-model:value=\"button.code\"\n :edit-type=\"'click'\"\n :action=\"button.action\"\n />\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"2\">\n <label>显示控制</label>\n <a-switch\n :checked=\"button.showCode?.enable\"\n @change=\"showCodeEnableChange(button, $event)\"\n ></a-switch>\n </a-col>\n <a-col\n :span=\"22\"\n v-if=\"button.showCode?.enable\"\n >\n <label>显示控制代码</label>\n <code-editor-wraper\n v-model:value=\"button.showCode.code\"\n :edit-type=\"'show'\"\n />\n </a-col>\n </a-row>\n <a-row\n :gutter=\"16\"\n class=\"mt-4\"\n >\n <a-col :span=\"2\">\n <label>禁用控制</label>\n <a-switch\n :checked=\"button.disableCode?.enable\"\n @change=\"disableCodeEnableChange(button, $event)\"\n ></a-switch>\n </a-col>\n <a-col\n :span=\"22\"\n v-if=\"button.disableCode?.enable\"\n >\n <label>禁用制代码</label>\n <code-editor-wraper\n v-model:value=\"button.disableCode.code\"\n :edit-type=\"'disable'\"\n />\n </a-col>\n </a-row>\n </div>\n <div class=\"config-actions\">\n <delete-outlined\n @click=\"removeButton(index)\"\n class=\"delete-icon\"\n />\n </div>\n </div>\n <a-button\n type=\"link\"\n @click=\"addButton\"\n >\n 添加按钮\n </a-button>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref } from 'vue';\nimport { Action } from '../../typing';\nimport JsonText from './JsonText.vue';\nimport { actionTypes } from '../../utils';\nimport CodeEditorWraper from './CodeEditorWraper.vue';\nimport default_action_cdoe from './default_action_code.js?raw';\nimport form_bottom_show from '../../example_code/form_bottom_show.js?raw';\nimport form_bottom_disable from '../../example_code/form_bottom_disable.js?raw';\n\nexport default defineComponent({\n name: 'ActionsConfig',\n components: {\n JsonText,\n CodeEditorWraper,\n },\n props: {\n dataSource: {\n type: Object as PropType<Array<Action>>,\n required: true,\n },\n },\n emits: ['update:dataSource'],\n setup(props, { emit }) {\n const addButton = () => {\n const data = props.dataSource || [];\n emit('update:dataSource', [\n ...data,\n {\n label: '',\n type: 'primary',\n action: 'process',\n danger: false,\n settings: {},\n code: default_action_cdoe,\n },\n ]);\n };\n const showCodeEnableChange = (item: Action, enable) => {\n item.showCode = {\n ...(item.showCode || { code: form_bottom_show }),\n enable: enable,\n };\n };\n const disableCodeEnableChange = (item: Action, enable) => {\n item.disableCode = {\n ...(item.showCode || { code: form_bottom_disable }),\n enable: enable,\n };\n };\n\n const removeButton = (index: number) => {\n props.dataSource.splice(index, 1);\n };\n const typeList = ['primary', 'default', 'dashed', 'link', 'text'];\n\n return {\n addButton,\n removeButton,\n typeList,\n actionTypes,\n showCodeEnableChange,\n disableCodeEnableChange,\n };\n },\n});\n</script>\n\n<style scoped lang=\"less\">\n.button-config-item {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 16px;\n margin-bottom: 16px;\n\n &:last-child {\n border-bottom: none;\n margin-bottom: 0;\n }\n}\n\n.config-body {\n flex: 1;\n}\n\n.delete-icon {\n font-size: 18px;\n color: #ff4d4f;\n cursor: pointer;\n}\n\nlabel {\n display: block;\n margin-bottom: 4px;\n}\n\n.w-full {\n width: 100%;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CancelModal-BUi3ieI8.js","names":[],"sources":["../src/components/approval/components/CancelModal.vue","../src/components/approval/components/CancelModal.vue"],"sourcesContent":["<template>\n <a-modal\n v-model:open=\"cancelModalShow\"\n title=\"审批作废\"\n @ok=\"commit\"\n >\n <a-form\n :model=\"cancelModal\"\n ref=\"formRef\"\n >\n <a-form-item\n name=\"bz\"\n :rules=\"[{ required: true }]\"\n label=\"作废原因\"\n >\n <a-textarea\n placeholder=\"请输入作废原因\"\n v-model:value=\"cancelModal.bz\"\n />\n </a-form-item>\n </a-form>\n </a-modal>\n</template>\n<script setup lang=\"ts\">\nimport { message } from 'ant-design-vue';\nimport { getApiData } from '@/init-plugin';\nimport { reactive, ref } from 'vue';\n/**\n * 审批作废(= 详情页/列表页的「删除」动作):\n * 填作废原因 → `/approve/cancel_agree_approve_record`。\n *\n * 两种调用方,所以 `eventBus` 是**可选**的:\n * 1. 审批页面(columnForm.vue):传页面 eventBus,成功后广播 `reload_table` 刷新列表;\n * 2. 详情场景(useApprovalRecordActions → removeProps):**没有页面 eventBus**,\n * 改由本组件的 `done` 事件回调,让外壳刷新详情。\n */\ndefineOptions({ name: 'ApprovalCancelModal' });\n\nconst props = withDefaults(\n defineProps<{\n /** 要作废的审批记录 id */\n id?: number | null;\n /** 审批页面的事件总线;详情场景不传 */\n eventBus?: { emit: (event: string, payload?: any) => void } | null;\n }>(),\n {\n id: null,\n eventBus: null,\n },\n);\n\nconst emit = defineEmits<{\n /** 作废成功(详情场景用来刷新详情与列表) */\n (e: 'done'): void;\n}>();\n\nconst cancelModalShow = defineModel('cancelModalShow');\nconst cancelModal = reactive({\n bz: '',\n});\nconst formRef = ref(null);\nconst commit = async () => {\n if (!props.id) {\n message.error('未获取到要作废的审批记录');\n return;\n }\n await formRef.value.validate();\n await getApiData(\n { approve_record_id: props.id, bz: cancelModal.bz },\n '/approve/cancel_agree_approve_record',\n );\n // 列表页:广播刷新表格;详情页:走 done 事件(两者可以同时存在,互不影响)\n props.eventBus?.emit('reload_table');\n emit('done');\n message.success('作废成功');\n cancelModalShow.value = false;\n};\n</script>\n","<template>\n <a-modal\n v-model:open=\"cancelModalShow\"\n title=\"审批作废\"\n @ok=\"commit\"\n >\n <a-form\n :model=\"cancelModal\"\n ref=\"formRef\"\n >\n <a-form-item\n name=\"bz\"\n :rules=\"[{ required: true }]\"\n label=\"作废原因\"\n >\n <a-textarea\n placeholder=\"请输入作废原因\"\n v-model:value=\"cancelModal.bz\"\n />\n </a-form-item>\n </a-form>\n </a-modal>\n</template>\n<script setup lang=\"ts\">\nimport { message } from 'ant-design-vue';\nimport { getApiData } from '@/init-plugin';\nimport { reactive, ref } from 'vue';\n/**\n * 审批作废(= 详情页/列表页的「删除」动作):\n * 填作废原因 → `/approve/cancel_agree_approve_record`。\n *\n * 两种调用方,所以 `eventBus` 是**可选**的:\n * 1. 审批页面(columnForm.vue):传页面 eventBus,成功后广播 `reload_table` 刷新列表;\n * 2. 详情场景(useApprovalRecordActions → removeProps):**没有页面 eventBus**,\n * 改由本组件的 `done` 事件回调,让外壳刷新详情。\n */\ndefineOptions({ name: 'ApprovalCancelModal' });\n\nconst props = withDefaults(\n defineProps<{\n /** 要作废的审批记录 id */\n id?: number | null;\n /** 审批页面的事件总线;详情场景不传 */\n eventBus?: { emit: (event: string, payload?: any) => void } | null;\n }>(),\n {\n id: null,\n eventBus: null,\n },\n);\n\nconst emit = defineEmits<{\n /** 作废成功(详情场景用来刷新详情与列表) */\n (e: 'done'): void;\n}>();\n\nconst cancelModalShow = defineModel('cancelModalShow');\nconst cancelModal = reactive({\n bz: '',\n});\nconst formRef = ref(null);\nconst commit = async () => {\n if (!props.id) {\n message.error('未获取到要作废的审批记录');\n return;\n }\n await formRef.value.validate();\n await getApiData(\n { approve_record_id: props.id, bz: cancelModal.bz },\n '/approve/cancel_agree_approve_record',\n );\n // 列表页:广播刷新表格;详情页:走 done 事件(两者可以同时存在,互不影响)\n props.eventBus?.emit('reload_table');\n emit('done');\n message.success('作废成功');\n cancelModalShow.value = false;\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EAsCA,IAAM,IAAQ,GAaR,IAAO,GAKP,IAAkB,EAAW,GAAC,kBAAkB,EAChD,IAAc,EAAS,EAC3B,IAAI,IACL,CAAC,EACI,IAAU,EAAI,KAAK,EACnB,IAAS,YAAY;AACzB,OAAI,CAAC,EAAM,IAAI;AACb,MAAQ,MAAM,eAAe;AAC7B;;AAWF,GATA,MAAM,EAAQ,MAAM,UAAU,EAC9B,MAAM,EACJ;IAAE,mBAAmB,EAAM;IAAI,IAAI,EAAY;IAAI,EACnD,uCACD,EAED,EAAM,UAAU,KAAK,eAAe,EACpC,EAAK,OAAO,EACZ,EAAQ,QAAQ,OAAO,EACvB,EAAgB,QAAQ;;;;eA1ExB,EAoBU,GAAA;IAnBA,MAAM,EAAA;uCAAe,QAAA;IAC7B,OAAM;IACL,MAAI;;qBAgBI,CAdT,EAcS,GAAA;KAbN,OAAO;cACJ;KAAJ,KAAI;;sBAWU,CATd,EASc,GAAA;MARZ,MAAK;MACJ,OAAO,CAAA,EAAA,UAAA,IAAA,CAAoB;MAC5B,OAAM;;uBAKJ,CAHF,EAGE,GAAA;OAFA,aAAY;OACJ,OAAO,EAAY;2CAAA,KAAE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cell_click_approve-DoemsGnY.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 type=\"primary\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n <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 type=\"primary\"\n @click=\"runAction('edit_approve')\"\n >\n 修改\n </a-button>\n <a-button\n v-if=\"canShow('cancel_agree_approve')\"\n :loading=\"actionsLoading\"\n danger\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('cancel_agree_approve')\"\n >\n 删除\n </a-button>\n <a-button\n v-if=\"canShow('print')\"\n style=\"margin-left: 10px\"\n type=\"primary\"\n @click=\"runAction('print')\"\n >\n 打印\n </a-button>\n </template>\n <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 +0,0 @@
1
- {"version":3,"file":"JsonTags-BbWLqghI.js","names":[],"sources":["../src/components/approval/components/approvalPageConfig/JsonTags.vue","../src/components/approval/components/approvalPageConfig/JsonTags.vue"],"sourcesContent":["<template>\n <a-select\n :value=\"value\"\n mode=\"tags\"\n @change=\"handleChange\"\n :placeholder=\"placeholder || '请输入'\"\n >\n <template #tagRender=\"{ value: val, label, closable, onClose, option }\">\n <a-tag\n :closable=\"closable\"\n style=\"margin-right: 3px\"\n @close=\"onClose\"\n >\n {{ getDisplay(val) }}\n <span class=\"type\">[{{ getType(val) }}]</span>\n </a-tag>\n </template>\n </a-select>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nexport default defineComponent({\n name: 'JsonTags',\n props: {\n value: {\n type: Array as () => Array<any>,\n required: true,\n },\n placeholder: {\n type: String,\n required: false,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const handleChange = value => {\n const res = value.map(item => {\n try {\n return JSON.parse(item);\n } catch {\n return item;\n }\n });\n console.log(res);\n emit('update:value', res);\n };\n const getType = value => {\n let _value = value;\n return typeof _value;\n };\n const getDisplay = value => {\n if (typeof value === 'string') {\n return value;\n }\n try {\n const tmp = JSON.stringify(value);\n return tmp;\n } catch (e) {\n return value;\n }\n };\n return {\n handleChange,\n getType,\n getDisplay,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.type {\n color: #1890ff;\n}\n</style>\n","<template>\n <a-select\n :value=\"value\"\n mode=\"tags\"\n @change=\"handleChange\"\n :placeholder=\"placeholder || '请输入'\"\n >\n <template #tagRender=\"{ value: val, label, closable, onClose, option }\">\n <a-tag\n :closable=\"closable\"\n style=\"margin-right: 3px\"\n @close=\"onClose\"\n >\n {{ getDisplay(val) }}\n <span class=\"type\">[{{ getType(val) }}]</span>\n </a-tag>\n </template>\n </a-select>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, watch } from 'vue';\n\nexport default defineComponent({\n name: 'JsonTags',\n props: {\n value: {\n type: Array as () => Array<any>,\n required: true,\n },\n placeholder: {\n type: String,\n required: false,\n },\n },\n emits: ['update:value'],\n setup(props, { emit }) {\n const handleChange = value => {\n const res = value.map(item => {\n try {\n return JSON.parse(item);\n } catch {\n return item;\n }\n });\n console.log(res);\n emit('update:value', res);\n };\n const getType = value => {\n let _value = value;\n return typeof _value;\n };\n const getDisplay = value => {\n if (typeof value === 'string') {\n return value;\n }\n try {\n const tmp = JSON.stringify(value);\n return tmp;\n } catch (e) {\n return value;\n }\n };\n return {\n handleChange,\n getType,\n getDisplay,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.type {\n color: #1890ff;\n}\n</style>\n"],"mappings":";;;AAuBA,IAAA,IAAe,EAAgB;CAC7B,MAAM;CACN,OAAO;EACL,OAAO;GACL,MAAM;GACN,UAAU;GACX;EACD,aAAa;GACX,MAAM;GACN,UAAU;GACX;EACF;CACD,OAAO,CAAC,eAAe;CACvB,MAAM,GAAO,EAAE,WAAQ;AA2BrB,SAAO;GACL,eA3BmB,MAAS;IAC5B,IAAM,IAAM,EAAM,KAAI,MAAQ;AAC5B,SAAI;AACF,aAAO,KAAK,MAAM,EAAK;aACjB;AACN,aAAO;;MAET;AAEF,IADA,QAAQ,IAAI,EAAI,EAChB,EAAK,gBAAgB,EAAI;;GAmBzB,UAjBc,MAEP,OADM;GAiBb,aAdiB,MAAS;AAC1B,QAAI,OAAO,KAAU,SACnB,QAAO;AAET,QAAI;AAEF,YADY,KAAK,UAAU,EAAM;YAEvB;AACV,YAAO;;;GAOV;;CAEJ,CAAC,QCvDY,OAAM,QAAM;;;aAbxB,EAgBW,GAAA;EAfR,OAAO,EAAA;EACR,MAAK;EACJ,UAAQ,EAAA;EACR,aAAa,EAAA,eAAW;;EAEd,WAAS,GAQV,EAAA,OARqB,GAAK,UAAO,aAAU,YAAS,gBAAM,CAClE,EAOQ,GAAA;GANK;GACX,OAAA,EAAA,gBAAA,OAAyB;GACjB;;oBAEa,CAAA,EAAA,EAAlB,EAAA,WAAW,EAAG,CAAA,GAAI,KACrB,EAAA,EAAA,EAA8C,QAA9C,GAAmB,MAAC,EAAG,EAAA,QAAQ,EAAG,CAAA,GAAI,KAAC,EAAA,CAAA,CAAA"}