!74 fix(bpm): 修复选人组件 Name 翻译使用错误字段及查询顺序问题
* fix(bpm): 修复选人组件 Name 翻译使用错误字段及查询顺序问题 * feat(bpm): 默认审批意见改为完全由后端节点配置驱动,移除所有写死模板 * fix(bpm): 修复节点默认审批意见配置 UI 绑定错误,支持 extraVars 变量解析 * feat(bpm): 新增条件变量默认审批意见,支持按流程变量值动态预填审批意见
This commit is contained in:
+24
-3
@@ -114,7 +114,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref, reactive, computed, toRaw, unref, watch, watchEffect } from 'vue';
|
||||
import { ref, reactive, computed, toRaw, unref, watch, watchEffect, inject } from 'vue';
|
||||
import { initDictOptions } from '/@/utils/dict';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { taskComplaint, taskComplete, beforeAddSignTask, afterAddSignTask, addMultiInstance} from "../task.handle.api";
|
||||
@@ -216,6 +216,19 @@
|
||||
*/
|
||||
const selectUserType = ref('');
|
||||
const remarksDictOptions = ref([]);
|
||||
const extraVars = inject('extraVars', ref({}));
|
||||
const flowVars = inject('flowVars', ref({}));
|
||||
|
||||
function resolvePlaceholders(text) {
|
||||
if (!text) return '';
|
||||
const extra = extraVars.value || {};
|
||||
const flow = flowVars.value || {};
|
||||
return text.replace(/\$\{(\w+)\}/g, (_, key) => {
|
||||
if (key in extra) return String(extra[key] ?? '');
|
||||
return String(flow[key] ?? '');
|
||||
});
|
||||
}
|
||||
|
||||
const historyCount = computed(() => {
|
||||
return props.historyList.length;
|
||||
});
|
||||
@@ -264,9 +277,17 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
const formDefaultReason = inject('formDefaultReason', ref(''));
|
||||
|
||||
// 表单写死 > 节点配置(props.defaultReason 来自 TaskHandleInnerContent 的节点优先级链)
|
||||
const resolvedDefaultReason = computed(() => {
|
||||
const opinion = formDefaultReason.value || props.defaultReason;
|
||||
return resolvePlaceholders(opinion);
|
||||
});
|
||||
|
||||
// 默认处理意见只在空值或仍为上一条自动意见时刷新,避免覆盖用户手动输入。
|
||||
watch(
|
||||
() => props.defaultReason,
|
||||
resolvedDefaultReason,
|
||||
(value) => {
|
||||
if (isRejectProcessModel(model.processModel)) {
|
||||
return;
|
||||
@@ -279,7 +300,7 @@
|
||||
() => model.processModel,
|
||||
(value) => {
|
||||
const isReject = isRejectProcessModel(value);
|
||||
applyAutoReason(isReject ? REJECT_DEFAULT_REASON : props.defaultReason, [
|
||||
applyAutoReason(isReject ? REJECT_DEFAULT_REASON : resolvedDefaultReason.value, [
|
||||
isReject ? props.defaultReason : REJECT_DEFAULT_REASON,
|
||||
]);
|
||||
}
|
||||
|
||||
+29
-3
@@ -20,7 +20,7 @@
|
||||
:allowCounterSignAddUser="allowCounterSignAddUser"
|
||||
:allowReject="allowReject"
|
||||
:beforeHandle="beforeHandle"
|
||||
:defaultReason="defaultReason"
|
||||
:defaultReason="conditionalDefaultOpinion || nodeDefaultOpinion || defaultReason"
|
||||
:defaultCc="defaultCc"
|
||||
:currentTaskName="currentNode.taskName">
|
||||
</my-handle-content>
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { taskTransInfo, taskComplete, taskClaim } from '../task.handle.api';
|
||||
import { ref, watch } from 'vue';
|
||||
import { ref, watch, computed } from 'vue';
|
||||
import TaskNodeStepList from './TaskNodeStepList.vue';
|
||||
import TaskCommentList from './TaskCommentList.vue';
|
||||
import MyHandleContent from './MyHandleContent.vue';
|
||||
@@ -102,6 +102,24 @@
|
||||
const selnextUserStatus = ref(true);
|
||||
// 选择抄送人
|
||||
const ccStatus = ref(true);
|
||||
// 节点配置的默认审批意见
|
||||
const nodeDefaultOpinion = ref('');
|
||||
// 条件变量默认审批意见
|
||||
const condOpinionVar = ref(''); // 条件变量名 — API: data.defaultOpinionVar
|
||||
const condOpinionWhen0 = ref(''); // 变量=0时的意见 — API: data.defaultOpinionCond0
|
||||
const condOpinionWhen1 = ref(''); // 变量=1时的意见 — API: data.defaultOpinionCond1
|
||||
|
||||
// 条件变量 > 节点默认 > 表单传入
|
||||
const conditionalDefaultOpinion = computed(() => {
|
||||
const varName = condOpinionVar.value;
|
||||
if (!varName) return '';
|
||||
const vars = props.formData?.vars;
|
||||
if (!vars) return '';
|
||||
const varValue = String(vars[varName] ?? '');
|
||||
if (varValue === '0') return condOpinionWhen0.value;
|
||||
if (varValue === '1') return condOpinionWhen1.value;
|
||||
return '';
|
||||
});
|
||||
|
||||
getTaskTransInfo();
|
||||
|
||||
@@ -139,6 +157,12 @@
|
||||
allowReject.value = data?.rejectStatus == '1';
|
||||
//是否多实例- 会签加签 是否允许会签节点加人0否、1允许
|
||||
allowCounterSignAddUser.value = (data?.allowCounterSignAddUser && data.allowCounterSignAddUser =='1');
|
||||
//节点配置的默认审批意见
|
||||
nodeDefaultOpinion.value = data?.defaultOpinion || '';
|
||||
//条件变量默认审批意见
|
||||
condOpinionVar.value = data?.defaultOpinionVar || '';
|
||||
condOpinionWhen0.value = data?.defaultOpinionCond0 || '';
|
||||
condOpinionWhen1.value = data?.defaultOpinionCond1 || '';
|
||||
taskStepList.value = data.bpmLogStepList;
|
||||
bpmLogList.value = data.bpmLogList;
|
||||
|
||||
@@ -204,7 +228,9 @@
|
||||
allowCounterSignAddUser,
|
||||
allowReject,
|
||||
selnextUserStatus,
|
||||
turnbackTaskId
|
||||
turnbackTaskId,
|
||||
nodeDefaultOpinion,
|
||||
conditionalDefaultOpinion
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
const [registerNodeModal, { openModal: openNodeModal }] = useModal();
|
||||
|
||||
const [registerNodeAuthModal, { openModal: openNodeAuthModal }] = useModal();
|
||||
|
||||
|
||||
|
||||
function addQueryParams(params) {
|
||||
params.processId = props.processId;
|
||||
@@ -145,7 +145,7 @@
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
function openAuthModal(isNewAuthModal, row) {
|
||||
if(isNewAuthModal===true){
|
||||
openNodeAuthModal(true, row);
|
||||
|
||||
@@ -36,7 +36,24 @@
|
||||
<question-circle-outlined style="color: rgb(110 110 110)"/>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
|
||||
|
||||
<template #defaultOpinionBlock="{ model, field }">
|
||||
<div class="opinion-block">
|
||||
<div class="opinion-switch-row">
|
||||
<span>是否生成默认审批意见</span>
|
||||
<a-switch v-model:checked="model.enableDefaultOpinion" checked-children="是" un-checked-children="否" />
|
||||
</div>
|
||||
<template v-if="model.enableDefaultOpinion">
|
||||
<div class="opinion-cond-label">条件变量名</div>
|
||||
<a-input v-model:value="model.defaultOpinionVar" placeholder="条件变量名,如 approval_result,值为 0 或 1" style="margin-bottom: 12px;" />
|
||||
<div class="opinion-cond-label">默认审批意见(变量 = 0)</div>
|
||||
<a-textarea v-model:value="model.defaultOpinion" :rows="2" placeholder="变量值=0 时的默认审批意见" style="margin-bottom: 12px;" />
|
||||
<div class="opinion-cond-label">默认审批意见(变量 = 1)</div>
|
||||
<a-textarea v-model:value="model.defaultOpinion2" :rows="2" placeholder="变量值=1 时的默认审批意见" />
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</BasicForm>
|
||||
</BasicModal>
|
||||
</template>
|
||||
@@ -48,7 +65,7 @@
|
||||
import { nodeFormSchema } from './process.node.data';
|
||||
import { saveOrUpdate } from './process.node.api';
|
||||
import { QuestionCircleOutlined } from '@ant-design/icons-vue';
|
||||
|
||||
|
||||
export default {
|
||||
name: 'ProcessNodeModal',
|
||||
components: {
|
||||
@@ -94,7 +111,7 @@
|
||||
//update-end-author:taoyan date:2023-2-14 for: QQYUN-4266【老版流程】新增节点 节点名称和编码不能输入,子流程无法添加start节点
|
||||
} else {
|
||||
delete data.isUpdate;
|
||||
setFieldsValue({ ...data });
|
||||
setFieldsValue({ ...data, enableDefaultOpinion: !!(data.defaultOpinion || data.defaultOpinionVar) });
|
||||
//update-begin-author:taoyan date:2023-2-14 for: QQYUN-4266【老版流程】新增节点 节点名称和编码不能输入,子流程无法添加start节点
|
||||
await updateSchema([
|
||||
{
|
||||
@@ -119,7 +136,7 @@
|
||||
emit('success');
|
||||
closeModal();
|
||||
}
|
||||
|
||||
|
||||
const designerUrl = "3.表单设计器:{{DOMAIN_URL}}/desform/edit/设计器编码/${BPM_DES_DATA_ID}?token={{TOKEN}}&taskId={{TASKID}}"
|
||||
|
||||
return {
|
||||
@@ -142,9 +159,28 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style scoped>
|
||||
<style scoped lang="less">
|
||||
:deep(.ant-modal-body) {
|
||||
padding-bottom: 5px !important;
|
||||
padding-top: 5px !important;
|
||||
}
|
||||
.opinion-block {
|
||||
background-color: #eee;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
.opinion-switch-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
span {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.opinion-cond-label {
|
||||
font-size: 13px;
|
||||
color: #4b4a4a;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -104,4 +104,29 @@ export const nodeFormSchema: FormSchema[] = [
|
||||
component: 'Input',
|
||||
slot: 'nodeTimeout',
|
||||
},
|
||||
{
|
||||
label: '是否生成默认审批意见',
|
||||
field: 'enableDefaultOpinion',
|
||||
component: 'Switch',
|
||||
defaultValue: false,
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
label: '条件变量名',
|
||||
field: 'defaultOpinionVar',
|
||||
component: 'Input',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
label: '默认审批意见(变量=1)',
|
||||
field: 'defaultOpinion2',
|
||||
component: 'InputTextArea',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
label: '默认审批意见',
|
||||
field: 'defaultOpinion',
|
||||
component: 'InputTextArea',
|
||||
slot: 'defaultOpinionBlock',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</a-spin>
|
||||
|
||||
Reference in New Issue
Block a user