| | |
| | | <template> |
| | | <div class="list"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total"> |
| | | <TableCustom :queryForm="form" :height="null" :tableData="tableData" :total="total" |
| | | @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" label-width="140px" inline> |
| | | <el-form-item label="所属项目课题方案:"> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="通知时间:"> |
| | | <el-date-picker v-model="dateRange" type="daterange" range-separator="至" |
| | | start-placeholder="开始日期" end-placeholder="结束日期" |
| | | value-format="yyyy-MM-dd" |
| | | start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" |
| | | @change="handleDateChange"></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="状态:" v-if="!isDrafts"> |
| | | <el-form-item label="状态:"> |
| | | <el-select v-model="form.auditStatus" placeholder="请选择"> |
| | | <el-option label="待确认" :value="1"></el-option> |
| | | <el-option label="已通过" :value="2"></el-option> |
| | |
| | | <template #setting> |
| | | <div class="tableTitle"> |
| | | <div class="flex a-center" style="gap: 16px;"> |
| | | <div class="title pointer" :class="{ active: !isDrafts }" @click="switchToDrafts(false)">检验方法确认单列表</div> |
| | | <div class="drafts pointer" :class="{ active: isDrafts }" @click="switchToDrafts(true)">草稿箱</div> |
| | | <div class="title pointer" :class="{ active: !isDrafts }" @click="switchToDrafts(false)"> |
| | | 检验方法确认单列表</div> |
| | | <div class="drafts pointer" :class="{ active: isDrafts }" @click="switchToDrafts(true)">草稿箱 |
| | | </div> |
| | | </div> |
| | | <el-button @click="handleAddPlan" class="el-icon-plus" type="primary"> |
| | | 新增检测方法确认单</el-button> |
| | | </div> |
| | | </template> |
| | | <template #table> |
| | | <el-table-column prop="planCode" label="所属项目课题方案"></el-table-column> |
| | | <el-table-column prop="planName" label="实验编号"></el-table-column> |
| | | <el-table-column prop="planName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="stage" label="提交时间"></el-table-column> |
| | | <el-table-column prop="creator" label="状态"></el-table-column> |
| | | <el-table-column label="操作" width="150"> |
| | | <el-table-column prop="projectName" label="所属项目课题方案"></el-table-column> |
| | | <el-table-column prop="experimentCode" label="实验编号"></el-table-column> |
| | | <el-table-column prop="experimentName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="createTime" label="提交时间"></el-table-column> |
| | | <el-table-column prop="createBy" label="提交人"></el-table-column> |
| | | <el-table-column label="状态" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleReview(scope.row)">审核</el-button> |
| | | <el-button type="text" @click="handleRevoke(scope.row)">撤销</el-button> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button> |
| | | <el-button type="text" @click="handleDelete(scope.row)">删除</el-button> |
| | | <el-tag :type="getStatusType(scope.row.auditStatus)"> |
| | | {{ getStatusText(scope.row.auditStatus) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="200"> |
| | | <template slot-scope="scope"> |
| | | <!-- 超级管理员(1)和审批人(2) --> |
| | | <template v-if="userRole == '1' || userRole == '2'"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | </template> |
| | | |
| | | <!-- 工艺工程师(3) --> |
| | | <template v-if="userRole == '3'"> |
| | | <el-button type="text" @click="handleReview(scope.row)" |
| | | v-if="scope.row.auditStatus == 1">审核</el-button> |
| | | <el-button type="text" @click="handleDetail(scope.row)" |
| | | v-if="scope.row.auditStatus == 2">详情</el-button> |
| | | </template> |
| | | |
| | | <!-- 化验师(4) --> |
| | | <template v-if="userRole == '4'"> |
| | | <el-button type="text" @click="handleRevoke(scope.row)" |
| | | v-if="scope.row.auditStatus == 1">撤销</el-button> |
| | | <el-button type="text" @click="handleDetail(scope.row)" |
| | | v-if="scope.row.auditStatus === 2 || scope.row.auditStatus === 3">详情</el-button> |
| | | <el-button type="text" @click="handleEdit(scope.row)" |
| | | v-if="scope.row.auditStatus === 3">编辑</el-button> |
| | | <el-button type="text" @click="handleDelete(scope.row)" |
| | | v-if="scope.row.auditStatus === 3">删除</el-button> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </TableCustom> |
| | | <ShowDelConfirm :show="showRevoke" btnType="primary" @close="showRevoke = false" tip="撤销后,工艺工程师将无法收到此审批信息" okText="确定" title="确认要撤销这条确认单吗?"/> |
| | | <review-dialog |
| | | :visible.sync="reviewDialogVisible" |
| | | :type="dialogType" |
| | | :formData="currentRow" |
| | | :sampleData="sampleData" |
| | | @confirm="handleConfirmSubmit" |
| | | /> |
| | | <ShowDelConfirm |
| | | :show="showRevoke" |
| | | btnType="primary" |
| | | v-on:close="showRevoke = false" |
| | | tip="撤销后,工艺工程师将无法收到此审批信息" |
| | | okText="确定" |
| | | title="确认要撤销这条确认单吗?" |
| | | v-on:confirm="handleRevokeConfirm" /> |
| | | <ShowDelConfirm |
| | | :show="showDelete" |
| | | :title="deleteTitle" |
| | | :tip="deleteTip" |
| | | v-on:close="showDelete = false" |
| | | v-on:confirm="handleDeleteConfirm" /> |
| | | <review-dialog :visible.sync="reviewDialogVisible" :type="dialogType" :id="currentRow.id" |
| | | @close="handleClose" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import reviewDialog from './components/review-dialog.vue'; |
| | | import { getList } from './service' |
| | | import ShowDelConfirm from "@/components/showDelConfirm/index.vue"; |
| | | import { getList, deleteById, revokedSheet } from './service' |
| | | export default { |
| | | name: "ConfirmationSheet", |
| | | components: { |
| | | reviewDialog |
| | | reviewDialog, |
| | | ShowDelConfirm |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | showRevoke: false, |
| | | tableData: [], |
| | | total: 0, |
| | | editorContent: '', |
| | | reviewDialogVisible: false, |
| | | dialogType: 'review', |
| | | currentRow: {}, |
| | | sampleData: [], |
| | | userRole: null, |
| | | showDelete: false, |
| | | deleteTitle: "", |
| | | deleteTip: "", |
| | | currentDeleteRow: null, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | // 获取用户角色 |
| | | const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}'); |
| | | this.userRole = userInfo.roleType; |
| | | this.getTableData(); |
| | | }, |
| | | methods: { |
| | | async getTableData() { |
| | | try { |
| | | const params = { ...this.form }; |
| | | if (this.isDrafts) { |
| | | params.auditStatus = -1; |
| | | } |
| | | const params = { |
| | | ...this.form, |
| | | pageNum: Number(this.form.pageNum), |
| | | pageSize: Number(this.form.pageSize), |
| | | auditStatus: this.isDrafts ? -1 : Number(this.form.auditStatus) || '' |
| | | }; |
| | | const res = await getList(params); |
| | | if (res.code === 200) { |
| | | this.tableData = res.data.list || []; |
| | | this.tableData = res.data.records || []; |
| | | this.total = res.data.total || 0; |
| | | } |
| | | } catch (error) { |
| | | console.error('获取列表数据失败:', error); |
| | | this.$message.error('获取列表数据失败'); |
| | | } |
| | | }, |
| | | handleDateChange(val) { |
| | | if (val) { |
| | | if (val && val.length === 2) { |
| | | this.form.startTime = val[0]; |
| | | this.form.endTime = val[1]; |
| | | } else { |
| | |
| | | this.form.pageNum = 1; |
| | | this.getTableData(); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.form.pageNum = val; |
| | | this.getTableData(); |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.form.pageSize = val; |
| | | this.getTableData(); |
| | | }, |
| | | switchToDrafts(isDrafts) { |
| | | this.isDrafts = isDrafts; |
| | | this.resetForm(); |
| | | }, |
| | | getStatusType(status) { |
| | | const statusMap = { |
| | | pending: "warning", |
| | | rejected: "danger", |
| | | approved: "success", |
| | | archived: "info", |
| | | 1: "warning", // 待确认 |
| | | 2: "success", // 已通过 |
| | | 3: "danger", // 已驳回 |
| | | 4: "info", // 已撤回 |
| | | 5: "info", // 已封存 |
| | | '-1': "info" // 草稿箱 |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | getStatusText(status) { |
| | | const statusMap = { |
| | | pending: "待审批", |
| | | rejected: "已驳回", |
| | | approved: "已通过", |
| | | archived: "已封存", |
| | | 1: "待确认", |
| | | 2: "已通过", |
| | | 3: "已驳回", |
| | | 4: "已撤回", |
| | | 5: "已封存", |
| | | '-1': "草稿箱" |
| | | }; |
| | | return statusMap[status] || "未知"; |
| | | }, |
| | |
| | | this.showRevoke = true; |
| | | }, |
| | | handleDetail(row) { |
| | | // 实现查看详情逻辑 |
| | | console.log("查看详情:", row); |
| | | this.currentRow = row; |
| | | this.dialogType = 'view'; |
| | | this.reviewDialogVisible = true; |
| | | }, |
| | | handleEdit(row) { |
| | | // 实现编辑逻辑 |
| | | console.log("编辑:", row); |
| | | this.$router.push({ |
| | | path: "/dataManagement/confirmation-sheet/edit", |
| | | query: { id: row.id } |
| | | }); |
| | | }, |
| | | handleDelete(row) { |
| | | // 实现删除逻辑 |
| | | console.log("删除:", row); |
| | | this.currentDeleteRow = row; |
| | | this.deleteTitle = "确认要删除该确认单吗?"; |
| | | this.deleteTip = "删除后信息无法找回"; |
| | | this.showDelete = true; |
| | | }, |
| | | handleConfirmSubmit(data) { |
| | | // 处理确认提交后的逻辑 |
| | | console.log("确认提交:", data); |
| | | handleDeleteConfirm() { |
| | | if (!this.currentDeleteRow) return; |
| | | |
| | | deleteById({ |
| | | id: this.currentDeleteRow.id |
| | | }).then(() => { |
| | | this.$message.success("删除成功"); |
| | | this.showDelete = false; |
| | | this.getTableData(); |
| | | }).catch(error => { |
| | | this.$message.error("删除失败"); |
| | | }); |
| | | }, |
| | | handleClose() { |
| | | this.reviewDialogVisible = false; |
| | | this.getTableData(); |
| | | }, |
| | | async handleRevokeConfirm() { |
| | | if (!this.currentRow) return; |
| | | |
| | | try { |
| | | await revokedSheet({ id: this.currentRow.id }); |
| | | this.$message.success("撤销成功"); |
| | | this.showRevoke = false; |
| | | this.getTableData(); |
| | | } catch (error) { |
| | | console.error('撤销失败:', error); |
| | | this.$message.error("撤销失败"); |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | padding-bottom: 20px; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | .title, .drafts { |
| | | |
| | | .title, |
| | | .drafts { |
| | | background: #ffffff; |
| | | border-radius: 8px 8px 0px 0px; |
| | | padding: 16px 29px; |
| | |
| | | |
| | | .drafts { |
| | | padding: 16px 65px; |
| | | &:not(.active) { |
| | | |
| | | } |
| | | |
| | | &:not(.active) {} |
| | | } |
| | | } |
| | | |