提交安全审查对接代码

This commit is contained in:
wangchengming 2025-07-16 23:55:44 +08:00
parent 906ed4209d
commit b5639388dd
20 changed files with 1511 additions and 565 deletions

View File

@ -39,4 +39,51 @@ export function deleteBusSafetyReview(reviewId) {
url: '/admin/busSafetyReview/deleteBusSafetyReview/' + reviewId,
method: 'post'
})
}
}
// ESC任务 获取列表数据
export function escReviewProblemPageList(query) {
return request({
url: '/admin/busReviewProblem/getEscReviewProblemPage',
method: 'post',
data: query
})
}
// ESC任务 获取问题详情
export function escBusReviewProblemDetail(reviewId) {
return request({
url: '/admin/busReviewProblem/getBusReviewProblem/' + reviewId,
method: 'post'
})
}
// ESC任务 整改问题
export function escCorrection(query) {
return request({
url: '/admin/busReviewProblem/correction',
method: 'post',
data: query
})
}
// 审核员任务获取审批列表
export function busReviewProblemPage(query) {
return request({
url: '/admin/busReviewProblem/getBusReviewProblemPage',
method: 'post',
data: query
})
}
// 审核员任务 审批
export function checkStatus(query) {
return request({
url: '/admin/busReviewProblem/checkStatus',
method: 'post',
data: query
})
}

View File

