基本功能都已完成
This commit is contained in:
@@ -1,58 +1,91 @@
|
||||
<template>
|
||||
<view class="page padding">
|
||||
<view class="padding bg-white radius">
|
||||
<view class="flex margin-bottom">
|
||||
<view class="form-label margin-bottom">
|
||||
<view class="text-gray">整改方案</view>
|
||||
<view class="text-red">*</view>
|
||||
</view>
|
||||
<up-textarea v-model="formData.rectifyPlan" placeholder="请输入内容"></up-textarea>
|
||||
<view class="flex margin-bottom margin-top">
|
||||
<view class="form-label margin-bottom margin-top">
|
||||
<view class="text-gray">整改完成情况</view>
|
||||
<view class="text-red">*</view>
|
||||
</view>
|
||||
<up-textarea v-model="formData.rectifyResult" placeholder="请输入内容"></up-textarea>
|
||||
<view class="flex margin-bottom">
|
||||
<view class="text-gray margin-top">投资资金(计划)</view>
|
||||
<view class="form-label margin-bottom margin-top">
|
||||
<view class="text-gray">投资资金(计划)</view>
|
||||
<view class="text-red">*</view>
|
||||
</view>
|
||||
<up-input v-model="formData.planCost" placeholder="请输入内容" type="number"></up-input>
|
||||
<view class="flex margin-bottom">
|
||||
<view class="text-gray margin-top">投资资金(实际)</view>
|
||||
<view class="form-label margin-bottom margin-top">
|
||||
<view class="text-gray">投资资金(实际)</view>
|
||||
<view class="text-red">*</view>
|
||||
</view>
|
||||
<up-input v-model="formData.actualCost" placeholder="请输入内容" type="number"></up-input>
|
||||
<view class="flex margin-bottom">
|
||||
<view class="text-gray margin-top">限定整改时间</view>
|
||||
<view class="form-label margin-bottom margin-top">
|
||||
<view class="text-gray">限定整改时间</view>
|
||||
<view class="text-red">*</view>
|
||||
</view>
|
||||
<up-datetime-picker hasInput :show="show" v-model="value1" mode="date"></up-datetime-picker>
|
||||
<view class="flex margin-bottom margin-top">
|
||||
<view class="form-label margin-bottom margin-top">
|
||||
<view class="text-gray">整改人员</view>
|
||||
<view class="text-red">*</view>
|
||||
<view class="margin-left-sm text-black" v-if="selectedUserName">{{ selectedUserName }}</view>
|
||||
</view>
|
||||
<up-select v-model:current="cateId" :options="cateList" @select="selectItem"></up-select>
|
||||
<!-- 点击打开人员选择弹窗 -->
|
||||
<view class="select-trigger" @click="showUserPopup = true">
|
||||
<view class="select-content" :class="{ 'text-gray': selectedUsers.length === 0 }">
|
||||
{{ selectedUsers.length > 0 ? selectedUsersText : '请选择整改人员(可多选)' }}
|
||||
</view>
|
||||
<text class="cuIcon-unfold"></text>
|
||||
</view>
|
||||
|
||||
<view class="flex margin-bottom">
|
||||
<!-- 人员多选弹窗 -->
|
||||
<u-popup :show="showUserPopup" mode="bottom" round="20" @close="showUserPopup = false">
|
||||
<view class="user-popup">
|
||||
<view class="popup-header">
|
||||
<view class="popup-title text-bold">选择整改人员</view>
|
||||
<view class="popup-close" @click="showUserPopup = false">×</view>
|
||||
</view>
|
||||
<view class="popup-body">
|
||||
<up-checkbox-group v-model="selectedUserIds" placement="column" @change="onUserChange">
|
||||
<view class="user-item" v-for="item in cateList" :key="item.id">
|
||||
<up-checkbox
|
||||
:label="item.name"
|
||||
:name="item.id"
|
||||
activeColor="#2667E9"
|
||||
shape="square"
|
||||
></up-checkbox>
|
||||
</view>
|
||||
</up-checkbox-group>
|
||||
</view>
|
||||
<view class="popup-footer">
|
||||
<button class="btn-cancel" @click="showUserPopup = false">取消</button>
|
||||
<button class="btn-confirm bg-blue" @click="confirmUserSelect">确定</button>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
|
||||
<view class="form-label margin-bottom margin-top">
|
||||
<view class="text-gray">整改图片/视频</view>
|
||||
<view class="text-red">*</view>
|
||||
</view>
|
||||
<up-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
|
||||
:maxCount="10"></up-upload>
|
||||
<button class="bg-blue round margin-top-xl" @click="handleSubmit">提交整改</button>
|
||||
<button class="bg-blue round margin-top-xl" @click="handleSubmit">{{ isEdit ? '保存修改' : '提交整改' }}</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {ref,reactive,onMounted} from 'vue'
|
||||
import {ref,reactive,computed} from 'vue'
|
||||
import {onLoad} from '@dcloudio/uni-app'
|
||||
import {submitRectification,getDepartmentPersonUsers} from '@/request/api.js'
|
||||
import {submitRectification,getDepartmentPersonUsers,getRectifyDetail,getDeptUsersWithSubordinates} from '@/request/api.js'
|
||||
import {baseUrl,getToken} from '@/request/request.js'
|
||||
|
||||
// 从页面参数获取的ID
|
||||
const hazardId = ref('');
|
||||
const assignId = ref('');
|
||||
const rectifyId = ref(''); // 整改ID(编辑模式时使用)
|
||||
const isEdit = ref(false); // 是否为编辑模式
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
@@ -66,17 +99,42 @@
|
||||
const value1 = ref(Date.now());
|
||||
const radiovalue1 = ref('');
|
||||
|
||||
// 整改人员
|
||||
const cateId = ref('')
|
||||
// 整改人员(多选)
|
||||
const cateList = ref([])
|
||||
const selectedUserName = ref('') // 选中的人员名称
|
||||
const showUserPopup = ref(false) // 人员选择弹窗
|
||||
const selectedUserIds = ref([]) // 选中的用户ID数组
|
||||
const selectedUsers = ref([]) // 选中的用户对象数组
|
||||
|
||||
// 选中人员的显示文本
|
||||
const selectedUsersText = computed(() => {
|
||||
if (selectedUsers.value.length === 0) return '';
|
||||
if (selectedUsers.value.length <= 2) {
|
||||
return selectedUsers.value.map(u => u.name).join('、');
|
||||
}
|
||||
return `${selectedUsers.value[0].name}等${selectedUsers.value.length}人`;
|
||||
});
|
||||
|
||||
// checkbox变化事件
|
||||
const onUserChange = (ids) => {
|
||||
console.log('选中的ID:', ids);
|
||||
};
|
||||
|
||||
// 确认选择人员
|
||||
const confirmUserSelect = () => {
|
||||
// 根据选中的ID获取用户对象
|
||||
selectedUsers.value = cateList.value.filter(item => selectedUserIds.value.includes(item.id));
|
||||
showUserPopup.value = false;
|
||||
console.log('选中的整改人员:', selectedUsers.value);
|
||||
};
|
||||
|
||||
// 获取部门人员列表
|
||||
const fetchDeptUsers = async () => {
|
||||
console.log('当前hazardId:', hazardId.value);
|
||||
|
||||
try {
|
||||
const res = await getDepartmentPersonUsers();
|
||||
const res = await getDeptUsersWithSubordinates({hazardId:hazardId.value});
|
||||
if (res.code === 0 && res.data) {
|
||||
// 将部门下的用户数据扁平化为 up-select 需要的格式
|
||||
// 将部门下的用户数据扁平化
|
||||
const userList = [];
|
||||
res.data.forEach(dept => {
|
||||
if (dept.users && dept.users.length > 0) {
|
||||
@@ -95,9 +153,6 @@
|
||||
console.error('获取部门人员失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 页面加载时获取人员列表
|
||||
fetchDeptUsers();
|
||||
|
||||
// 上传图片
|
||||
const fileList1 = ref([]);
|
||||
@@ -173,6 +228,13 @@
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (selectedUsers.value.length === 0) {
|
||||
uni.showToast({
|
||||
title: '请选择整改人员',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 构建附件列表
|
||||
const attachments = fileList1.value.map(file => {
|
||||
@@ -198,14 +260,21 @@
|
||||
rectifyResult: formData.rectifyResult,
|
||||
planCost: Number(formData.planCost) || 0,
|
||||
actualCost: Number(formData.actualCost) || 0,
|
||||
attachments: attachments
|
||||
attachments: attachments,
|
||||
// 整改人员ID数组
|
||||
rectifyUserIds: selectedUserIds.value.map(id => Number(id))
|
||||
};
|
||||
|
||||
// 编辑模式需要传递rectifyId
|
||||
if (rectifyId.value) {
|
||||
params.rectifyId = rectifyId.value;
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await submitRectification(params);
|
||||
if (res.code === 0) {
|
||||
uni.showToast({
|
||||
title: '提交成功',
|
||||
title: isEdit.value ? '保存成功' : '提交成功',
|
||||
icon: 'success'
|
||||
});
|
||||
setTimeout(() => {
|
||||
@@ -213,19 +282,76 @@
|
||||
}, 1500);
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg || '提交失败',
|
||||
title: res.msg || (isEdit.value ? '保存失败' : '提交失败'),
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('提交整改失败:', error);
|
||||
uni.showToast({
|
||||
title: '您不是整改人员',
|
||||
title: '操作失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 获取整改详情(编辑模式)
|
||||
const fetchRectifyDetail = async () => {
|
||||
try {
|
||||
uni.showLoading({ title: '加载中...' });
|
||||
const res = await getRectifyDetail({ rectifyId: rectifyId.value });
|
||||
uni.hideLoading();
|
||||
|
||||
if (res.code === 0 && res.data) {
|
||||
const data = res.data;
|
||||
// 回显表单数据
|
||||
formData.rectifyPlan = data.rectifyPlan || '';
|
||||
formData.rectifyResult = data.rectifyResult || '';
|
||||
formData.planCost = data.planCost ? String(data.planCost) : '';
|
||||
formData.actualCost = data.actualCost ? String(data.actualCost) : '';
|
||||
|
||||
// 保存hazardId和assignId
|
||||
hazardId.value = data.hazardId || '';
|
||||
assignId.value = data.assignId || '';
|
||||
|
||||
// 回显附件
|
||||
if (data.attachments && data.attachments.length > 0) {
|
||||
fileList1.value = data.attachments.map(att => ({
|
||||
url: att.filePath.startsWith('http') ? att.filePath : (baseUrl.replace('/api', '') + att.filePath),
|
||||
status: 'success',
|
||||
message: '',
|
||||
name: att.fileName,
|
||||
type: att.fileType,
|
||||
filePath: att.filePath // 保存原始路径用于提交
|
||||
}));
|
||||
}
|
||||
|
||||
// 回显整改人员(如果有)
|
||||
if (data.memberIds) {
|
||||
const memberIdArr = data.memberIds.split(',').map(id => String(id.trim()));
|
||||
selectedUserIds.value = memberIdArr;
|
||||
// 等人员列表加载完成后再匹配
|
||||
setTimeout(() => {
|
||||
selectedUsers.value = cateList.value.filter(item => memberIdArr.includes(item.id));
|
||||
}, 500);
|
||||
} else if (data.rectifierId) {
|
||||
// 如果没有memberIds,使用rectifierId
|
||||
selectedUserIds.value = [String(data.rectifierId)];
|
||||
setTimeout(() => {
|
||||
selectedUsers.value = cateList.value.filter(item => item.id === String(data.rectifierId));
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// 设置页面标题
|
||||
uni.setNavigationBarTitle({ title: '编辑整改信息' });
|
||||
}
|
||||
} catch (error) {
|
||||
uni.hideLoading();
|
||||
console.error('获取整改详情失败:', error);
|
||||
uni.showToast({ title: '获取详情失败', icon: 'none' });
|
||||
}
|
||||
};
|
||||
|
||||
onLoad((options) => {
|
||||
if (options.hazardId) {
|
||||
hazardId.value = options.hazardId;
|
||||
@@ -233,13 +359,18 @@
|
||||
if (options.assignId) {
|
||||
assignId.value = options.assignId;
|
||||
}
|
||||
|
||||
// 在hazardId赋值后调用,确保有值
|
||||
fetchDeptUsers();
|
||||
|
||||
// 编辑模式
|
||||
if (options.rectifyId) {
|
||||
rectifyId.value = options.rectifyId;
|
||||
isEdit.value = options.isEdit === '1';
|
||||
// 获取整改详情
|
||||
fetchRectifyDetail();
|
||||
}
|
||||
});
|
||||
// 选择整改人员
|
||||
const selectItem = (item) => {
|
||||
console.log('选择的整改人员:', item);
|
||||
cateId.value = item.id;
|
||||
selectedUserName.value = item.name; // 显示选中的人员名称
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -247,6 +378,17 @@
|
||||
min-height: 100vh;
|
||||
background: #EBF2FC;
|
||||
}
|
||||
|
||||
// 表单标签样式 - 让*号和文字对齐
|
||||
.form-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.text-red {
|
||||
margin-left: 4rpx;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.date-input {
|
||||
background: #fff;
|
||||
@@ -260,4 +402,87 @@
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
// 选择触发器样式
|
||||
.select-trigger {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background: #fff;
|
||||
border: 1rpx solid #dcdfe6;
|
||||
border-radius: 8rpx;
|
||||
padding: 20rpx 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
.select-content {
|
||||
flex: 1;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
// 人员选择弹窗
|
||||
.user-popup {
|
||||
background: #fff;
|
||||
|
||||
.popup-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 30rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
|
||||
.popup-title {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.popup-close {
|
||||
font-size: 40rpx;
|
||||
color: #999;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.popup-body {
|
||||
padding: 20rpx 30rpx;
|
||||
max-height: 600rpx;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.user-item {
|
||||
padding: 24rpx 0;
|
||||
border-bottom: 1rpx solid #f5f5f5;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.popup-footer {
|
||||
display: flex;
|
||||
border-top: 1rpx solid #eee;
|
||||
|
||||
button {
|
||||
flex: 1;
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
border-radius: 0;
|
||||
font-size: 30rpx;
|
||||
|
||||
&::after {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-cancel {
|
||||
background: #fff;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.btn-confirm {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user