更新保安公司送培
This commit is contained in:
@ -8,6 +8,7 @@
|
|||||||
:key="item.value"
|
:key="item.value"
|
||||||
:index="index"
|
:index="index"
|
||||||
:class="item.elTagType"
|
:class="item.elTagType"
|
||||||
|
:style="{'color': props.color}"
|
||||||
>{{ item.label }}</span>
|
>{{ item.label }}</span>
|
||||||
<el-tag
|
<el-tag
|
||||||
v-else
|
v-else
|
||||||
@ -33,6 +34,10 @@ const props = defineProps({
|
|||||||
type: Array,
|
type: Array,
|
||||||
default: null
|
default: null
|
||||||
},
|
},
|
||||||
|
color: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
tag: false,
|
tag: false,
|
||||||
value: [Number, String, Array]
|
value: [Number, String, Array]
|
||||||
});
|
});
|
||||||
|
|||||||
@ -212,6 +212,24 @@ export const privateRoutes = [
|
|||||||
icon: "personnel"
|
icon: "personnel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/trainingCompanyNjgl",
|
||||||
|
name: "trainingCompanyNjgl",
|
||||||
|
component: () => import("@/views/Training/trainingCompanyNjgl/index"),
|
||||||
|
meta: {
|
||||||
|
title: "公司保安员年检管理",
|
||||||
|
icon: "personnel"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/trainingCompanyNjsp",
|
||||||
|
name: "trainingCompanyNjsp",
|
||||||
|
component: () => import("@/views/Training/trainingCompanyNjsp/index"),
|
||||||
|
meta: {
|
||||||
|
title: "年检签到",
|
||||||
|
icon: "personnel"
|
||||||
|
}
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -11,9 +11,6 @@
|
|||||||
<!-- 0-待审核 1-通过 2-驳回 -->
|
<!-- 0-待审核 1-通过 2-驳回 -->
|
||||||
{{ detail.shzt == 0 ? '待审核' : detail.shzt == 1 ? '通过' : '驳回' }}
|
{{ detail.shzt == 0 ? '待审核' : detail.shzt == 1 ? '通过' : '驳回' }}
|
||||||
</li>
|
</li>
|
||||||
<!-- <li class="tag_item">驳回</li>
|
|
||||||
<li class="tag_item">通过</li>
|
|
||||||
<li class="tag_item">待审核</li> -->
|
|
||||||
</ul>
|
</ul>
|
||||||
<!-- 内容描述 -->
|
<!-- 内容描述 -->
|
||||||
<el-descriptions class="desc" :column="3" border label-width="200px">
|
<el-descriptions class="desc" :column="3" border label-width="200px">
|
||||||
@ -23,18 +20,28 @@
|
|||||||
|
|
||||||
<el-descriptions-item label="身份证号码">{{ detail.sfzhm }}</el-descriptions-item>
|
<el-descriptions-item label="身份证号码">{{ detail.sfzhm }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="电话">{{ detail.dh }}</el-descriptions-item>
|
<el-descriptions-item label="电话">{{ detail.dh }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="性别">{{ detail.xb }}</el-descriptions-item>
|
<el-descriptions-item label="性别">
|
||||||
<el-descriptions-item label="民族">{{ detail.mz }}</el-descriptions-item>
|
<DictTag :value="detail.xb" :tag="false" :options="props.dic.D_BZ_XB" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="民族">
|
||||||
|
<DictTag :value="detail.mz" :tag="false" :options="props.dic.D_BZ_MZ" />
|
||||||
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="籍贯">{{ detail.jg }}</el-descriptions-item>
|
<el-descriptions-item label="籍贯">{{ detail.jg }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="文化程度">{{ detail.whcd }}</el-descriptions-item>
|
<el-descriptions-item label="文化程度">
|
||||||
|
<DictTag :value="detail.whcd" :tag="false" :options="props.dic.D_BZ_WHCD" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="证书编号">{{ detail.zsbh }}</el-descriptions-item>
|
<el-descriptions-item label="证书编号">{{ detail.zsbh }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="上岗证号码">{{ detail.sgxkhm }}</el-descriptions-item>
|
<el-descriptions-item label="上岗证号码">{{ detail.sgxkhm }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="服务行业"> {{ detail.fwxy }}</el-descriptions-item>
|
<el-descriptions-item label="服务行业">
|
||||||
|
<DictTag :value="detail.fwxy" :tag="false" :options="props.dic.D_BAXX_SSHY" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="服务行业名称">{{ detail.fwxymc }}</el-descriptions-item>
|
<el-descriptions-item label="服务行业名称">{{ detail.fwxymc }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="入职时间">{{ detail.rzsj }}</el-descriptions-item>
|
<el-descriptions-item label="入职时间">{{ detail.rzsj }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="政治面貌"> {{ detail.zzmm }}</el-descriptions-item>
|
<el-descriptions-item label="政治面貌">
|
||||||
|
<DictTag :value="detail.zzmm" :tag="false" :options="props.dic.D_BZ_ZZMM" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="无犯罪记录证明">
|
<el-descriptions-item label="无犯罪记录证明">
|
||||||
<div class="img-grid one">
|
<div class="img-grid one">
|
||||||
|
|||||||
@ -2,13 +2,6 @@
|
|||||||
<div>
|
<div>
|
||||||
<el-dialog class="steps-dialog" title="审核" v-model="dialogForm" :close-on-click-modal="false" @close="dialogForm = false,formData = {}" width="420px">
|
<el-dialog class="steps-dialog" title="审核" v-model="dialogForm" :close-on-click-modal="false" @close="dialogForm = false,formData = {}" width="420px">
|
||||||
<el-form :model="formData" ref="formRef" :rules="rules" label-width="120px">
|
<el-form :model="formData" ref="formRef" :rules="rules" label-width="120px">
|
||||||
<el-form-item label="审核类型" prop="auditType">
|
|
||||||
<el-select v-model="formData.auditType" placeholder="请选择审核类型">
|
|
||||||
<el-option label="保安公司审核" value="bakk"></el-option>
|
|
||||||
<el-option label="培训公司审核" value="pxgs"></el-option>
|
|
||||||
<el-option label="公安局审核" value="gongan"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="是否通过" prop="auditStatus">
|
<el-form-item label="是否通过" prop="auditStatus">
|
||||||
<el-radio-group v-model="formData.auditStatus">
|
<el-radio-group v-model="formData.auditStatus">
|
||||||
<el-radio label="1">通过</el-radio>
|
<el-radio label="1">通过</el-radio>
|
||||||
@ -51,7 +44,8 @@ const submitForm = () =>{
|
|||||||
formRef.value.validate((valid) => {
|
formRef.value.validate((valid) => {
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
let params = { ...formData.value,ids:idsVal.value }
|
// // 保安公司审核 - bakk 培训公司审核 -- pxgs 公安局审核 -- gongan
|
||||||
|
let params = { ...formData.value,ids:idsVal.value,auditType:'bakk' }
|
||||||
qcckPost(params,"/mosty-base/bans/njxx/batchAudit").then((res) => {
|
qcckPost(params,"/mosty-base/bans/njxx/batchAudit").then((res) => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
ElMessage.success("操作成功");
|
ElMessage.success("操作成功");
|
||||||
|
|||||||
@ -3,7 +3,9 @@
|
|||||||
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
|
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
|
||||||
<div class="steps-body">
|
<div class="steps-body">
|
||||||
<el-steps direction="vertical" :active="active" :space="90">
|
<el-steps direction="vertical" :active="active" :space="90">
|
||||||
<el-step v-for="(item, idx) in steps" :key="item.title" :title="item.title" :description="idx === 0 ? item.time : ''" />
|
<el-step title="保安公司审核" :description="dataForm.bakkShsj || '未审核'" />
|
||||||
|
<el-step title="培训公司审核" :description="dataForm.pxgsShsj || '未审核'" />
|
||||||
|
<el-step title="公安局审核" :description="dataForm.gonganShsj || '未审核'" />
|
||||||
</el-steps>
|
</el-steps>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@ -11,18 +13,19 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
import { ref, defineExpose } from 'vue';
|
import { ref, defineExpose } from 'vue';
|
||||||
const dialogForm = ref(false);
|
const dialogForm = ref(false);
|
||||||
const pxgsData = ref()
|
const active = ref(0)
|
||||||
const active = ref(1)
|
const dataForm = ref({})
|
||||||
const steps = ref([
|
|
||||||
{ title: '保安公司审核', time: '2026-01-07 21:00' },
|
|
||||||
{ title: '培训公司审核', time: '2026-01-07 21:00' },
|
|
||||||
{ title: '公安局审核', time: '2026-01-07 21:00' },
|
|
||||||
])
|
|
||||||
const init = (row) => {
|
const init = (row) => {
|
||||||
pxgsData.value = row
|
let ids = [row.id]
|
||||||
dialogForm.value = true;
|
qcckPost(ids,"/mosty-base/bans/njxx/getAuditStatusList").then(res=>{
|
||||||
|
dialogForm.value = true;
|
||||||
|
let obj = res ? res[0] : {};
|
||||||
|
dataForm.value = obj;
|
||||||
|
active.value = Number(obj.currentAuditStage) - 1;
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
@ -102,4 +105,22 @@ defineExpose({
|
|||||||
::v-deep .is-finish .el-step__icon{
|
::v-deep .is-finish .el-step__icon{
|
||||||
background: #86b6f1;
|
background: #86b6f1;
|
||||||
}
|
}
|
||||||
|
::v-deep .el-dialog__close{
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
color: #fff;
|
||||||
|
svg{
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::v-deep .el-dialog__headerbtn{
|
||||||
|
top: auto;
|
||||||
|
bottom: -60px;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
color: #fff;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -21,8 +21,8 @@
|
|||||||
<template #fwxy="{ row }">
|
<template #fwxy="{ row }">
|
||||||
<DictTag :value="row.fwxy" :tag="false" :options="D_BAXX_SSHY" />
|
<DictTag :value="row.fwxy" :tag="false" :options="D_BAXX_SSHY" />
|
||||||
</template>
|
</template>
|
||||||
<template #shzt="{ row }">
|
<template #bakkShzt="{ row }">
|
||||||
<DictTag :value="row.shzt" :tag="false" :options="D_BA_SHZT" />
|
<DictTag :value="row.bakkShzt" :tag="false" :color="row.bakkShzt == 0 ? '#ff0000' : row.bakkShzt == 1 ? '#28EEBF' : '#FA3758'" :options="D_BA_SHZT" />
|
||||||
</template>
|
</template>
|
||||||
<template #sptz="{ row }">
|
<template #sptz="{ row }">
|
||||||
<DictTag :value="row.sptz" :tag="false" :options="D_BA_SPZT" />
|
<DictTag :value="row.sptz" :tag="false" :options="D_BA_SPZT" />
|
||||||
@ -30,9 +30,9 @@
|
|||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<!--currentAuditStage 当前审核阶段:1-保安公司审核阶段,2-培训公司审核阶段,3-公安局审核阶段,4-审核完成 -->
|
<!--currentAuditStage 当前审核阶段:1-保安公司审核阶段,2-培训公司审核阶段,3-公安局审核阶段,4-审核完成 -->
|
||||||
<el-link type="primary" link @click="onBatchAudit([row.id])">立即审核</el-link>
|
<el-link type="primary" link @click="onBatchAudit([row.id])" v-if="row.bakkShzt == 0">立即审核</el-link>
|
||||||
<el-link type="primary" link @click="addEdit('RefSteap', row)">审核流程</el-link>
|
<el-link type="primary" link @click="addEdit('RefSteap', row)">审核流程</el-link>
|
||||||
<el-link type="primary" link @click="handleItemSp([row.id])">送培</el-link>
|
<el-link type="primary" link @click="handleItemSp([row.id])" v-if="row.sptz == 0 && row.bakkShzt == 1">送培</el-link>
|
||||||
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
|
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
@ -42,7 +42,7 @@
|
|||||||
}"></Pages>
|
}"></Pages>
|
||||||
</div>
|
</div>
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<DetailForm ref="detailDiloag" :dict="{D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD}"/>
|
<DetailForm ref="detailDiloag" :dic="{D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD}"/>
|
||||||
<!-- 审核流程 -->
|
<!-- 审核流程 -->
|
||||||
<Steps ref="RefSteap" ></Steps>
|
<Steps ref="RefSteap" ></Steps>
|
||||||
<!-- 审核 -->
|
<!-- 审核 -->
|
||||||
@ -51,6 +51,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { getItem } from "@/utils/storage";
|
||||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import Pages from "@/components/aboutTable/Pages.vue";
|
import Pages from "@/components/aboutTable/Pages.vue";
|
||||||
@ -63,6 +64,7 @@ import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
|||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD } = proxy.$dict('D_BZ_ZZMM','D_BZ_XB','D_BZ_MZ','D_BA_SHZT','D_BAXX_SSHY','D_BA_SPZT','D_BZ_WHCD');
|
const { D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD } = proxy.$dict('D_BZ_ZZMM','D_BZ_XB','D_BZ_MZ','D_BA_SHZT','D_BAXX_SSHY','D_BA_SPZT','D_BZ_WHCD');
|
||||||
|
const userInfo = getItem('userInfo');
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
const RefSteap = ref();
|
const RefSteap = ref();
|
||||||
const shForm = ref();
|
const shForm = ref();
|
||||||
@ -86,7 +88,7 @@ const searchConfiger = ref([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "审核状态",
|
label: "审核状态",
|
||||||
prop: "shzt",
|
prop: "bakkShzt",
|
||||||
showType: "select",
|
showType: "select",
|
||||||
placeholder: "不限",
|
placeholder: "不限",
|
||||||
clearable: true,
|
clearable: true,
|
||||||
@ -129,7 +131,7 @@ const pageData = reactive({
|
|||||||
{ label: "服务行业", prop: "fwxy", showSolt: true },
|
{ label: "服务行业", prop: "fwxy", showSolt: true },
|
||||||
{ label: "入职时间", prop: "rzsj" },
|
{ label: "入职时间", prop: "rzsj" },
|
||||||
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
|
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
|
||||||
{ label: "审核状态", prop: "shzt", showSolt: true },
|
{ label: "审核状态", prop: "bakkShzt", showSolt: true },
|
||||||
{ label: "审核时间", prop: "shsj" },
|
{ label: "审核时间", prop: "shsj" },
|
||||||
{ label: "送培状态", prop: "sptz", showSolt: true }
|
{ label: "送培状态", prop: "sptz", showSolt: true }
|
||||||
]
|
]
|
||||||
@ -155,9 +157,12 @@ const changeSize = (val) => {
|
|||||||
// 获取列表
|
// 获取列表
|
||||||
const getList = () => {
|
const getList = () => {
|
||||||
pageData.tableConfiger.loading = true;
|
pageData.tableConfiger.loading = true;
|
||||||
|
|
||||||
const promes = {
|
const promes = {
|
||||||
...pageData.pageConfiger,
|
...pageData.pageConfiger,
|
||||||
...queryFrom.value,
|
...queryFrom.value,
|
||||||
|
ssbakk:userInfo.pxgs,
|
||||||
|
ssbakkId:userInfo.pxgsid
|
||||||
}
|
}
|
||||||
qcckPost(promes,'/mosty-base/bans/njxx/page').then(res => {
|
qcckPost(promes,'/mosty-base/bans/njxx/page').then(res => {
|
||||||
pageData.tableData = res.records || [];
|
pageData.tableData = res.records || [];
|
||||||
@ -172,17 +177,33 @@ const chooseData = (rows) => {
|
|||||||
selectedRows.value = Array.isArray(rows) ? rows : [];
|
selectedRows.value = Array.isArray(rows) ? rows : [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const onBatchAudit = (ids) => {
|
const onBatchAudit = (valIds) => {
|
||||||
if (!ids.length) return ElMessage.warning("请选择需要的数据");
|
let ids = [];
|
||||||
|
valIds.forEach(id =>{
|
||||||
|
let obj = pageData.tableData.find(it=>it.id == id);
|
||||||
|
if(obj && obj.bakkShzt == 0) ids.push(id);
|
||||||
|
});
|
||||||
|
if (!ids.length) return ElMessage.warning("请选择未审核的数据!该数据再审核状态下不能操作!");
|
||||||
shForm.value.init(ids);
|
shForm.value.init(ids);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 送培
|
// 送培
|
||||||
const handleItemSp = (ids) =>{
|
const handleItemSp = (valIds) =>{
|
||||||
|
let ids = [];
|
||||||
|
valIds.forEach(id =>{
|
||||||
|
let obj = pageData.tableData.find(it=>it.id == id);
|
||||||
|
if(obj && obj.sptz == 0 && obj.bakkShzt == 1) ids.push(id);
|
||||||
|
});
|
||||||
|
if (!ids.length) return ElMessage.warning("请选择未送培的数据!该数据已送培!");
|
||||||
proxy.$modal.confirm("是否确认送培?").then(() => {
|
proxy.$modal.confirm("是否确认送培?").then(() => {
|
||||||
qcckPost(ids,'/mosty-base/bans/njxx/sendTraining').then(res=>{
|
let params = {
|
||||||
ElMessage.success("送培成功");
|
ssbakk:userInfo.pxgs,
|
||||||
|
ssbakkId:userInfo.pxgsid,
|
||||||
|
ids:ids
|
||||||
|
}
|
||||||
|
qcckPost(params,'/mosty-base/bans/njxx/sendTraining').then(res=>{
|
||||||
getList()
|
getList()
|
||||||
|
ElMessage.success("送培成功");
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,75 +7,80 @@
|
|||||||
<div class="cntinfo">
|
<div class="cntinfo">
|
||||||
<!-- 标签 -->
|
<!-- 标签 -->
|
||||||
<ul class="tag-box">
|
<ul class="tag-box">
|
||||||
<li class="tag_item">驳回</li>
|
<li class="tag_item" :class="detail.pxgsShzt == 0 ? 'dsh_item' : detail.pxgsShzt == 1 ? 'tgg_item' : 'jtb_item'">
|
||||||
<li class="tag_item">通过</li>
|
<!-- 0-待审核 1-通过 2-驳回 -->
|
||||||
<li class="tag_item">待审核</li>
|
{{ detail.pxgsShzt == 0 ? '待审核' : detail.pxgsShzt == 1 ? '通过' : '驳回' }}
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<!-- 内容描述 -->
|
<!-- 内容描述 -->
|
||||||
<el-descriptions class="desc" :column="3" border label-width="200px">
|
<el-descriptions class="desc" :column="3" border label-width="200px">
|
||||||
<el-descriptions-item label="保安公司名称">{{ detail.companyName }}</el-descriptions-item>
|
<el-descriptions-item label="保安公司名称">{{ detail.ssbakk }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="年审年份">{{ detail.reviewYear }}</el-descriptions-item>
|
<el-descriptions-item label="年审年份">{{ detail.njnf }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="姓名">{{ detail.xm }}</el-descriptions-item>
|
<el-descriptions-item label="姓名">{{ detail.xm }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="身份证号码">{{ detail.sfzh }}</el-descriptions-item>
|
<el-descriptions-item label="身份证号码">{{ detail.sfzhm }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="电话">{{ detail.phone }}</el-descriptions-item>
|
<el-descriptions-item label="电话">{{ detail.dh }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="性别">{{ detail.sexText }}</el-descriptions-item>
|
<el-descriptions-item label="性别">
|
||||||
|
<DictTag :value="detail.xb" :tag="false" :options="props.dic.D_BZ_XB" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="民族">
|
||||||
|
<DictTag :value="detail.mz" :tag="false" :options="props.dic.D_BZ_MZ" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="籍贯">{{ detail.jg }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="文化程度">
|
||||||
|
<DictTag :value="detail.whcd" :tag="false" :options="props.dic.D_BZ_WHCD" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="民族">{{ detail.nationText }}</el-descriptions-item>
|
<el-descriptions-item label="证书编号">{{ detail.zsbh }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="籍贯">{{ detail.nativePlace }}</el-descriptions-item>
|
<el-descriptions-item label="上岗证号码">{{ detail.sgxkhm }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="文化程度">{{ detail.education }}</el-descriptions-item>
|
<el-descriptions-item label="服务行业">
|
||||||
|
<DictTag :value="detail.fwxy" :tag="false" :options="props.dic.D_BAXX_SSHY" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="证书编号">{{ detail.certificateNo }}</el-descriptions-item>
|
<el-descriptions-item label="服务行业名称">{{ detail.fwxymc }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="上岗证号码">{{ detail.workCardNo }}</el-descriptions-item>
|
<el-descriptions-item label="入职时间">{{ detail.rzsj }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="服务行业">{{ detail.serviceIndustry }}</el-descriptions-item>
|
<el-descriptions-item label="政治面貌">
|
||||||
|
<DictTag :value="detail.zzmm" :tag="false" :options="props.dic.D_BZ_ZZMM" />
|
||||||
<el-descriptions-item label="服务行业名称">{{ detail.serviceIndustryName }}</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="入职时间">{{ detail.entryDate }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="政治面貌">{{ detail.politicalStatus }}</el-descriptions-item>
|
|
||||||
|
|
||||||
<el-descriptions-item label="无犯罪记录证明">
|
<el-descriptions-item label="无犯罪记录证明">
|
||||||
<div class="img-grid one">
|
<div class="img-grid one">
|
||||||
<el-image
|
<el-image
|
||||||
v-for="(src, idx) in noCrimeUrls"
|
:src="baseUrl + detail.wfbjlzm"
|
||||||
:key="idx"
|
|
||||||
:src="src"
|
|
||||||
fit="cover"
|
fit="cover"
|
||||||
:preview-src-list="noCrimeUrls"
|
:preview-src-list='[baseUrl + detail.wfbjlzm]'
|
||||||
preview-teleported
|
preview-teleported
|
||||||
class="img"
|
class="img"
|
||||||
/>
|
/>
|
||||||
<div v-if="noCrimeUrls.length === 0" class="img-placeholder"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="体检报告">
|
<el-descriptions-item label="体检报告">
|
||||||
<div class="img-grid one">
|
<div class="img-grid one">
|
||||||
<el-image
|
<el-image
|
||||||
v-for="(src, idx) in medicalUrls"
|
:src="baseUrl + detail.tjbg"
|
||||||
:key="idx"
|
|
||||||
:src="src"
|
|
||||||
fit="cover"
|
fit="cover"
|
||||||
:preview-src-list="medicalUrls"
|
:preview-src-list='[baseUrl + detail.tjbg]'
|
||||||
preview-teleported
|
preview-teleported
|
||||||
class="img"
|
class="img"
|
||||||
/>
|
/>
|
||||||
<div v-if="medicalUrls.length === 0" class="img-placeholder"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="身份证正反面">
|
<el-descriptions-item label="身份证正反面">
|
||||||
<div class="img-grid two">
|
<div class="img-grid two">
|
||||||
<el-image
|
<el-image
|
||||||
v-for="(src, idx) in idCardUrls"
|
:src="baseUrl + detail.sfzzm"
|
||||||
:key="idx"
|
|
||||||
:src="src"
|
|
||||||
fit="cover"
|
fit="cover"
|
||||||
:preview-src-list="idCardUrls"
|
:preview-src-list='[baseUrl + detail.sfzzm]'
|
||||||
|
preview-teleported
|
||||||
|
class="img"
|
||||||
|
/>
|
||||||
|
<el-image
|
||||||
|
:src="baseUrl + detail.sfzfm"
|
||||||
|
fit="cover"
|
||||||
|
:preview-src-list='[baseUrl + detail.sfzfm]'
|
||||||
preview-teleported
|
preview-teleported
|
||||||
class="img"
|
class="img"
|
||||||
/>
|
/>
|
||||||
<template v-if="idCardUrls.length === 0">
|
|
||||||
<div class="img-placeholder"></div>
|
|
||||||
<div class="img-placeholder"></div>
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
||||||
@ -90,45 +95,29 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, defineEmits, getCurrentInstance } from 'vue';
|
import { ref, defineEmits } from 'vue';
|
||||||
const emit = defineEmits(["refresh"]);
|
const emit = defineEmits(["refresh"]);
|
||||||
const { proxy } = getCurrentInstance();
|
const baseUrl = '/bagl/mosty-base/minio/image/download'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dict: {
|
dic: {
|
||||||
default: [[]], //二维数组
|
default: [[]], //二维数组
|
||||||
type: Array
|
type: Array
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const dialogForm = ref(false);
|
const dialogForm = ref(false);
|
||||||
const listQuery = ref({});
|
const listQuery = ref({});
|
||||||
|
const detail = ref({})
|
||||||
|
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
const init = (type, row,) => {
|
const init = (type, row,) => {
|
||||||
dialogForm.value = true;
|
dialogForm.value = true;
|
||||||
const raw = row || {};
|
let obj = JSON.parse(JSON.stringify(row));
|
||||||
listQuery.value = {
|
let zj = obj.sfzzfmj.split(',');
|
||||||
...raw,
|
obj.sfzzm = [zj[0]];
|
||||||
companyName: raw.companyName || raw.dwmc || raw.gsmc || raw.bagsmc,
|
obj.sfzfm = [zj[1]];
|
||||||
reviewYear: raw.reviewYear || raw.njnd || raw.njYear || raw.nf || raw.year,
|
setTimeout(() => {
|
||||||
phone: raw.phone || raw.lxdh || raw.dh || raw.sjhm || raw.xssbrdh,
|
detail.value = obj;
|
||||||
sexText: raw.sexText || raw.xbText || raw.xb || raw.sex,
|
}, 1000);
|
||||||
nationText: raw.nationText || raw.mzText || raw.mz,
|
|
||||||
nativePlace: raw.nativePlace || raw.jg || raw.jgText,
|
|
||||||
education: raw.education || raw.whcd || raw.whcdText,
|
|
||||||
certificateNo: raw.certificateNo || raw.zsbh || raw.zsbhm || raw.zjbh,
|
|
||||||
workCardNo: raw.workCardNo || raw.sgzh || raw.sgzNumber,
|
|
||||||
serviceIndustry: raw.serviceIndustry || raw.fwhy || raw.fwhyText || raw.hy,
|
|
||||||
serviceIndustryName: raw.serviceIndustryName || raw.fwhymc || raw.hyName,
|
|
||||||
entryDate: raw.entryDate || raw.rzsj || raw.rzrq,
|
|
||||||
politicalStatus: raw.politicalStatus || raw.zzmm || raw.zzmmText,
|
|
||||||
auditTime: raw.auditTime || raw.shsj || raw.njsj,
|
|
||||||
rejectReason: raw.rejectReason || raw.bhyy || raw.bhReason || raw.reason,
|
|
||||||
issuingAuthority: raw.issuingAuthority || raw.fzjg,
|
|
||||||
issueDate: raw.issueDate || raw.fzrq,
|
|
||||||
noCrimeProof: raw.noCrimeProof || raw.wffzjlzm || raw.wffzjlzmId,
|
|
||||||
medicalReport: raw.medicalReport || raw.tjbg || raw.tjbgId,
|
|
||||||
idCardImages: raw.idCardImages || raw.sfzzf || raw.sfzImgs || raw.sfzzm,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
@ -136,29 +125,6 @@ const close = () => {
|
|||||||
listQuery.value = {};
|
listQuery.value = {};
|
||||||
};;
|
};;
|
||||||
|
|
||||||
const detail = computed(() => listQuery.value || {});
|
|
||||||
|
|
||||||
const toIdList = (val, limit) => {
|
|
||||||
const v = val ?? [];
|
|
||||||
const arr = Array.isArray(v) ? v : [v];
|
|
||||||
const ids = arr
|
|
||||||
.map((el) => {
|
|
||||||
if (!el) return null;
|
|
||||||
if (typeof el === 'string' || typeof el === 'number') return String(el);
|
|
||||||
if (typeof el === 'object') return el.id ? String(el.id) : null;
|
|
||||||
return null;
|
|
||||||
})
|
|
||||||
.filter(Boolean);
|
|
||||||
return typeof limit === 'number' ? ids.slice(0, limit) : ids;
|
|
||||||
};
|
|
||||||
|
|
||||||
const toUrls = (val, limit) => {
|
|
||||||
return toIdList(val, limit).map((id) => `/bagl/mosty-base/minio/image/download/${id}`);
|
|
||||||
};
|
|
||||||
|
|
||||||
const noCrimeUrls = computed(() => toUrls(detail.value.noCrimeProof, 1));
|
|
||||||
const medicalUrls = computed(() => toUrls(detail.value.medicalReport, 1));
|
|
||||||
const idCardUrls = computed(() => toUrls(detail.value.idCardImages, 2));
|
|
||||||
|
|
||||||
defineExpose({ init })
|
defineExpose({ init })
|
||||||
</script>
|
</script>
|
||||||
@ -192,17 +158,17 @@ defineExpose({ init })
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
.tag_item:nth-child(1){
|
.jtb_item{
|
||||||
border: 5px solid #FA3758;
|
border: 5px solid #FA3758;
|
||||||
color: #FA3758;
|
color: #FA3758;
|
||||||
background: rgba(250,55,88,0.2);
|
background: rgba(250,55,88,0.2);
|
||||||
}
|
}
|
||||||
.tag_item:nth-child(2){
|
.tgg_item{
|
||||||
color: #28EEBF;
|
color: #28EEBF;
|
||||||
background: rgba(40,238,191,0.2);
|
background: rgba(40,238,191,0.2);
|
||||||
border: 5px solid #28EEBF;
|
border: 5px solid #28EEBF;
|
||||||
}
|
}
|
||||||
.tag_item:nth-child(3){
|
.dsh_item{
|
||||||
background: rgba(0,114,255,0.2);
|
background: rgba(0,114,255,0.2);
|
||||||
color: #0072FF;
|
color: #0072FF;
|
||||||
border: 5px solid #0072FF;
|
border: 5px solid #0072FF;
|
||||||
|
|||||||
@ -3,7 +3,9 @@
|
|||||||
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
|
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px">
|
||||||
<div class="steps-body">
|
<div class="steps-body">
|
||||||
<el-steps direction="vertical" :active="active" :space="90">
|
<el-steps direction="vertical" :active="active" :space="90">
|
||||||
<el-step v-for="(item, idx) in steps" :key="item.title" :title="item.title" :description="idx === 0 ? item.time : ''" />
|
<el-step title="保安公司审核" :description="dataForm.bakkShsj || '未审核'" />
|
||||||
|
<el-step title="培训公司审核" :description="dataForm.pxgsShsj || '未审核'" />
|
||||||
|
<el-step title="公安局审核" :description="dataForm.gonganShsj || '未审核'" />
|
||||||
</el-steps>
|
</el-steps>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@ -11,18 +13,19 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
import { ref, defineExpose } from 'vue';
|
import { ref, defineExpose } from 'vue';
|
||||||
const dialogForm = ref(false);
|
const dialogForm = ref(false);
|
||||||
const pxgsData = ref()
|
|
||||||
const active = ref(1)
|
const active = ref(1)
|
||||||
const steps = ref([
|
const dataForm = ref({})
|
||||||
{ title: '保安公司审核', time: '2026-01-07 21:00' },
|
|
||||||
{ title: '培训公司审核', time: '2026-01-07 21:00' },
|
|
||||||
{ title: '公安局审核', time: '2026-01-07 21:00' },
|
|
||||||
])
|
|
||||||
const init = (row) => {
|
const init = (row) => {
|
||||||
pxgsData.value = row
|
let ids = [row.id]
|
||||||
dialogForm.value = true;
|
qcckPost(ids,"/mosty-base/bans/njxx/getAuditStatusList").then(res=>{
|
||||||
|
dialogForm.value = true;
|
||||||
|
let obj = res ? res[0] : {};
|
||||||
|
dataForm.value = obj;
|
||||||
|
active.value = Number(obj.currentAuditStage) - 1;
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="titleBox">
|
<div class="titleBox">
|
||||||
<PageTitle title="保安员年检送培">
|
<PageTitle title="保安员年检送培">
|
||||||
<el-button type="primary" @click="onBatchAudit">新增</el-button>
|
<el-button type="primary" @click="onBatchAudit">批量送培</el-button>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
@ -19,7 +19,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="primary" link @click="addEdit('RefSteap', row)">审核流程</el-link>
|
<el-link type="primary" link @click="addEdit('sh', row)">审核流程</el-link>
|
||||||
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
|
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
@ -29,9 +29,11 @@
|
|||||||
}"></Pages>
|
}"></Pages>
|
||||||
</div>
|
</div>
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<DetailForm ref="detailDiloag" :dict="{D_BZ_SF}"/>
|
<DetailForm ref="detailDiloag" :dic="{ D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD }"/>
|
||||||
<!-- 审核流程 -->
|
<!-- 审核流程 -->
|
||||||
<Steps ref="RefSteap" ></Steps>
|
<Steps ref="RefSteap" ></Steps>
|
||||||
|
<!-- 送培 -->
|
||||||
|
<AddSp ref="addSpDiloag" @refresh="getList" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -42,14 +44,16 @@ import Pages from "@/components/aboutTable/Pages.vue";
|
|||||||
import Search from "@/components/aboutTable/Search.vue";
|
import Search from "@/components/aboutTable/Search.vue";
|
||||||
import DetailForm from "./components/detailForm.vue";
|
import DetailForm from "./components/detailForm.vue";
|
||||||
import Steps from "./components/steps.vue";
|
import Steps from "./components/steps.vue";
|
||||||
|
import AddSp from "./components/addSp.vue";
|
||||||
import {getItem} from '@/utils/storage.js'
|
import {getItem} from '@/utils/storage.js'
|
||||||
import { qcckPost } from "@/api/qcckApi.js";
|
import { qcckPost } from "@/api/qcckApi.js";
|
||||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||||
import { ElMessage } from "element-plus";
|
const userInfo = getItem('userInfo');
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BA_SHZT,D_BA_SPZT } = proxy.$dict("D_BA_SHZT",'D_BA_SPZT');
|
const { D_BZ_ZZMM,D_BZ_XB,D_BZ_MZ,D_BA_SHZT,D_BAXX_SSHY,D_BA_SPZT,D_BZ_WHCD } = proxy.$dict('D_BZ_ZZMM','D_BZ_XB','D_BZ_MZ','D_BA_SHZT','D_BAXX_SSHY','D_BA_SPZT','D_BZ_WHCD');
|
||||||
const detailDiloag = ref();
|
const detailDiloag = ref();
|
||||||
const RefSteap = ref();
|
const RefSteap = ref();
|
||||||
|
const addSpDiloag = ref();
|
||||||
const shForm = ref();
|
const shForm = ref();
|
||||||
const searchBox = ref(); //搜索框
|
const searchBox = ref(); //搜索框
|
||||||
const selectedRows = ref([]);
|
const selectedRows = ref([]);
|
||||||
@ -124,6 +128,8 @@ const getList = () => {
|
|||||||
const promes = {
|
const promes = {
|
||||||
...pageData.pageConfiger,
|
...pageData.pageConfiger,
|
||||||
...queryFrom.value,
|
...queryFrom.value,
|
||||||
|
ssbakk:userInfo.pxgs,
|
||||||
|
ssbakkId:userInfo.pxgsid
|
||||||
}
|
}
|
||||||
qcckPost(promes,'/mosty-base/bans/njxx/listForSendTraining').then((res) => {
|
qcckPost(promes,'/mosty-base/bans/njxx/listForSendTraining').then((res) => {
|
||||||
pageData.tableData = res.records || []
|
pageData.tableData = res.records || []
|
||||||
@ -139,19 +145,15 @@ const chooseData = (rows) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onBatchAudit = () => {
|
const onBatchAudit = () => {
|
||||||
if (!selectedRows.value.length) {
|
addSpDiloag.value.init();
|
||||||
ElMessage.warning("请选择需要审核的数据");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ElMessage.success("已选择 " + selectedRows.value.length + " 条");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 详情
|
// 详情
|
||||||
const addEdit = (type, row) => {
|
const addEdit = (type, row) => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if(type == 'RefSteap'){
|
if(type == 'sh'){
|
||||||
RefSteap.value.init(row);
|
addSpDiloag.value.init(row);
|
||||||
}else if(type == 'shForm'){
|
}else if(type == 'shForm'){
|
||||||
shForm.value.init(row);
|
shForm.value.init(row);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user