@ -97,7 +97,7 @@ export const dynamicRoutes = [
path: '/qualification/escTask/qualificationApplyForm',
component: Layout,
hidden: true,
permissions: ['qualification:escTask:qualificationApply'],
permissions: ['qualification:qualificationApply'],
children: [
{
path: '',
@ -111,7 +111,7 @@ export const dynamicRoutes = [
path: '/qualification/escTask/qualificationReApplyForm',
component: Layout,
hidden: true,
permissions: ['qualification:escTask:qualificationApply'],
permissions: ['qualification:qualificationApply'],
children: [
{
path: ':Id(\\d+)?/:node',
@ -125,7 +125,7 @@ export const dynamicRoutes = [
path: '/qualification/escTask/lableApplyForm',
component: Layout,
hidden: true,
permissions: ['qualification:escTask:lableApplyForm'],
permissions: ['qualification:lableApplyForm'],
children: [
{
path: '',
@ -140,7 +140,7 @@ export const dynamicRoutes = [
path: '/qualification/escTask/LableReApplyForm',
component: Layout,
hidden: true,
permissions: ['qualification:escTask:qualificationApply'],
permissions: ['qualification:lableApplyForm'],
children: [
{
path: ':Id(\\d+)?',
@ -154,7 +154,7 @@ export const dynamicRoutes = [
path: '/qualification/viewDetail',
component: Layout,
hidden: true,
permissions: ['qualification:escApproval:approvalDetail'],
permissions: ['qualification:viewDetail'],
children: [
{
path: ':Id(\\d+)?',
@ -168,7 +168,7 @@ export const dynamicRoutes = [
path: '/lable/viewDetail',
component: Layout,
hidden: true,
permissions: ['qualification:escApproval:approvalDetail'],
permissions: ['qualification:viewDetail'],
children: [
{
path: ':Id(\\d+)?',
@ -182,7 +182,7 @@ export const dynamicRoutes = [
path: '/qualification/approvalForm',
component: Layout,
hidden: true,
permissions: ['qualification:escApproval:approvalDetail'],
permissions: ['qualification:approval'],
children: [
{
path: ':Id(\\d+)?',
@ -196,7 +196,7 @@ export const dynamicRoutes = [
path: '/qualification/approvalDetail',
component: Layout,
hidden: true,
permissions: ['qualification:escApproval:approvalDetail'],
permissions: ['qualification:viewDetail'],
children: [
{
path: ':Id(\\d+)?',
@ -210,7 +210,7 @@ export const dynamicRoutes = [
path: '/qualification/trainApprovalForm',
component: Layout,
hidden: true,
permissions: ['qualification:trainApproval:approvalDetail'],
permissions: ['qualification:approval'],
children: [
{
path: ':Id(\\d+)?',
@ -225,7 +225,7 @@ export const dynamicRoutes = [
path: '/qualification/trainApprovalDetail',
component: Layout,
hidden: true,
permissions: ['qualification:trainApproval:approvalDetail'],
permissions: ['qualification:viewDetail'],
children: [
{
path: ':Id(\\d+)?',
@ -239,7 +239,7 @@ export const dynamicRoutes = [
path: '/qualification/vehicleTrain/Form',
component: Layout,
hidden: true,
permissions: ['qualification:vehicleTrain:editForm'],
permissions: ['qualification:vehicleTrain:addForm'],
children: [
{
path: ':Id(\\d+)?',
@ -337,7 +337,7 @@ export const dynamicRoutes = [
path: '/safetyReview/examinerTasksForm',
component: Layout,
hidden: true,
permissions: ['safetyReview:examinerTasks:add'],
permissions: ['examinerTasks:add'],
children: [
{
path: ':Id(\\d+)?',
@ -351,7 +351,7 @@ export const dynamicRoutes = [
path: '/safetyReview/examinerApprovalForm',
component: Layout,
hidden: true,
permissions: ['safetyReview:examinerTasks:add'],
permissions: ['examinerApproval:approval'],
children: [
{
path: ':Id(\\d+)?',
@ -360,12 +360,26 @@ export const dynamicRoutes = [
meta: { title: '审核员审批', activeMenu: '/safetyReview/examinerApproval' }
}
]
},
{
path: '/safetyReview/examinerDetailForm',
component: Layout,
hidden: true,
permissions: ['examinerApproval:viewDetail'],
children: [
{
path: ':Id(\\d+)?',
component: () => import('@/views/safetyReview/examinerApproval/detailForm'),
name: 'examinerDetailForm',
meta: { title: '审查员问题详情', activeMenu: '/safetyReview/examinerApproval' }
}
]
},
{
path: '/safetyReview/escTaskForm',
component: Layout,
hidden: true,
permissions: ['safetyReview:examinerTasks:add'],
permissions: ['examinerEscTask:correction'],
children: [
{
path: ':Id(\\d+)?',
@ -375,11 +389,25 @@ export const dynamicRoutes = [
}
]
},
{
path: '/safetyReview/escTaskDetailForm',
component: Layout,
hidden: true,
permissions: ['examinerEscTask:viewDetail'],
children: [
{
path: ':Id(\\d+)?',
component: () => import('@/views/safetyReview/examinerEscTask/detailForm'),
name: 'escTaskDetailForm',
meta: { title: 'ESC问题详情', activeMenu: '/safetyReview/examinerEscTask' }
}
]
},
{
path: '/ppeToolForm',
component: Layout,
hidden: true,
permissions: ['safetyReview:examinerTasks:add'],
permissions: ['ppeTool:add'],
children: [
{
path: ':Id(\\d+)?',

View File

@ -85,8 +85,10 @@
<el-table-column label="操作" fixed="right" align="center" width="100">
<template #default="scope">
<el-button type="primary" v-if="scope.row.state == 1 && scope.row.node == 2" text
class="replayTextBtn" @click="handleApproval(scope.row)">审批</el-button>
v-hasPermi="['labelManage:adminApproval:approval']" class="replayTextBtn"
@click="handleApproval(scope.row)">审批</el-button>
<el-button type="primary" text class="replayTextBtn" v-else
v-hasPermi="['labelManage:adminApproval:detail']"
@click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>

View File

@ -85,8 +85,10 @@
<el-table-column label="操作" fixed="right" align="center" width="100">
<template #default="scope">
<el-button type="primary" v-if="scope.row.state == 1 && scope.row.node == 1" text
class="replayTextBtn" @click="handleApproval(scope.row)">审批</el-button>
v-hasPermi="['labelManage:labelEscApproval:approval']" class="replayTextBtn"
@click="handleApproval(scope.row)">审批</el-button>
<el-button type="primary" text class="replayTextBtn" v-else
v-hasPermi="['labelManage:labelEscApproval:detail']"
@click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>

View File

@ -31,7 +31,7 @@
</el-col>
</el-row>
</el-form>
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['ppeTool:add']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenAddForm">
<img :src="addIcon" class="custom-icon" />
新增
@ -71,10 +71,10 @@
<el-table-column label="操作" fixed="right" width="130">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn"
@click="handleEdit(scope.row)">编辑</el-button>
v-hasPermi="['ppeTool:edit']" @click="handleEdit(scope.row)">编辑</el-button>
<el-divider direction="vertical" class="verticalLine" />
<el-button type="primary" text class="deleteTextBtn"
@click="handleDelete(scope.row)">删除</el-button>
v-hasPermi="['ppeTool:delete']" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -49,7 +49,7 @@
</el-row>
</el-form>
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['qualification:export']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleExportExcel">
<img :src="exprotIcon" class="custom-icon" />
导出
@ -84,9 +84,10 @@
<el-table-column label="操作" fixed="right" align="center" width="100">
<template #default="scope">
<el-button type="primary" v-if="scope.row.state == 1 && scope.row.node == 1" text
class="replayTextBtn" @click="handleApproval(scope.row)">审批</el-button>
v-hasPermi="['qualification:approval']" class="replayTextBtn"
@click="handleApproval(scope.row)">审批</el-button>
<el-button type="primary" text class="replayTextBtn" v-else
@click="handleView(scope.row)">查看</el-button>
v-hasPermi="['qualification:viewDetail']" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -26,7 +26,7 @@
</el-col>
</el-row>
</el-form>
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['qualification:lableApplyForm']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenApplyForm">
<img :src="applyIcon" class="custom-icon" />
标签申请
@ -61,14 +61,15 @@
<el-table-column label="操作" fixed="right" width="150">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state == 9"
@click="handleReplay(scope.row)">重新申请</el-button>
v-hasPermi="['qualification:lableApplyForm']" @click="handleReplay(scope.row)">重新申请</el-button>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 9" />
<router-link :to="'/lable/viewDetail/' + scope.row.id" custom v-slot="{ href }">
<a class="replayTextBtn" :href="href" target="_blank">查看</a>
<router-link :to="'/lable/viewDetail/' + scope.row.id" custom
v-slot="{ href }">
<a v-hasPermi="['qualification:viewDetail']" class="replayTextBtn" :href="href" target="_blank">查看</a>
</router-link>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 1" />
<el-button type="primary" text class="deleteTextBtn" v-if="scope.row.state == 1"
@click="handleDetele(scope.row)">删除</el-button>
v-hasPermi="['qualification:lableApplyDelete']" @click="handleDetele(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -30,7 +30,7 @@
</el-form>
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['qualification:qualificationApply']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenApplyForm">
<img :src="applyIcon" class="custom-icon" />
资质申请
@ -59,20 +59,21 @@
<el-text v-if="scope.row.state == 1 && scope.row.node == 2" type="info"
class="infoinfoText">待培训中心审核</el-text>
<el-text v-if="scope.row.state == 2" type="success" class="successText">通过</el-text>
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="150">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state == 9"
@click="handleReplay(scope.row)">重新申请</el-button>
v-hasPermi="['qualification:qualificationApply']" @click="handleReplay(scope.row)">重新申请</el-button>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 9" />
<router-link :to="'/qualification/viewDetail/' + scope.row.id" custom v-slot="{ href }">
<a class="replayTextBtn" :href="href" target="_blank">查看</a>
<router-link :to="'/qualification/viewDetail/' + scope.row.id"
custom v-slot="{ href }">
<a v-hasPermi="['qualification:viewDetail']" class="replayTextBtn" :href="href" target="_blank">查看</a>
</router-link>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 1" />
<el-button type="primary" text class="deleteTextBtn" v-if="scope.row.state == 1"
@click="handleDetele(scope.row)">删除</el-button>
v-hasPermi="['qualification:qualificationDelete']" @click="handleDetele(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -1,6 +1,6 @@
<template>
<div v-if="!isShowForm && !isShowReForm">
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['qualification:lableApplyForm']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenApplyForm">
<img :src="applyIcon" class="custom-icon" />
标签申请
@ -32,14 +32,15 @@
<el-table-column label="操作" width="180">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state == 9"
@click="handleReplay(scope.row)">重新申请</el-button>
v-hasPermi="['qualification:lableApplyForm']" @click="handleReplay(scope.row)">重新申请</el-button>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 9" />
<router-link :to="'/lable/viewDetail/' + scope.row.id" custom v-slot="{ href }">
<a class="replayTextBtn" :href="href" target="_blank">查看</a>
<router-link :to="'/lable/viewDetail/' + scope.row.id"
custom v-slot="{ href }">
<a v-hasPermi="['qualification:viewDetail']" class="replayTextBtn" :href="href" target="_blank">查看</a>
</router-link>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 1" />
<el-button type="primary" text class="deleteTextBtn" v-if="scope.row.state == 1"
@click="handleDetele(scope.row)">删除</el-button>
v-hasPermi="['qualification:lableApplyDelete']" @click="handleDetele(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
@ -103,7 +104,7 @@ const handleReplay = (record) => {
isShowReForm.value = true
nextTick(() => {
lableReApplyFormRef.value.getLableDetailInfo(record.id);
});
});
}
//
const handleDetele = (record) => {

View File

@ -1,6 +1,6 @@
<template>
<div v-if="!isShowForm && !isShowReForm">
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['qualification:qualificationApply']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenApplyForm">
<img :src="applyIcon" class="custom-icon" />
资质申请
@ -32,13 +32,16 @@
<el-table-column label="操作" width="180">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state == 9"
v-hasPermi="['qualification:qualificationApply']"
@click="handleReplay(scope.row)">重新申请</el-button>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 9" />
<router-link :to="'/qualification/viewDetail/' + scope.row.id" custom v-slot="{ href }">
<a class="replayTextBtn" :href="href" target="_blank">查看</a>
<a v-hasPermi="['qualification:viewDetail']" class="replayTextBtn" :href="href"
target="_blank">查看</a>
</router-link>
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state == 1" />
<el-button type="primary" text class="deleteTextBtn" v-if="scope.row.state == 1"
v-hasPermi="['qualification:qualificationDelete']"
@click="handleDetele(scope.row)">删除</el-button>
</template>
</el-table-column>

View File

@ -49,7 +49,7 @@
</el-row>
</el-form>
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['qualification:export']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleExportExcel">
<img :src="exprotIcon" class="custom-icon" />
导出
@ -80,9 +80,10 @@
<el-table-column label="操作" fixed="right" align="center" width="100">
<template #default="scope">
<el-button type="primary" v-if="scope.row.state == 1 && scope.row.node == 2" text
class="replayTextBtn" @click="handleApproval(scope.row)">审批</el-button>
v-hasPermi="['qualification:approval']" class="replayTextBtn"
@click="handleApproval(scope.row)">审批</el-button>
<el-button type="primary" text class="replayTextBtn" v-else
@click="handleView(scope.row)">查看</el-button>
v-hasPermi="['qualification:viewDetail']" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -30,15 +30,18 @@
</el-form>
<div class="optionBtn">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenAddForm">
<el-button type="primary" class="qualificationApplyBtn"
v-hasPermi="['qualification:vehicleTrain:addForm']" @click="handleOpenAddForm">
<img :src="addIcon" class="custom-icon" />
新建
</el-button>
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenImportForm">
<el-button type="primary" class="qualificationApplyBtn"
v-hasPermi="['qualification:vehicleTrain:importForm']" @click="handleOpenImportForm">
<img :src="importIcon" class="custom-icon" />
导入
</el-button>
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenApplyForm">
<el-button type="primary" class="qualificationApplyBtn"
v-hasPermi="['qualification:vehicleTrain:exportForm']" @click="handleOpenApplyForm">
<img :src="exprotIcon" class="custom-icon" />
导出模板
</el-button>
@ -66,9 +69,11 @@
<el-table-column label="操作" width="`5`0">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn"
v-hasPermi="['qualification:vehicleTrain:editForm']"
@click="handleEdit(scope.row)">编辑</el-button>
<el-divider direction="vertical" class="verticalLine" />
<el-button type="primary" text class="deleteTextBtn"
v-hasPermi="['qualification:vehicleTrain:deleted']"
@click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>

View File

@ -16,55 +16,61 @@
<span>审批</span>
</div>
</template>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="left">
<el-form label-position="left">
<div class="headerTitle">问题描述</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="24">
<el-form-item label="">
问题描述问题描述问题问题描述问题描述问题描述问题描述问题问题描述问题描述问题描述问题描述问题问题描题问题描
述问题描述问题描述问题描述问题问题描述问题描述问题描述问题描述问题描述问题问题描题问题描述问题描述问题描
述问题描述问题问题描述
{{ detailForm.remark }}
</el-form-item>
</el-col>
</el-row>
<el-row class="myRow" :gutter="20">
<el-col :span="5">
<el-form-item label="当前标签:" prop="targetQualification">
一般偏差
<el-text v-if="detailForm.level == 1" type="success"
class="successText">建议项</el-text>
<el-text v-if="detailForm.level == 2" type="info"
class="infoinfoText">一般偏差</el-text>
<el-text v-if="detailForm.level == 3" type="danger"
class="dangerText">主要偏差</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="部门:" prop="departmentName">
XXXX部门
{{ detailForm.deptName }}
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="属地:" prop="officeName">
XXX属地
{{ detailForm.dependencyName }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="状态:" prop="employeeNumber">
待审核
<el-text v-if="detailForm.state == 0" type="info" class="infoinfoText">未整改</el-text>
<el-text v-if="detailForm.state == 1" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="detailForm.state == 2" type="success"
class="successText">已整改</el-text>
<el-text v-if="detailForm.state == 9" type="danger" class="dangerText">驳回</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="创建时间:" prop="employeeEnglishName">
2024-12-24 14:23
{{ detailForm.createTime }}
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="top">
<el-form label-position="top">
<div class="headerTitle">整改结果</div>
<div class="applyFormContainer">
<el-form-item label="附件:" prop="targetQualification">
<template v-for="itemFile in fileList">
<template v-for="itemFile in docUploadList">
<div class="fileContainer">
<img v-if="isImageFile(itemFile.suffix)" :src="itemFile.certificate"
class="avatar" />
<img v-if="isImageFile(itemFile.suffix)" :src="itemFile.url" class="avatar" />
<img v-else-if="itemFile.suffix == 'doc' || itemFile.suffix == 'docx'"
:src="iconDoc" class="avatar" />
<img v-else-if="itemFile.suffix == 'xls' || itemFile.suffix == 'xlsx'"
@ -82,29 +88,28 @@
</template>
</el-form-item>
<el-form-item label="整改描述:" prop="targetQualification">
问题描述问题描述问题问题描述问题描述问题描述问题描述问题问题描述问题描述问题描述问题描述问题问题描题
问题描述问题描述问题描述问题描述问题问题描述问题描述问题描述问题描述问题描述问题问题描题问题描述问
{{ detailForm.correctionRemark }}
</el-form-item>
</div>
</el-form>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="top">
<el-form ref="ruleFormRef" :model="detailForm" :rules="rules" label-position="top">
<div class="headerTitle">审批信息</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="审批结果" prop="urgency">
<el-radio-group v-model="ruleForm.urgency">
<el-radio value="2">驳回</el-radio>
<el-radio value="1">通过</el-radio>
<el-form-item label="审批结果" prop="state">
<el-radio-group v-model="detailForm.state" @change="handleApplyStateChange">
<el-radio value="9">驳回</el-radio>
<el-radio value="2">通过</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="审批意见" prop="urgency">
<el-input v-model="textarea" style="width: 100%" :rows="5" type="textarea"
placeholder="请输入" />
<el-form-item label="审批意见" prop="checkRemark">
<el-input v-model="detailForm.checkRemark" style="width: 100%" :rows="5"
type="textarea" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
@ -121,7 +126,7 @@
</template>
<script setup>
import { reactive } from 'vue'
import { onMounted, ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import iconDoc from '@/assets/images/iconDoc.png'
import iconOther from '@/assets/images/iconOther.png'
@ -132,96 +137,58 @@ import iconZip from '@/assets/images/iconZip.png'
import iconMove from '@/assets/images/iconMove.png'
import iconTxt from '@/assets/images/iconTxt.png'
import iconPpt from '@/assets/images/iconPpt.png'
import { escBusReviewProblemDetail, checkStatus } from "@/api/safetyReview"
const router = useRouter()
const route = useRoute()
const levelList = ref([
{ title: '高压安全审查', path: '/safetyReview' },
{ title: '审核员审批', path: '/safetyReview/examinerApproval' },
{ title: '审批', path: '/safetyReview/examinerApproval/approvalForm' }
])
//
const docUploadList = ref([])
const baseUrl = import.meta.env.VITE_APP_BASE_API
const { proxy } = getCurrentInstance()
const data = reactive({
ruleForm: {},
detailForm: {},
rules: {
targetQualification: [{ required: true, message: "目标资质不能为空", trigger: "change" }],
employeeNumber: [{ required: true, message: "员工工号不能为空", trigger: "blur" }],
employeeChineseName: [{ required: true, message: "员工姓名(中文)不能为空", trigger: "blur" }],
employeeEnglishName: [{ required: true, message: "员工姓名(英文)", trigger: "blur" }],
departmentName: [{ required: true, message: "部门不能为空", trigger: "change" }],
officeName: [{ required: true, message: "科室不能为空", trigger: "change" }],
localityName: [{ required: true, message: "属地不能为空", trigger: "change" }],
localityManager: [{ required: true, message: "属地ESC不能为空", trigger: "blur" }],
state: [{ required: true, message: "审批结果不能为空", trigger: "change" }],
checkRemark: [{ required: true, message: "审批意见不能为空", trigger: "change" }],
},
})
const tableData = [
{
name: '提交申请',
approvalResult: '-',
approvalTime: '2016-05-03'
},
{
name: 'ESC审批',
approvalResult: '同意',
approvalTime: '2016-05-08'
},
]
const { detailForm, rules } = toRefs(data)
//
onMounted(() => {
const id = route.params && route.params.Id
if (id) {
console.log('接收id', id)
// detailForm.value.id = id
getDetailInfo(id)
}
});
//
const getDetailInfo = (id) => {
escBusReviewProblemDetail(id).then(res => {
if (res.code == 200) {
detailForm.value = res.data
docUploadList.value = res.data.fileContent
? JSON.parse(res.data.fileContent)
: []
}
})
}
//
const handleApplyStateChange = (value) => {
if (value == 2) detailForm.value.checkRemark = '通过'
if (value == 9) detailForm.value.checkRemark = ''
}
//
const isImageFile = (suffix) => {
return ['jpeg', 'jpg', 'png'].includes(suffix?.toLowerCase())
}
const fileList = [
{
name: 'XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'png'
},
{
name: 'XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'pdf'
},
{
name: 'XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'ppt'
},
{
name: 'XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'mp3'
},
{
name: 'XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'mov'
},
{
name: 'XXXXX文件XXXXX文件XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'json'
},
{
name: 'XXXXX文件',
certificate: null,
suffix: 'xls'
},
{
name: 'XXXXX文件',
certificate: null,
suffix: 'txt'
},
{
name: 'XXXXX文件',
certificate: null,
suffix: 'doc'
},
{
name: 'XXXXX文件',
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
suffix: 'zip'
},
]
const { ruleForm, rules } = toRefs(data)
const handleCancel = () => {
proxy.resetForm("ruleFormRef")
router.push({
@ -231,24 +198,12 @@ const handleCancel = () => {
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
router.push({
path: '/safetyReview/examinerApproval'
checkStatus(detailForm.value).then(res => {
proxy.$modal.msgSuccess("提交成功")
router.push({
path: '/safetyReview/examinerApproval'
})
})
// if (form.value.roleId != undefined) {
// form.value.menuIds = getMenuAllCheckedKeys()
// updateRole(form.value).then(response => {
// proxy.$modal.msgSuccess("")
// open.value = false
// getList()
// })
// } else {
// form.value.menuIds = getMenuAllCheckedKeys()
// addRole(form.value).then(response => {
// proxy.$modal.msgSuccess("")
// open.value = false
// getList()
// })
// }
}
})
}
@ -346,6 +301,13 @@ const handleSubmit = () => {
padding: 6px 14px;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #DD9200;
}
.successText {
font-family: Microsoft YaHei;
font-weight: 400;
@ -511,7 +473,7 @@ const handleSubmit = () => {
color: #000000;
}
.fileContainer {
.fileContainer {
width: 144px;
padding: 6px 20px 12px 20px;
text-align: center;

View File

@ -0,0 +1,474 @@
<template>
<div class="app-page-container">
<el-breadcrumb class="app-breadcrumb" separator=">">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
<span v-if="index == levelList.length - 1" class="link-redirect">{{
item.title }}</span>
<span v-else class="no-redirect">{{ item.title }}</span>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
<div class="rootContainer clearBoth">
<el-card>
<template #header>
<div class="card-header">
<span>审批</span>
</div>
</template>
<el-form label-position="left">
<div class="headerTitle">问题描述</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="24">
<el-form-item label="">
{{ detailForm.remark }}
</el-form-item>
</el-col>
</el-row>
<el-row class="myRow" :gutter="20">
<el-col :span="5">
<el-form-item label="当前标签:" prop="targetQualification">
<el-text v-if="detailForm.level == 1" type="success"
class="successText">建议项</el-text>
<el-text v-if="detailForm.level == 2" type="info"
class="infoinfoText">一般偏差</el-text>
<el-text v-if="detailForm.level == 3" type="danger"
class="dangerText">主要偏差</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="部门:" prop="departmentName">
{{ detailForm.deptName }}
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="属地:" prop="officeName">
{{ detailForm.dependencyName }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="状态:" prop="employeeNumber">
<el-text v-if="detailForm.state == 0" type="info" class="infoinfoText">未整改</el-text>
<el-text v-if="detailForm.state == 1" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="detailForm.state == 2" type="success"
class="successText">已整改</el-text>
<el-text v-if="detailForm.state == 9" type="danger" class="dangerText">驳回</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="创建时间:" prop="employeeEnglishName">
{{ detailForm.createTime }}
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-form label-position="top">
<div class="headerTitle">整改结果</div>
<div class="applyFormContainer">
<el-form-item label="附件:" prop="targetQualification">
<template v-for="itemFile in docUploadList">
<div class="fileContainer">
<img v-if="isImageFile(itemFile.suffix)" :src="itemFile.url" class="avatar" />
<img v-else-if="itemFile.suffix == 'doc' || itemFile.suffix == 'docx'"
:src="iconDoc" class="avatar" />
<img v-else-if="itemFile.suffix == 'xls' || itemFile.suffix == 'xlsx'"
:src="iconXls" class="avatar" />
<img v-else-if="itemFile.suffix == 'ppt' || itemFile.suffix == 'pptx'"
:src="iconPpt" class="avatar" />
<img v-else-if="itemFile.suffix == 'zip'" :src="iconZip" class="avatar" />
<img v-else-if="itemFile.suffix == 'pdf'" :src="iconPdf" class="avatar" />
<img v-else-if="itemFile.suffix == 'mp3'" :src="iconVideo" class="avatar" />
<img v-else-if="itemFile.suffix == 'mp4'" :src="iconMove" class="avatar" />
<img v-else-if="itemFile.suffix == 'txt'" :src="iconTxt" class="avatar" />
<img v-else :src="iconOther" class="avatar" />
<div class="fileNameLable">{{ itemFile.name }}</div>
</div>
</template>
</el-form-item>
<el-form-item label="整改描述:" prop="targetQualification">
{{ detailForm.correctionRemark }}
</el-form-item>
</div>
</el-form>
<!-- <el-form ref="ruleFormRef" :model="detailForm" :rules="rules" label-position="top">
<div class="headerTitle">审批信息</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="审批结果" prop="state">
<el-radio-group v-model="detailForm.state" @change="handleApplyStateChange">
<el-radio value="9">驳回</el-radio>
<el-radio value="2">通过</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="审批意见" prop="checkRemark">
<el-input v-model="detailForm.checkRemark" style="width: 100%" :rows="5"
type="textarea" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
</div>
</el-form> -->
</el-card>
</div>
<!-- <div class="submitTool">
<el-button class="cancelApplyBtn" @click="handleCancel">取消</el-button>
<el-button class="submitApplyBtn" @click="handleSubmit">提交</el-button>
</div> -->
</div>
</template>
<script setup>
import { onMounted, ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import iconDoc from '@/assets/images/iconDoc.png'
import iconOther from '@/assets/images/iconOther.png'
import iconPdf from '@/assets/images/iconPdf.png'
import iconVideo from '@/assets/images/iconVideo.png'
import iconXls from '@/assets/images/iconXls.png'
import iconZip from '@/assets/images/iconZip.png'
import iconMove from '@/assets/images/iconMove.png'
import iconTxt from '@/assets/images/iconTxt.png'
import iconPpt from '@/assets/images/iconPpt.png'
import { escBusReviewProblemDetail } from "@/api/safetyReview"
const router = useRouter()
const route = useRoute()
const levelList = ref([
{ title: '高压安全审查', path: '/safetyReview' },
{ title: '审核员审批', path: '/safetyReview/examinerApproval' },
{ title: '问题详情', path: '/safetyReview/examinerViewProblem' }
])
//
const docUploadList = ref([])
const baseUrl = import.meta.env.VITE_APP_BASE_API
const { proxy } = getCurrentInstance()
const data = reactive({
detailForm: {},
rules: {
state: [{ required: true, message: "审批结果不能为空", trigger: "change" }],
checkRemark: [{ required: true, message: "审批意见不能为空", trigger: "change" }],
},
})
const { detailForm, rules } = toRefs(data)
//
onMounted(() => {
const id = route.params && route.params.Id
if (id) {
console.log('接收id', id)
// detailForm.value.id = id
getDetailInfo(id)
}
});
//
const getDetailInfo = (id) => {
escBusReviewProblemDetail(id).then(res => {
if (res.code == 200) {
detailForm.value = res.data
docUploadList.value = res.data.fileContent
? JSON.parse(res.data.fileContent)
: []
}
})
}
//
const isImageFile = (suffix) => {
return ['jpeg', 'jpg', 'png'].includes(suffix?.toLowerCase())
}
</script>
<style lang='scss'>
.app-main {
height: 100vh;
width: 100%;
position: relative;
overflow: hidden;
background-color: #F8F8F8;
}
.app-breadcrumb.el-breadcrumb {
width: 1200px;
margin: 0 auto;
height: 44px;
line-height: 44px;
font-size: 18px;
background: #f8f8f8;
.el-breadcrumb__item {
.el-breadcrumb__separator {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #000000 !important;
margin: 0 9px;
}
}
.no-redirect {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #000000;
cursor: text;
}
.link-redirect {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #0090FF;
cursor: text;
text-decoration: underline;
text-underline-offset: 4px;
}
}
.clearBoth {
clear: both;
}
.rootContainer {
width: 1200px;
margin: 0 auto;
height: calc(100vh - 216px);
overflow-y: auto;
overflow-x: hidden;
background: #ffffff;
}
.el-card {
border: none;
}
.el-card__header {
min-height: 50px;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 20px;
text-align: left;
color: #000000;
border-bottom: 1px solid #DCDCDC;
box-sizing: border-box;
padding: 10px 20px 17px 20px;
}
.el-card__body {
padding: 20px 20px 0 20px !important;
}
.el-card.is-always-shadow {
box-shadow: none;
}
.headerTitle {
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 18px;
text-align: left;
color: #000000;
background: #e9e9e9;
padding: 6px 14px;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #DD9200;
}
.successText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #00B32A;
}
.dangerText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #E13434;
}
.applyFormContainer {
padding-top: 20px;
overflow: hidden;
}
.submitTool {
width: 100%;
height: 76px;
position: absolute;
top: calc(100% - 76px);
background: #ffffff;
box-shadow: 1px 2px 10px 0 #93939333;
text-align: center;
line-height: 76px;
}
.cancelApplyBtn {
width: 100px;
height: 36px;
border-radius: 4px 4px 4px 4px;
background: #ea9f0e;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 16px;
text-align: center;
color: #FFFFFF;
}
.cancelApplyBtn:hover {
background: #ea9f0e;
color: #FFFFFF;
}
.submitApplyBtn {
width: 100px;
height: 36px;
border-radius: 4px 4px 4px 4px;
background: #4276d1;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 16px;
text-align: center;
color: #FFFFFF;
}
.submitApplyBtn:hover {
background: #4276d1;
color: #FFFFFF;
}
.myRow {
margin-left: 0 !important;
margin-right: 0 !important;
}
.el-form-item--default {
margin-bottom: 20px !important;
}
.el-form-item--label-left .el-form-item__label {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 16px;
text-align: left;
color: #787878;
padding: 0 10px 0 0;
}
.myFormItemLable {
padding-top: 22px;
}
.myFormItemLable .el-form-item__label {
font-family: Microsoft YaHei !important;
font-weight: 400 !important;
font-size: 16px !important;
text-align: left !important;
color: #787878 !important;
padding: 0 10px 0 60px;
}
.myFormItemLable .el-form-item__content {
font-family: Arial !important;
font-weight: 400 !important;
font-size: 18px !important;
text-align: left !important;
color: #000000 !important;
padding-left: 60px;
}
.el-form-item--label-left .el-form-item__content {
font-family: Arial;
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-form-item--label-top .el-form-item__label {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
text-align: left;
color: #666666;
}
.el-form-item--label-top .el-form-item__content {
font-family: Arial;
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-form-item--label-top .el-textarea__inner {
font-family: Arial;
font-weight: 400;
font-size: 18px;
color: #000000;
}
.el-input__inner {
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-select__wrapper {
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-form-item__error {
font-size: 16px;
}
.el-radio__inner {
width: 16px !important;
height: 16px !important;
}
.el-radio__label {
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.fileContainer {
width: 144px;
padding: 6px 20px 12px 20px;
text-align: center;
img {
width: 70px;
height: 70px;
}
}
.fileNameLable {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 16px;
color: #000000;
line-height: 16px !important;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>

View File

@ -5,21 +5,21 @@
<el-form :model="queryParams" ref="queryRef" :inline="true">
<el-row class="myRow">
<el-col :span="20">
<el-form-item label="部门" prop="deptId">
<el-select v-model="queryParams.deptId" placeholder="请选择" clearable style="width: 160px">
<el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" />
<el-form-item label="部门">
<el-tree-select v-model="queryParams.deptId" :data="enabledDeptOptions" clearable
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
placeholder="请选择部门" check-strictly style="width: 200px" />
</el-form-item>
<el-form-item label="属地">
<el-select v-model="queryParams.dependencyId" placeholder="请选择属地" clearable
style="width: 200px">
<el-option v-for="item in busDependencyData" :key="item.id" :label="item.dependencyName"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="属地" prop="deptId">
<el-select v-model="queryParams.deptId" placeholder="请选择" clearable style="width: 160px">
<el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" />
</el-select>
</el-form-item>
<el-form-item label="年度" prop="userName">
<el-date-picker v-model="queryParams.year" type="year" placeholder="请选择"
style="width: 140px" />
<el-form-item label="年度">
<el-date-picker v-model="queryParams.year" type="year" format="YYYY" value-format="YYYY"
placeholder="请选择" style="width: 140px" />
</el-form-item>
</el-col>
<el-col :span="4" style="text-align: right;">
@ -30,192 +30,146 @@
</el-form>
<div class="borderLine"></div>
<el-table :data="tableData" height="calc(100% - 126px)" style="width: 100%">
<el-table v-loading="loading" :data="tableData" height="calc(100% - 126px)" style="width: 100%">
<el-table-column label="序号" width="60">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="year" label="年度" width="80" />
<el-table-column prop="localityName" label="属地" width="130" />
<el-table-column prop="departmentName" label="部门" width="150" />
<el-table-column prop="jobNumber" label="问题描述" min-width="150"/>
<el-table-column prop="status" label="等级" width="120">
<el-table-column prop="year" label="年度" width="80" />
<el-table-column prop="dependencyName" label="属地" width="180" />
<el-table-column prop="deptName" label="部门" width="150" />
<el-table-column prop="remark" label="问题描述" min-width="350" />
<el-table-column prop="level" label="等级" width="120">
<template #default="scope">
<el-text v-if="scope.row.status == 0" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="scope.row.status == 1" type="success" class="successText">通过</el-text>
<el-text v-if="scope.row.status == 2" type="danger" class="dangerText">驳回</el-text>
<el-text v-if="scope.row.level == 1" type="success" class="successText">建议项</el-text>
<el-text v-if="scope.row.level == 2" type="info" class="infoinfoText">一般偏差</el-text>
<el-text v-if="scope.row.level == 3" type="danger" class="dangerText">主要偏差</el-text>
</template>
</el-table-column>
<el-table-column prop="startTime" label="计划完成时间" width="150">
<el-table-column prop="planDoneTime" label="计划完成时间" width="150">
<template #default="scope">
<span v-if="scope.row.startTime && scope.row.certificate"> {{ scope.row.startTime }}</span>
<span v-if="scope.row.planDoneTime"> {{ scope.row.planDoneTime }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="120">
<template #default="scope">
<el-text v-if="scope.row.status == 0" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="scope.row.status == 1" type="success" class="successText">通过</el-text>
<el-text v-if="scope.row.status == 2" type="danger" class="dangerText">驳回</el-text>
<el-text v-if="scope.row.state == 0" type="info" class="nomarlText">未整改</el-text>
<el-text v-if="scope.row.state == 1" type="info" class="nomarlText">待审核</el-text>
<el-text v-if="scope.row.state == 2" type="success" class="successText">已整改</el-text>
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="100">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.status != 0"
@click="handleView">查看</el-button>
<el-button type="primary" v-if="scope.row.status == 0" text class="replayTextBtn"
@click="handleApproval">审批</el-button>
<el-button type="primary" v-if="scope.row.state == 1" text class="replayTextBtn"
v-hasPermi="['examinerApproval:approval']"
@click="handleApproval(scope.row)">审批</el-button>
<el-button type="primary" v-else text class="replayTextBtn"
v-hasPermi="['examinerApproval:viewDetail']" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageIndex"
v-model:limit="queryParams.pageSize" @pagination="getBusReviewProblemPageList" />
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import Breadcrumb from '@/components/Breadcrumb'
import { deptTreeSelect } from "@/api/system/user"
import { getBusDependencyPage } from "@/api/system/dependency"
import { busReviewProblemPage } from "@/api/safetyReview"
const router = useRouter()
const total = ref(16)
const unfoldFlag = ref(false)
const rangeTime = ref([])
const queryParams = ref({
pageNum: 1,
pageIndex: 1,
pageSize: 10,
userName: undefined,
deptId: undefined,
qualification: undefined
dependencyId: undefined,
year: undefined
})
const tableData = [
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 1
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 2
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
]
const handleFlod = () => {
unfoldFlag.value = !unfoldFlag.value
const loading = ref(true)
const total = ref(0)
const tableData = ref([])
const { proxy } = getCurrentInstance()
//
onMounted(() => {
getDeptTree();
getBusDependencyData();
getBusReviewProblemPageList();
});
//
const busDependencyData = ref([])
//
const getBusDependencyData = () => {
getBusDependencyPage({
pageIndex: 1,
pageSize: 100,
}).then(response => {
if (response.code == 200) {
busDependencyData.value = response.data.list
}
})
}
//
const enabledDeptOptions = ref(undefined)
//
const getDeptTree = () => {
deptTreeSelect().then(res => {
enabledDeptOptions.value = filterDisabledDept(JSON.parse(JSON.stringify(res.data)))
})
}
/** 过滤禁用的部门 */
const filterDisabledDept = (deptList) => {
return deptList.filter(dept => {
if (dept.disabled) {
return false
}
if (dept.children && dept.children.length) {
dept.children = filterDisabledDept(dept.children)
}
return true
})
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1
getList()
queryParams.value.pageIndex = 1
getBusReviewProblemPageList()
}
/** 重置按钮操作 */
const resetQuery = () => {
dateRange.value = []
proxy.resetForm("queryRef")
queryParams.value.pageIndex = 1
queryParams.value.deptId = undefined
proxy.$refs.deptTreeRef.setCurrentKey(null)
queryParams.value.dependencyId = undefined
queryParams.value.year = undefined
handleQuery()
}
const getList = () => {
//
const getBusReviewProblemPageList = () => {
loading.value = true
busReviewProblemPage(queryParams.value).then(res => {
if (res.code == 200) {
tableData.value = res.data.list
total.value = res.data.total
}
loading.value = false
}).catch(() => {
loading.value = false
})
}
const handleView = () => {
router.push('/safetyReview/examinerApprovalForm')
const handleView = (record) => {
router.push('safetyReview/examinerDetailForm/' + record.id)
}
const handleApproval = () => {
router.push('/safetyReview/examinerApprovalForm')
const handleApproval = (record) => {
router.push('/safetyReview/examinerApprovalForm/' + record.id)
}
</script>
<style lang='scss'>
@ -263,6 +217,20 @@ const handleApproval = () => {
margin-right: 10px;
}
.nomarlText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #b3b2b0;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #DD9200;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;

View File

@ -0,0 +1,474 @@
<template>
<div class="app-page-container">
<el-breadcrumb class="app-breadcrumb" separator=">">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
<span v-if="index == levelList.length - 1" class="link-redirect">{{
item.title }}</span>
<span v-else class="no-redirect">{{ item.title }}</span>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
<div class="rootContainer clearBoth">
<el-card>
<template #header>
<div class="card-header">
<span>审批</span>
</div>
</template>
<el-form label-position="left">
<div class="headerTitle">问题描述</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="24">
<el-form-item label="">
{{ detailForm.remark }}
</el-form-item>
</el-col>
</el-row>
<el-row class="myRow" :gutter="20">
<el-col :span="5">
<el-form-item label="当前标签:" prop="targetQualification">
<el-text v-if="detailForm.level == 1" type="success"
class="successText">建议项</el-text>
<el-text v-if="detailForm.level == 2" type="info"
class="infoinfoText">一般偏差</el-text>
<el-text v-if="detailForm.level == 3" type="danger"
class="dangerText">主要偏差</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="部门:" prop="departmentName">
{{ detailForm.deptName }}
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="属地:" prop="officeName">
{{ detailForm.dependencyName }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="状态:" prop="employeeNumber">
<el-text v-if="detailForm.state == 0" type="info" class="infoinfoText">未整改</el-text>
<el-text v-if="detailForm.state == 1" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="detailForm.state == 2" type="success"
class="successText">已整改</el-text>
<el-text v-if="detailForm.state == 9" type="danger" class="dangerText">驳回</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="创建时间:" prop="employeeEnglishName">
{{ detailForm.createTime }}
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-form label-position="top">
<div class="headerTitle">整改结果</div>
<div class="applyFormContainer">
<el-form-item label="附件:" prop="targetQualification">
<template v-for="itemFile in docUploadList">
<div class="fileContainer">
<img v-if="isImageFile(itemFile.suffix)" :src="itemFile.url" class="avatar" />
<img v-else-if="itemFile.suffix == 'doc' || itemFile.suffix == 'docx'"
:src="iconDoc" class="avatar" />
<img v-else-if="itemFile.suffix == 'xls' || itemFile.suffix == 'xlsx'"
:src="iconXls" class="avatar" />
<img v-else-if="itemFile.suffix == 'ppt' || itemFile.suffix == 'pptx'"
:src="iconPpt" class="avatar" />
<img v-else-if="itemFile.suffix == 'zip'" :src="iconZip" class="avatar" />
<img v-else-if="itemFile.suffix == 'pdf'" :src="iconPdf" class="avatar" />
<img v-else-if="itemFile.suffix == 'mp3'" :src="iconVideo" class="avatar" />
<img v-else-if="itemFile.suffix == 'mp4'" :src="iconMove" class="avatar" />
<img v-else-if="itemFile.suffix == 'txt'" :src="iconTxt" class="avatar" />
<img v-else :src="iconOther" class="avatar" />
<div class="fileNameLable">{{ itemFile.name }}</div>
</div>
</template>
</el-form-item>
<el-form-item label="整改描述:" prop="targetQualification">
{{ detailForm.correctionRemark }}
</el-form-item>
</div>
</el-form>
<!-- <el-form ref="ruleFormRef" :model="detailForm" :rules="rules" label-position="top">
<div class="headerTitle">审批信息</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="审批结果" prop="state">
<el-radio-group v-model="detailForm.state" @change="handleApplyStateChange">
<el-radio value="9">驳回</el-radio>
<el-radio value="2">通过</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="审批意见" prop="checkRemark">
<el-input v-model="detailForm.checkRemark" style="width: 100%" :rows="5"
type="textarea" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
</div>
</el-form> -->
</el-card>
</div>
<!-- <div class="submitTool">
<el-button class="cancelApplyBtn" @click="handleCancel">取消</el-button>
<el-button class="submitApplyBtn" @click="handleSubmit">提交</el-button>
</div> -->
</div>
</template>
<script setup>
import { onMounted, ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import iconDoc from '@/assets/images/iconDoc.png'
import iconOther from '@/assets/images/iconOther.png'
import iconPdf from '@/assets/images/iconPdf.png'
import iconVideo from '@/assets/images/iconVideo.png'
import iconXls from '@/assets/images/iconXls.png'
import iconZip from '@/assets/images/iconZip.png'
import iconMove from '@/assets/images/iconMove.png'
import iconTxt from '@/assets/images/iconTxt.png'
import iconPpt from '@/assets/images/iconPpt.png'
import { escBusReviewProblemDetail } from "@/api/safetyReview"
const router = useRouter()
const route = useRoute()
const levelList = ref([
{ title: '高压安全审查', path: '/safetyReview' },
{ title: 'ESC任务', path: '/safetyReview/examinerEscTask' },
{ title: '问题详情', path: '/safetyReview/examinerEscViewProblem' }
])
//
const docUploadList = ref([])
const baseUrl = import.meta.env.VITE_APP_BASE_API
const { proxy } = getCurrentInstance()
const data = reactive({
detailForm: {},
rules: {
state: [{ required: true, message: "审批结果不能为空", trigger: "change" }],
checkRemark: [{ required: true, message: "审批意见不能为空", trigger: "change" }],
},
})
const { detailForm, rules } = toRefs(data)
//
onMounted(() => {
const id = route.params && route.params.Id
if (id) {
console.log('接收id', id)
// detailForm.value.id = id
getDetailInfo(id)
}
});
//
const getDetailInfo = (id) => {
escBusReviewProblemDetail(id).then(res => {
if (res.code == 200) {
detailForm.value = res.data
docUploadList.value = res.data.fileContent
? JSON.parse(res.data.fileContent)
: []
}
})
}
//
const isImageFile = (suffix) => {
return ['jpeg', 'jpg', 'png'].includes(suffix?.toLowerCase())
}
</script>
<style lang='scss'>
.app-main {
height: 100vh;
width: 100%;
position: relative;
overflow: hidden;
background-color: #F8F8F8;
}
.app-breadcrumb.el-breadcrumb {
width: 1200px;
margin: 0 auto;
height: 44px;
line-height: 44px;
font-size: 18px;
background: #f8f8f8;
.el-breadcrumb__item {
.el-breadcrumb__separator {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #000000 !important;
margin: 0 9px;
}
}
.no-redirect {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #000000;
cursor: text;
}
.link-redirect {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #0090FF;
cursor: text;
text-decoration: underline;
text-underline-offset: 4px;
}
}
.clearBoth {
clear: both;
}
.rootContainer {
width: 1200px;
margin: 0 auto;
height: calc(100vh - 216px);
overflow-y: auto;
overflow-x: hidden;
background: #ffffff;
}
.el-card {
border: none;
}
.el-card__header {
min-height: 50px;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 20px;
text-align: left;
color: #000000;
border-bottom: 1px solid #DCDCDC;
box-sizing: border-box;
padding: 10px 20px 17px 20px;
}
.el-card__body {
padding: 20px 20px 0 20px !important;
}
.el-card.is-always-shadow {
box-shadow: none;
}
.headerTitle {
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 18px;
text-align: left;
color: #000000;
background: #e9e9e9;
padding: 6px 14px;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #DD9200;
}
.successText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #00B32A;
}
.dangerText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #E13434;
}
.applyFormContainer {
padding-top: 20px;
overflow: hidden;
}
.submitTool {
width: 100%;
height: 76px;
position: absolute;
top: calc(100% - 76px);
background: #ffffff;
box-shadow: 1px 2px 10px 0 #93939333;
text-align: center;
line-height: 76px;
}
.cancelApplyBtn {
width: 100px;
height: 36px;
border-radius: 4px 4px 4px 4px;
background: #ea9f0e;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 16px;
text-align: center;
color: #FFFFFF;
}
.cancelApplyBtn:hover {
background: #ea9f0e;
color: #FFFFFF;
}
.submitApplyBtn {
width: 100px;
height: 36px;
border-radius: 4px 4px 4px 4px;
background: #4276d1;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 16px;
text-align: center;
color: #FFFFFF;
}
.submitApplyBtn:hover {
background: #4276d1;
color: #FFFFFF;
}
.myRow {
margin-left: 0 !important;
margin-right: 0 !important;
}
.el-form-item--default {
margin-bottom: 20px !important;
}
.el-form-item--label-left .el-form-item__label {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 16px;
text-align: left;
color: #787878;
padding: 0 10px 0 0;
}
.myFormItemLable {
padding-top: 22px;
}
.myFormItemLable .el-form-item__label {
font-family: Microsoft YaHei !important;
font-weight: 400 !important;
font-size: 16px !important;
text-align: left !important;
color: #787878 !important;
padding: 0 10px 0 60px;
}
.myFormItemLable .el-form-item__content {
font-family: Arial !important;
font-weight: 400 !important;
font-size: 18px !important;
text-align: left !important;
color: #000000 !important;
padding-left: 60px;
}
.el-form-item--label-left .el-form-item__content {
font-family: Arial;
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-form-item--label-top .el-form-item__label {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
text-align: left;
color: #666666;
}
.el-form-item--label-top .el-form-item__content {
font-family: Arial;
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-form-item--label-top .el-textarea__inner {
font-family: Arial;
font-weight: 400;
font-size: 18px;
color: #000000;
}
.el-input__inner {
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-select__wrapper {
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.el-form-item__error {
font-size: 16px;
}
.el-radio__inner {
width: 16px !important;
height: 16px !important;
}
.el-radio__label {
font-weight: 400;
font-size: 18px;
text-align: left;
color: #000000;
}
.fileContainer {
width: 144px;
padding: 6px 20px 12px 20px;
text-align: center;
img {
width: 70px;
height: 70px;
}
}
.fileNameLable {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 16px;
color: #000000;
line-height: 16px !important;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>

View File

@ -16,54 +16,61 @@
<span>问题整改</span>
</div>
</template>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="left">
<el-form label-position="left">
<div class="headerTitle">问题描述</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="24">
<el-form-item label="">
问题描述问题描述问题问题描述问题描述问题描述问题描述问题问题描述问题描述问题描述问题描述问题问题描题问题描
述问题描述问题描述问题描述问题问题描述问题描述问题描述问题描述问题描述问题问题描题问题描述问题描述问题描
述问题描述问题问题描述
{{ detailForm.remark }}
</el-form-item>
</el-col>
</el-row>
<el-row class="myRow" :gutter="20">
<el-col :span="5">
<el-form-item label="当前标签:" prop="targetQualification">
一般偏差
<el-text v-if="detailForm.level == 1" type="success"
class="successText">建议项</el-text>
<el-text v-if="detailForm.level == 2" type="info"
class="infoinfoText">一般偏差</el-text>
<el-text v-if="detailForm.level == 3" type="danger"
class="dangerText">主要偏差</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="部门:" prop="departmentName">
XXXX部门
{{ detailForm.deptName }}
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="属地:" prop="officeName">
XXX属地
{{ detailForm.dependencyName }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="状态:" prop="employeeNumber">
未整改
<el-text v-if="detailForm.state == 0" type="info" class="infoinfoText">未整改</el-text>
<el-text v-if="detailForm.state == 1" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="detailForm.state == 2" type="success"
class="successText">已整改</el-text>
<el-text v-if="detailForm.state == 9" type="danger" class="dangerText">驳回</el-text>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="创建时间:" prop="employeeEnglishName">
2024-12-24 14:23
{{ detailForm.createTime }}
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="top">
<el-form ref="ruleFormRef" :model="detailForm" :rules="rules" label-position="top">
<div class="headerTitle">整改结果</div>
<div class="applyFormContainer">
<el-form-item label="附件:" prop="targetQualification">
<template v-if="fileList.length > 0">
<div v-for="itemFile in fileList" class="image-wrapper">
<img v-if="isImageFile(itemFile.suffix)" :src="fileList[0].url"
<el-form-item label="附件:" :prop="docUploadList.length == 0 ? 'fileContent' : null">
<template v-if="docUploadList.length > 0">
<div v-for="itemFile in docUploadList" class="image-wrapper">
<img v-if="isImageFile(itemFile.suffix)" :src="itemFile.url"
class="avatar viewFile" />
<img v-else-if="itemFile.suffix == 'doc' || itemFile.suffix == 'docx'"
:src="iconDoc" class="avatar viewFile" />
@ -88,16 +95,15 @@
</div>
</template>
<el-upload action="#" :http-request="requestUpload" list-type="picture-card"
:file-list="fileList" :on-change="handleChange" :show-file-list="false"
:before-upload="beforeUpload">
:show-file-list="false">
<el-icon class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
<el-form-item label="整改描述:" prop="targetQualification">
<el-input v-model="textarea" style="width: 100%" :rows="5" type="textarea"
placeholder="请输入" />
<el-form-item label="整改描述:" prop="correctionRemark">
<el-input v-model="detailForm.correctionRemark" style="width: 100%" :rows="5"
type="textarea" placeholder="请输入" />
</el-form-item>
</div>
@ -113,7 +119,7 @@
</template>
<script setup>
import { reactive } from 'vue'
import { onMounted, ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { uploadFile } from "@/api/qualification/myQualifications"
import iconDoc from '@/assets/images/iconDoc.png'
@ -125,82 +131,84 @@ import iconZip from '@/assets/images/iconZip.png'
import iconMove from '@/assets/images/iconMove.png'
import iconTxt from '@/assets/images/iconTxt.png'
import iconPpt from '@/assets/images/iconPpt.png'
import { escBusReviewProblemDetail, escCorrection } from "@/api/safetyReview"
const router = useRouter()
const route = useRoute()
const levelList = ref([
{ title: '高压安全审查', path: '/safetyReview' },
{ title: 'ESC任务', path: '/safetyReview/examinerEscTask' },
{ title: '问题整改', path: '/safetyReview/examinerEscTask/escTaskForm' }
])
const fileList = ref([])
//
const docUploadList = ref([])
const baseUrl = import.meta.env.VITE_APP_BASE_API
const { proxy } = getCurrentInstance()
const data = reactive({
ruleForm: {},
detailForm: {},
rules: {
targetQualification: [{ required: true, message: "目标资质不能为空", trigger: "change" }],
employeeNumber: [{ required: true, message: "员工工号不能为空", trigger: "blur" }],
employeeChineseName: [{ required: true, message: "员工姓名(中文)不能为空", trigger: "blur" }],
employeeEnglishName: [{ required: true, message: "员工姓名(英文)", trigger: "blur" }],
departmentName: [{ required: true, message: "部门不能为空", trigger: "change" }],
officeName: [{ required: true, message: "科室不能为空", trigger: "change" }],
localityName: [{ required: true, message: "属地不能为空", trigger: "change" }],
localityManager: [{ required: true, message: "属地ESC不能为空", trigger: "blur" }],
fileContent: [{ required: true, message: "整改附件不能为空", trigger: "change" }],
correctionRemark: [{ required: true, message: "整改描述不能为空", trigger: "change" }],
},
})
const tableData = [
{
name: '提交申请',
approvalResult: '-',
approvalTime: '2016-05-03'
},
{
name: 'ESC审批',
approvalResult: '同意',
approvalTime: '2016-05-08'
},
]
const { detailForm, rules } = toRefs(data)
//
onMounted(() => {
const id = route.params && route.params.Id
if (id) {
console.log('接收id', id)
// detailForm.value.id = id
getDetailInfo(id)
}
});
//
const getDetailInfo = (id) => {
escBusReviewProblemDetail(id).then(res => {
if (res.code == 200) {
detailForm.value = res.data
docUploadList.value = res.data.fileContent
? JSON.parse(res.data.fileContent)
: []
}
})
}
//
const isImageFile = (suffix) => {
return ['jpeg', 'jpg', 'png'].includes(suffix?.toLowerCase())
}
const { ruleForm, rules } = toRefs(data)
//
const requestUpload = async (options) => {
const requestUpload = (options) => {
const { file } = options
const formData = new FormData()
formData.append('file', file)
try {
const res = await uploadFile(formData)
if (res.code === 200) {
fileList.value.push({
name: res.originalFilename,
url: baseUrl + res.fileName,
suffix: res.suffix
})
}
uploadFile(formData).then(res => {
if (res.code === 200) {
docUploadList.value.push({
name: res.originalFilename,
url: baseUrl + res.fileName,
suffix: res.suffix
})
}
})
} catch (error) {
console.error('上传失败:', error)
}
}
//
const beforeUpload = (file) => {
return true
}
//
const handleChange = (file, files) => {
//
// fileList
// fileList.value = []
}
//
//
const handleRemoveImage = (fileInfo) => {
docUploadList.value = docUploadList.value.filter(
item => item.name != fileInfo.name
);
}
const handleCancel = () => {
proxy.resetForm("ruleFormRef")
@ -211,24 +219,17 @@ const handleCancel = () => {
const handleSubmit = () => {
proxy.$refs["ruleFormRef"].validate(valid => {
if (valid) {
router.push({
path: '/safetyReview/examinerEscTask'
if (docUploadList.value.length == 0) {
proxy.$modal.msgWarning("请上传整改附件")
return false
}
detailForm.value.fileContent = JSON.stringify(docUploadList.value)
escCorrection(detailForm.value).then(res => {
proxy.$modal.msgSuccess("提交成功")
router.push({
path: '/safetyReview/examinerEscTask'
})
})
// if (form.value.roleId != undefined) {
// form.value.menuIds = getMenuAllCheckedKeys()
// updateRole(form.value).then(response => {
// proxy.$modal.msgSuccess("")
// open.value = false
// getList()
// })
// } else {
// form.value.menuIds = getMenuAllCheckedKeys()
// addRole(form.value).then(response => {
// proxy.$modal.msgSuccess("")
// open.value = false
// getList()
// })
// }
}
})
}
@ -326,6 +327,13 @@ const handleSubmit = () => {
padding: 6px 14px;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #DD9200;
}
.successText {
font-family: Microsoft YaHei;
font-weight: 400;
@ -533,7 +541,7 @@ const handleSubmit = () => {
overflow: hidden;
}
.avatar {
.avatar {
object-fit: cover;
}

View File

@ -5,21 +5,21 @@
<el-form :model="queryParams" ref="queryRef" :inline="true">
<el-row class="myRow">
<el-col :span="20">
<el-form-item label="部门" prop="deptId">
<el-select v-model="queryParams.deptId" placeholder="请选择" clearable style="width: 160px">
<el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" />
<el-form-item label="部门">
<el-tree-select v-model="queryParams.deptId" :data="enabledDeptOptions" clearable
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
placeholder="请选择部门" check-strictly style="width: 200px" />
</el-form-item>
<el-form-item label="属地">
<el-select v-model="queryParams.dependencyId" placeholder="请选择属地" clearable
style="width: 200px">
<el-option v-for="item in busDependencyData" :key="item.id" :label="item.dependencyName"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="属地" prop="deptId">
<el-select v-model="queryParams.deptId" placeholder="请选择" clearable style="width: 160px">
<el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" />
</el-select>
</el-form-item>
<el-form-item label="年度" prop="userName">
<el-date-picker v-model="queryParams.year" type="year" placeholder="请选择"
style="width: 140px" />
<el-form-item label="年度">
<el-date-picker v-model="queryParams.year" type="year" format="YYYY" value-format="YYYY"
placeholder="请选择" style="width: 140px" />
</el-form-item>
</el-col>
<el-col :span="4" style="text-align: right;">
@ -30,192 +30,147 @@
</el-form>
<div class="borderLine"></div>
<el-table :data="tableData" height="calc(100% - 126px)" style="width: 100%">
<el-table v-loading="loading" :data="tableData" height="calc(100% - 126px)" style="width: 100%">
<el-table-column label="序号" width="60">
<template #default="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="year" label="年度" width="80" />
<el-table-column prop="localityName" label="属地" width="130" />
<el-table-column prop="departmentName" label="部门" width="150" />
<el-table-column prop="jobNumber" label="问题描述" min-width="150"/>
<el-table-column prop="status" label="等级" width="120">
<el-table-column prop="year" label="年度" width="80" />
<el-table-column prop="dependencyName" label="属地" width="180" />
<el-table-column prop="deptName" label="部门" width="150" />
<el-table-column prop="remark" label="问题描述" min-width="350" />
<el-table-column prop="level" label="等级" width="120">
<template #default="scope">
<el-text v-if="scope.row.status == 0" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="scope.row.status == 1" type="success" class="successText">通过</el-text>
<el-text v-if="scope.row.status == 2" type="danger" class="dangerText">驳回</el-text>
<el-text v-if="scope.row.level == 1" type="success" class="successText">建议项</el-text>
<el-text v-if="scope.row.level == 2" type="info" class="infoinfoText">一般偏差</el-text>
<el-text v-if="scope.row.level == 3" type="danger" class="dangerText">主要偏差</el-text>
</template>
</el-table-column>
<el-table-column prop="startTime" label="计划完成时间" width="150">
<el-table-column prop="planDoneTime" label="计划完成时间" width="150">
<template #default="scope">
<span v-if="scope.row.startTime && scope.row.certificate"> {{ scope.row.startTime }}</span>
<span v-if="scope.row.planDoneTime"> {{ scope.row.planDoneTime }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="120">
<template #default="scope">
<el-text v-if="scope.row.status == 0" type="info" class="infoinfoText">待审核</el-text>
<el-text v-if="scope.row.status == 1" type="success" class="successText">通过</el-text>
<el-text v-if="scope.row.status == 2" type="danger" class="dangerText">驳回</el-text>
<el-text v-if="scope.row.state == 0" type="info" class="nomarlText">未整改</el-text>
<el-text v-if="scope.row.state == 1" type="info" class="nomarlText">待审核</el-text>
<el-text v-if="scope.row.state == 2" type="success" class="successText">已整改</el-text>
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="100">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.status != 0"
@click="handleView">查看</el-button>
<el-button type="primary" v-if="scope.row.status == 0" text class="replayTextBtn"
@click="handleApproval">审批</el-button>
<el-button type="primary" v-if="scope.row.state == 0 || scope.row.state == 9" text
class="replayTextBtn" v-hasPermi="['examinerEscTask:correction']" @click="handleCorrection(scope.row)">立即整改</el-button>
<el-button type="primary" v-if="scope.row.state == 1 || scope.row.state == 2" text
class="replayTextBtn" v-hasPermi="['examinerEscTask:viewDetail']" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageIndex"
v-model:limit="queryParams.pageSize" @pagination="getEscReviewProblemPageList" />
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import Breadcrumb from '@/components/Breadcrumb'
import { deptTreeSelect } from "@/api/system/user"
import { getBusDependencyPage } from "@/api/system/dependency"
import { escReviewProblemPageList } from "@/api/safetyReview"
const router = useRouter()
const total = ref(16)
const unfoldFlag = ref(false)
const rangeTime = ref([])
const queryParams = ref({
pageNum: 1,
pageIndex: 1,
pageSize: 10,
userName: undefined,
deptId: undefined,
qualification: undefined
dependencyId: undefined,
year: undefined
})
const tableData = [
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 1
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 2
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
{
localityName: 'XXX属地',
departmentName: 'XXX部门',
officeName: 'XXX科室',
jobNumber: '3523213',
name: '赵丽娟',
curQualification: '-',
objectiveQualification: 'SH',
status: 0
},
]
const handleFlod = () => {
unfoldFlag.value = !unfoldFlag.value
const loading = ref(true)
const total = ref(0)
const tableData = ref([])
const { proxy } = getCurrentInstance()
//
onMounted(() => {
getDeptTree();
getBusDependencyData();
getEscReviewProblemPageList();
});
//
const busDependencyData = ref([])
//
const getBusDependencyData = () => {
getBusDependencyPage({
pageIndex: 1,
pageSize: 100,
}).then(response => {
if (response.code == 200) {
busDependencyData.value = response.data.list
}
})
}
//
const enabledDeptOptions = ref(undefined)
//
const getDeptTree = () => {
deptTreeSelect().then(res => {
enabledDeptOptions.value = filterDisabledDept(JSON.parse(JSON.stringify(res.data)))
})
}
/** 过滤禁用的部门 */
const filterDisabledDept = (deptList) => {
return deptList.filter(dept => {
if (dept.disabled) {
return false
}
if (dept.children && dept.children.length) {
dept.children = filterDisabledDept(dept.children)
}
return true
})
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1
getList()
queryParams.value.pageIndex = 1
getEscReviewProblemPageList()
}
/** 重置按钮操作 */
const resetQuery = () => {
dateRange.value = []
proxy.resetForm("queryRef")
queryParams.value.pageIndex = 1
queryParams.value.deptId = undefined
proxy.$refs.deptTreeRef.setCurrentKey(null)
queryParams.value.dependencyId = undefined
queryParams.value.year = undefined
handleQuery()
}
const getList = () => {
const getEscReviewProblemPageList = () => {
loading.value = true
escReviewProblemPageList(queryParams.value).then(res => {
if (res.code == 200) {
tableData.value = res.data.list
total.value = res.data.total
}
loading.value = false
}).catch(() => {
loading.value = false
})
}
const handleView = (record) => {
router.push('/safetyReview/escTaskDetailForm/' + record.id)
}
const handleView = () => {
router.push('/safetyReview/escTaskForm')
}
const handleApproval = () => {
router.push('/safetyReview/escTaskForm')
const handleCorrection = (record) => {
router.push('/safetyReview/escTaskForm/' + record.id)
}
</script>
<style lang='scss'>
@ -263,6 +218,13 @@ const handleApproval = () => {
margin-right: 10px;
}
.nomarlText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #b3b2b0;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;

View File

@ -28,7 +28,7 @@
</el-col>
</el-row>
</el-form>
<div class="optionBtn">
<div class="optionBtn" v-hasPermi="['examinerTasks:add']">
<el-button type="primary" class="qualificationApplyBtn" @click="handleOpenAddForm">
<img :src="addIcon" class="custom-icon" />
新增
@ -61,9 +61,11 @@
</el-table-column>
<el-table-column label="操作" fixed="right" width="130">
<template #default="scope">
<el-button type="primary" text class="replayTextBtn" @click="handleEdit(scope.row)">编辑</el-button>
<el-button type="primary" text class="replayTextBtn" v-hasPermi="['examinerTasks:edit']"
@click="handleEdit(scope.row)">编辑</el-button>
<el-divider direction="vertical" class="verticalLine" />
<el-button type="primary" text class="deleteTextBtn" @click="handleDelete(scope.row)">删除</el-button>
<el-button type="primary" text class="deleteTextBtn" v-hasPermi="['examinerTasks:delete']"
@click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -127,12 +127,12 @@
style="width: 100%;" />
</template>
</el-table-column>
<el-table-column prop="expireTime" label="状态" width="100">
<el-table-column prop="state" label="状态" width="100">
<template #default="scope">
<el-text v-if="scope.row.state == 0" type="info" class="nomarlText">未整改</el-text>
<el-text v-if="scope.row.state == 1" type="info" class="nomarlText">待审核</el-text>
<el-text v-if="scope.row.state == 2" type="success" class="successText">已整改</el-text>
<el-text v-if="scope.row.state == 3" type="danger" class="dangerText">驳回</el-text>
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
@ -140,14 +140,14 @@
<div v-show="!scope.row.editFlag">
<el-button link type="primary" @click="handleEditClick(scope.row, scope.$index)"
v-hasPermi="['system:config:edit']">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-divider direction="vertical" class="verticalLine" />
<el-button link type="primary" @click="handleRemove(scope.$index)"
v-hasPermi="['system:config:remove']">删除</el-button>
</div>
<div v-show="scope.row.editFlag">
<el-button link type="primary" @click="handleSaveClick(scope.row, scope.$index)"
v-hasPermi="['system:config:edit']">保存</el-button>
<el-divider direction="vertical"></el-divider>
<el-divider direction="vertical" class="verticalLine" />
<el-button link type="primary" @click="handleCancelClick(scope.row, scope.$index)"
v-hasPermi="['system:config:remove']">取消</el-button>
</div>
@ -730,4 +730,8 @@ const handleSubmit = () => {
color: #BABDC0;
border: 1px dashed #BABDC0;
}
.verticalLine {
border-left: 1px solid #0090ff !important;
}
</style>