This commit is contained in:
jiask 2025-11-04 15:40:39 +08:00
parent b0076d4bc0
commit 1c14c5e546
12 changed files with 375 additions and 234 deletions

View File

@ -174,3 +174,37 @@ export function getDevicelistApi(data) {
params:data
})
}
// 备份人员管理-分页查询信息
export function getCertificateUserListPageApi(data) {
return request({
url: '/certificate/certificate_system/list',
method: 'get',
headers: {
//"merchant-id":"378915229716713472",
},
params:data
})
}
export function getAccessListPageApi(data) {
return request({
url: '/certificate/certificate_manage/certificateInfo/getAccessListByCertificateNo',
method: 'get',
headers: {
//"merchant-id":"378915229716713472",
},
params:data
})
}
export function getCheckListPageApi(data) {
return request({
url: '/certificate/certificate_manage/certificateInfo/getCheckListByCertificateNo',
method: 'get',
headers: {
//"merchant-id":"378915229716713472",
},
params:data
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -47,9 +47,9 @@
<el-table-column label="有效期至" align="center" width="120" prop="issueLifespan" :show-overflow-tooltip="true"/>
<el-table-column label="设备编号" align="center" prop="deviceNo" :show-overflow-tooltip="true"/>
<el-table-column label="槽位编号" align="center" prop="soltNo" :show-overflow-tooltip="true"/>
<el-table-column label="存取类型" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="存取证任务下达时间" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="实际存取证时间" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="存取类型" align="center" prop="typeName" :show-overflow-tooltip="true"/>
<el-table-column label="存取证任务下达时间" align="center" prop="createTime" :show-overflow-tooltip="true"/>
<el-table-column label="实际存取证时间" align="center" prop="realProcessDate" :show-overflow-tooltip="true"/>
</el-table>
<pagination
v-show="total>0"
@ -122,8 +122,7 @@
</template>
<script>
// import { stockInoutFlowingPageApi,stockInoutStatisticsPageApi } from "@/api/foodManage/stockReport";
import { getAccessListPageApi,getCheckListPageApi } from "@/api/certificateManage/index";
export default {
name: "CertificateLogList",
dicts: [],
@ -270,11 +269,11 @@ export default {
param.endDate=undefined;
}
console.log(param)
// stockInoutFlowingPageApi(param).then(response => {
// this.tableListData = response.rows;
// this.total = Number(response.total);
// this.loading = false;
// });
getAccessListPageApi(param).then(response => {
this.tableListData = response.rows;
this.total = Number(response.total);
this.loading = false;
});
},
//-----------
/** 搜索按钮操作 */
@ -306,11 +305,11 @@ export default {
param.endDate=undefined;
}
console.log(param)
// stockInoutStatisticsPageApi(param).then(response => {
// this.tableListData2 = response.rows;
// this.total2 = Number(response.total);
// this.loading = false;
// });
getCheckListPageApi(param).then(response => {
this.tableListData2 = response.rows;
this.total2 = Number(response.total);
this.loading = false;
});
},
defaultDateRange() {
const end = new Date(new Date().toLocaleDateString());

View File

@ -155,6 +155,40 @@
</div>
</el-dialog>
<el-dialog :title="title2+''" :visible.sync="open2" width="700px" append-to-body>
<el-tabs v-model="activeName">
<!-- 基础设置 -->
<el-tab-pane label="" name="baseSetting" style="height: 100px;">
<el-form ref="baseForm" :model="baseForm" :rules="baseFormRules2" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="出境日期" prop="exitTime">
<el-date-picker
v-model="baseForm.exitTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd" style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="入境日期" prop="entryTime">
<el-date-picker
v-model="baseForm.entryTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd" style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
</el-tabs>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm2"> </el-button>
<el-button @click="cancel2"> </el-button>
</div>
</el-dialog>
<el-dialog title="核验任务下达" :visible.sync="openTask" width="600px" append-to-body>
<el-form ref="taskForm" :model="taskForm" :rules="taskRules" label-width="120px">
<el-row>
@ -218,6 +252,9 @@
title: "",
//
open: false,
title2: "",
//
open2: false,
checked: false,
selectName:"",
selectIdNumber:"",
@ -252,11 +289,13 @@
},
//
baseFormRules: {
name: [
{ required: true, message: "姓名不能为空", trigger: "blur" }
],
},
baseFormRules2: {
exitTime: [{ required: true, message: "出境时间不能为空", trigger: "blur" }],
entryTime: [{ required: true, message: "入境时间不能为空", trigger: "blur" }],
},
logTableData:[],//
//
@ -365,14 +404,20 @@
return;
}
var titlemsg="是否确定自助取证?"
var
titled="自助取证"
if(type==3){
titlemsg="是否确定自助取证?"
titled="自助取证"
}else if(type==4){
titlemsg="是否确定管理员取证?"
titled="管理员取证"
}else if(type==5){
titlemsg="是否确定应急取证?"
titled="应急取证"
}else if(type==6){
titlemsg="是否确定代人取证?"
titled="代人取证"
}
if(type==6){
this.open = true;
@ -384,17 +429,31 @@
this.allreplace=response;
});
}else{
this.$modal.confirm(titlemsg).then(() => {
getCertificateTakeAddPageApi({"certificateNos":CertificateNos,"type":type,"idNumber":"","name":""}).then(response => {
this.getList();
this.$modal.msgSuccess("操作成功");
});
}).catch(() => {});
this.selectCertificateNos=CertificateNos;
this.selectType=type;
this.open2 = true;
this.title2 = titled;
}
},
submitForm2: function() {
const param={"certificateNos":this.selectCertificateNos,"type":this.selectType,"exitTime":this.baseForm.exitTime,"entryTime":this.baseForm.entryTime};
console.log("param",param);
getCertificateTakeAddPageApi(param).then(response => {
this.getList();
this.open2 = false;
this.reset();
this.$modal.msgSuccess("操作成功");
});
},
//
cancel2() {
this.open2 = false;
this.reset();
},
submitForm: function() {
console.log("this.baseForm",this.baseForm);
getCertificateTakeAddPageApi({"certificateNos":this.selectCertificateNos,"type":this.selectType,"idNumber":this.selectIdNumber,"name":this.selectName}).then(response => {
const param={"certificateNos":this.selectCertificateNos,"type":this.selectType,"idNumber":this.selectIdNumber,"name":this.selectName};
console.log("param",param);
getCertificateTakeAddPageApi(param).then(response => {
this.getList();
this.open = false;
this.reset();

View File

@ -75,7 +75,7 @@
<span>{{Number(scope.row.soltNum)-Number(scope.row.soltUsedNum)}}</span>
</template>
</el-table-column>
<el-table-column label="所属单位" align="center" prop="unitName" :show-overflow-tooltip="true"></el-table-column>
<el-table-column label="所属单位" align="center" prop="deptName" :show-overflow-tooltip="true"></el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope">
@ -108,7 +108,25 @@
<!-- 基础设置 -->
<el-tab-pane label="基础设置" name="baseSetting" style="height: 400px;">
<el-form ref="baseForm" :model="baseForm" :rules="baseFormRules" label-width="80px">
<el-col :span="12" v-if="baseForm.deptId !== 0">
<el-form-item label="单位" prop="deptId" style="width: 100%;">
<treeselect
v-model="baseForm.deptId"
:options="deptOptions"
:normalizer="normalizer"
placeholder="选择单位"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="deviceType">
<el-select v-model="baseForm.deviceType" placeholder="护照柜类型" clearable>
<el-option label="小型" value="1"/>
<el-option label="中型" value="2"/>
<el-option label="大型" value="3"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备编号" prop="deviceNumber">
<el-input v-model="baseForm.deviceNumber" placeholder="请输入设备编号" maxlength="30" clearable/>
@ -167,13 +185,24 @@
</template>
<script>
import {
listDept,
getDept,
delDept,
addDept,
updateDept,
listDeptExcludeChild,
} from '@/api/system/dept'
import { systemAreaTreeApi,getCanteenByAreaApi,getStallByCanteenApi } from "@/api/base/stall";
import { getDeviceListPageApi,addDeviceApi, updateDeviceApi, deleteDeviceApi,getMenuRecipeDetailApi,uploadApkApi } from "@/api/device/index";
import base64 from 'base-64';
import { getToken } from '@/utils/auth'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: "",
dicts: ["dev_comm_status","dev_status"],
components: { Treeselect },
data() {
return {
//
@ -190,6 +219,7 @@
total: 0,
//
tableListData: [],
deptOptions: [],
//
title: "",
//
@ -221,6 +251,12 @@
},
//
baseFormRules: {
deptId: [
{ required: true, message: "单位不能为空", trigger: "blur" }
],
deviceType: [
{ required: true, message: "设备类型不能为空", trigger: "blur" }
],
deviceNumber: [
{ required: true, message: "设备编号不能为空", trigger: "blur" }
],
@ -280,23 +316,6 @@
//
url: process.env.VUE_APP_BASE_API + '/file/upload',
},
appFormRules:{
version: [
{ required: true, message: "版本号不能为空", trigger: "blur" }
],
versionName: [
{ required: true, message: "版本号名称不能为空", trigger: "blur" }
],
apkName: [
{ required: true, message: "APP名称不能为空", trigger: "blur" }
],
apkPath: [
{ required: true, message: "APP路径不能为空", trigger: "blur" }
],
updateContent: [
{ required: true, message: "更新内容不能为空", trigger: "blur" }
]
},
};
},
mounted(){
@ -358,6 +377,21 @@
this.reset();
this.open = true;
this.title = "新增";
listDept().then((response) => {
this.deptOptions = this.handleTree(response.data, 'deptId');
console.log("this.deptOptions",this.deptOptions)
})
},
/** 转换部门数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.deptId,
label: node.deptName,
children: node.children,
}
},
/** 修改按钮操作 */
handleUpdate(row) {
@ -366,6 +400,9 @@
this.baseForm = Object.assign({}, row)
// this.$set(this,"metadata",row.deviceMetadata)
this.title = "修改";
listDept().then((response) => {
this.deptOptions = this.handleTree(response.data, 'deptId')
})
},
handleTabClick(tab, event) {
console.log(tab, event);
@ -407,7 +444,6 @@
console.log(this.baseForm)
this.$refs["baseForm"].validate(valid => {
if (valid) {
this.baseForm.deviceType=20
// this.baseForm.metadata=this.metadata
if (this.baseForm.deviceId != undefined) {
updateDeviceApi(this.baseForm).then(response => {
@ -477,7 +513,7 @@
apkName:null,
apkPath:null,
updateContent:null,
deviceType:20,//20APP 2APP
deviceType:null,//20APP 2APP
};
this.resetForm("appForm");
this.openApp = true;

View File

@ -108,22 +108,22 @@
</template>
</el-table-column>
<el-table-column label="用户姓名" align="center" prop="nickName" :show-overflow-tooltip="true"/>
<el-table-column label="身份证号" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="身份证号" align="center" prop="idNumber" :show-overflow-tooltip="true"/>
<el-table-column label="手机号码" align="center" prop="phonenumber" width="120">
<template slot-scope="scope">
<span>{{ hidePhone(scope.row.phonenumber) }}</span>
</template>
</el-table-column>
<el-table-column label="单位职务" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="人员类别" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="应备案类型" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="责任处室" align="center" prop="" :show-overflow-tooltip="true"/>
<el-table-column label="有无证件" align="center" prop="" :show-overflow-tooltip="true"/>
<!-- <el-table-column label="创建时间" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column> -->
<el-table-column label="单位职务" align="center" prop="postName" :show-overflow-tooltip="true"/>
<el-table-column label="人员类别" align="center" prop="userTypeName" :show-overflow-tooltip="true"/>
<el-table-column label="责任处室" align="center" prop="deptName" :show-overflow-tooltip="true"/>
<el-table-column label="有无证件" align="center" prop="" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.isHave==0||scope.row.isHave==null" style="color: #FF7322;font-size: 15px;"></span>
<span v-if="scope.row.isHave==1" style="color: #03DF6D;font-size: 15px;"></span>
</template>
</el-table-column>
</el-table>
<pagination
@ -166,6 +166,7 @@ import {
listUser,
deptTreeSelect,
} from '@/api/system/user'
import {getCertificateUserListPageApi} from "@/api/certificateManage/index"
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
@ -206,6 +207,7 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
isCertificate:"1",
userName: undefined,
phonenumber: undefined,
deptId: undefined,
@ -348,13 +350,13 @@ export default {
},
/** 导出按钮操作 */
handleExport() {
// this.download(
// 'system/user/export',
// {
// ...this.queryParams,
// },
// `user_${new Date().getTime()}.xlsx`,
// )
this.download(
'system/user/export2',
{
...this.queryParams,
},
`user_${new Date().getTime()}.xlsx`,
)
},
//
formatDate(sdate) {

View File

@ -2,7 +2,7 @@
<div class="app-container home">
<el-row :gutter="20">
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>证件管理系统</h2>
<h2>公职人员护照管理系统</h2>
<p>
<b>当前版本:</b> <span>v{{ version }}</span>
</p>

View File

@ -1,7 +1,7 @@
<template>
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">证件管理系统</h3>
<h3 class="title">公职人员护照管理系统</h3>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"

View File

@ -3,7 +3,7 @@
<div class="login">
<div class="login-form" style="width: 450px;">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" >
<h3 class="title">证件管理系统</h3>
<h3 class="title">公职人员护照管理系统</h3>
<template v-if="loginMethod === 'password'">
<el-form-item prop="username">
<el-input
@ -406,7 +406,7 @@ export default {
align-items: center;
height: 100%;
width: 100%;
background-image: url("../assets/images/login-bg.png");
background-image: url("../assets/images/logind.jpg");
background-repeat: no-repeat;
background-size: 100% 100%; /* 确保背景图覆盖整个容器 */
background-position: center center; /* 居中显示背景图 */

View File

@ -1,7 +1,7 @@
<template>
<div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">证件管理系统</h3>
<h3 class="title">公职人员护照管理系统</h3>
<el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

View File

@ -2,7 +2,7 @@
<div class="container">
<div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">证件管理系统</h3>
<h3 class="title">公职人员护照管理系统</h3>
<el-form-item prop="nickName">
<el-input v-model="registerForm.nickName" type="text" auto-complete="off" placeholder="请输入姓名">

View File

@ -455,10 +455,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-form-item label="身份证" prop="idNumber">
<el-input
v-model="form.email"
placeholder="请输入邮箱"
v-model="form.idNumber"
placeholder="请输入身份证号码"
maxlength="50"
/>
</el-form-item>
@ -518,6 +518,18 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备案人员">
<el-radio-group v-model="form.isCertificate">
<el-radio
v-for="dict in isCertificates"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户类别">
<el-select v-model="form.userType" placeholder="请选择用户类别" style="width: 100%;">
@ -530,23 +542,11 @@
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="APP用户">
<el-radio-group v-model="form.isCustomer">
<el-radio
v-for="item in isCustomerList"
:key="item.id"
:label="item.id"
>{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="岗位">
<el-select
v-model="form.postIds"
multiple style="width: 100%;"
v-model="form.postId"
style="width: 100%;"
placeholder="请选择岗位"
>
<el-option
@ -815,6 +815,7 @@ export default {
//
loginTypeArr: [],
isCustomerList:[{id:"0",name:"是"},{id:"1",name:"否"}],
isCertificates:[{"value":0,"label":"否"},{"value":1,"label":"是"}],
//
multipleLimit: 1,
//
@ -880,6 +881,10 @@ export default {
trigger: 'blur',
},
],
idNumber: [
{ required: true, message: "身份证不能为空", trigger: "blur" },
{ validator: this.validateIDCard, trigger: 'blur' }
],
nickName: [
{
required: true,
@ -998,6 +1003,17 @@ export default {
})
},
methods: {
validateIDCard(rule, value, callback) {
// 15
const reg15 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
// 18
const reg18 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}(\d|X|x)$/;
if (reg15.test(value) || reg18.test(value)) {
callback(); //
} else {
callback(new Error('请输入有效的身份证号')); //
}
},
/* 手机号码脱敏 */
hidePhone(phone) {
if (!phone) return ''
@ -1176,12 +1192,7 @@ export default {
const userId = row.userId || this.ids
getUser(userId).then((response) => {
this.form = response.data
// if(this.form.phonenumber&&this.form..phonenumber!=""){
// this.$set(this.form,"phonenumber",decryptWithSM4(response.data.phonenumber))
// }
// if(this.form.email&&this.form..email!=""){
// this.$set(this.form,"email",decryptWithSM4(response.data.email))
// }
console.log("this.form",this.form);
const loginType = response.data.loginType
if (loginType) {
this.loginTypeArr = loginType.split(',')