This commit is contained in:
lcw
2026-01-14 17:49:45 +08:00
14 changed files with 559 additions and 391 deletions

View File

@ -0,0 +1,210 @@
<template>
<el-dialog :title="data.title" width="70%" :model-value="modelValue" append-to-body @close="closed" v-if="modelValue">
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="姓名">
<el-input placeholder="请输入姓名" v-model="listQuery.xm" clearabl></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.data.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table :loading="loading" @selection-change="handleSelectionChange" :row-key="keyid" height="450" ref="multipleUserRef" :data="tableData" border style="width: 100%">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column prop="ssbakk" align="center" label="保安公司名称"></el-table-column>
<el-table-column prop="njnf" align="center" label="年审年份"></el-table-column>
<el-table-column prop="xm" align="center" label="姓名"></el-table-column>
<el-table-column prop="sfzhm" align="center" label="身份证号码"></el-table-column>
<el-table-column prop="dh" align="center" label="电话"/>
<el-table-column prop="whcd" align="center" label="文化程度">
<template #default="{ row }">
<DictTag :value="row.whcd" :tag="false" :options="D_BZ_WHCD" />
</template>
</el-table-column>
<el-table-column prop="zsbh" align="center" label="证书编号"/>
<el-table-column prop="fwxymc" align="center" label="服务行业"/>
<el-table-column prop="rzsj" align="center" label="入职时间"/>
<el-table-column prop="sgxkhm" align="center" label="上岗证号码"/>
<el-table-column prop="pxgsShzt" align="center" label="审核状态">
<template #default="{ row }">
<DictTag :value="row.pxgsShzt" :tag="false" :options="D_BA_SHZT" />
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.pageCurrent"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { qcckPost } from "@/api/qcckApi";
import {getItem} from '@/utils/storage.js'
import * as MOSTY from "@/components/MyComponents/index";
import { defineProps, watch, ref, getCurrentInstance, nextTick, reactive } from "vue";
const { proxy } = getCurrentInstance();
const { D_BA_SHZT,D_BZ_WHCD } = proxy.$dict('D_BA_SHZT','D_BZ_WHCD');
const props = defineProps({
modelValue: {
type: Boolean,
required: true
},
data:{
type: Object,
default: {
title:'选择列表',
type:'wgy',//选择类型
Single:false,//是否单选
roleIds:[],//回显的数据
}
},
});
const emits = defineEmits(["update:modelValue", "choosedUsers",'close']);
const userInfo = getItem('userInfo');
const total = ref(0);
const loading = ref(false);
const listQuery = reactive({
pageCurrent: 1,
pageSize: 20
});
const tableData = ref([]);
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
watch(()=>props.modelValue, (val) => {
if (val) {
nextTick(() => {
getListData();
});
}
},{immediate: true});
const keyid = (row) => {
return row.id;
};
// 列表数据
const getListData = () => {
let params = {
...listQuery,
pxgsShzt: "1",//培训公司已通过
sptz: "1",//已送培
ssbakk:userInfo.pxgs,
ssbakkId:userInfo.pxgsid,
pxgsShzt:'1',//保安公司已通过
}
loading.value = true;
qcckPost(params,"/mosty-base/bans/njxx/page").then((res) => {
loading.value = false;
tableData.value = res?.records;
total.value = Number(res.total);
multipleUser();
}).catch(()=>{
loading.value = false;
});
};
//列表回显
function multipleUser() {
let ids = props.data.roleIds ? props.data.roleIds :[];
tableData.value.forEach((item) => {
if (ids.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.pageCurrent = currentPage;
getListData();
};
// 筛选
const handleFilter = () => {
listQuery.pageCurrent = 1;
getListData();
};
// 重置
const reset = () => {
listQuery.pageCurrent = 1
listQuery.pageSize = 10
getListData();
};
// pageSize 改变触发
const handleSizeChange = (currentSize) => {
listQuery.pageSize = currentSize;
getListData();
};
// 为用户分配角色
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [],listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("choosedUsers", list);
emits("choosedUsersLeader", { userList: userList });
closed();
};
// 选择的数据
const handleSelectionChange = (val) => {
if (props.data.Single && val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
};
// 关闭
const closed = () => {
emits("update:modelValue", false);
emits("close");
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -7,6 +7,8 @@
<ChooseWGY v-if="['wgy'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseWGY> <ChooseWGY v-if="['wgy'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseWGY>
<!-- 保安 --> <!-- 保安 -->
<ChooseBA v-if="['ba'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseBA> <ChooseBA v-if="['ba'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseBA>
<!-- NJBAY -->
<ChooseNJBAY v-if="['Bay'].includes(props.data.type)" :data="data" v-model="props.modelValue" :Single="Single" :roleIds="roleIds" @close="close" @choosedUsers="choosedList"></ChooseNJBAY>
</template> </template>
<script setup> <script setup>
@ -14,6 +16,7 @@ import ChooseMFJ from "./ChooseMFJ/index.vue";
import ChooseQFQZ from "./ChooseQFQZ/index.vue"; import ChooseQFQZ from "./ChooseQFQZ/index.vue";
import ChooseWGY from "./ChooseWGY/index.vue"; import ChooseWGY from "./ChooseWGY/index.vue";
import ChooseBA from "./ChooseBA/index.vue"; import ChooseBA from "./ChooseBA/index.vue";
import ChooseNJBAY from "./ChooseNJBAY/index.vue";
import { reactive, ref, onMounted } from "vue"; import { reactive, ref, onMounted } from "vue";
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {

View File

@ -534,10 +534,6 @@ export function MapUtil(map) {
_that._self[flag].push(line) _that._self[flag].push(line)
} }
/** /**
* 回显平面- 圆 - 多边形 - 矩形 * 回显平面- 圆 - 多边形 - 矩形
* @param {*} type 回显形状 * @param {*} type 回显形状

View File

@ -7,9 +7,9 @@
<div class="cntinfo"> <div class="cntinfo">
<!-- 标签 --> <!-- 标签 -->
<ul class="tag-box"> <ul class="tag-box">
<li class="tag_item" :class="detail.shzt == 0 ? 'dsh_item' : detail.shzt == 1 ? 'tgg_item' : 'jtb_item'"> <li class="tag_item" :class="detail.bakkShzt == 0 ? 'dsh_item' : detail.bakkShzt == 1 ? 'tgg_item' : 'jtb_item'">
<!-- 0-待审核 1-通过 2-驳回 --> <!-- 0-待审核 1-通过 2-驳回 -->
{{ detail.shzt == 0 ? '待审核' : detail.shzt == 1 ? '通过' : '驳回' }} {{ detail.bakkShzt == 0 ? '待审核' : detail.bakkShzt == 1 ? '通过' : '驳回' }}
</li> </li>
</ul> </ul>
<!-- 内容描述 --> <!-- 内容描述 -->
@ -88,7 +88,7 @@
<el-descriptions-item label="发证机关">{{ detail.fqjg }}</el-descriptions-item> <el-descriptions-item label="发证机关">{{ detail.fqjg }}</el-descriptions-item>
<el-descriptions-item label="发证日期">{{ detail.fqsj }}</el-descriptions-item> <el-descriptions-item label="发证日期">{{ detail.fqsj }}</el-descriptions-item>
<el-descriptions-item label="驳回原因" :span="3">{{ detail.bhyy }}</el-descriptions-item> <el-descriptions-item label="驳回原因" :span="3" v-if="detail.bakkShzt == 2">{{ detail.bhyy }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</div> </div>

View File

@ -174,7 +174,7 @@ const getList = () => {
}; };
const chooseData = (rows) => { const chooseData = (rows) => {
selectedRows.value = Array.isArray(rows) ? rows : []; selectedRows.value = Array.isArray(rows) ? rows.map(v=>v.id) : [];
}; };
const onBatchAudit = (valIds) => { const onBatchAudit = (valIds) => {

View File

@ -141,7 +141,7 @@ const getList = () => {
}; };
const chooseData = (rows) => { const chooseData = (rows) => {
selectedRows.value = Array.isArray(rows) ? rows : []; selectedRows.value = Array.isArray(rows) ? rows.map(v=>v.id) : [];
}; };
const onBatchAudit = () => { const onBatchAudit = () => {

View File

@ -7,9 +7,9 @@
<div class="cntinfo"> <div class="cntinfo">
<!-- 标签 --> <!-- 标签 -->
<ul class="tag-box"> <ul class="tag-box">
<li class="tag_item" :class="detail.shzt == 0 ? 'dsh_item' : detail.shzt == 1 ? 'tgg_item' : 'jtb_item'"> <li class="tag_item" :class="detail.pxgsShzt == 0 ? 'dsh_item' : detail.pxgsShzt == 1 ? 'tgg_item' : 'jtb_item'">
<!-- 0-待审核 1-通过 2-驳回 --> <!-- 0-待审核 1-通过 2-驳回 -->
{{ detail.shzt == 0 ? '待审核' : detail.shzt == 1 ? '通过' : '驳回' }} {{ detail.pxgsShzt == 0 ? '待审核' : detail.pxgsShzt == 1 ? '通过' : '驳回' }}
</li> </li>
</ul> </ul>
<!-- 内容描述 --> <!-- 内容描述 -->
@ -85,11 +85,11 @@
</div> </div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="审核时间">{{ detail.auditTime }}</el-descriptions-item> <el-descriptions-item label="审核时间">{{ detail.shsj }}</el-descriptions-item>
<el-descriptions-item label="发证机关">{{ detail.issuingAuthority }}</el-descriptions-item> <el-descriptions-item label="发证机关">{{ detail.fqjg }}</el-descriptions-item>
<el-descriptions-item label="发证日期">{{ detail.issueDate }}</el-descriptions-item> <el-descriptions-item label="发证日期">{{ detail.fqsj }}</el-descriptions-item>
<el-descriptions-item label="驳回原因" :span="3">{{ detail.rejectReason }}</el-descriptions-item> <el-descriptions-item label="驳回原因" :span="3" v-if="detail.pxgsShzt== 2">{{ detail.bhyy }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</div> </div>

View File

@ -0,0 +1,138 @@
<template>
<div>
<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-item label="是否通过" prop="auditStatus">
<el-radio-group v-model="formData.auditStatus">
<el-radio label="1">通过</el-radio>
<el-radio label="0">不通过</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="驳回原因" prop="rejectReason" v-if="formData.auditStatus === '0'">
<el-input v-model="formData.rejectReason" type="textarea" placeholder="请输入驳回原因" :autosize="{ minRows: 2, maxRows: 4 }" />
</el-form-item>
<div class="flex just-center">
<el-button @click="dialogForm = false,formData = {}">取消</el-button>
<el-button type="primary" :loading="loading" @click="submitForm">提交</el-button>
</div>
</el-form>
</el-dialog>
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import { ref, defineExpose,defineEmits } from 'vue';
import { qcckPost } from "@/api/qcckApi.js";
const emit = defineEmits(['refresh'])
const dialogForm = ref(false);
const loading = ref(false)
const formData = ref({})
const rules = ref({
auditType: [{ required: true, message: '请选择审核类型', trigger: 'blur' }],
auditStatus: [{ required: true, message: '请选择是否通过', trigger: 'blur' }],
rejectReason: [{ required: true, message: '请输入驳回原因', trigger: 'blur' }],
})
const formRef = ref();
const idsVal = ref([])
const init = (ids) => {
idsVal.value = ids;
dialogForm.value = true;
}
const submitForm = () =>{
formRef.value.validate((valid) => {
if (!valid) return;
loading.value = true;
// // 保安公司审核 - bakk 培训公司审核 -- pxgs 公安局审核 -- gongan
let params = { ...formData.value,ids:idsVal.value,auditType:'pxgs' }
qcckPost(params,"/mosty-base/bans/njxx/batchAudit").then((res) => {
loading.value = false;
ElMessage.success("操作成功");
dialogForm.value = false;
formData.value={}
emit('refresh')
}).catch(()=>{
loading.value = false;
});
});
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
.steps-body {
height: 260px;
padding: 6px 10px 10px;
box-sizing: border-box;
}
:deep(.steps-dialog .el-dialog__header) {
text-align: center;
padding: 20px 20px 10px;
}
:deep(.steps-dialog .el-dialog__title) {
font-size: 24px;
font-weight: 700;
color: #333;
}
:deep(.steps-dialog .el-dialog__body) {
padding: 0 20px 20px;
}
:deep(.steps-dialog .el-step__title) {
font-size: 18px;
font-weight: 600;
color: #333;
line-height: 22px;
}
:deep(.steps-dialog .el-step__description) {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
margin-top: 8px;
}
:deep(.steps-dialog .el-step__line) {
left: 8px;
background-color: transparent;
border-left: 1px dashed #dadada;
}
:deep(.steps-dialog .el-step.is-vertical .el-step__head) {
width: 24px;
}
:deep(.steps-dialog .el-step__icon) {
width: 16px;
height: 16px;
border-radius: 50%;
}
:deep(.steps-dialog .el-step__head.is-process .el-step__icon),
:deep(.steps-dialog .el-step__head.is-process .el-step__icon.is-text) {
background: #2e6bff;
border: none;
box-shadow: 0 0 0 5px rgba(46, 107, 255, 0.15);
}
:deep(.steps-dialog .el-step.is-wait .el-step__icon),
:deep(.steps-dialog .el-step.is-finish .el-step__icon) {
background: #fff;
border: 1px solid #dadada;
box-shadow: none;
}
:deep(.steps-dialog .el-step__icon-inner) {
display: none;
}
::v-deep .is-finish .el-step__icon{
background: #86b6f1;
}
</style>

View File

@ -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>

View File

@ -14,6 +14,13 @@
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"> @chooseData="chooseData">
<template #whcd="{ row }">
<DictTag :value="row.whcd" :tag="false" :options="D_BZ_WHCD" />
</template>
<template #pxgsShzt="{ row }">
<DictTag :value="row.pxgsShzt" :tag="false" :color="row.pxgsShzt == 0 ? '#ff0000' : row.pxgsShzt == 1 ? '#28EEBF' : '#FA3758'" :options="D_BA_SHZT" />
</template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="primary" link @click="onBatchAudit([row.id])" v-if="row.pxgsShzt == 0">立即审核</el-link> <el-link type="primary" link @click="onBatchAudit([row.id])" v-if="row.pxgsShzt == 0">立即审核</el-link>
@ -27,9 +34,11 @@
}"></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>
<!-- 审核 -->
<ShForm ref="shForm" @refresh="getList"></ShForm>
</div> </div>
</template> </template>
@ -40,6 +49,7 @@ 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 ShForm from "./components/shForm.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";
@ -53,11 +63,7 @@ const shForm = ref();
const searchBox = ref(); //搜索框 const searchBox = ref(); //搜索框
const selectedRows = ref([]); const selectedRows = ref([]);
const searchConfiger = ref([ const searchConfiger = ref([
{
label: "保安公司名称",
prop: "ssbakk",
showType: "input"
},
{ {
label: "姓名", label: "姓名",
prop: "xm", prop: "xm",
@ -88,22 +94,23 @@ const pageData = reactive({
pageSize: 20, pageSize: 20,
pageNum: 1 pageNum: 1
}, },
controlsWidth: 180, controlsWidth: 220,
tableColumn: [ tableColumn: [
{ label: "保安公司名称", prop: "ssbakk",showOverflowTooltip: true }, { label: "保安公司名称", prop: "ssbakk",showOverflowTooltip: true },
{ label: "年审年份", prop: "njnf"}, { label: "年审年份", prop: "njnf"},
{ label: "姓名", prop: "xm" }, { label: "姓名", prop: "xm" },
{ label: "身份证号码", prop: "sfzhm",showOverflowTooltip: true }, { label: "身份证号码", prop: "sfzhm",showOverflowTooltip: true },
{ label: "电话", prop: "dh" }, { label: "电话", prop: "dh" },
{ label: "文化程度", prop: "whcd" }, { label: "文化程度", prop: "whcd" ,showSolt: true},
{ label: "证书编号", prop: "zsbh", showOverflowTooltip: true }, { label: "证书编号", prop: "zsbh", showOverflowTooltip: true },
{ label: "服务行业", prop: "fwxymc" }, { label: "服务行业", prop: "fwxymc" },
{ label: "入职时间", prop: "rzsj" }, { label: "入职时间", prop: "rzsj" },
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true }, { label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
{ label: "审核状态", prop: "pxgsShzt",showSolt: true },
] ]
}); });
onMounted(() => { onMounted(() => {
// getList(); getList();
tabHeightFn(); tabHeightFn();
}); });
// 搜索 // 搜索
@ -128,7 +135,8 @@ const getList = () => {
...queryFrom.value, ...queryFrom.value,
ssbakk:userInfo.pxgs, ssbakk:userInfo.pxgs,
ssbakkId:userInfo.pxgsid, ssbakkId:userInfo.pxgsid,
bakkShzt:'1', pxgsShzt:'1',//保安公司已通过
sptz:'1',//已送培
} }
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 || []
@ -140,14 +148,14 @@ const getList = () => {
}; };
const chooseData = (rows) => { const chooseData = (rows) => {
selectedRows.value = Array.isArray(rows) ? rows : []; selectedRows.value = Array.isArray(rows) ? rows.map(v=>v.id) : [];
}; };
const onBatchAudit = (valIds) => { const onBatchAudit = (valIds) => {
let ids = []; let ids = [];
valIds.forEach(id =>{ valIds.forEach(id =>{
let obj = pageData.tableData.find(it=>it.id == id); let obj = pageData.tableData.find(it=>it.id == id);
if(obj && obj.bakkShzt == 0) ids.push(id); if(obj && obj.pxgsShzt == 0) ids.push(id);
}); });
if (!ids.length) return ElMessage.warning("请选择未审核的数据!该数据再审核状态下不能操作!"); if (!ids.length) return ElMessage.warning("请选择未审核的数据!该数据再审核状态下不能操作!");
shForm.value.init(ids); shForm.value.init(ids);

View File

@ -1,53 +1,80 @@
<template> <template>
<el-dialog title="年检签到" v-model="visible" width="80%" :destroy-on-close="true" @close="close"> <el-dialog :title="'年检签到'+title" v-model="visible" width="80%" :destroy-on-close="true" @close="close">
<div class="cntinfo"> <div class="cntinfo">
<FormMessage ref="FormRef" v-model="formData" :rules="rules" :formList="formList" :labelWidth='120'> <FormMessage ref="FormRef" :disabled="disabled" v-model="formData" :rules="rules" :formList="formList" :labelWidth='120'>
</FormMessage> </FormMessage>
<el-divider border-style="dashed"><span class="pointer f16">培训人员<el-icon size="22" color="#409eff" class="ml5" style="top: 4px;"><CirclePlus /></el-icon></span></el-divider> <el-divider border-style="dashed"><span class="pointer f16" @click="openPeoList">培训人员<el-icon size="22" color="#409eff" class="ml5" style="top: 4px;"><CirclePlus /></el-icon></span></el-divider>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth" :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"> @chooseData="chooseData">
<template #sptz="{ row }"> <template #whcd="{ row }">
<DictTag :value="row.sptz" :tag="false" :options="D_BA_SPZT" /> <DictTag :value="row.whcd" :tag="false" :options="props.dic.D_BZ_WHCD" />
</template>
<template #qdztdm="{ row }">
<span>{{ row.qdztdm === '1' ? '已签到' : '未签到' }}</span>
</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="deleteItem(row)">删除</el-link>
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
</template> </template>
</MyTable> </MyTable>
<div class="mt10 flex just-center"> <div class="mt10 flex just-center">
<el-button @click="save" type="primary" :loading="loading">保存</el-button>
<el-button @click="close">关闭</el-button> <el-button @click="close">关闭</el-button>
<el-button @click="save" type="primary" :loading="loading">保存</el-button>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<!-- 选择保安员 -->
<ChooseList v-model="shoewList" :data="chooseType" @choosed="choosedList"></ChooseList>
</template> </template>
<script setup> <script setup>
import * as rule from "@/utils/rules.js"; import { ElMessage } from "element-plus";
import { qcckPost } from "@/api/qcckApi";
import ChooseList from "@/components/ChooseList/index.vue";
import MyTable from "@/components/aboutTable/MyTable.vue"; import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { ref,reactive } from 'vue' import { ref,reactive,defineEmits } from 'vue'
const emit = defineEmits(['refresh'])
const props = defineProps({
dic: {
type: Object,
default: () => ({})
}
})
const chooseType = reactive({
title: '选择保安员',
type: 'Bay',//选择类型
Single: false,//是否单选
roleIds: [],//回显的数据
});
const disabled = ref(false)
const title = ref('')
const formData = ref({}) const formData = ref({})
const FormRef = ref()
const shoewList = ref(false)
const visible = ref(false) const visible = ref(false)
const loading = ref(false) const loading = ref(false)
const formList = reactive([ const formList = reactive([
[ [
{ label: "培训项目名称", prop: "xm", type: "input" }, { label: "培训项目名称", prop: "pxxmmc", type: "input" },
{ label: "培训地址", prop: "sfzh", type: "input"}, { label: "培训地址", prop: "pxdz", type: "input"},
], ],
[ [
{ label: "培训开始时间", prop: "lxdh", type: "date",lx:'datetime' }, { label: "培训开始时间", prop: "pxkssj", type: "date",lx:'datetime' },
{ label: "培训结束时间", prop: "jzdz", type: "date" ,lx:'datetime' }, { label: "培训结束时间", prop: "pxjssj", type: "date" ,lx:'datetime' },
], ],
[ [
{ label: "组织单位", prop: "rzsj", type: "input" }, { label: "组织单位", prop: "zzdw", type: "input" },
{ label: "培训内容", prop: "lzsj", type: "input" }, { label: "培训内容", prop: "pxnr", type: "input" },
] ]
]) ])
const rules = ref({ const rules = ref({
pxgs: [{ required: true, message: '请选择培训公司', trigger: ['blur'] }], pxxmmc: [{ required: true, message: '请输入培训项目名称', trigger: ['blur'] }],
lzsj: [{ required: true, message: '请选择离职时间', trigger: ['blur'] }], pxdz: [{ required: true, message: '请输入培训地址', trigger: ['blur'] }],
pxkssj: [{ required: true, message: '请选择培训开始时间', trigger: ['change'] }],
pxjssj: [{ required: true, message: '请选择培训结束时间', trigger: ['change'] }],
zzdw: [{ required: true, message: '请输入组织单位', trigger: ['blur'] }],
pxnr: [{ required: true, message: '请输入培训内容', trigger: ['blur'] }],
}) })
const pageData = reactive({ const pageData = reactive({
tableData: [], tableData: [],
@ -56,29 +83,71 @@
rowHieght: 61, rowHieght: 61,
showSelectType: "checkBox", showSelectType: "checkBox",
loading: false, loading: false,
haveControls: false // haveControls: false
}, },
tableHeight: 320, tableHeight: 320,
tableColumn: [ tableColumn: [
{ label: "培训项目名称", prop: "ssbakk",showOverflowTooltip: true }, { label: "保安公司名称", prop: "ssbakk",showOverflowTooltip: true },
{ label: "培训地址", prop: "sptzCompanyName", showOverflowTooltip: true }, { label: "年审年份", prop: "njnf"},
{ label: "培训开始时间", prop: "njnf"}, { label: "姓名", prop: "xm" },
{ label: "培训结束时间", prop: "xm" }, { label: "身份证号码", prop: "sfzhm",showOverflowTooltip: true },
{ label: "组织单位", prop: "sfzhm",showOverflowTooltip: true }, { label: "电话", prop: "dh" },
{ label: "培训内容", prop: "dh" }, { label: "文化程度", prop: "whcd" ,showSolt: true},
{ label: "培训人员", prop: "whcd" }, { label: "证书编号", prop: "zsbh", showOverflowTooltip: true },
{ label: "已签到人员", prop: "zsbh", showOverflowTooltip: true }, { label: "服务行业", prop: "fwxymc" },
{ label: "未签到人员", prop: "fwxymc" }, { label: "入职时间", prop: "rzsj" },
{ label: "是否上报分县局", prop: "rzsj" }, { label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
{ label: "签到状态", prop: "qdztdm",showSolt: true },
{ label: "签到时间", prop: "qdsj" },
] ]
}); });
const init = () => { const init = (type, row) => {
visible.value = true visible.value = true
pageData.keyCount++ pageData.keyCount++
title.value = type == 'add' ? '新增' : '详情';
disabled.value = title.value == '详情' ? true : false;
if(title.value == '详情'){
qcckPost({},'/mosty-base/bans/pxqd-item/getDetailInfo/'+row.id).then(res=>{
formData.value = { ...res }
delete formData.value.personAndNjxxList;
pageData.tableData = res.personAndNjxxList || [];
})
}
} }
const openPeoList = () => {
if(disabled.value) return;
shoewList.value = true;
}
// 删除
const deleteItem = (row) => {
pageData.tableData = pageData.tableData.filter(it=>it.id != row.id);
chooseType.roleIds = chooseType.roleIds.filter(id=>id != row.id);
}
// 选择的数据
const choosedList = (list) => {
pageData.tableData = list || [];
chooseType.roleIds = list.map(it=>it.id);
}
const save = () => {
FormRef.value.submit((val) => {
let data = { pxqdItem:{ ...val } ,pxqdPersons:pageData.tableData }
qcckPost(data,'/mosty-base/bans/pxqd-item/addWithPersons').then(res=>{
ElMessage.success('保存成功');
emit('refresh')
loading.value = false;
close()
})
})
}
const close = () => { const close = () => {
FormRef.value?.reset();
pageData.tableData = [];
disabled.value = false;
visible.value = false visible.value = false
} }
defineExpose({ defineExpose({

View File

@ -1,201 +0,0 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span>详情</span>
<div><el-button size="small" @click="close">关闭</el-button></div>
</div>
<div class="cntinfo">
<!-- 内容描述 -->
<el-descriptions class="desc" :column="3" border label-width="200px">
<el-descriptions-item label="培训项目名称">{{ detail.ssbakk }}</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.sfzhm }}</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="保安公司名称">{{ detail.ssbakk }}</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.sfzhm }}</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="民族">{{ detail.mz }}</el-descriptions-item>
<el-descriptions-item label="年龄">{{ detail.nl }}</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="证书编号">{{ detail.zsbh }}</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="服务行业名称">{{ detail.fwxymc }}</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="无犯罪记录证明">
<div class="img-grid one">
<el-image
:src="baseUrl + detail.wfbjlzm"
fit="cover"
:preview-src-list='[baseUrl + detail.wfbjlzm]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="体检报告">
<div class="img-grid one">
<el-image
:src="baseUrl + detail.tjbg"
fit="cover"
:preview-src-list='[baseUrl + detail.tjbg]'
preview-teleported
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="身份证正反面">
<div class="img-grid two">
<el-image
:src="baseUrl + detail.sfzzm"
fit="cover"
: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
class="img"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="发证机关">{{ detail.fqjg }}</el-descriptions-item>
<el-descriptions-item label="发证日期">{{ detail.fqsj }}</el-descriptions-item>
<el-descriptions-item label="签到状态">{{ detail.qdzt }}</el-descriptions-item>
<el-descriptions-item label="签到时间" :span="2">{{ detail.qdsj }}</el-descriptions-item>
<el-descriptions-item label="签到表" :span="3"></el-descriptions-item>
<el-descriptions-item label="培训图片" :span="3"></el-descriptions-item>
</el-descriptions>
</div>
</div>
</template>
<script setup>
import { ref, computed, defineEmits, getCurrentInstance,defineProps } from 'vue';
import { qcckPost } from "@/api/qcckApi.js";
const emit = defineEmits(["refresh"]);
const { proxy } = getCurrentInstance();
const baseUrl = '/bagl/mosty-base/minio/image/download'
const props = defineProps({
dic: {
default: [[]], //二维数组
type: Array
}
})
const dialogForm = ref(false);
const detail = ref({})
// 初始化数据
const init = (type, row,) => {
// dialogForm.value = true;
// qcckPost({},'/mosty-base/bans/njxx/getInfo/'+row.id).then(res => {
// let zj = res.sfzzfmj.split(',');
// res.sfzzm = [zj[0]];
// res.sfzfm = [zj[1]];
// detail.value = res || {};
// })
};
const close = () => {
dialogForm.value = false;
detail.value = {};
};
defineExpose({ init })
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.mapBox {
width: calc(100% - 24rem);
height: 500px;
overflow: hidden;
margin: 0 12rem;
}
.cntinfo{
position: relative;
padding: 10px 20px;
box-sizing: border-box;
.tag-box{
position: absolute;
top: 20px;
right: 50px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 99999;
.tag_item{
width: 70px;
height: 70px;
border-radius: 50%;
line-height: 65px;
text-align: center;
font-size: 16px;
margin-bottom: 20px;
}
.jtb_item{
border: 5px solid #FA3758;
color: #FA3758;
background: rgba(250,55,88,0.2);
}
.tgg_item{
color: #28EEBF;
background: rgba(40,238,191,0.2);
border: 5px solid #28EEBF;
}
.dsh_item{
background: rgba(0,114,255,0.2);
color: #0072FF;
border: 5px solid #0072FF;
}
}
}
.desc {
width: 100%;
}
.img-grid {
display: flex;
align-items: center;
gap: 10px;
min-height: 70px;
}
.img-grid.one .img,
.img-grid.one .img-placeholder {
width: 64px;
height: 64px;
}
.img-grid.two .img,
.img-grid.two .img-placeholder {
width: 64px;
height: 64px;
}
.img-placeholder {
background: #d9d9d9;
border-radius: 2px;
}
::v-deep .el-descriptions__label.el-descriptions__cell.is-bordered-label{
background: #F6FAFF;
}
</style>

View File

@ -1,105 +1,40 @@
<template> <template>
<div> <div>
<el-dialog class="steps-dialog" title="审核流程" v-model="dialogForm" width="420px"> <el-dialog class="steps-dialog" title="上报分局" @close="dialogForm = false" :close-on-click-modal="false" v-model="dialogForm" width="420px">
<div class="steps-body"> <el-form ref="formRef" :model="formdata" :rules="rules">
<el-steps direction="vertical" :active="active" :space="90"> <el-form-item label="上报分局">
<el-step v-for="(item, idx) in steps" :key="item.title" :title="item.title" :description="idx === 0 ? item.time : ''" /> <MOSTY.Department width="100%" clearable v-model="formdata.ssbmdm" />
</el-steps> </el-form-item>
</div> <div class="flex just-center">
<el-button @click="dialogForm = false">取消</el-button>
<el-button type="primary" @click="submitForm">上报</el-button>
</div>
</el-form>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ElMessage } from "element-plus";
import * as MOSTY from "@/components/MyComponents/index";
import { ref, defineExpose } from 'vue'; import { ref, defineExpose } from 'vue';
const dialogForm = ref(false); const dialogForm = ref(false);
const pxgsData = ref() const formdata = ref({})
const active = ref(1)
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 formdata.value.id = row.id;
dialogForm.value = true; dialogForm.value = true;
} }
const submitForm = () => {
dialogForm.value = false;
formdata.value = {}
ElMessage({ message: '开发中', type: 'info', })
}
defineExpose({ defineExpose({
init init
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.steps-body {
height: 260px;
padding: 6px 10px 10px;
box-sizing: border-box;
}
:deep(.steps-dialog .el-dialog__header) {
text-align: center;
padding: 20px 20px 10px;
}
:deep(.steps-dialog .el-dialog__title) {
font-size: 24px;
font-weight: 700;
color: #333;
}
:deep(.steps-dialog .el-dialog__body) {
padding: 0 20px 20px;
}
:deep(.steps-dialog .el-step__title) {
font-size: 18px;
font-weight: 600;
color: #333;
line-height: 22px;
}
:deep(.steps-dialog .el-step__description) {
font-size: 16px;
color: #9AA8B6;
line-height: 20px;
margin-top: 8px;
}
:deep(.steps-dialog .el-step__line) {
left: 8px;
background-color: transparent;
border-left: 1px dashed #dadada;
}
:deep(.steps-dialog .el-step.is-vertical .el-step__head) {
width: 24px;
}
:deep(.steps-dialog .el-step__icon) {
width: 16px;
height: 16px;
border-radius: 50%;
}
:deep(.steps-dialog .el-step__head.is-process .el-step__icon),
:deep(.steps-dialog .el-step__head.is-process .el-step__icon.is-text) {
background: #2e6bff;
border: none;
box-shadow: 0 0 0 5px rgba(46, 107, 255, 0.15);
}
:deep(.steps-dialog .el-step.is-wait .el-step__icon),
:deep(.steps-dialog .el-step.is-finish .el-step__icon) {
background: #fff;
border: 1px solid #dadada;
box-shadow: none;
}
:deep(.steps-dialog .el-step__icon-inner) {
display: none;
}
::v-deep .is-finish .el-step__icon{
background: #86b6f1;
}
</style> </style>

View File

@ -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('add',null)">新增</el-button>
</PageTitle> </PageTitle>
</div> </div>
<!-- 搜索 --> <!-- 搜索 -->
@ -19,8 +19,8 @@
</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="dendDep(row)">上报分局</el-link>
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link> <el-link type="primary" link @click="onBatchAudit('detail', row)">详情</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@ -29,9 +29,7 @@
}"></Pages> }"></Pages>
</div> </div>
<!-- 新增 --> <!-- 新增 -->
<AddForm ref="addFormRef"></AddForm> <AddForm ref="addFormRef" @refresh="getList" :dic="{D_BZ_WHCD}"></AddForm>
<!-- 详情 -->
<DetailForm ref="detailDiloag" :dict="{D_BZ_SF}"/>
<!-- 审核流程 --> <!-- 审核流程 -->
<Steps ref="RefSteap" ></Steps> <Steps ref="RefSteap" ></Steps>
</div> </div>
@ -43,15 +41,13 @@ import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue"; import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue"; import Search from "@/components/aboutTable/Search.vue";
import AddForm from "./components/addForm.vue"; import AddForm from "./components/addForm.vue";
import DetailForm from "./components/detailForm.vue";
import Steps from "./components/steps.vue"; import Steps from "./components/steps.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"; import { ElMessage } from "element-plus";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BA_SHZT,D_BA_SPZT } = proxy.$dict("D_BA_SHZT",'D_BA_SPZT'); const { D_BZ_WHCD,D_BA_SPZT } = proxy.$dict("D_BZ_WHCD",'D_BA_SPZT');
const detailDiloag = ref();
const RefSteap = ref(); const RefSteap = ref();
const addFormRef = ref(); const addFormRef = ref();
const shForm = ref(); const shForm = ref();
@ -60,7 +56,7 @@ const selectedRows = ref([]);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
label: "培训项目名称", label: "培训项目名称",
prop: "pxxm", prop: "pxxmmc",
showType: "input" showType: "input"
}, },
{ {
@ -85,25 +81,26 @@ const pageData = reactive({
}, },
controlsWidth: 180, controlsWidth: 180,
tableColumn: [ tableColumn: [
{ label: "培训项目名称", prop: "ssbakk",showOverflowTooltip: true }, { label: "培训项目名称", prop: "pxxmmc",showOverflowTooltip: true },
{ label: "培训地址", prop: "sptzCompanyName", showOverflowTooltip: true }, { label: "培训地址", prop: "zzdw", showOverflowTooltip: true },
{ label: "培训开始时间", prop: "njnf"}, { label: "培训开始时间", prop: "pxkssj"},
{ label: "培训结束时间", prop: "xm" }, { label: "培训结束时间", prop: "pxjssj" },
{ label: "组织单位", prop: "sfzhm",showOverflowTooltip: true }, { label: "组织单位", prop: "zzdw",showOverflowTooltip: true },
{ label: "培训内容", prop: "dh" }, { label: "培训内容", prop: "pxnr" },
{ label: "培训人员", prop: "whcd" }, { label: "培训人员", prop: "totalPersonCount" },
{ label: "已签到人员", prop: "zsbh", showOverflowTooltip: true }, { label: "已签到人员", prop: "checkedInPersonCount", showOverflowTooltip: true },
{ label: "未签到人员", prop: "fwxymc" }, { label: "未签到人员", prop: "notCheckedInPersonCount" },
{ label: "是否上报分县局", prop: "rzsj" },
] ]
}); });
onMounted(() => { onMounted(() => {
// getList(); getList();
tabHeightFn(); tabHeightFn();
}); });
// 搜索 // 搜索
const onSearch = (val) => { const onSearch = (val) => {
queryFrom.value = { ...val }; queryFrom.value = { ...val };
queryFrom.value.pxkssjStart = val.pxsj ? val.pxsj[0]:'';
queryFrom.value.pxkssjEnd = val.pxsj ? val.pxsj[1]:'';
pageData.pageConfiger.pageNum = 1; pageData.pageConfiger.pageNum = 1;
getList(); getList();
}; };
@ -122,10 +119,11 @@ const getList = () => {
...pageData.pageConfiger, ...pageData.pageConfiger,
...queryFrom.value, ...queryFrom.value,
} }
qcckPost(promes,'/mosty-base/bans/njxx/listForSendTraining').then((res) => { delete promes.pxsj;
qcckPost(promes,'/mosty-base/bans/pxqd-item/page').then((res) => {
pageData.tableData = res.records || [] pageData.tableData = res.records || []
pageData.total = res.total; pageData.total = res.total;
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;
}).catch((err) => { }).catch((err) => {
pageData.tableConfiger.loading = false; pageData.tableConfiger.loading = false;
}) })
@ -135,23 +133,14 @@ const chooseData = (rows) => {
selectedRows.value = Array.isArray(rows) ? rows : []; selectedRows.value = Array.isArray(rows) ? rows : [];
}; };
const onBatchAudit = () => { const onBatchAudit = (type, row) => {
addFormRef.value.init(); addFormRef.value.init(type, row);
}; };
// 详情 // 详情
const addEdit = (type, row) => { const dendDep = (row) => {
nextTick(() => { RefSteap.value.init(row);
if(type == 'RefSteap'){
RefSteap.value.init(row);
}else if(type == 'shForm'){
shForm.value.init(row);
}
else{
detailDiloag.value.init(type, row);
}
})
}; };