Compare commits

...

5 Commits

Author SHA1 Message Date
1a30a3ece4 更新 2026-01-12 23:59:19 +08:00
bff086457c 更新 2026-01-12 10:43:26 +08:00
e79c66eaf4 更新 2026-01-12 10:42:23 +08:00
lcw
fab9c4f9fc Merge branch 'master' of http://61.139.16.27:26684/maojiacai/ba_web 2026-01-12 10:40:12 +08:00
lcw
5d913a3cf4 lcw 2026-01-12 10:40:05 +08:00
15 changed files with 20797 additions and 367 deletions

20238
package-lock.json generated

File diff suppressed because it is too large Load Diff

17
src/api/badwgl.js Normal file
View File

@ -0,0 +1,17 @@
import request from "@/utils/request";
const api = "/bagl/mosty-base";
export const getDwglnfo = (id) => {
return request({
url: api + "/baxx/dwgl/getInfo/" + id,
method: "POST",
});
};
export const editDwglEdit = (data) => {
return request({
url: api + "/baxx/dwgl/edit",
method: "POST",
data,
});
};

View File

@ -99,6 +99,7 @@
overflow: auto;
border: 1px solid #ccc;
top: 4px;
right: 10px;
left: 10px;
background-color: #fff;
@ -169,6 +170,10 @@
justify-content: space-between;
line-height: 48px;
color: #000;
position: sticky;
top: 0;
z-index: 10;
background: #fff;
}
&::v-deep .el-form--inline {
@ -348,6 +353,7 @@
margin-top: 14px;
}
}
.makerTitlezb{
.makerTitlezb {
color: orangered;
}

View File

@ -18,6 +18,7 @@ import MarkdownEdit from "./MarkdownEdit/index.vue";
import FileUpload from "./FileUpload/index.vue";
import Date from "./Date/index.vue";
import Empty from "./Empty/index.vue";
import CheckBox from "@/components/checkBox/index.vue";
export {
AddressSelect,
FrameWork,
@ -38,5 +39,6 @@ export {
MarkdownEdit,
FileUpload,
Date,
Empty
Empty,
CheckBox
};

View File

@ -14,8 +14,8 @@
style="width:100%" :min="item.min || 0" :max="item.max || 1000" />
<!--选择 select-->
<MOSTY.Select v-else-if="item.type == 'select'" @change="handleNum" filterable :multiple="item.multiple"
v-model="listQuery[item.prop]" :dictEnum="item.options" width="100%" clearable
:placeholder="`请选择${item.label}`" />
v-model="listQuery[item.prop]" :collapse-tags="item.multiple" :dictEnum="item.options" width="100%"
clearable :placeholder="`请选择${item.label}`" />
<!-- 选择性别 -->
<MOSTY.Sex v-else-if="item.type == 'Sex'" v-model:sex="listQuery[item.prop]" width="100%" clearable
:placeholder="`请选择${item.label}`" />
@ -24,16 +24,18 @@
v-model="listQuery[item.prop]" clearable filterable />
<!-- 部门department -->
<MOSTY.Department style="width:100%" v-else-if="item.type === 'department'" clearable
:placeholder="listQuery.ssbm ? listQuery.ssbm : `请选择${item.label}`" v-model="listQuery[item.prop]" />
:placeholder="listQuery.ssbm ? listQuery.ssbm : `请选择${item.label}`"
@getDepValue="getdep($event, item.depMc)" v-model="listQuery[item.prop]" />
<!-- 时间选择 type: date/time/datetime/datetimerange/daterange-->
<MOSTY.Date v-else-if="item.type == 'date'" :type="item.lx ? item.lx : 'date'" width="100%" clearable
v-model="listQuery[item.prop]" />
<!-- 上传 upload limit:'限制张数'-->
<MOSTY.Upload v-else-if="item.type == 'upload'" :isAll="item.isAll" :key="item.prop" :showBtn="item.showBtn" :isImg="item.isImg" :limit="item.limit" width="100%"
v-model="listQuery[item.prop]" />
<MOSTY.Upload v-else-if="item.type == 'upload'" :isAll="item.isAll" :key="item.prop" :showBtn="item.showBtn"
:isImg="item.isImg" :limit="item.limit" width="100%" v-model="listQuery[item.prop]" />
<!--选择checkbox -->
<!-- <div v-else-if="item.type == 'checkbox'" >{{item.options }}</div> -->
<MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]"
:checkList="item.options" :placeholder="`请选择${item.label}`" />
:m="item.options" :placeholder="`请选择${item.label}`" />
<!-- 单选radio -->
<el-radio-group v-else-if="item.type == 'radio'" v-model="listQuery[item.prop]">
@ -69,8 +71,8 @@
style="width:100%" :min="child.min || 0" :max="child.max || 1000" />
<!--选择 select-->
<MOSTY.Select v-else-if="child.type == 'select'" @change="handleNum" filterable :multiple="child.multiple"
v-model="listQuery[child.prop]" :dictEnum="child.options" width="100%" clearable
:placeholder="`请选择${child.label}`" />
v-model="listQuery[child.prop]" :collapse-tags="child.multiple" :dictEnum="child.options" width="100%"
clearable :placeholder="`请选择${child.label}`" />
<!-- 部门department -->
<MOSTY.Department style="width:100%" v-else-if="child.type === 'department'" clearable
v-model="listQuery[child.prop]" />
@ -81,8 +83,10 @@
<MOSTY.Upload v-else-if="child.type == 'upload'" :isImg="child.isImg" :limit="child.limit" width="100%"
v-model="listQuery[child.prop]" />
<!--选择checkbox -->
<MOSTY.CheckBox v-else-if="child.type == 'checkbox'" width="100%" clearable v-model="listQuery[child.prop]"
:checkList="child.options" :placeholder="`请选择${child.label}`" />
:data="child.options" :placeholder="`请选择${child.label}`" />
<!-- 单选radio -->
<el-radio-group v-else-if="child.type == 'radio'" v-model="listQuery[child.prop]">
<el-radio v-for="obj in child.options" :key="obj.value" :label="obj.value">{{ obj.label }}</el-radio>
@ -136,7 +140,15 @@ const submit = (resfun) => {
resfun(listQuery.value);
});
};
const getdep = (e, val) => {
if (val) {
if (Array.isArray(e)) {
listQuery.value[val] = e ? e.map(item => item.orgName) : '';
} else {
listQuery.value[val] = e ? e.orgName : '';
}
}
}
const reset = () => {
listQuery.value = {};
elform.value.resetFields();

View File

@ -83,6 +83,8 @@ const props = defineProps({
// 可选的时候选择的数据
const emit = defineEmits(["chooseData"]);
const multipleTableRef = ref();
console.log(props.tableConfiger);
const currentRow = ref();
let getConfiger = reactive({
showSelectType: null, // 显示多选还是单选还是没有选择 checkBox/radio/null

View File

@ -1,8 +1,9 @@
<template>
<div class="checkBox">
{{ data }}
<el-checkbox class="checkall" v-if="showAll" v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAll">全部</el-checkbox>
<el-checkbox-group v-model="hasChecked" @change="handleCheckedChange">
<el-checkbox v-for="(item,idx) in checkedList" :key="idx" :label="item">{{item}}</el-checkbox>
<el-checkbox v-for="(item,idx) in checkedList" :key="idx" :label="item">{{item.zdmc}}</el-checkbox>
</el-checkbox-group>
</div>
</template>
@ -20,6 +21,10 @@ const props = defineProps({
}, showAll: {
type: Boolean,
default: true
},
m: {
type: Array,
default:()=>[]
}
});
const checkAll = ref(false);

View File

@ -7,165 +7,124 @@
<div class="cntinfo">
<!-- 标签 -->
<ul class="tag-box">
<li class="tag_item">驳回</li>
<li class="tag_item" :class="detail.shzt == 0 ? 'dsh_item' : detail.shzt == 1 ? 'tgg_item' : 'jtb_item'">
<!-- 0-待审核 1-通过 2-驳回 -->
{{ detail.shzt == 0 ? '待审核' : detail.shzt == 1 ? '通过' : '驳回' }}
</li>
<!-- <li class="tag_item">驳回</li>
<li class="tag_item">通过</li>
<li class="tag_item">待审核</li>
<li class="tag_item">待审核</li> -->
</ul>
<!-- 内容描述 -->
<el-descriptions class="desc" :column="3" border label-width="200px">
<el-descriptions-item label="保安公司名称">{{ detail.companyName }}</el-descriptions-item>
<el-descriptions-item label="年审年份">{{ detail.reviewYear }}</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.sfzh }}</el-descriptions-item>
<el-descriptions-item label="电话">{{ detail.phone }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ detail.sexText }}</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.jg }}</el-descriptions-item>
<el-descriptions-item label="文化程度">{{ detail.whcd }}</el-descriptions-item>
<el-descriptions-item label="民族">{{ detail.nationText }}</el-descriptions-item>
<el-descriptions-item label="籍贯">{{ detail.nativePlace }}</el-descriptions-item>
<el-descriptions-item label="文化程度">{{ detail.education }}</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.certificateNo }}</el-descriptions-item>
<el-descriptions-item label="上岗证号码">{{ detail.workCardNo }}</el-descriptions-item>
<el-descriptions-item label="服务行业">{{ detail.serviceIndustry }}</el-descriptions-item>
<el-descriptions-item label="服务行业名称">{{ detail.serviceIndustryName }}</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="服务行业名称">{{ 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
v-for="(src, idx) in noCrimeUrls"
:key="idx"
:src="src"
:src="baseUrl + detail.wfbjlzm"
fit="cover"
:preview-src-list="noCrimeUrls"
:preview-src-list='[baseUrl + detail.wfbjlzm]'
preview-teleported
class="img"
/>
<div v-if="noCrimeUrls.length === 0" class="img-placeholder"></div>
</div>
</el-descriptions-item>
<el-descriptions-item label="体检报告">
<div class="img-grid one">
<el-image
v-for="(src, idx) in medicalUrls"
:key="idx"
:src="src"
:src="baseUrl + detail.tjbg"
fit="cover"
:preview-src-list="medicalUrls"
:preview-src-list='[baseUrl + detail.tjbg]'
preview-teleported
class="img"
/>
<div v-if="medicalUrls.length === 0" class="img-placeholder"></div>
</div>
</el-descriptions-item>
<el-descriptions-item label="身份证正反面">
<div class="img-grid two">
<el-image
v-for="(src, idx) in idCardUrls"
:key="idx"
:src="src"
:src="baseUrl + detail.sfzzm"
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
class="img"
/>
<template v-if="idCardUrls.length === 0">
<div class="img-placeholder"></div>
<div class="img-placeholder"></div>
</template>
</div>
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ detail.auditTime }}</el-descriptions-item>
<el-descriptions-item label="发证机关">{{ detail.issuingAuthority }}</el-descriptions-item>
<el-descriptions-item label="发证日期">{{ detail.issueDate }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ detail.shsj }}</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="驳回原因" :span="3">{{ detail.rejectReason }}</el-descriptions-item>
<el-descriptions-item label="驳回原因" :span="3">{{ detail.bhyy }}</el-descriptions-item>
</el-descriptions>
</div>
</div>
</template>
<script setup>
import { ref, computed, defineEmits, getCurrentInstance } from 'vue';
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({
dict: {
dic: {
default: [[]], //二维数组
type: Array
}
})
const dialogForm = ref(false);
const listQuery = ref({});
const detail = ref({})
// 初始化数据
const init = (type, row,) => {
dialogForm.value = true;
const raw = row || {};
listQuery.value = {
...raw,
companyName: raw.companyName || raw.dwmc || raw.gsmc || raw.bagsmc,
reviewYear: raw.reviewYear || raw.njnd || raw.njYear || raw.nf || raw.year,
phone: raw.phone || raw.lxdh || raw.dh || raw.sjhm || raw.xssbrdh,
sexText: raw.sexText || raw.xbText || raw.xb || raw.sex,
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,
};
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;
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;
detail.value = {};
};
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 })
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.mapBox {
width: calc(100% - 24rem);
height: 500px;
@ -183,6 +142,7 @@ defineExpose({ init })
display: flex;
flex-direction: column;
gap: 10px;
z-index: 99999;
.tag_item{
width: 70px;
height: 70px;
@ -192,17 +152,17 @@ defineExpose({ init })
font-size: 16px;
margin-bottom: 20px;
}
.tag_item:nth-child(1){
.jtb_item{
border: 5px solid #FA3758;
color: #FA3758;
background: rgba(250,55,88,0.2);
}
.tag_item:nth-child(2){
.tgg_item{
color: #28EEBF;
background: rgba(40,238,191,0.2);
border: 5px solid #28EEBF;
}
.tag_item:nth-child(3){
.dsh_item{
background: rgba(0,114,255,0.2);
color: #0072FF;
border: 5px solid #0072FF;

View File

@ -1,19 +1,26 @@
<template>
<div>
<el-dialog class="steps-dialog" title="审核" v-model="dialogForm" :close-on-click-modal="false" @close="dialogForm = false" 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-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-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="auditRemark" v-if="formData.auditStatus === '0'">
<el-input v-model="formData.auditRemark" type="textarea" placeholder="请输入驳回原因" :autosize="{ minRows: 2, maxRows: 4 }" />
<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">取消</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="dialogForm = false,formData = {}">取消</el-button>
<el-button type="primary" :loading="loading" @click="submitForm">提交</el-button>
</div>
</el-form>
</el-dialog>
@ -21,18 +28,42 @@
</template>
<script setup>
import { ref, defineExpose } from 'vue';
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' }],
auditRemark: [{ required: true, message: '请输入驳回原因', trigger: 'blur' }],
rejectReason: [{ required: true, message: '请输入驳回原因', trigger: 'blur' }],
})
const init = (row) => {
formData.value = row
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;
let params = { ...formData.value,ids:idsVal.value }
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
})

View File

@ -1,7 +1,10 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="保安员年检管理" />
<PageTitle title="保安员年检管理" >
<el-button type="primary" @click="onBatchAudit(selectedRows)">批量审核</el-button>
<el-button type="primary" @click="handleItemSp(selectedRows)">批量送培</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
@ -9,28 +12,27 @@
</div>
<!-- 表格 -->
<div class="tabBox">
<div style="margin-bottom: 12px;">
<el-button type="primary" @click="onBatchAudit">批量审核</el-button>
</div>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<template #auditStatus="{ row }">
<el-tag v-if="String(row.auditStatus || '').includes('驳回')" type="danger">{{ row.auditStatus }}</el-tag>
<el-tag v-else-if="String(row.auditStatus || '').includes('待')" type="warning">{{ row.auditStatus }}</el-tag>
<el-tag v-else-if="String(row.auditStatus || '').includes('通过')" type="success">{{ row.auditStatus }}</el-tag>
<span v-else>{{ row.auditStatus }}</span>
<template #whcd="{ row }">
<DictTag :value="row.whcd" :tag="false" :options="D_BZ_WHCD" />
</template>
<template #sendStatus="{ row }">
<el-tag v-if="String(row.sendStatus || '').includes('未')" type="info">{{ row.sendStatus }}</el-tag>
<el-tag v-else-if="String(row.sendStatus || '').includes('已')" type="success">{{ row.sendStatus }}</el-tag>
<span v-else>{{ row.sendStatus }}</span>
<template #fwxy="{ row }">
<DictTag :value="row.fwxy" :tag="false" :options="D_BAXX_SSHY" />
</template>
<template #shzt="{ row }">
<DictTag :value="row.shzt" :tag="false" :options="D_BA_SHZT" />
</template>
<template #sptz="{ row }">
<DictTag :value="row.sptz" :tag="false" :options="D_BA_SPZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" link @click="addEdit('shForm', row)">立即审核</el-link>
<!--currentAuditStage 当前审核阶段1-保安公司审核阶段2-培训公司审核阶段3-公安局审核阶段4-审核完成 -->
<el-link type="primary" link @click="onBatchAudit([row.id])">立即审核</el-link>
<el-link type="primary" link @click="addEdit('RefSteap', row)">审核流程</el-link>
<el-link type="primary" link @click="addEdit('sp', row)">送培</el-link>
<el-link type="primary" link @click="handleItemSp([row.id])">送培</el-link>
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
</template>
</MyTable>
@ -40,11 +42,11 @@
}"></Pages>
</div>
<!-- 详情 -->
<DetailForm ref="detailDiloag" :dict="{D_BZ_SF}"/>
<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}"/>
<!-- 审核流程 -->
<Steps ref="RefSteap" ></Steps>
<!-- 审核 -->
<ShForm ref="shForm" />
<ShForm ref="shForm" @refresh="getList" />
</div>
</template>
@ -56,12 +58,11 @@ import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import Steps from "./components/steps.vue";
import ShForm from "./components/shForm.vue";
import {getItem} from '@/utils/storage.js'
import { cyryPage,njryPage} from "@/api/pxzx.js";
import { qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { ElMessage } from "element-plus";
const { proxy } = getCurrentInstance();
const { D_BZ_SF ,D_BAXX_DWLX} = proxy.$dict("D_BZ_SF","D_BAXX_DWLX");
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 RefSteap = ref();
const shForm = ref();
@ -75,12 +76,12 @@ const searchConfiger = ref([
},
{
label: "身份证号码",
prop: "sfzh",
prop: "sfzhm",
showType: "input"
},
{
label: "电话",
prop: "lxdh",
prop: "dh",
showType: "input"
},
{
@ -90,45 +91,21 @@ const searchConfiger = ref([
placeholder: "不限",
clearable: true,
defaultVal: "",
options: [
{ label: "驳回", value: "驳回" },
{ label: "待审核", value: "待审核" },
{ label: "通过", value: "通过" }
]
options: D_BA_SHZT
},
{
label: "送培状态",
prop: "spzt",
prop: "sptz",
showType: "select",
placeholder: "不限",
clearable: true,
defaultVal: "",
options: [
{ label: "未送培", value: "未送培" },
{ label: "已送培", value: "已送培" }
]
options: D_BA_SPZT
}
]);
const idEntityCard=getItem('idEntityCard')
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{
companyName: "保安公司名称",
reviewYear: "年审年份",
xm: "姓名",
sfzh: "身份证号码",
phone: "电话",
education: "文化程度",
certificateNo: "证书编号",
serviceIndustry: "服务行业",
entryDate: "入职时间",
workCardNo: "上岗证号码",
auditStatus: "审核状态",
auditTime: "审核时间",
sendStatus: "送培状态"
}
],
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
@ -138,36 +115,35 @@ const pageData = reactive({
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
pageNum: 1
},
controlsWidth: 280,
tableColumn: [
{ label: "保安公司名称", prop: "companyName", width: 160, showOverflowTooltip: true },
{ label: "年审年份", prop: "reviewYear", width: 100 },
{ label: "姓名", prop: "xm", width: 100 },
{ label: "身份证号码", prop: "sfzh", width: 170, showOverflowTooltip: true },
{ label: "电话", prop: "phone", width: 120 },
{ label: "文化程度", prop: "education", width: 110 },
{ label: "证书编号", prop: "certificateNo", width: 140, showOverflowTooltip: true },
{ label: "服务行业", prop: "serviceIndustry", width: 110 },
{ label: "入职时间", prop: "entryDate", width: 120 },
{ label: "上岗证号码", prop: "workCardNo", width: 140, showOverflowTooltip: true },
{ label: "审核状态", prop: "auditStatus", width: 100, showSolt: true },
{ label: "审核时间", prop: "auditTime", width: 140 },
{ label: "送培状态", prop: "sendStatus", width: 100, showSolt: true }
{ label: "保安公司名称", prop: "ssbakk", showOverflowTooltip: true },
{ label: "年审年份", prop: "njnf" },
{ label: "姓名", prop: "xm" },
{ label: "身份证号码", prop: "sfzhm", showOverflowTooltip: true },
{ label: "电话", prop: "dh" },
{ label: "文化程度", prop: "whcd",showSolt: true },
{ label: "证书编号", prop: "zsbh", showOverflowTooltip: true },
{ label: "服务行业", prop: "fwxy", showSolt: true },
{ label: "入职时间", prop: "rzsj" },
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
{ label: "审核状态", prop: "shzt", showSolt: true },
{ label: "审核时间", prop: "shsj" },
{ label: "送培状态", prop: "sptz", showSolt: true }
]
});
onMounted(() => {
// getInfo();
getList();
tabHeightFn();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
pageData.pageConfiger.pageNum = 1;
getList();
};
const gsId=ref('')
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
@ -176,74 +152,47 @@ const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
const getInfo = () => {
let promes = { sfzh: idEntityCard }
cyryPage(promes).then(res => {
const data = res.records[0] || {};
if (data) {
gsId.value=data.code
}
getList()
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
const promes = {
...pageData.pageConfiger,
...queryFrom.value,
dwbm: gsId.value
}
njryPage(promes).then((res) => {
pageData.tableData = (res.records || []).map((item) => {
return {
...item,
companyName: item.companyName || item.dwmc || item.gsmc || item.dwmcName || item.bagsmc,
reviewYear: item.reviewYear || item.njnd || item.njYear || item.nf || item.year,
phone: item.phone || item.lxdh || item.dh || item.sjhm || item.xssbrdh,
education: item.education || item.whcd || item.whcdText,
certificateNo: item.certificateNo || item.zsbh || item.zsbhm || item.zjbh,
serviceIndustry: item.serviceIndustry || item.fwhy || item.fwhyText || item.hy,
entryDate: item.entryDate || item.rzsj || item.rzrq,
workCardNo: item.workCardNo || item.sgzh || item.sgzNumber,
auditStatus: item.auditStatus || item.shztText || item.shzt,
auditTime: item.auditTime || item.shsj || item.njsj,
sendStatus: item.sendStatus || item.spztText || item.spzt || (item.RefSteap ? "已送培" : "未送培")
};
});
qcckPost(promes,'/mosty-base/bans/njxx/page').then(res => {
pageData.tableData = res.records || [];
pageData.total = res.total;
}).catch((err) => {
console.log(err);
}).finally(() => {
pageData.tableConfiger.loading = false;
});
}).catch((err) => {
pageData.tableConfiger.loading = false;
})
};
const chooseData = (rows) => {
selectedRows.value = Array.isArray(rows) ? rows : [];
};
const onBatchAudit = () => {
if (!selectedRows.value.length) {
ElMessage.warning("请选择需要审核的数据");
return;
}
ElMessage.success("已选择 " + selectedRows.value.length + " 条");
const onBatchAudit = (ids) => {
if (!ids.length) return ElMessage.warning("请选择需要的数据");
shForm.value.init(ids);
};
// 送培
const handleItemSp = (ids) =>{
proxy.$modal.confirm("是否确认送培?").then(() => {
qcckPost(ids,'/mosty-base/bans/njxx/sendTraining').then(res=>{
ElMessage.success("送培成功");
getList()
})
});
}
// 详情
const addEdit = (type, row) => {
nextTick(() => {
if(type == 'RefSteap'){
RefSteap.value.init(row);
}else if(type == 'shForm'){
shForm.value.init(row);
}
else{
}else{
detailDiloag.value.init(type, row);
}
})

View File

@ -11,22 +11,11 @@
</div>
<!-- 表格 -->
<div class="tabBox">
<div style="margin-bottom: 12px;">
<el-button type="primary" @click="onBatchAudit">批量审核</el-button>
</div>
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
@chooseData="chooseData">
<template #auditStatus="{ row }">
<el-tag v-if="String(row.auditStatus || '').includes('驳回')" type="danger">{{ row.auditStatus }}</el-tag>
<el-tag v-else-if="String(row.auditStatus || '').includes('待')" type="warning">{{ row.auditStatus }}</el-tag>
<el-tag v-else-if="String(row.auditStatus || '').includes('通过')" type="success">{{ row.auditStatus }}</el-tag>
<span v-else>{{ row.auditStatus }}</span>
</template>
<template #sendStatus="{ row }">
<el-tag v-if="String(row.sendStatus || '').includes('未')" type="info">{{ row.sendStatus }}</el-tag>
<el-tag v-else-if="String(row.sendStatus || '').includes('已')" type="success">{{ row.sendStatus }}</el-tag>
<span v-else>{{ row.sendStatus }}</span>
<template #sptz="{ row }">
<DictTag :value="row.sptz" :tag="false" :options="D_BA_SPZT" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
@ -54,11 +43,11 @@ import Search from "@/components/aboutTable/Search.vue";
import DetailForm from "./components/detailForm.vue";
import Steps from "./components/steps.vue";
import {getItem} from '@/utils/storage.js'
import { cyryPage,njryPage} from "@/api/pxzx.js";
import { qcckPost } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { ElMessage } from "element-plus";
const { proxy } = getCurrentInstance();
const { D_BZ_SF ,D_BAXX_DWLX} = proxy.$dict("D_BZ_SF","D_BAXX_DWLX");
const { D_BA_SHZT,D_BA_SPZT } = proxy.$dict("D_BA_SHZT",'D_BA_SPZT');
const detailDiloag = ref();
const RefSteap = ref();
const shForm = ref();
@ -72,35 +61,18 @@ const searchConfiger = ref([
},
{
label: "身份证号码",
prop: "sfzh",
prop: "sfzhm",
showType: "input"
},
{
label: "电话",
prop: "lxdh",
prop: "dh",
showType: "input"
},
]);
const idEntityCard=getItem('idEntityCard')
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{
companyName: "保安公司名称",
reviewYear: "年审年份",
xm: "姓名",
sfzh: "身份证号码",
phone: "电话",
education: "文化程度",
certificateNo: "证书编号",
serviceIndustry: "服务行业",
entryDate: "入职时间",
workCardNo: "上岗证号码",
auditStatus: "审核状态",
auditTime: "审核时间",
sendStatus: "送培状态"
}
],
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
@ -110,35 +82,34 @@ const pageData = reactive({
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
pageNum: 1
},
controlsWidth: 180,
tableColumn: [
{ label: "保安公司名称", prop: "companyName",showOverflowTooltip: true },
{ label: "培训公司", prop: "pxgs", showOverflowTooltip: true },
{ label: "年审年份", prop: "reviewYear"},
{ label: "保安公司名称", prop: "ssbakk",showOverflowTooltip: true },
{ label: "培训公司", prop: "sptzCompanyName", showOverflowTooltip: true },
{ label: "年审年份", prop: "njnf"},
{ label: "姓名", prop: "xm" },
{ label: "身份证号码", prop: "sfzh",showOverflowTooltip: true },
{ label: "电话", prop: "phone" },
{ label: "文化程度", prop: "education" },
{ label: "证书编号", prop: "certificateNo", showOverflowTooltip: true },
{ label: "服务行业", prop: "serviceIndustry" },
{ label: "入职时间", prop: "entryDate" },
{ label: "上岗证号码", prop: "workCardNo", showOverflowTooltip: true },
{ label: "送培状态", prop: "sendStatus", showSolt: true }
{ label: "身份证号码", prop: "sfzhm",showOverflowTooltip: true },
{ label: "电话", prop: "dh" },
{ label: "文化程度", prop: "whcd" },
{ label: "证书编号", prop: "zsbh", showOverflowTooltip: true },
{ label: "服务行业", prop: "fwxymc" },
{ label: "入职时间", prop: "rzsj" },
{ label: "上岗证号码", prop: "sgxkhm", showOverflowTooltip: true },
{ label: "送培状态", prop: "sptz", showSolt: true }
]
});
onMounted(() => {
// getInfo();
getList();
tabHeightFn();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = { ...val };
pageData.pageConfiger.pageCurrent = 1;
pageData.pageConfiger.pageNum = 1;
getList();
};
const gsId=ref('')
const changeNo = (val) => {
pageData.pageConfiger.pageNum = val;
getList();
@ -147,50 +118,20 @@ const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
const getInfo = () => {
let promes = { sfzh: idEntityCard }
cyryPage(promes).then(res => {
const data = res.records[0] || {};
if (data) {
gsId.value=data.code
}
getList()
}).finally(() => {
pageData.tableConfiger.loading = false;
})
}
// 获取列表
const getList = () => {
pageData.tableConfiger.loading = true;
const promes = {
...pageData.pageConfiger,
...queryFrom.value,
dwbm: gsId.value
}
njryPage(promes).then((res) => {
pageData.tableData = (res.records || []).map((item) => {
return {
...item,
companyName: item.companyName || item.dwmc || item.gsmc || item.dwmcName || item.bagsmc,
reviewYear: item.reviewYear || item.njnd || item.njYear || item.nf || item.year,
phone: item.phone || item.lxdh || item.dh || item.sjhm || item.xssbrdh,
education: item.education || item.whcd || item.whcdText,
certificateNo: item.certificateNo || item.zsbh || item.zsbhm || item.zjbh,
serviceIndustry: item.serviceIndustry || item.fwhy || item.fwhyText || item.hy,
entryDate: item.entryDate || item.rzsj || item.rzrq,
workCardNo: item.workCardNo || item.sgzh || item.sgzNumber,
auditStatus: item.auditStatus || item.shztText || item.shzt,
auditTime: item.auditTime || item.shsj || item.njsj,
sendStatus: item.sendStatus || item.spztText || item.spzt || (item.RefSteap ? "已送培" : "未送培")
};
});
qcckPost(promes,'/mosty-base/bans/njxx/listForSendTraining').then((res) => {
pageData.tableData = res.records || []
pageData.total = res.total;
}).catch((err) => {
console.log(err);
}).finally(() => {
pageData.tableConfiger.loading = false;
});
}).catch((err) => {
pageData.tableConfiger.loading = false;
})
};
const chooseData = (rows) => {

View File

@ -0,0 +1,283 @@
<template>
<!-- top: -63px; -->
<div class="dialog" v-if="dialogForm">
<div class="head_box" style="">
<span class="title">年检培训申请</span>
<div>
<el-button size="small" @click="editBabaEditList" type="primary" :loading="loading" v-if="!disabled">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<FormMessage ref="FormRef" v-model="listQuery" :formList="formList" :labelWidth="140" :rules="rules" :disabled="disabled">
<template #titleNoe>
<el-divider content-position="left"><span style="color: #409eff;">单位基本信息</span></el-divider>
</template>
<template #titleTow>
<el-divider content-position="left"><span style="color: #409eff;">法人信息</span></el-divider>
</template>
<template #titleThree>
<el-divider content-position="left"><span style="color: #409eff;">负责人信息</span></el-divider>
</template>
<template #titleFour>
<el-divider content-position="left"><span style="color: #409eff;">保安信息</span></el-divider>
</template>
<template #titleFive>
<el-divider content-position="left"><span style="color: #409eff;">补充信息</span></el-divider>
</template>
</FormMessage>
</div>
</div>
</template>
<script setup>
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { ref, defineEmits, getCurrentInstance } from 'vue';
import { getDwglnfo, editDwglEdit } from "@/api/badwgl";
const { proxy } = getCurrentInstance();
const { D_BAXX_DWLX, D_BZ_YLJYZK, D_BABA_JYFW, D_BABA_GSXZ, D_BZ_SF } = proxy.$dict('D_BAXX_DWLX', 'D_BZ_YLJYZK', 'D_BABA_JYFW', 'D_BABA_GSXZ', 'D_BZ_SF');
const emit = defineEmits(["refresh"]);
const dialogForm = ref(false);
const FormRef = ref(null);
const listQuery = ref({});
const formList = ref()
const rules = ref({
csmc: [{ required: true, message: "请输入单位名称", trigger: "blur" }],
dwmc: [{ required: true, message: "请输入营业执照登记名称", trigger: "blur" }],
xydm: [{ required: true, message: "请输入信用代码", trigger: "blur" }],
// csdm: [{ required: true, message: "请输入场所代码", trigger: "blur" }],
// gds: [{ required: true, message: "请输入股东数", trigger: "blur" }],
zczj: [{ required: true, message: "请输入注册资金(万元)", trigger: "blur" }],
type: [{ required: true, message: "请选择单位类型", trigger: "blur" }],
csLxdh: [{ required: true, message: "请输入场所电话", trigger: "blur" }],
jyzk: [{ required: true, message: "请选择经营状况", trigger: "blur" }],
jyfw: [{ required: true, message: "请选择经营范围", trigger: "blur" }],
dyrs: [{ required: true, message: "请输入党员人数", trigger: "blur" }],
// gxdwdm: [{ required: true, message: "请选择管辖区县", trigger: "blur" }],
gsxz: [{ required: true, message: "请选择公司性质", trigger: "blur" }],
kyrq: [{ required: true, message: "请选择开业日期", trigger: "blur" }],
zcdz: [{ required: true, message: "请输入场所注册地址", trigger: "blur" }],
jydz: [{ required: true, message: "请输入场所经营地址", trigger: "blur" }],
mqcsyw: [{ required: true, message: "请输入目前从事业务", trigger: "blur" }],
// qzqk: [{ required: true, message: "请输入枪支情况", trigger: "blur" }],
// sfyyzz: [{ required: true, message: "请选择是否有武装押运资质", trigger: "blur" }],
// sfpxzz: [{ required: true, message: "请选择是否有培训资质", trigger: "blur" }],
// sfdzz: [{ required: true, message: "请选择是否成立党组织", trigger: "blur" }],
// zfzrr: [{ required: true, message: "请选择是否为负责人", trigger: "blur" }],
fdrXm: [{ required: true, message: "请输入法人姓名", trigger: "blur" }],
fdrSfzh: [{ required: true, message: "请输入法人账号", trigger: "blur" }],
fdrLxdh: [{ required: true, message: "请输入法人手机号", trigger: "blur" }],
fdrJzdz: [{ required: true, message: "请输入法人地址", trigger: "blur" }],
frSfzZm: [{ required: true, message: "请上传法人身份证正面", trigger: "blur" }],
frSfzFm: [{ required: true, message: "请上传法人身份证反面", trigger: "blur" }],
fzrXm: [{ required: true, message: "请输入负责人姓名", trigger: "blur" }],
fzrSfzh: [{ required: true, message: "请输入负责人身份证号", trigger: "blur" }],
fzrLxdh: [{ required: true, message: "请输入负责人联系电话", trigger: "blur" }],
nl: [{ required: true, message: "请输入负责人联系电话", trigger: "blur" }],
xb: [{ required: true, message: "请输入负责人性别", trigger: "blur" }],
baszsbh: [{ required: true, message: "请输入保安证编号", trigger: "blur" }],
fzrJzdz: [{ required: true, message: "请输入负责人地址", trigger: "blur" }],
fzrSfzZm: [{ required: true, message: "请上传负责人身份证正面", trigger: "blur" }],
fzrSfzFm: [{ required: true, message: "请上传负责人身份证反面", trigger: "blur" }],
// sfba: [{ required: true, message: "请选择是否有保安负责人", trigger: "blur" }],
// bags: [{ required: true, message: "请输入保安公司", trigger: "blur" }],
// bafzr: [{ required: true, message: "请输入保安公司负责人姓名", trigger: "blur" }],
// bars: [{ required: true, message: "请输入保安人数", trigger: "blur" }],
// bafzrsfz: [{ required: true, message: "请输入身份证号", trigger: "blur" }],
// balxdh: [{ required: true, message: "请输入保安负责人联系电话", trigger: "blur" }],
// bajzdz: [{ required: true, message: "请输入保安负责人居住地址", trigger: "blur" }],
// csmj: [{ required: true, message: "请输入场所面积(㎡)", trigger: "blur" }],
yyzzzp: [{ required: true, message: "请上传营业执照", trigger: "blur" }],
cszp: [{ required: true, message: "请上传场所照片", trigger: "blur" }],
// badwbabh: [{ required: true, message: "请输入保安单位备案编号", trigger: "blur" }],
// dwbajgmc: [{ required: true, message: "请输入保安单位备案名称", trigger: "blur" }],
// dwjyxkhm: [{ required: true, message: "请输入保安单位备案名称", trigger: "blur" }],
// dwjyxfzjg: [{ required: true, message: "请输入保安单位备案名称", trigger: "blur" }],
})
const title = ref("新增")
const disabled = ref(false)
// 初始化数据
const init = async (type,id) => {
title.value = type == 'info' ? '详情' : '修改'
disabled.value = type == 'info'
dialogForm.value = true;
formList.value = [
[
{ label: "", prop: "titleNoe", type: "slot" },
],
[
{ label: "单位名称", prop: "csmc", type: "input" },
{ label: "营业执照登记名称", prop: "dwmc", type: "input" },
{ label: "信用代码", prop: "xydm", type: "input" },
],
[
// { label: "场所名称", prop: "csmc", type: "input" },
{ label: "场所代码", prop: "code", type: "input" },
{ label: "股东数", prop: "gds", type: "input" },
{ label: "注册资金(万元)", prop: "zczj", type: "input", lx: "number" },
],
[
{ label: "单位类型", prop: "type", type: "select", options: D_BAXX_DWLX },
{ label: "场所电话", prop: "csLxdh", type: "input" },
{ label: "经营状况", prop: "jyzk", type: "select", options: D_BZ_YLJYZK },
],
[
{ label: "经营范围", prop: "jyfw", type: "select", options: D_BABA_JYFW, multiple: true },
{ label: "党员人数", prop: "dyrs", type: "input", lx: "number" },
{ label: "保安人数", prop: "bagsRysl", type: "input", lx: "number" },
],
[
{ label: "管辖区县", prop: "gxdwdm", type: "department", depMc: "gxdwmc" },
{ label: "公司性质", prop: "gsxz", type: "select", options: D_BABA_GSXZ },
],
[
{ label: "开业日期", prop: "kyrq", type: "date" },
{ label: "场所注册地址", prop: "zcdz", type: "input" },
{ label: "场所经营地址", prop: "jydz", type: "input" },
],
[
{ label: "目前从事业务", prop: "mqcsyw", type: "input" },
{ label: "枪支情况", prop: "qzqk", type: "input" },
{ label: "是否有武装押运资质", prop: "sfyyzz", type: "select", options: D_BZ_SF },
],
[
{ label: "是否有培训资质", prop: "sfpxzz", type: "select", options: D_BZ_SF },
{ label: "是否成立党组织", prop: "sfdzz", type: "select", options: D_BZ_SF },
], [
{ label: "", prop: "titleTow", type: "slot" },
], [
// { label: "是否为负责人", prop: "zfzrr", type: "select", options: D_BZ_SF },
{ label: "法人姓名", prop: "fdrXm", type: "input" },
{ label: "身份证号", prop: "fdrSfzh", type: "input" },
], [
{ label: "手机号码", prop: "fdrLxdh", type: "input" },
{ label: "居住地址", prop: "fdrJzdz", type: "input" },
],
[{ label: "身份证正面", prop: "frSfzZm", type: "upload" },
{ label: "身份证反面", prop: "frSfzFm", type: "upload" },
], [
{ label: "", prop: "titleThree", type: "slot" },
], [
{ label: "负责人姓名", prop: "fzrXm", type: "input" },
{ label: "身份证号", prop: "fzrSfzh", type: "input" },
{ label: "联系电话", prop: "fzrLxdh", type: "input" },
], [
// { label: "手机号码", prop: "pxrq0", type: "date" },
{ label: "年龄", prop: "nl", type: "input", },
{ label: "性别", prop: "xb", type: "input" },
{ label: "保安证编号", prop: "baszsbh", type: "input" },
],
[
{ label: "居住地址", prop: "fzrJzdz", type: "input" },
], [{ label: "身份证正面", prop: "fzrSfzZm", type: "upload" },
{ label: "身份证反面", prop: "fzrSfzFm", type: "upload" },
], [
{ label: "", prop: "titleFour", type: "slot" },
], [
// { label: "是否保安负责人", prop: "sfba", type: "select", options: D_BZ_SF },
// { label: "保安公司", prop: "bags", type: "input" },
{ label: "保安负责人", prop: "bagsFzrXm", type: "input" },
{ label: "身份证号", prop: "bagsFzrSfzh", type: "input" },
{ label: "联系方式", prop: "bagsFzrLxdh", type: "input" },
], [
{ label: "居住地址", prop: "bagsFzrJzd", type: "input" },
// { label: "保安人数", prop: "bars", type: "input", lx: "number" },
{ label: "场所面积(㎡)", prop: "csmj", type: "input", lx: "number" },
], [
{ label: "", prop: "titleFive", type: "slot" },
], [
{ label: "营业执照", prop: "yyzzzp", type: "upload" },
{ label: "武装押运证明", prop: "jyxkz", type: "upload" },
], [{ label: "场所照片", prop: "cszp", type: "upload" },],
[
{ label: "保安单位备案编号", prop: "babh", type: "input" },
{ label: "单位备案机构名称", prop: "bamc", type: "input" },
{ label: "单位经营许可号码", prop: "jyxkzBh", type: "input" },
], [
{ label: "单位经营许发证机构", prop: "jyxkzBfjg", type: "input" },
],
]
getInfo(id)
}
const getInfo = (id) => {
getDwglnfo(id).then(res => {
listQuery.value = res
listQuery.value.frSfzZm = listQuery.value.frSfzZm ? listQuery.value.frSfzZm.split(',') : []
listQuery.value.frSfzFm = listQuery.value.frSfzFm ? listQuery.value.frSfzFm.split(',') : []
listQuery.value.fzrSfzZm = listQuery.value.fzrSfzZm ? listQuery.value.fzrSfzZm.split(',') : []
listQuery.value.fzrSfzFm = listQuery.value.fzrSfzFm ? listQuery.value.fzrSfzFm.split(',') : []
listQuery.value.yyzzzp = listQuery.value.yyzzzp ? listQuery.value.yyzzzp.split(',') : []
listQuery.value.jyxkz = listQuery.value.jyxkz ? listQuery.value.jyxkz.split(',') : []
listQuery.value.cszp = listQuery.value.cszp ? listQuery.value.cszp.split(',') : []
listQuery.value.jyfw = listQuery.value.jyfw ? listQuery.value.jyfw.split(',') : []
})
}
const editBabaEditList = () => {
FormRef.value.submit(() => {
const promes = {
...listQuery.value,
frSfzZm: listQuery.value.frSfzZm ? listQuery.value.frSfzZm.join(',') : '',
frSfzFm: listQuery.value.frSfzFm ? listQuery.value.frSfzFm.join(',') : '',
fzrSfzZm : listQuery.value.fzrSfzZm ? listQuery.value.fzrSfzZm .join(',') : '',
fzrSfzFm: listQuery.value.fzrSfzFm ? listQuery.value.fzrSfzFm.join(',') : '',
yyzzzp: listQuery.value.yyzzzp ? listQuery.value.yyzzzp.join(',') : '',
jyxkz: listQuery.value.jyxkz ? listQuery.value.jyxkz.join(',') : '',
cszp: listQuery.value.cszp ? listQuery.value.cszp.join(',') : '',
jyfw: listQuery.value.jyfw ? listQuery.value.jyfw.join(',') : '',
}
editDwglEdit(promes).then(res => {
proxy.$message({
message: "编辑成功",
type: "success",
});
dialogForm.value = false;
FormRef.value.reset()
})
});
}
const loading = ref(false)
const save = () => {
FormRef.value.submit(() => {
});
}
const close = () => {
dialogForm.value = false;
FormRef.value.reset()
};;
defineExpose({ init })
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.table-title {
line-height: 40px;
text-align: center;
background: #f5f5f5;
color: #333;
cursor: pointer;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="dialog" v-if="dialogVisible">
<div class="dialog viewDetailsDialog" v-if="dialogVisible">
<div class="head_box">
<span class="title">{{ title }}</span>
<div>
@ -138,7 +138,9 @@ defineExpose({ open })
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
.viewDetailsDialog {
top:-58px;
}
.dialog {
::v-deep {
.imgWrapper {

View File

@ -8,15 +8,25 @@
<div class="tabBox">
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #bxxLx="{ row }">
<!-- <template #bxxLx="{ row }">
<DictTag :value="row.bxxLx" :tag="false" :options="D_BZ_BXDLX" />
</template> -->
<template #gsxz="{ row }">
<DictTag :value="row.gsxz" :tag="false" :options="D_BABA_GSXZ" />
</template>
<template #bxds="{ row }">
<div>{{ row.bxds?.length }}</div>
<template #sfyyzz="{ row }">
<DictTag :value="row.sfyyzz" :tag="false" :options="D_BZ_SF" />
</template>
<template #sfpxzz="{ row }">
<DictTag :value="row.sfpxzz" :tag="false" :options="D_BZ_SF" />
</template>
<template #sfdzz="{ row }">
<DictTag :value="row.sfdzz" :tag="false" :options="D_BZ_SF" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('view', row)">详情</el-link>
<el-link type="primary" @click="openPxApllication('eitd',row)">编辑</el-link>
<el-link type="primary" @click="openPxApllication('info', row)">详情</el-link>
</template>
</MyTable>
@ -24,29 +34,32 @@
...pageData.pageConfiger,
total: pageData.total
}"></Pages>
<!-- <ViewDetailsDialog ref="detailsRef" v-model="visible" /> -->
<ViewDetailsDialog ref="detailsRef" v-model="visible" />
</div>
</div>
<PxApllication ref="pxApllication" />
</template>
<script setup>
import { onMounted, reactive, ref } from "vue";
import { onMounted, reactive, ref,getCurrentInstance } from "vue";
import MyTable from '@/components/aboutTable/MyTable.vue';
import Pages from '@/components/aboutTable/Pages.vue';
import PageTitle from '@/components/aboutTable/PageTitle.vue';
import ViewDetailsDialog from "./components/viewDetailsDialog.vue";
// import ViewDetailsDialog from "./components/viewDetailsDialog.vue";
import PxApllication from "./components/pxApllication.vue";
import { qcckPost } from "@/api/qcckApi.js";
const { proxy } = getCurrentInstance();
const { D_BABA_GSXZ,D_BZ_SF } =proxy.$dict('D_BABA_GSXZ','D_BZ_SF');
const visible = ref(false);
const detailsRef = ref(null);
const D_BZ_BXDLX = ref([]);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
loading: false,
},
total: 0,
pageConfiger: {
@ -56,9 +69,17 @@ const pageData = reactive({
controlsWidth: 180,
tableColumn: [
{ label: "单位名称", prop: "dwmc" },
{ label: "信用代码", prop: "xydm" },
{ label: "场所名称", prop: "csmc" },
{ label: "场所电话", prop: "csLxdh" }
{ label: "单位地址", prop: "csdz" },
{ label: "公司性质", prop: "gsxz",showSolt:'gsxz' },
{ label: "从事业务", prop: "mqcsyw" },
{ label: "是否有武装资质", prop: "sfyyzz",showSolt:'sfyyzz' },
{ label: "枪支情况", prop: "qzqk" },
{ label: "是否有培训资质", prop: "sfpxzz",showSolt:'sfpxzz' },
{ label: "负责人姓名", prop: "dwfzrxm" },
{ label: "负责人电话", prop: "dwfzrlxdh" },
{ label: "保安人数", prop: "bars" },
{ label: "是否成立党组织", prop: "sfdzz",showSolt:'sfdzz' },
{ label: "党员人数", prop: "dyrs" },
]
});
@ -93,6 +114,12 @@ const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
// 保安证申请
const pxApllication = ref(null);
const openPxApllication = (type, row) => {
pxApllication.value.init(type, row.id);
}
onMounted(() => {
getList();

View File

@ -6,8 +6,8 @@ function resolve(dir) {
// const serverHost = "http://192.168.1.98:8006";//毛毛
// const serverHost = "http://192.168.1.32:8066";//波哥
// const serverHost = "http://192.168.0.231:8006"//线上
const serverHost = "https://lam.clcud.com:1443";//波哥
// const serverHost = "http://127.0.0.1:8006"/bagl/mosty-base/docs.html
const serverHost = "http://47.108.232.77:9537";//波哥
// const serverHost = "http://127.0.0.1:8006"
module.exports = {
publicPath: "./",
outputDir: "ab",
@ -39,14 +39,13 @@ module.exports = {
proxyReq.setHeader("Connection", "Keep-Alive"); //设置长连接
}
},
// https://lam.clcud.com:1443/bagl/mosty-base/docs.html
'/bagl/mosty-base': {
'/mosty-base': {
target: serverHost, // 后端服务器地址
changeOrigin: true, // 允许跨域
secure: false, // 如果是https需要设置为false
// pathRewrite: {
// '^/bagl/mosty-base': '/mosty-base' // 精确路径重写
// }
pathRewrite: {
'^/bagl/mosty-base': '/mosty-base' // 精确路径重写
}
},
"/data/rec": {
target: "http://80.93.24.195:8181",