| | |
| | | <template> |
| | | <div class="list"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total" @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" labelWidth="auto" inline> |
| | | <el-form-item label="所属项目课题方案:"> |
| | | <el-input v-model="form.planName" placeholder="请输入"></el-input> |
| | | <el-input v-model="form.projectName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="实验编号"> |
| | | <el-input |
| | |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | value-format="yyyy-MM-dd" |
| | | @change="handleDateChange" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="状态"> |
| | | <el-form-item label="状态" > |
| | | <el-select v-model="form.status" placeholder="请选择"> |
| | | <el-option label="全部" value=""></el-option> |
| | | <el-option label="待确认" value="pending"></el-option> |
| | | <el-option label="已确认" value="confirmed"></el-option> |
| | | <el-option label="已取消" value="cancelled"></el-option> |
| | | <el-option label="草稿箱" value="-1"></el-option> |
| | | <el-option label="待确认" value="1"></el-option> |
| | | <el-option label="已确认" value="2"></el-option> |
| | | <el-option label="已封存" value="3"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label=""> |
| | | <el-button type="default" @click="resetForm">重置</el-button> |
| | | <el-button type="primary" @click="handleSearch">查询</el-button> |
| | | <el-button type="primary" @click="handleSearch" style="margin-left: 10px;">查询</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | |
| | | :class="{ active: currentType === 'list' }" |
| | | @click="handleTypeChange('list')" |
| | | > |
| | | 实验调度列表 |
| | | 实验与调度列表 |
| | | </div> |
| | | <div |
| | | v-if="userRole === '3'" |
| | | class="drafts" |
| | | :class="{ active: currentType === 'draft' }" |
| | | @click="handleTypeChange('draft')" |
| | |
| | | 草稿箱 |
| | | </div> |
| | | </div> |
| | | <el-button @click="handleAddPlan" class="el-icon-plus" type="primary"> |
| | | 新增实验调度</el-button |
| | | <el-button |
| | | v-if="userRole === '3'" |
| | | @click="handleAddPlan" |
| | | class="el-icon-plus" |
| | | type="primary" |
| | | > |
| | | 新增实验调度 |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | <template #table> |
| | | <el-table-column |
| | | prop="experimentCode" |
| | | prop="projectName" |
| | | label="所属项目课题方案" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentName" |
| | | prop="experimentCode" |
| | | label="实验编号" |
| | | ></el-table-column> |
| | | <el-table-column prop="startTime" label="实验名称"></el-table-column> |
| | | <el-table-column prop="endTime" label="通知时间"></el-table-column> |
| | | <el-table-column |
| | | prop="participants" |
| | | prop="experimentName" |
| | | label="实验名称" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentDate" |
| | | label="通知时间" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentStartTime" |
| | | label="实验开始时间" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="createTime" |
| | | prop="experimentEndTime" |
| | | label="实验结束时间" |
| | | ></el-table-column> |
| | | <el-table-column prop="people" label="参加人员"></el-table-column> |
| | | <el-table-column prop="status" label="状态"> |
| | | <el-table-column |
| | | prop="participantsName" |
| | | label="参加人员" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | | label="状态" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="getStatusType(scope.row.status)"> |
| | | {{ getStatusText(scope.row.status) }} |
| | |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="200"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | v-if="scope.row.status === 'pending'" |
| | | type="text" |
| | | @click="handleConfirm(scope.row)" |
| | | >确认</el-button |
| | | > |
| | | <el-button type="text" @click="handleDelete(scope.row)" |
| | | >删除</el-button |
| | | > |
| | | <el-button type="text" @click="handleDetail(scope.row)" |
| | | >详情</el-button |
| | | > |
| | | <!-- 工艺工程师(3) --> |
| | | <template v-if="userRole == '3'"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button |
| | | v-if="scope.row.status === 1" |
| | | type="text" |
| | | @click="handleDelete(scope.row)" |
| | | >删除</el-button> |
| | | </template> |
| | | |
| | | <!-- 化验师(4)和实验员(5) --> |
| | | <template v-if="userRole == '4' || userRole == '5'"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button |
| | | v-if="scope.row.status === 1" |
| | | type="text" |
| | | @click="handleConfirm(scope.row)" |
| | | >确认</el-button> |
| | | </template> |
| | | |
| | | <!-- 超级管理员(1)和审批人(2) --> |
| | | <template v-if="userRole =='1' || userRole == '2'"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </TableCustom> |
| | | <SignatureCanvas |
| | | :visible="signatureDialogVisible" |
| | | @confirm="handleSignatureConfirm" |
| | | /> |
| | | |
| | | <edit-dispatch |
| | | :visible.sync="approvalDialogVisible" |
| | | :type="approvalDialogType" |
| | | :data="currentApprovalData" |
| | | @close="approvalDialogVisible = false" |
| | | @update:data="handleUpdateData" |
| | | /> |
| | | <ShowDelConfirm |
| | | :title="changeStatusTitle" |
| | | :tip="changeStatusTip" |
| | | :show="changeStatus" |
| | | @close="changeStatus = false" |
| | | @confirm="handleChangeStatusConfirm" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import SignatureCanvas from "@/components/SignatureCanvas.vue"; |
| | | import EditDispatch from "./editDispatch.vue"; |
| | | import { getList } from './service' |
| | | |
| | | import ShowDelConfirm from "@/components/showDelConfirm/index.vue"; |
| | | import { getDispatchList, deleteById } from "./service"; |
| | | export default { |
| | | name: "dispatchingList", |
| | | components: { |
| | | SignatureCanvas, |
| | | EditDispatch, |
| | | ShowDelConfirm |
| | | }, |
| | | data() { |
| | | return { |
| | | currentType: "list", // 当前显示类型:list-列表,draft-草稿箱 |
| | | userRole: JSON.parse(sessionStorage.getItem('userInfo'))?.roleType || '', // 用户角色 |
| | | form: { |
| | | experimentName: "", |
| | | projectName: "", |
| | | experimentCode: "", |
| | | createTime: [], |
| | | startTime: "", |
| | | endTime: "", |
| | | status: "", |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }, |
| | | tableData: [], |
| | | total: 0, |
| | | // 模拟数据 |
| | | mockListData: [ |
| | | { |
| | | experimentCode: "EXP-2024-001", |
| | | experimentName: "材料力学性能测试实验", |
| | | startTime: "2024-03-20 09:00", |
| | | endTime: "2024-03-20 17:00", |
| | | participants: "张三、李四、王五", |
| | | createTime: "2024-03-15", |
| | | status: "pending", |
| | | planName: "新材料研发项目", |
| | | planCode: "PLAN-2024-001", |
| | | stage: "实验阶段", |
| | | testDate: "2024-03-20", |
| | | testName: "材料力学性能测试", |
| | | testCode: "TEST-2024-001", |
| | | testTime: "2024-03-20 09:00", |
| | | groupTableData: [ |
| | | { |
| | | groupName: "对照组", |
| | | remark: "标准材料组" |
| | | }, |
| | | { |
| | | groupName: "实验组", |
| | | remark: "新材料组" |
| | | } |
| | | ], |
| | | taskTableData: [ |
| | | { |
| | | taskName: "材料准备", |
| | | leader: "张三", |
| | | startTime: "2024-03-20 09:00" |
| | | }, |
| | | { |
| | | taskName: "性能测试", |
| | | leader: "李四", |
| | | startTime: "2024-03-20 10:00" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | experimentCode: "EXP-2024-002", |
| | | experimentName: "化学合成实验", |
| | | startTime: "2024-03-21 10:00", |
| | | endTime: "2024-03-21 16:00", |
| | | participants: "赵六、钱七、孙八", |
| | | createTime: "2024-03-16", |
| | | status: "confirmed", |
| | | }, |
| | | { |
| | | experimentCode: "EXP-2024-003", |
| | | experimentName: "生物培养实验", |
| | | startTime: "2024-03-22 08:00", |
| | | endTime: "2024-03-22 18:00", |
| | | participants: "周九、吴十、郑十一", |
| | | createTime: "2024-03-17", |
| | | status: "cancelled", |
| | | }, |
| | | ], |
| | | mockDraftData: [ |
| | | { |
| | | experimentCode: "EXP-2024-004", |
| | | experimentName: "物理光学实验(草稿)", |
| | | startTime: "2024-03-23 09:00", |
| | | endTime: "2024-03-23 17:00", |
| | | participants: "王十二、李十三", |
| | | createTime: "2024-03-18", |
| | | status: "draft", |
| | | }, |
| | | ], |
| | | signatureDialogVisible: false, |
| | | currentRow: null, |
| | | approvalDialogVisible: false, |
| | | approvalDialogType: "view", |
| | | currentApprovalData: null, |
| | | // 确认弹窗相关数据 |
| | | changeStatus: false, |
| | | changeStatusTitle: "", |
| | | changeStatusTip: "", |
| | | currentOperationRow: null, // 当前操作的行数据 |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getTableData(); |
| | | }, |
| | | methods: { |
| | | handleDateChange(val) { |
| | | if (val) { |
| | | this.form.startTime = val[0]; |
| | | this.form.endTime = val[1]; |
| | | } else { |
| | | this.form.startTime = ""; |
| | | this.form.endTime = ""; |
| | | } |
| | | }, |
| | | resetForm() { |
| | | this.form = { |
| | | experimentName: "", |
| | | projectName: "", |
| | | experimentCode: "", |
| | | createTime: [], |
| | | startTime: "", |
| | | endTime: "", |
| | | status: "", |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }; |
| | | this.getTableData(); |
| | | }, |
| | | handleSearch() { |
| | | // 实现查询逻辑 |
| | | console.log("查询条件:", this.form); |
| | | this.form.pageNum = 1; |
| | | this.getTableData(); |
| | | }, |
| | | getStatusType(status) { |
| | | const statusMap = { |
| | | pending: "warning", |
| | | confirmed: "success", |
| | | cancelled: "danger", |
| | | draft: "info", |
| | | "-1": "info", |
| | | "1": "warning", |
| | | "2": "success", |
| | | "3": "info" |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | getStatusText(status) { |
| | | const statusMap = { |
| | | pending: "待确认", |
| | | confirmed: "已确认", |
| | | cancelled: "已取消", |
| | | draft: "草稿", |
| | | "-1": "草稿箱", |
| | | "1": "待确认", |
| | | "2": "已确认", |
| | | "3": "已封存" |
| | | }; |
| | | return statusMap[status] || "未知"; |
| | | }, |
| | |
| | | }); |
| | | }, |
| | | handleConfirm(row) { |
| | | // this.currentRow = row; |
| | | // this.signatureDialogVisible = true; |
| | | |
| | | this.currentApprovalData = row; |
| | | this.approvalDialogType = "approve"; |
| | | this.approvalDialogVisible = true; |
| | | }, |
| | | handleSignatureConfirm(imageData) { |
| | | console.log("imageData imageData", imageData); |
| | | this.signatureDialogVisible = false; |
| | | |
| | | // 这里处理签名确认后的逻辑 |
| | | // this.$confirm('确认该实验调度吗?', '提示', { |
| | | // confirmButtonText: '确定', |
| | | // cancelButtonText: '取消', |
| | | // type: 'warning' |
| | | // }).then(() => { |
| | | // // 这里可以将签名图片数据(imageData)连同其他数据一起提交到后端 |
| | | // this.$message.success('确认成功'); |
| | | // this.signatureDialogVisible = false; |
| | | // this.getTableData(); |
| | | // }).catch(() => { |
| | | // this.signatureDialogVisible = false; |
| | | // }); |
| | | }, |
| | | handleDelete(row) { |
| | | this.$confirm("确定要删除该实验调度吗?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | this.$message.success("删除成功"); |
| | | this.getTableData(); |
| | | }) |
| | | .catch(() => {}); |
| | | this.currentOperationRow = row; |
| | | this.changeStatusTitle = "确认要删除该实验调度吗?"; |
| | | this.changeStatusTip = "删除后信息无法找回"; |
| | | this.changeStatus = true; |
| | | }, |
| | | handleDetail(row) { |
| | | this.currentApprovalData = row; |
| | |
| | | }, |
| | | handleTypeChange(type) { |
| | | this.currentType = type; |
| | | this.form.status = type === 'draft' ? '-1' : ''; |
| | | this.form.pageNum = 1; |
| | | this.getTableData(); |
| | | }, |
| | | getTableData() { |
| | | // 根据currentType请求不同的数据 |
| | | if (this.currentType === "list") { |
| | | this.tableData = this.mockListData; |
| | | this.total = this.mockListData.length; |
| | | } else { |
| | | this.tableData = this.mockDraftData; |
| | | this.total = this.mockDraftData.length; |
| | | } |
| | | const params = { |
| | | ...this.form, |
| | | status: this.currentType === 'draft' ? '-1' : this.form.status |
| | | }; |
| | | getDispatchList(params).then(res => { |
| | | console.log('111111111111',res) |
| | | if (res.code==200) { |
| | | this.tableData = res.data.records || []; |
| | | this.total = res.data.total || 0; |
| | | } |
| | | }); |
| | | }, |
| | | // 处理页码改变 |
| | | handleCurrentChange(val) { |
| | | this.form.pageNum = val; |
| | | this.getTableData(); |
| | | }, |
| | | // 处理每页条数改变 |
| | | handleSizeChange(val) { |
| | | this.form.pageSize = val; |
| | | this.form.pageNum = 1; |
| | | this.getTableData(); |
| | | }, |
| | | handleChangeStatusConfirm() { |
| | | // 处理删除逻辑 |
| | | deleteById({ |
| | | id: this.currentOperationRow.id |
| | | }).then(() => { |
| | | this.$message.success("删除成功"); |
| | | this.changeStatus = false; |
| | | this.getTableData(); |
| | | }).catch(error => { |
| | | this.$message.error("删除失败"); |
| | | }); |
| | | }, |
| | | handleUpdateData() { |
| | | this.currentApprovalData = null; |
| | | this.getTableData(); |
| | | } |
| | | }, |
| | | }; |
| | | </script> |