一单四制优化及加入工作流

This commit is contained in:
王利强
2026-07-27 09:27:22 +08:00
parent 455fd4fc07
commit 7c3285ed5a
725 changed files with 19668 additions and 2921 deletions

View File

@@ -13,7 +13,7 @@
<view class="text-gray">下一步流程</view>
<view class="text-red">*</view>
</view>
<view class="static-field">隐患整改</view>
<view class="static-field">{{ nextStepDisplay }}</view>
<view class="flex margin-bottom margin-top">
<view class="text-gray">整改责任人</view>
@@ -33,7 +33,7 @@
<view class="popup-title text-bold">选择整改责任人</view>
<view class="popup-close" @click="cancelUserSelect">×</view>
</view>
<view v-if="userPickerSelectedId" class="selected-summary">
<view v-if="userPickerSelectedIdentityId" class="selected-summary">
<text class="summary-label">已选</text>
<text class="summary-text">{{ userPickerSelectedText }}</text>
</view>
@@ -55,12 +55,12 @@
<view
class="user-item"
v-for="user in currentDeptUsers"
:key="'user-' + user.userId"
:class="{ active: String(userPickerSelectedId) === String(user.userId) }"
@click="onUserItemClick(user.userId)"
:key="'identity-' + user.identityId"
:class="{ active: String(userPickerSelectedIdentityId) === String(user.identityId) }"
@click="onUserItemClick(user.identityId)"
>
<text class="user-item-text">{{ formatUserDisplayName(user) }}</text>
<text v-if="String(userPickerSelectedId) === String(user.userId)" class="cuIcon-check text-blue"></text>
<text v-if="String(userPickerSelectedIdentityId) === String(user.identityId)" class="cuIcon-check text-blue"></text>
</view>
</view>
</scroll-view>
@@ -120,16 +120,32 @@
// 页面参数
const hazardId = ref('');
const assignId = ref('');
// 整改人员选择
const taskId = ref('');
// 下一步流程(固定为隐患整改)
const nextStepDisplay = '隐患整改';
// 整改人员选择(按身份 identityId 单选)
const showUserPopup = ref(false);
const selectedUser = ref('');
const selectedIdentityId = ref('');
const selectedUserId = ref('');
const deptList = ref([]);
const activeDeptIndex = ref(0);
const userPickerSelectedId = ref('');
const userPickerSelectedIdentityId = ref('');
const findUserByIdentityId = (identityId) => {
if (!identityId) return null;
for (const dept of deptList.value) {
const user = (dept.users || []).find((u) => String(u.identityId) === String(identityId));
if (user) return user;
}
return null;
};
const formatUserDisplayName = (user) => {
if (user.identityName) {
return `${user.nickName}_${user.identityName}`;
}
if (user.postName) {
return `${user.nickName}_${user.postName}`;
}
@@ -142,27 +158,32 @@
});
const userPickerSelectedText = computed(() => {
if (!userPickerSelectedId.value) return '';
for (const dept of deptList.value) {
const user = (dept.users || []).find((u) => String(u.userId) === String(userPickerSelectedId.value));
if (user) return formatUserDisplayName(user);
}
return '';
const user = findUserByIdentityId(userPickerSelectedIdentityId.value);
return user ? formatUserDisplayName(user) : '';
});
const deptHasSelectedUser = (dept) => {
if (!userPickerSelectedId.value || !dept.users?.length) return false;
return dept.users.some((user) => String(user.userId) === String(userPickerSelectedId.value));
if (!userPickerSelectedIdentityId.value || !dept.users?.length) return false;
return dept.users.some((user) => String(user.identityId) === String(userPickerSelectedIdentityId.value));
};
const onUserItemClick = (userId) => {
userPickerSelectedId.value = String(userId);
const onUserItemClick = (identityId) => {
userPickerSelectedIdentityId.value = String(identityId);
};
const openUserPopup = () => {
userPickerSelectedId.value = selectedUserId.value;
const firstDeptWithUsers = deptList.value.findIndex((dept) => dept.users?.length > 0);
activeDeptIndex.value = firstDeptWithUsers >= 0 ? firstDeptWithUsers : 0;
userPickerSelectedIdentityId.value = selectedIdentityId.value;
let targetDeptIndex = 0;
if (selectedIdentityId.value) {
const deptIndex = deptList.value.findIndex((dept) =>
(dept.users || []).some((user) => String(user.identityId) === String(selectedIdentityId.value))
);
if (deptIndex >= 0) targetDeptIndex = deptIndex;
} else {
const firstDeptWithUsers = deptList.value.findIndex((dept) => dept.users?.length > 0);
if (firstDeptWithUsers >= 0) targetDeptIndex = firstDeptWithUsers;
}
activeDeptIndex.value = targetDeptIndex;
showUserPopup.value = true;
};
@@ -171,12 +192,18 @@
};
const confirmUserSelect = () => {
if (!userPickerSelectedId.value) {
if (!userPickerSelectedIdentityId.value) {
uni.showToast({ title: '请选择整改责任人', icon: 'none' });
return;
}
selectedUserId.value = String(userPickerSelectedId.value);
selectedUser.value = userPickerSelectedText.value;
const user = findUserByIdentityId(userPickerSelectedIdentityId.value);
if (!user) {
uni.showToast({ title: '所选身份无效,请重新选择', icon: 'none' });
return;
}
selectedIdentityId.value = String(user.identityId);
selectedUserId.value = String(user.userId);
selectedUser.value = formatUserDisplayName(user);
showUserPopup.value = false;
};
@@ -251,7 +278,7 @@
// 确认提交
const handleSubmit = async () => {
if (!selectedUserId.value) {
if (!selectedIdentityId.value) {
uni.showToast({ title: '请选择整改人员', icon: 'none' });
return;
}
@@ -259,11 +286,17 @@
uni.showToast({ title: '请选择整改期限', icon: 'none' });
return;
}
if (!taskId.value) {
uni.showToast({ title: '缺少任务ID', icon: 'none' });
return;
}
// 构建请求参数
const params = {
hazardId: Number(hazardId.value), // 隐患ID
assigneeId: Number(selectedUserId.value), // 被指派人ID
taskId: taskId.value, // 流程任务ID列表传入
assigneeId: Number(selectedUserId.value), // 被指派人用户ID
assigneeIdentityId: Number(selectedIdentityId.value), // 被指派人身份ID
deadline: selectedDate.value, // 处理期限
assignRemark: '', // 交办备注(可选)
sendMsgFlag: sendMsgFlag.value // 是否短信提醒
@@ -291,6 +324,7 @@
onLoad((options) => {
if (options.hazardId) hazardId.value = options.hazardId;
if (options.assignId) assignId.value = options.assignId;
if (options.taskId) taskId.value = options.taskId;
fetchDeptUsers();
// 恢复草稿 (不恢复任何人员选择器数据)