!61 feat(dqinspecttask): 新增流程阶段筛选、调整状态功能,操作栏拆分为流程/表单两个下拉菜单
* feat(dqinspecttask): 新增流程阶段筛选、调整状态功能,操作栏拆分为流程/表单两个下拉菜单 * chore(xispeak): 更新 BPM_NODE_PERMISSIONS 节点权限配置,反馈流程补充默认审批意见 * fix(dqinspecttask): 发起流程表单去掉多余的抄送tab * fix(dqinspecttask): 发起流程补充deadline和requireFinishDate字段 * feat(dqinspecttask): 发起流程和销号流程按钮按已完成阶段数控制可见性 * refactor(xispeak): 部门领导指派意见使用翻译后的真实姓名 * refactor(xispeak): 提升常用操作到行内,删除时同步清除关联流程 * refactor(xispeak): 替换牵头部门选部门组件为SzSelectDept
This commit is contained in:
@@ -171,9 +171,9 @@ bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&sh
|
||||
* **showFeedbackInfo** `1` —— 反馈信息区域
|
||||
* **showAddFeedback** `0` —— 新增反馈按钮
|
||||
* **showEditFeedback** `0` —— 编辑/删除操作列
|
||||
* **showDeptFeedback** `0` —— 按部门过滤反馈
|
||||
* **showDeptFeedback** `1` —— 按部门过滤反馈
|
||||
* **showJiJianFields** `0` —— 纪检字段列
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&nonJiJianFieldsReadonly=1&showJiJianFields=1
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&nonJiJianFieldsReadonly=1&showJiJianFields=1&showDeptFeedback=1
|
||||
---
|
||||
|
||||
|
||||
@@ -186,9 +186,9 @@ bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&sh
|
||||
* **showFeedbackInfo** `1` —— 反馈信息区域
|
||||
* **showAddFeedback** `0` —— 新增反馈按钮
|
||||
* **showEditFeedback** `0` —— 编辑/删除操作列
|
||||
* **showDeptFeedback** `0` —— 按部门过滤反馈
|
||||
* **showDeptFeedback** `1` —— 按部门过滤反馈
|
||||
* **showJiJianFields** `0` —— 纪检字段列
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showDeptFeedback=1
|
||||
---
|
||||
|
||||
### 节点: <反馈流程纪检经办人监察>
|
||||
@@ -202,9 +202,9 @@ bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&sh
|
||||
* **showEditFeedback** `1` —— 编辑/删除操作列
|
||||
* **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读
|
||||
* **nonJiJianFieldsReadonly** `1` —— 弹窗内非纪检字段只读
|
||||
* **showDeptFeedback** `0` —— 按部门过滤反馈
|
||||
* **showDeptFeedback** `1` —— 按部门过滤反馈
|
||||
* **showJiJianFields** `1` —— 纪检字段列
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&nonJiJianFieldsReadonly=1&showJiJianFields=1
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=1&nonJiJianFieldsReadonly=1&showJiJianFields=1&showDeptFeedback=1
|
||||
---
|
||||
|
||||
### 节点: <反馈流程纪检负责人审批>
|
||||
@@ -217,9 +217,9 @@ bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&sh
|
||||
* **showAddFeedback** `0` —— 新增反馈按钮
|
||||
* **showEditFeedback** `0` —— 编辑/删除操作列
|
||||
* **jiJianFieldsReadonly** `0` —— 弹窗内纪检字段只读
|
||||
* **showDeptFeedback** `0` —— 按部门过滤反馈
|
||||
* **showDeptFeedback** `1` —— 按部门过滤反馈
|
||||
* **showJiJianFields** `1` —— 纪检字段列
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=0&showJiJianFields=1
|
||||
* bg/xispeak/components/BgXiSpeakBPMForm?showProcessHandle=1&showFeedbackInfo=1&showEditFeedback=0&showJiJianFields=1&showDeptFeedback=1
|
||||
---
|
||||
|
||||
### 节点: <督办部门经办人确认全部反馈事项>
|
||||
|
||||
@@ -233,6 +233,14 @@ import { defHttp } from '/@/utils/http/axios';
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件(含关联流程)
|
||||
*/
|
||||
async function handleDeleteWithProcess(record) {
|
||||
await withDrawXiSpeak({ id: record.id });
|
||||
await deleteBgXiSpeak({ id: record.id }, success);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件
|
||||
*/
|
||||
@@ -472,6 +480,19 @@ import { defHttp } from '/@/utils/http/axios';
|
||||
onClick: handleEdit.bind(null, record),
|
||||
auth: 'bg.xispeak:bg_xi_speak:edit',
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '确定删除吗? 将同时删除该记录关联的所有流程信息',
|
||||
confirm: handleDeleteWithProcess.bind(null, record),
|
||||
placement: 'topLeft',
|
||||
},
|
||||
auth: 'bg.xispeak:bg_xi_speak:delete',
|
||||
},
|
||||
{
|
||||
label: '查看反馈',
|
||||
onClick: handleViewFeedback.bind(null, record),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -488,20 +509,6 @@ import { defHttp } from '/@/utils/http/axios';
|
||||
label: '添加下级',
|
||||
onClick: handleAddSub.bind(null, { pid: record.id }),
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '确定删除吗?',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
placement: 'topLeft',
|
||||
},
|
||||
auth: 'bg.xispeak:bg_xi_speak:delete',
|
||||
},
|
||||
// {
|
||||
// label: '审批进度',
|
||||
// onClick: handlePreviewPic.bind(null, record),
|
||||
// ifShow: !!record.bpmStatus && record.bpmStatus !== '1',
|
||||
// },
|
||||
{
|
||||
label: '查询督办流程',
|
||||
onClick: handleQueryProcess.bind(null, record),
|
||||
@@ -515,10 +522,6 @@ import { defHttp } from '/@/utils/http/axios';
|
||||
},
|
||||
ifShow: !!record.bpmStatus && record.bpmStatus !== '1',
|
||||
},
|
||||
{
|
||||
label: '查看反馈',
|
||||
onClick: handleViewFeedback.bind(null, record),
|
||||
},
|
||||
];
|
||||
|
||||
if (record.bpmStatus == '1' || !record.bpmStatus) {
|
||||
|
||||
@@ -278,6 +278,7 @@
|
||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||
import Icon from '/@/components/Icon/index';
|
||||
import { bgXiSpeakFeedbackList, bgXiSpeakFeedbackListWithDept, bgXiSpeakFeedbackDelete, saveBpmForm, saveSubApprove } from '../BgXiSpeak.api';
|
||||
import { getUserList } from '/@/api/common/api';
|
||||
import { usePermission } from '/@/hooks/web/usePermission';
|
||||
import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue';
|
||||
import BgXiSpeakBPMFeedbackModal from './BgXiSpeakBPMFeedbackModal.vue';
|
||||
@@ -318,6 +319,8 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi
|
||||
const showFeedbackDetail = ref(true);
|
||||
const feedbackList = ref<any[]>([]);
|
||||
const subApproveUser = ref('');
|
||||
const subApproveUserNameText = ref('');
|
||||
const userResolveVersion = ref(0);
|
||||
const isEnd = ref(0);
|
||||
|
||||
const mainForm = reactive<Record<string, any>>({
|
||||
@@ -465,6 +468,14 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi
|
||||
Task_1v9ce78: buildDeptLeaderAssignReason,
|
||||
Task_1w4vxgc: buildApproveReason,
|
||||
Task_1wfkrvj: buildApproveReason,
|
||||
// 反馈流程节点
|
||||
Task_005iiwi: buildApproveReason,
|
||||
Task_06di2wf: buildApproveReason,
|
||||
Task_0bahwr8: buildJiJianCheckReason,
|
||||
Task_0sialna: buildDeptLeaderDirectFeedbackReason,
|
||||
Task_12vdqzv: buildDeptHandlerFeedbackReason,
|
||||
Task_13olnz1: buildSuperviseCheckReason,
|
||||
Task_1l650tz: buildApproveReason,
|
||||
};
|
||||
|
||||
const defaultHandleReason = computed(() => {
|
||||
@@ -481,7 +492,7 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi
|
||||
}
|
||||
|
||||
function buildDeptLeaderAssignReason() {
|
||||
const userNameText = subApproveUser.value || '';
|
||||
const userNameText = normalizeDeptNames(subApproveUserNameText.value || subApproveUser.value);
|
||||
return userNameText ? `请${userNameText}办理。` : '';
|
||||
}
|
||||
|
||||
@@ -528,6 +539,14 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
watch(
|
||||
subApproveUser,
|
||||
(value) => {
|
||||
resolveSubApproveUserName(value);
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
async function initFormData() {
|
||||
const dataId = props.formData?.dataId;
|
||||
if (!dataId) {
|
||||
@@ -724,6 +743,54 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi
|
||||
.join(',');
|
||||
}
|
||||
|
||||
function normalizeDeptNames(value: any) {
|
||||
return splitDeptNames(value).join('、');
|
||||
}
|
||||
|
||||
function splitDeptNames(value: any) {
|
||||
return String(value || '')
|
||||
.split(/[,,;;、]/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean);
|
||||
}
|
||||
|
||||
async function resolveSubApproveUserName(value: any) {
|
||||
const resolveVersion = ++userResolveVersion.value;
|
||||
const usernames = normalizeUsernameList(value);
|
||||
if (!usernames) {
|
||||
subApproveUserNameText.value = '';
|
||||
return;
|
||||
}
|
||||
|
||||
subApproveUserNameText.value = normalizeDeptNames(usernames);
|
||||
try {
|
||||
const res = await getUserList({ username: usernames, isMultiTranslate: 'true', pageNo: 1, pageSize: 999 });
|
||||
if (resolveVersion !== userResolveVersion.value) {
|
||||
return;
|
||||
}
|
||||
const records = res?.records || res?.result?.records || res || [];
|
||||
const userNameMap = Array.isArray(records)
|
||||
? records.reduce((cache: Record<string, string>, item: any) => {
|
||||
const username = String(item?.username || '').trim();
|
||||
const realname = String(item?.realname || item?.name || '').trim();
|
||||
if (username && realname) {
|
||||
cache[username] = realname;
|
||||
}
|
||||
return cache;
|
||||
}, {})
|
||||
: {};
|
||||
const names = usernames
|
||||
.split(',')
|
||||
.map((username) => userNameMap[username] || username)
|
||||
.filter(Boolean);
|
||||
subApproveUserNameText.value = normalizeDeptNames(names.join(','));
|
||||
} catch {
|
||||
if (resolveVersion === userResolveVersion.value) {
|
||||
subApproveUserNameText.value = normalizeDeptNames(usernames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleProcessSuccess() {
|
||||
emit('success');
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="牵头部门" v-bind="validateInfos.implDept" id="BgXiSpeakForm-implDept" name="implDept">
|
||||
<j-select-dept v-model:value="formData.implDept" :multiple="true" placeholder="请选择牵头部门" checkStrictly allow-clear />
|
||||
<SzSelectDept v-model:value="formData.implDept" :multiple="true" checkStrictly allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
@@ -122,7 +122,7 @@
|
||||
import { ref, reactive, defineExpose, nextTick, unref, defineProps, computed, onMounted } from 'vue';
|
||||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
|
||||
import SzSelectDept from '/@/components/Form/src/jeecg/components/SzSelectDept.vue';
|
||||
import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue';
|
||||
import JTreeSelect from '/@/components/Form/src/jeecg/components/JTreeSelect.vue';
|
||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||
|
||||
Reference in New Issue
Block a user