From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/bpm/model/form/ExtraSettings.vue | 507 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 507 insertions(+), 0 deletions(-)
diff --git a/src/views/bpm/model/form/ExtraSettings.vue b/src/views/bpm/model/form/ExtraSettings.vue
new file mode 100644
index 0000000..e250eec
--- /dev/null
+++ b/src/views/bpm/model/form/ExtraSettings.vue
@@ -0,0 +1,507 @@
+<template>
+ <el-form ref="formRef" :model="modelData" label-width="130px" class="mt-20px">
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">鎻愪氦浜烘潈闄�</el-text>
+ </template>
+ <div class="flex flex-col">
+ <el-checkbox v-model="modelData.allowCancelRunningProcess" label="鍏佽鎾ら攢瀹℃壒涓殑鐢宠" />
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">瀹℃壒浜烘潈闄�</el-text>
+ </template>
+ <div class="flex flex-col">
+ <el-checkbox v-model="modelData.allowWithdrawTask" label="鍏佽瀹℃壒浜烘挙鍥炰换鍔�" />
+ <div class="ml-22px">
+ <el-text type="info"> 瀹℃壒浜哄彲鎾ゅ洖姝e湪瀹℃壒鑺傜偣鐨勫墠涓�鑺傜偣 </el-text>
+ </div>
+ </div>
+ </el-form-item>
+ <el-form-item v-if="modelData.processIdRule" class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">娴佺▼缂栫爜</el-text>
+ </template>
+ <div class="flex flex-col">
+ <div>
+ <el-input
+ v-model="modelData.processIdRule.prefix"
+ class="w-130px!"
+ placeholder="鍓嶇紑"
+ :disabled="!modelData.processIdRule.enable"
+ >
+ <template #prepend>
+ <el-checkbox v-model="modelData.processIdRule.enable" />
+ </template>
+ </el-input>
+ <el-select
+ v-model="modelData.processIdRule.infix"
+ class="w-130px! ml-5px"
+ placeholder="涓紑"
+ :disabled="!modelData.processIdRule.enable"
+ >
+ <el-option
+ v-for="item in timeOptions"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ <el-input
+ v-model="modelData.processIdRule.postfix"
+ class="w-80px! ml-5px"
+ placeholder="鍚庣紑"
+ :disabled="!modelData.processIdRule.enable"
+ />
+ <el-input-number
+ v-model="modelData.processIdRule.length"
+ class="w-120px! ml-5px"
+ :min="5"
+ :disabled="!modelData.processIdRule.enable"
+ />
+ </div>
+ <div class="ml-22px" v-if="modelData.processIdRule.enable">
+ <el-text type="info"> 缂栫爜绀轰緥锛歿{ numberExample }} </el-text>
+ </div>
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">鑷姩鍘婚噸</el-text>
+ </template>
+ <div class="flex flex-col">
+ <div>
+ <el-text> 鍚屼竴瀹℃壒浜哄湪娴佺▼涓噸澶嶅嚭鐜版椂锛� </el-text>
+ </div>
+ <el-radio-group v-model="modelData.autoApprovalType">
+ <div class="flex flex-col">
+ <el-radio :value="0">涓嶈嚜鍔ㄩ�氳繃</el-radio>
+ <el-radio :value="1">浠呭鎵逛竴娆★紝鍚庣画閲嶅鐨勫鎵硅妭鐐瑰潎鑷姩閫氳繃</el-radio>
+ <el-radio :value="2">浠呴拡瀵硅繛缁鎵圭殑鑺傜偣鑷姩閫氳繃</el-radio>
+ </div>
+ </el-radio-group>
+ </div>
+ </el-form-item>
+ <el-form-item v-if="modelData.titleSetting" class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">鏍囬璁剧疆</el-text>
+ </template>
+ <div class="flex flex-col">
+ <el-radio-group v-model="modelData.titleSetting.enable">
+ <div class="flex flex-col">
+ <el-radio :value="false"
+ >绯荤粺榛樿 <el-text type="info"> 灞曠ず娴佺▼鍚嶇О </el-text></el-radio
+ >
+ <el-radio :value="true">
+ 鑷畾涔夋爣棰�
+ <el-text>
+ <el-tooltip content="杈撳叆瀛楃 '{' 鍗冲彲鎻掑叆琛ㄥ崟瀛楁" effect="light" placement="top">
+ <Icon icon="ep:question-filled" class="ml-5px" />
+ </el-tooltip>
+ </el-text>
+ </el-radio>
+ </div>
+ </el-radio-group>
+ <el-mention
+ v-if="modelData.titleSetting.enable"
+ v-model="modelData.titleSetting.title"
+ type="textarea"
+ prefix="{"
+ split="}"
+ whole
+ :options="formFieldOptions4Title"
+ placeholder="璇锋彃鍏ヨ〃鍗曞瓧娈碉紙杈撳叆 '{' 鍙互閫夋嫨琛ㄥ崟瀛楁锛夋垨杈撳叆鏂囨湰"
+ class="w-600px!"
+ />
+ </div>
+ </el-form-item>
+ <el-form-item
+ v-if="modelData.summarySetting && modelData.formType === BpmModelFormType.NORMAL"
+ class="mb-20px"
+ >
+ <template #label>
+ <el-text size="large" tag="b">鎽樿璁剧疆</el-text>
+ </template>
+ <div class="flex flex-col">
+ <el-radio-group v-model="modelData.summarySetting.enable">
+ <div class="flex flex-col">
+ <el-radio :value="false">
+ 绯荤粺榛樿 <el-text type="info"> 灞曠ず琛ㄥ崟鍓� 3 涓瓧娈� </el-text>
+ </el-radio>
+ <el-radio :value="true"> 鑷畾涔夋憳瑕� </el-radio>
+ </div>
+ </el-radio-group>
+ <el-select
+ class="w-500px!"
+ v-if="modelData.summarySetting.enable"
+ v-model="modelData.summarySetting.summary"
+ multiple
+ placeholder="璇烽�夋嫨瑕佸睍绀虹殑琛ㄥ崟瀛楁"
+ >
+ <el-option
+ v-for="item in formFieldOptions4Summary"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">娴佺▼鍓嶇疆閫氱煡</el-text>
+ </template>
+ <div class="flex flex-col w-100%">
+ <div class="flex">
+ <el-switch
+ v-model="processBeforeTriggerEnable"
+ @change="handleProcessBeforeTriggerEnableChange"
+ />
+ <div class="ml-80px">娴佺▼鍚姩鍚庨�氱煡</div>
+ </div>
+ <HttpRequestSetting
+ v-if="processBeforeTriggerEnable"
+ v-model:setting="modelData.processBeforeTriggerSetting"
+ :responseEnable="true"
+ :formItemPrefix="'processBeforeTriggerSetting'"
+ />
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">娴佺▼鍚庣疆閫氱煡</el-text>
+ </template>
+ <div class="flex flex-col w-100%">
+ <div class="flex">
+ <el-switch
+ v-model="processAfterTriggerEnable"
+ @change="handleProcessAfterTriggerEnableChange"
+ />
+ <div class="ml-80px">娴佺▼缁撴潫鍚庨�氱煡</div>
+ </div>
+ <HttpRequestSetting
+ v-if="processAfterTriggerEnable"
+ v-model:setting="modelData.processAfterTriggerSetting"
+ :responseEnable="true"
+ :formItemPrefix="'processAfterTriggerSetting'"
+ />
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">浠诲姟鍓嶇疆閫氱煡</el-text>
+ </template>
+ <div class="flex flex-col w-100%">
+ <div class="flex">
+ <el-switch
+ v-model="taskBeforeTriggerEnable"
+ @change="handleTaskBeforeTriggerEnableChange"
+ />
+ <div class="ml-80px">浠诲姟鎵ц鏃堕�氱煡</div>
+ </div>
+ <HttpRequestSetting
+ v-if="taskBeforeTriggerEnable"
+ v-model:setting="modelData.taskBeforeTriggerSetting"
+ :responseEnable="true"
+ :formItemPrefix="'taskBeforeTriggerSetting'"
+ />
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">浠诲姟鍚庣疆閫氱煡</el-text>
+ </template>
+ <div class="flex flex-col w-100%">
+ <div class="flex">
+ <el-switch
+ v-model="taskAfterTriggerEnable"
+ @change="handleTaskAfterTriggerEnableChange"
+ />
+ <div class="ml-80px">浠诲姟缁撴潫鍚庨�氱煡</div>
+ </div>
+ <HttpRequestSetting
+ v-if="taskAfterTriggerEnable"
+ v-model:setting="modelData.taskAfterTriggerSetting"
+ :responseEnable="true"
+ :formItemPrefix="'taskAfterTriggerSetting'"
+ />
+ </div>
+ </el-form-item>
+ <el-form-item class="mb-20px">
+ <template #label>
+ <el-text size="large" tag="b">鑷畾涔夋墦鍗版ā鏉�</el-text>
+ </template>
+ <div class="flex flex-col w-100%">
+ <div class="flex">
+ <el-switch
+ v-model="modelData.printTemplateSetting.enable"
+ @change="handlePrintTemplateEnableChange"
+ />
+ <el-button
+ v-if="modelData.printTemplateSetting.enable"
+ class="ml-80px"
+ type="primary"
+ link
+ @click="handleEditPrintTemplate"
+ >
+ 缂栬緫妯℃澘
+ </el-button>
+ </div>
+ </div>
+ </el-form-item>
+ </el-form>
+ <print-template ref="printTemplateRef" @confirm="confirmPrintTemplate" />
+</template>
+
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import { BpmAutoApproveType, BpmModelFormType } from '@/utils/constants'
+import * as FormApi from '@/api/bpm/form'
+import { parseFormFields } from '@/components/FormCreate/src/utils'
+import { ProcessVariableEnum } from '@/components/SimpleProcessDesignerV2/src/consts'
+import HttpRequestSetting from '@/components/SimpleProcessDesignerV2/src/nodes-config/components/HttpRequestSetting.vue'
+import PrintTemplate from './PrintTemplate/Index.vue'
+
+const modelData = defineModel<any>()
+
+/** 鑷畾涔� ID 娴佺▼缂栫爜 */
+const timeOptions = ref([
+ {
+ value: '',
+ label: '鏃�'
+ },
+ {
+ value: 'DAY',
+ label: '绮剧‘鍒版棩'
+ },
+ {
+ value: 'HOUR',
+ label: '绮剧‘鍒版椂'
+ },
+ {
+ value: 'MINUTE',
+ label: '绮剧‘鍒板垎'
+ },
+ {
+ value: 'SECOND',
+ label: '绮剧‘鍒扮'
+ }
+])
+const numberExample = computed(() => {
+ if (modelData.value.processIdRule.enable) {
+ let infix = ''
+ switch (modelData.value.processIdRule.infix) {
+ case 'DAY':
+ infix = dayjs().format('YYYYMMDD')
+ break
+ case 'HOUR':
+ infix = dayjs().format('YYYYMMDDHH')
+ break
+ case 'MINUTE':
+ infix = dayjs().format('YYYYMMDDHHmm')
+ break
+ case 'SECOND':
+ infix = dayjs().format('YYYYMMDDHHmmss')
+ break
+ default:
+ break
+ }
+ return (
+ modelData.value.processIdRule.prefix +
+ infix +
+ modelData.value.processIdRule.postfix +
+ '1'.padStart(modelData.value.processIdRule.length - 1, '0')
+ )
+ } else {
+ return ''
+ }
+})
+
+/** 鏄惁寮�鍚祦绋嬪墠缃�氱煡 */
+const processBeforeTriggerEnable = ref(false)
+const handleProcessBeforeTriggerEnableChange = (val: boolean | string | number) => {
+ if (val) {
+ modelData.value.processBeforeTriggerSetting = {
+ url: '',
+ header: [],
+ body: [],
+ response: []
+ }
+ } else {
+ modelData.value.processBeforeTriggerSetting = null
+ }
+}
+
+/** 鏄惁寮�鍚祦绋嬪悗缃�氱煡 */
+const processAfterTriggerEnable = ref(false)
+const handleProcessAfterTriggerEnableChange = (val: boolean | string | number) => {
+ if (val) {
+ modelData.value.processAfterTriggerSetting = {
+ url: '',
+ header: [],
+ body: [],
+ response: []
+ }
+ } else {
+ modelData.value.processAfterTriggerSetting = null
+ }
+}
+
+/** 鏄惁寮�鍚换鍔″墠缃�氱煡 */
+const taskBeforeTriggerEnable = ref(false)
+const handleTaskBeforeTriggerEnableChange = (val: boolean | string | number) => {
+ if (val) {
+ modelData.value.taskBeforeTriggerSetting = {
+ url: '',
+ header: [],
+ body: [],
+ response: []
+ }
+ } else {
+ modelData.value.taskBeforeTriggerSetting = null
+ }
+}
+
+/** 鏄惁寮�鍚换鍔″悗缃�氱煡 */
+const taskAfterTriggerEnable = ref(false)
+const handleTaskAfterTriggerEnableChange = (val: boolean | string | number) => {
+ if (val) {
+ modelData.value.taskAfterTriggerSetting = {
+ url: '',
+ header: [],
+ body: [],
+ response: []
+ }
+ } else {
+ modelData.value.taskAfterTriggerSetting = null
+ }
+}
+
+/** 宸茶В鏋愯〃鍗曞瓧娈� */
+const formFields = ref<Array<{ field: string; title: string }>>([])
+const formFieldOptions4Title = computed(() => {
+ let cloneFormField = formFields.value.map((item) => {
+ return {
+ label: item.title,
+ value: item.field
+ }
+ })
+ // 鍥哄畾娣诲姞鍙戣捣浜� ID 瀛楁
+ cloneFormField.unshift({
+ label: '娴佺▼鍚嶇О',
+ value: ProcessVariableEnum.PROCESS_DEFINITION_NAME
+ })
+ cloneFormField.unshift({
+ label: '鍙戣捣鏃堕棿',
+ value: ProcessVariableEnum.START_TIME
+ })
+ cloneFormField.unshift({
+ label: '鍙戣捣浜�',
+ value: ProcessVariableEnum.START_USER_ID
+ })
+ return cloneFormField
+})
+const formFieldOptions4Summary = computed(() => {
+ return formFields.value.map((item) => {
+ return {
+ label: item.title,
+ value: item.field
+ }
+ })
+})
+
+/** 鏈В鏋愮殑琛ㄥ崟瀛楁 */
+const unParsedFormFields = ref<string[]>([])
+/** 鏆撮湶缁欏瓙缁勪欢 HttpRequestSetting 浣跨敤 */
+provide('formFields', unParsedFormFields)
+provide('formFieldsObj', formFields)
+
+/** 鍏煎浠ュ墠鏈厤缃洿澶氳缃殑娴佺▼ */
+const initData = () => {
+ if (!modelData.value.processIdRule) {
+ modelData.value.processIdRule = {
+ enable: false,
+ prefix: '',
+ infix: '',
+ postfix: '',
+ length: 5
+ }
+ }
+ if (!modelData.value.autoApprovalType) {
+ modelData.value.autoApprovalType = BpmAutoApproveType.NONE
+ }
+ if (!modelData.value.titleSetting) {
+ modelData.value.titleSetting = {
+ enable: false,
+ title: ''
+ }
+ }
+ if (!modelData.value.summarySetting) {
+ modelData.value.summarySetting = {
+ enable: false,
+ summary: []
+ }
+ }
+ if (modelData.value.processBeforeTriggerSetting) {
+ processBeforeTriggerEnable.value = true
+ }
+ if (modelData.value.processAfterTriggerSetting) {
+ processAfterTriggerEnable.value = true
+ }
+ if (modelData.value.taskBeforeTriggerSetting) {
+ taskBeforeTriggerEnable.value = true
+ }
+ if (modelData.value.taskAfterTriggerSetting) {
+ taskAfterTriggerEnable.value = true
+ }
+ if (modelData.value.allowWithdrawTask) {
+ modelData.value.allowWithdrawTask = false
+ }
+ if (!modelData.value.printTemplateSetting) {
+ modelData.value.printTemplateSetting = {
+ enable: false
+ }
+ }
+}
+defineExpose({ initData })
+
+/** 鐩戝惉琛ㄥ崟 ID 鍙樺寲锛屽姞杞借〃鍗曟暟鎹� */
+watch(
+ () => modelData.value.formId,
+ async (newFormId) => {
+ if (newFormId && modelData.value.formType === BpmModelFormType.NORMAL) {
+ const data = await FormApi.getForm(newFormId)
+ const result: Array<{ field: string; title: string }> = []
+ if (data.fields) {
+ unParsedFormFields.value = data.fields
+ data.fields.forEach((fieldStr: string) => {
+ parseFormFields(JSON.parse(fieldStr), result)
+ })
+ }
+ formFields.value = result
+ } else {
+ formFields.value = []
+ unParsedFormFields.value = []
+ }
+ },
+ { immediate: true }
+)
+
+const defaultTemplate =
+ '<p style="text-align: center;"><span data-w-e-type="mention" data-w-e-is-void="" data-w-e-is-inline="" data-value="娴佺▼鍚嶇О" data-info="%7B%22id%22%3A%22processName%22%7D">@娴佺▼鍚嶇О</span></p><p style="text-align: right;">鎵撳嵃浜猴細<span data-w-e-type="mention" data-w-e-is-void="" data-w-e-is-inline="" data-value="鎵撳嵃浜�" data-info="%7B%22id%22%3A%22printUser%22%7D">@鎵撳嵃浜�</span></p><p style="text-align: right;">娴佺▼缂栧彿锛�<span data-w-e-type="mention" data-w-e-is-void="" data-w-e-is-inline="" data-value="娴佺▼缂栧彿" data-info="%7B%22id%22%3A%22processNum%22%7D">@娴佺▼缂栧彿</span> 鎵撳嵃鏃堕棿锛�<span data-w-e-type="mention" data-w-e-is-void="" data-w-e-is-inline="" data-value="鎵撳嵃鏃堕棿" data-info="%7B%22id%22%3A%22printTime%22%7D">@鎵撳嵃鏃堕棿</span></p><table style="width: 100%;"><tbody><tr><td colSpan="1" rowSpan="1" width="auto">鍙戣捣浜�</td><td colSpan="1" rowSpan="1" width="auto"><span data-w-e-type="mention" data-w-e-is-void data-w-e-is-inline data-value="鍙戣捣浜�" data-info="%7B%22id%22%3A%22startUser%22%7D">@鍙戣捣浜�</span></td><td colSpan="1" rowSpan="1" width="auto">鍙戣捣鏃堕棿</td><td colSpan="1" rowSpan="1" width="auto"><span data-w-e-type="mention" data-w-e-is-void data-w-e-is-inline data-value="鍙戣捣鏃堕棿" data-info="%7B%22id%22%3A%22startTime%22%7D">@鍙戣捣鏃堕棿</span></td></tr><tr><td colSpan="1" rowSpan="1" width="auto">鎵�灞為儴闂�</td><td colSpan="1" rowSpan="1" width="auto"><span data-w-e-type="mention" data-w-e-is-void data-w-e-is-inline data-value="鍙戣捣浜洪儴闂�" data-info="%7B%22id%22%3A%22startUserDept%22%7D">@鍙戣捣浜洪儴闂�</span></td><td colSpan="1" rowSpan="1" width="auto">娴佺▼鐘舵��</td><td colSpan="1" rowSpan="1" width="auto"><span data-w-e-type="mention" data-w-e-is-void data-w-e-is-inline data-value="娴佺▼鐘舵��" data-info="%7B%22id%22%3A%22processStatus%22%7D">@娴佺▼鐘舵��</span></td></tr></tbody></table><p><span data-w-e-type="process-record" data-w-e-is-void data-w-e-is-inline>娴佺▼璁板綍</span></p>'
+const handlePrintTemplateEnableChange = (val: boolean) => {
+ if (val) {
+ if (!modelData.value.printTemplateSetting.template) {
+ modelData.value.printTemplateSetting.template = defaultTemplate
+ }
+ }
+}
+const printTemplateRef = ref()
+const handleEditPrintTemplate = () => {
+ printTemplateRef.value.open(modelData.value.printTemplateSetting.template)
+}
+const confirmPrintTemplate = (template: any) => {
+ modelData.value.printTemplateSetting.template = template
+}
+</script>
--
Gitblit v1.8.0