This commit is contained in:
jiask 2025-12-14 19:32:56 +08:00
parent 28dc340780
commit cdba7d7b6e
9 changed files with 490 additions and 206 deletions

View File

@ -251,7 +251,7 @@ export function getCertificateCheckListPageApi(data) {
// 证件管理-新增验证
export function addCertificateCheckApi(data) {
return request({
url: '/certificate/certificate_manage/certificateInfo/addCheck',
url: '/certificate/certificate_verify/certificateVerify/add',
method: 'post',
headers: {
//"merchant-id":"378915229716713472",
@ -272,7 +272,7 @@ export function applyCertificateNoListApi(data) {
params:data
})
}
// 证件领用申请-代领人列表-不分页
// 证件领用申请-代领人列表-不分页
export function thridListApi(data) {
return request({
url: '/certificate/certificate_system/certificateInfo/thridList',
@ -447,4 +447,4 @@ export function getFeedbackListPageApi(data) {
},
params:data
})
}
}

View File

@ -116,6 +116,7 @@
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:before-upload="beforeUpload"
>
<el-button
type="success"
@ -231,7 +232,7 @@
</el-form-item>
</el-col>
<el-col :span="12" v-if="baseForm.deptId !== 0">
<el-form-item label="单位" prop="deptId" style="width: 100%;">
<el-form-item label="单位" prop="deptId" style="width: 100%;" disabled="true">
<treeselect
v-model="baseForm.deptId"
:options="deptOptions"
@ -242,14 +243,14 @@
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" prop="phone">
<el-input v-model="baseForm.phone" placeholder="请输入" maxlength="30" clearable/>
<el-input v-model="baseForm.phone" placeholder="请输入" maxlength="30" readonly="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model="baseForm.idNumber" placeholder="请输入" maxlength="30" clearable/>
<el-input v-model="baseForm.idNumber" placeholder="请输入" maxlength="30" readonly="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -281,7 +282,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="证件编号" prop="certificateNo">
<el-input v-model="baseForm.certificateNo" :readonly="isReadOnly" placeholder="请输入" maxlength="30" clearable/>
<el-input v-model="baseForm.certificateNo" placeholder="请输入" maxlength="30" clearable/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -305,6 +306,8 @@
v-model="baseForm.issueLifespan"
type="date"
placeholder="选择日期"
:picker-options="pickerOptionsIssueDay"
@focus="issueLifespanDateFocus"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
@ -377,12 +380,24 @@
<el-form ref="taskForm" :model="taskForm" :rules="taskRules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item label="核验截止日期" prop="processDate">
<el-form-item label="核验开始日期" prop="startTime">
<el-date-picker
v-model="taskForm.processDate"
v-model="taskForm.startTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd" style="width: 100%;"
:picker-options="pickerOptionsToday"
@focus="startDateFocus"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="核验结束日期" prop="endTime">
<el-date-picker
v-model="taskForm.endTime"
type="date"
placeholder="选择日期"
:picker-options="pickerOptionsStart"
@focus="endDateFocus"
format="yyyy-MM-dd" style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-col>
@ -543,11 +558,20 @@
openTask: false,
//
taskForm: {
startTime:"",
endTime:"",
processDate:""
},
//
taskRules: {
processDate: [
startTime: [
{
required: true,
message: '核验开始日期不能为空',
trigger: 'blur',
},
],
endTime: [
{
required: true,
message: '核验截止日期不能为空',
@ -555,6 +579,35 @@
},
]
},
pickerOptionsToday: {
disabledDate(time) {
//
const today = new Date();
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
pickerOptionsStart: {
disabledDate(time) {
//
const startTime=this.taskForm.startTime;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
pickerOptionsIssueDay:{
disabledDate(time) {
//
const startTime=this.baseForm.issueDay;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
};
},
mounted(){
@ -574,6 +627,51 @@
callback(new Error('请输入有效的身份证号')); //
}
},
startDateFocus() {
this.taskForm.endTime = ''
let endTime = this.taskForm.endTime;
if (!endTime) return;
let that = this;
that.pickerOptionsToday = {
disabledDate(time) {
//
const today = new Date();
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
endDateFocus() {
let startTime = this.taskForm.startTime;
if (!startTime) return;
let that = this;
that.pickerOptionsStart = {
disabledDate(time) {
//
const startTime=that.taskForm.startTime;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
issueLifespanDateFocus() {
let startTime = this.baseForm.issueDay;
if (!startTime) return;
let that = this;
that.pickerOptionsIssueDay = {
disabledDate(time) {
//
const startTime=that.baseForm.issueDay;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
handleRadioChange(val){
if(val==1){
this.userNameFlage=true;
@ -745,17 +843,26 @@
console.log("this.baseForm",this.baseForm);
this.$refs["baseForm"].validate(valid => {
if (valid) {
if (this.baseForm.createTime != undefined) {
if (this.baseForm.certificateId != undefined&&this.baseForm.certificateId != null) {
updateCertificateInfoApi(this.baseForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
if(response.code==200){
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg);
}
});
} else {
addCertificateInfoApi(this.baseForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
if(response.code==200){
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}else{
this.$modal.msgError(response.msg);
}
});
}
}
@ -786,6 +893,8 @@
console.log("this.baseForm2",this.baseForm2);
this.$refs["baseForm2"].validate(valid => {
if (valid) {
this.$set(this.baseForm,"birthday",this.selectItme.birthday)
this.$set(this.baseForm,"idNumber",this.selectItme.idNumber)
this.$set(this.baseForm,"phone",this.selectItme.phone)
this.$set(this.baseForm,"name",this.selectItme.userName)
this.$set(this.baseForm,"userId",this.selectItme.userId)
@ -829,8 +938,18 @@
...this.queryParams
}, `证件信息_${new Date().getTime()}.xlsx`);
},
beforeUpload(file){
const isLt2M = file.size / 1024 / 1024 < 0.5;
if (!isLt2M) {
this.$message.error('上传文件大小不能超过 500KB!');
return false;
}
},
//
handleFileUploadProgress(event, file, fileList) {
console.log("============");
console.log(file);
console.log(file.length);
this.upload.isUploading = true
},
//
@ -865,6 +984,10 @@
},
/** 远程校验按钮操作 */
handleTask() {
if(this.userIds==undefined||this.userIds==null||this.userIds.length==0){
this.$modal.msgError("请选择核验人员!");
return;
}
this.resetTask()
this.openTask = true
},
@ -876,19 +999,29 @@
//
resetTask() {
this.taskForm = {
processDate:""
startTime:"",
endTime:""
}
this.resetForm('taskForm')
},
/** 提交按钮 */
submitTask: function () {
this.$refs['taskForm'].validate((valid) => {
let param = Object.assign({},this.taskForm)
console.log(param)
let paramd = Object.assign({},this.taskForm)
console.log(paramd)
console.log(this.ids)
if (valid) {
param.userIds=this.userIds;
param.checkType="2";
paramd.userIds=this.userIds;
paramd.checkType="2";
let param={
verifyTitle:"一人多证核验",
startTime:paramd.startTime,
endTime:paramd.endTime,
verifyUsers:this.userIds,
verifyType:"2",
type:"100000",
noticeType:"2"
}
addCertificateCheckApi(param).then(response => {
if(response.code=200){
this.$modal.msgSuccess("验证下发成功");

View File

@ -41,7 +41,7 @@
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
@click="handleExport"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@ -61,15 +61,20 @@
<el-table-column label="证件类型" align="center" prop="certificateTypeName" :show-overflow-tooltip="true"/>
<el-table-column label="证件编号" align="center" prop="certificateNo" :show-overflow-tooltip="true"/>
<el-table-column label="证件有效期至" align="center" prop="issueLifespan" :show-overflow-tooltip="true"/>
<el-table-column label="过期天数" align="center" prop="" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.processGapDate<=10" style="color: #FEE838;font-size: 25px;">{{scope.row.processGapDate}}</span>
<span v-else-if="scope.row.processGapDate<=20" style="color: orange;font-size: 25px;">{{scope.row.processGapDate}}</span>
<span v-else="scope.row.processGapDate<=30" style="color: red;font-size: 25px;">{{scope.row.processGapDate}}</span>
<el-table-column label="过期类型" align="center" prop="" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.type==1" style="color: orange;font-size: 25px;">临期</span>
<span v-else="scope.row.type==2" style="color: red;font-size: 25px;">过期</span>
</template>
</el-table-column>
<el-table-column label="天数" align="center" prop="" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.type==1" style="color: orange;font-size: 25px;">{{scope.row.processGapDate}}</span>
<span v-else="scope.row.type==2" style="color: red;font-size: 25px;">{{scope.row.processGapDate}}</span>
</template>
</el-table-column>
<!-- <el-table-column label="过期类型" align="center" prop="" :show-overflow-tooltip="true">
</el-table-column> -->
</el-table>
@ -317,13 +322,13 @@
},
mounted(){
this.getList();
this.getCertificateStatistics();
this.getCertificateStatistics();
},
methods: {
/** 查询列表 */
getCertificateStatistics() {
let param = {}
getCertificateStatistics() {
let param = {}
getCertificateStatisticsApi(param).then(response => {
this.statisticsData = response.data
});

View File

@ -1,15 +1,15 @@
<template>
<div class="app-container">
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
<el-form-item label="关键字" prop="keyWord">
<el-input
v-model="queryParams.keyWord"
placeholder="请输入关键字"
placeholder="请输入申请人、身份证号码、证件编号"
clearable maxlength="20"
style="width: 300px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-form-item>
<!-- <el-form-item label="身份证号" prop="idNumber">
<el-input
v-model="queryParams.idNumber"
@ -20,7 +20,7 @@
/>
</el-form-item> -->
<!-- <el-form-item label="证件类型" prop="certificateType">
<el-select v-model="queryParams.certificateType" placeholder="证件类型" clearable style="width: 100%;">
<el-select v-model="queryParams.certificateType" placeholder="证件类型" clearable style="width: 100%;">
<el-option
v-for="dict in dict.type.sys_certificate_type"
:key="dict.value"
@ -154,15 +154,15 @@
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title+''" :visible.sync="open" width="1000px" append-to-body>
<el-dialog :title="title+''" :visible.sync="open" width="1000px" append-to-body>
<el-form ref="baseForm" :model="baseForm" :rules="baseFormRules" label-width="120px" style="width: 100%;height: 650px;overflow-y: auto;padding-right: 10px;">
<el-row>
<el-col :span="12">
<el-form-item label="申请类型" prop="applyType" required>
<el-radio-group v-model="baseForm.applyType" @change="changeApplyType">
<el-radio label="1">存证</el-radio>
<el-radio label="2">取证</el-radio>
</el-radio-group>
<el-radio label="2">取证</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
@ -183,7 +183,7 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-col>
<el-col :span="12">
<el-form-item label="证件编号" prop="certificateNos">
<el-select v-model="baseForm.certificateNos" multiple placeholder="请先选择申请人再选择证件编号" clearable style="width: 100%;">
@ -212,8 +212,8 @@
<el-form-item label="证件用途" prop="applyReason">
<el-radio-group v-model="baseForm.applyReason">
<el-radio label="1">公事</el-radio>
<el-radio label="2">私事</el-radio>
</el-radio-group>
<el-radio label="2">私事</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
@ -224,8 +224,8 @@
<el-col :span="12" v-if="baseForm.applyType==2">
<el-form-item label="计划出国地点" prop="exitAddr">
<el-input v-model="baseForm.exitAddr" placeholder="计划出国(境)地点" maxlength="30" clearable/>
</el-form-item>
</el-col>
</el-form-item>
</el-col>
<el-col :span="12" v-if="baseForm.applyType==2">
<el-form-item label="计划出国日期" prop="exitTime">
<el-date-picker
@ -250,8 +250,8 @@
<el-form-item label="允许他人代办" prop="isThrid" required>
<el-radio-group v-model="baseForm.isThrid" @change="changeIsThrid">
<el-radio label="1"></el-radio>
<el-radio label="2"></el-radio>
</el-radio-group>
<el-radio label="2"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="baseForm.isThrid==1">
@ -263,7 +263,7 @@
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="baseForm.isThrid==1">
@ -275,7 +275,7 @@
<el-form-item label="备注" prop="remark">
<el-input v-model="baseForm.remark" type="textarea" placeholder="请输入备注" maxlength="100"></el-input>
</el-form-item>
</el-col>
</el-col>
<el-col :span="24">
<el-form-item label="附件上传">
<el-upload
@ -306,7 +306,7 @@
<div style="font-size: 16px;margin-bottom: 4px;">4.使用完毕后请及时归还证件</div>
</el-col>
</el-row>
</el-form>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="success" @click="submitForm(-1)"> </el-button>
<el-button type="primary" @click="submitForm(0)"> </el-button>
@ -325,21 +325,21 @@
<el-descriptions-item>
<template slot="label">申请人</template>
{{viewRow.userName}}
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">证件编号</template>
{{viewRow.certificateNo}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">证件用途</template>
<template slot="label">证件用途</template>
<span v-if="viewRow.applyReason==1">公事</span>
<span v-if="viewRow.applyReason==2">私事</span>
</el-descriptions-item>
</el-descriptions-item>
<el-descriptions-item :span="2">
<template slot="label">事由</template>
<div>
{{viewRow.applyDetail}}
</div>
</div>
</el-descriptions-item>
<el-descriptions-item v-if="viewRow.applyType==1">
<template slot="label">证件柜</template>
@ -379,16 +379,16 @@
<el-descriptions-item :span="2">
<template slot="label">附件</template>
<div v-if="viewRow.fileList&&viewRow.fileList.length>0" style="width: 100%;height: 100px;display: flex;align-items: center;">
<div v-if="viewRow.fileList&&viewRow.fileList.length>0" style="width: 100%;height: 100px;display: flex;align-items: center;">
<img v-for="(item,index) in viewRow.fileList" :key="index" :src="item.url" @click="handlePictureCardPreview(item)" style="width: 60px;height: 60px;margin-right: 8px;"/>
</div>
</div>
<div v-else>无附件</div>
</el-descriptions-item>
</el-descriptions>
</el-descriptions>
<div style="width: 100%;height: auto;padding: 20px;">
<div style="margin-bottom: 20px;font-weight: 600;font-size: 18px;">流程</div>
<el-steps :active="checkProcess.length" finish-status="success" :space="300" align-center>
<el-steps :active="checkProcess.length" finish-status="success" :space="300" align-center>
<el-step v-for="(item,index) in checkProcess" :key="index" :title="item.createBy+'-'+item.processName" >
<template slot="description">
<div>
@ -401,8 +401,8 @@
</el-step>
</el-steps>
</div>
</div>
</el-dialog>
</div>
</el-dialog>
<el-dialog title="附件列表" :visible.sync="openFile" width="500px" append-to-body>
<div style="width: 100%;height: 240px;padding: 10px;color: #46a6ff;display: flex;flex-wrap: wrap;">
@ -454,31 +454,31 @@
//
title: "",
//
open: false,
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
pageSize: 10,
keyWord:null,//
},
//
baseForm: {
userId:"",
applyType:"1",
applyType:"1",
applyReason:"1",
isThrid:"2",
certificateNos:[],
applyDetail:"",
exitAddr:"",
exitTime:"",
entryTime:"",
thridId:"",
thridName:"",
thridIdNumber:"",
certificateNos:[],
applyDetail:"",
exitAddr:"",
exitTime:"",
entryTime:"",
thridId:"",
thridName:"",
thridIdNumber:"",
remark:"",
},
selectItme:{},
allUserList:[],
allUserList:[],
certificateList:[],
thridManList:[],
allDeviceList:[],
@ -495,13 +495,13 @@
],
applyDetail: [
{ required: true, message: "事由不能为空", trigger: "blur" }
],
],
exitAddr: [
{ required: true, message: "计划出国地点不能为空", trigger: "change" },
],
{ required: true, message: "计划出国地点不能为空", trigger: "change" },
],
exitTime: [
{ required: true, message: "计划出国日期不能为空", trigger: "change" },
],
{ required: true, message: "计划出国日期不能为空", trigger: "change" },
],
entryTime: [
{ required: true, message: "计划回国日期不能为空", trigger: "change" }
],
@ -528,15 +528,15 @@
openFile:false,//
checkProcess:[],
dialogVisible:false,//
dialogImageUrl:"",//
dialogImageUrl:"",//
openView:false,//
viewRow:{},
};
},
mounted(){
this.getList();
this.getDeviceList();
},
this.getList();
this.getDeviceList();
},
methods: {
//
getDeviceList(){
@ -544,7 +544,7 @@
this.allDeviceList=[]
this.$set(this.baseForm,"deviceId",null)
getDevicelistApi(param).then((response) => {
this.allDeviceList = response
this.allDeviceList = response
})
},
/** 搜索按钮操作 */
@ -562,8 +562,8 @@
this.loading = true;
let param = {
"pageNum":this.queryParams.pageNum,
"pageSize":this.queryParams.pageSize,
"keyWord":this.queryParams.keyWord,
"pageSize":this.queryParams.pageSize,
"keyWord":this.queryParams.keyWord,
}
getCertificateApplyListPageApi(param).then(response => {
this.tableListData = response.rows;
@ -581,17 +581,17 @@
this.thridManList=[]
this.baseForm = {
userId:"",
applyType:"1",
applyType:"1",
applyReason:"1",
isThrid:"2",
certificateNos:[],
applyDetail:"",
exitAddr:"",
exitTime:"",
entryTime:"",
thridId:"",
thridName:"",
thridIdNumber:"",
certificateNos:[],
applyDetail:"",
exitAddr:"",
exitTime:"",
entryTime:"",
thridId:"",
thridName:"",
thridIdNumber:"",
remark:"",
};
this.resetForm("baseForm");
@ -600,17 +600,17 @@
handleAdd() {
this.reset();
this.getApplyUserList()
this.open = true;
this.open = true;
this.title = "新增";
console.log("this.baseForm",this.baseForm);
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.open = true;
this.open = true;
this.baseForm = Object.assign({}, row)
this.getApplyUserList()
this.getCertificateList() //
this.getCertificateList() //
setTimeout(()=>{
this.$set(this.baseForm,"name",row.name)
this.$set(this.baseForm,"userId",row.userId)
@ -636,17 +636,17 @@
this.fileList=[]
this.fileUrls=[]
this.fileNames = []
}
}
this.title = "修改";
},
//
changeApplyType(){
console.log('changeApplyType')
console.log('changeApplyType')
this.getApplyUserList()
this.certificateList=[]
this.$set(this.baseForm,"certificateNos",[])
this.thridManList=[]
this.thridManList=[]
this.$set(this.baseForm,'exitAddr',"")
this.$set(this.baseForm,'exitTime',"")
this.$set(this.baseForm,'entryTime',"")
@ -654,7 +654,7 @@
this.$set(this.baseForm,'thridId',null)
this.$set(this.baseForm,'thridName',null)
this.$set(this.baseForm,'thridIdNumber',null)
},
},
getApplyUserList(){
const param={"applyType":this.baseForm.applyType,pageNum:1,pageSize:100}
this.$set(this.baseForm,"name",null)
@ -667,22 +667,22 @@
//-
chosenSysUser(val){
console.log("chosenSysUser",val)
this.selectItme=val;
this.selectItme=val;
this.$set(this.baseForm,"name",this.selectItme.userName)
this.$set(this.baseForm,"userId",this.selectItme.userId)
this.getCertificateList();//
this.getThridList();//
this.$set(this.baseForm,"userId",this.selectItme.userId)
this.getCertificateList();//
this.getThridList();//
},
//
getCertificateList(){
let param = {
let param = {
applyType:this.baseForm.applyType,
userId:this.baseForm.userId
}
this.certificateList=[]
this.$set(this.baseForm,"certificateNos",[])
applyCertificateNoListApi(param).then((response) => {
this.certificateList = response
this.certificateList = response
})
},
//
@ -702,11 +702,11 @@
this.getThridList()
},
changThridId(val){
console.log(val)
let index = this.thridManList.findIndex(v=>v.id==val)
console.log(val)
let index = this.thridManList.findIndex(v=>v.id==val)
this.$set(this.baseForm,'thridName',this.thridManList[index].name)
this.$set(this.baseForm,'thridIdNumber',this.thridManList[index].idNumber)
},
},
/** 提交按钮 */
submitForm: function(type) {
console.log(this.baseForm.dateRange)
@ -748,14 +748,14 @@
this.open = false;
this.reset();
},
applyCheckProcess() {
applyCheckProcess() {
let param = {
"checkId":this.viewRow.checkId,
}
applyCheckProcessApi(param).then(response => {
this.checkProcess = response.data||[];
this.checkProcess = response.data||[];
});
},
},
//
handleView(row) {
this.viewRow = row;
@ -765,14 +765,14 @@
let arr2 = row.fileName.split(",");
this.viewRow.fileList=[]
arr.forEach((item,index)=>{
this.viewRow.fileList.push({url:item,name:arr2[index]})
this.viewRow.fileList.push({url:item,name:arr2[index]})
})
}else{
this.viewRow.fileList=[]
}
}
console.log(this.viewRow.fileList)
this.openView = true;
},
this.openView = true;
},
//
handleRevoke(row) {
this.$modal.confirm('是否确认撤销申请?').then(() => {
@ -869,7 +869,7 @@
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
},
},
formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 0

View File

@ -92,7 +92,7 @@
<el-table-column label="设备名称" align="center" prop="deviceName" :show-overflow-tooltip="true"/>
<el-table-column label="设备地址" align="center" prop="deviceAddr" :show-overflow-tooltip="true" width="150"/>
<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="slotNo" :show-overflow-tooltip="true"/>
<!-- <el-table-column label="验证码" align="center" prop="verificationCode" :show-overflow-tooltip="true"></el-table-column> -->
<el-table-column label="二维码" align="center" prop="verificationCode" :show-overflow-tooltip="true">
<template slot-scope="scope">
@ -137,12 +137,24 @@
<el-form ref="taskForm" :model="taskForm" :rules="taskRules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item label="核验截止日期" prop="verificationDate">
<el-form-item label="核验开始日期" prop="startTime">
<el-date-picker
v-model="taskForm.verificationDate"
v-model="taskForm.startTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd" style="width: 100%;"
:picker-options="pickerOptionsToday"
@focus="startDateFocus"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="核验结束日期" prop="endTime">
<el-date-picker
v-model="taskForm.endTime"
type="date"
placeholder="选择日期"
:picker-options="pickerOptionsStart"
@focus="endDateFocus"
format="yyyy-MM-dd" style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-col>
@ -168,7 +180,7 @@
listDeptExcludeChild,
} from '@/api/system/dept'
import { getCertificateTaskListPageApi,addCertificateInfoApi, updateCertificateInfoApi, deleteCertificateInfoApi,
getCertificateTakeReturnPageApi,addCertificateCheckApi,getCertificateTaskNumApi } from "@/api/certificateManage/index";
getCertificateTakeReturnPageApi,addCertificateCheckApi } from "@/api/certificateManage/index";
import { getTaskStatisticsApi } from "@/api/certificateStatistics/index";
import base64 from 'base-64';
import { getToken } from '@/utils/auth'
@ -302,6 +314,8 @@
openTask: false,
//
taskForm: {
startTime:"",
endTime:"",
processDate:""
},
//
@ -314,11 +328,30 @@
},
]
},
pickerOptionsToday: {
disabledDate(time) {
//
const today = new Date();
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
pickerOptionsStart: {
disabledDate(time) {
//
const startTime=this.taskForm.startTime;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
};
},
mounted(){
this.getList();
this.getNum();
// this.getNum();
this.initStatistics();
},
@ -327,7 +360,37 @@
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
this.initStatistics();ss
this.initStatistics();
},
startDateFocus() {
this.taskForm.endTime = ''
let endTime = this.taskForm.endTime;
if (!endTime) return;
let that = this;
that.pickerOptionsToday = {
disabledDate(time) {
//
const today = new Date();
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
endDateFocus() {
let startTime = this.taskForm.startTime;
if (!startTime) return;
let that = this;
that.pickerOptionsStart = {
disabledDate(time) {
//
const startTime=that.taskForm.startTime;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
initStatistics(){
let param = {}
@ -346,7 +409,7 @@
},
getNum(){
let param = {}
getCertificateTaskNumApi(param).then(response => {
getTaskStatisticsApi(param).then(response => {
console.log("response",response)
this.saveNum = response.data.saveNum;
this.saveNumd = response.data.saveNumd;
@ -565,13 +628,22 @@
/** 提交按钮 */
submitTask: function () {
this.$refs['taskForm'].validate((valid) => {
let param = Object.assign({},this.taskForm)
let paramd = Object.assign({},this.taskForm)
if (valid) {
param.userIds=this.chosenList.map(item => item.userId);
param.exitTimes=this.chosenList.map(item => item.exitTime);
param.entryTimes=this.chosenList.map(item => item.entryTime);
param.checkType="3";
paramd.userIds=this.chosenList.map(item => item.userId);
paramd.exitTimes=this.chosenList.map(item => item.exitTime);
paramd.entryTimes=this.chosenList.map(item => item.entryTime);
paramd.checkType="3";
console.log(param)
let param={
verifyTitle:"出入境时间核验",
startTime:paramd.exitTimes[0],
endTime:paramd.entryTimes[0],
verifyUsers:paramd.userIds,
verifyType:"3",
noticeType:"2",
processDate:''
}
addCertificateCheckApi(param).then(response => {
if(response.code=200){
this.$modal.msgSuccess("验证下发成功");

View File

@ -20,7 +20,7 @@
<el-form-item label="关键字" prop="keyWord">
<el-input
v-model="queryParams.keyWord"
placeholder="请输入"
placeholder="请输入设备名称、设备地址"
clearable maxlength="20"
style="width: 300px"
@keyup.enter.native="handleQuery"
@ -69,8 +69,8 @@
</template>
</el-table-column>
<el-table-column label="槽位数" align="center" prop="soltNum" :show-overflow-tooltip="true"/>
<el-table-column label="已存放数" align="center" prop="soltUsedNum" :show-overflow-tooltip="true"/>
<el-table-column label="空余数" align="center" prop="" :show-overflow-tooltip="true">
<el-table-column label="空余数" align="center" prop="soltUsedNum" :show-overflow-tooltip="true"/>
<el-table-column label="已存放数" align="center" prop="" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{Number(scope.row.soltNum)-Number(scope.row.soltUsedNum)}}</span>
</template>
@ -140,12 +140,12 @@
<el-row>
<el-col :span="12">
<el-form-item label="设备Ip" prop="deviceIp">
<el-input v-model="baseForm.deviceIp" placeholder="请输入设备Ip" maxlength="30" clearable/>
<el-input v-model="baseForm.deviceIp" placeholder="请输入设备Ip" maxlength="30" @blur="handleIpBlur" clearable/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="功能接口" prop="funImp">
<el-input v-model="baseForm.funImp" placeholder="http://xxx.xxx.xxx:8088/externaltask/accessfunction" maxlength="30" clearable/>
<el-input v-model="baseForm.funImp" placeholder="http://xxx.xxx.xxx:8088/externaltask/accessfunction" readonly="true" maxlength="500" clearable/>
</el-form-item>
</el-col>
</el-row>
@ -249,7 +249,7 @@
deviceNumber:"",
deviceName:"",
deviceSn:"",
deviceIp:"",
deviceIp:"192.168.0.229",
deviceKey:"",
deviceAddr:"",
deviceMac:"",
@ -269,7 +269,7 @@
{ required: true, message: "设备地址不能为空", trigger: "blur" }
],
funImp: [
{ required: true, message: "设备编号不能为空", trigger: "blur" }
{ required: true, message: "功能接口不能为空", trigger: "blur" }
],
deviceName: [
{ required: true, message: "设备名称不能为空", trigger: "blur" }
@ -333,6 +333,10 @@
this.getList()
},
methods: {
handleIpBlur(){
const ip=this.baseForm.deviceIp;
this.baseForm.funImp="http://"+ip+":8088/externaltask/accessfunction";
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;

View File

@ -4,9 +4,9 @@
<el-form-item label="关键字" prop="keyWord">
<el-input
v-model="queryParams.keyWord"
placeholder="请输入关键字"
placeholder="请输入姓名、描述"
clearable maxlength="20"
style="width: 200px"
style="width: 200px"
/>
</el-form-item>
<!-- <el-form-item label="证件编号" prop="certificateNo">
@ -14,11 +14,11 @@
v-model="queryParams.certificateNo"
placeholder="请输入证件编号"
clearable maxlength="20"
style="width: 200px"
style="width: 200px"
/>
</el-form-item>
</el-form-item>
<el-form-item label="证件类型" prop="certificateType">
<el-select v-model="queryParams.certificateType" placeholder="证件类型" clearable style="width: 200px">
<el-select v-model="queryParams.certificateType" placeholder="证件类型" clearable style="width: 200px">
<el-option
v-for="dict in dict.type.sys_certificate_type"
:key="dict.value"
@ -28,7 +28,7 @@
</el-select>
</el-form-item>
<el-form-item label="核验状态" prop="verifyState">
<el-select v-model="queryParams.verifyState" placeholder="核验状态" clearable style="width: 200px">
<el-select v-model="queryParams.verifyState" placeholder="核验状态" clearable style="width: 200px">
<el-option label="待验证" value="0" />
<el-option label="已验证" value="1" />
</el-select>
@ -39,21 +39,21 @@
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-row :gutter="10" class="mb8">
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="tableListData" height="800">
</el-row>
<el-table v-loading="loading" :data="tableListData" height="800">
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="姓名" align="center" prop="createBy" :show-overflow-tooltip="true"/>
<el-table-column label="联系方式" align="center" prop="contacts" :show-overflow-tooltip="true"/>
<el-table-column label="联系方式" align="center" prop="contacts" :show-overflow-tooltip="true"/>
<el-table-column label="类型" align="center" prop="type" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.type==1">后台问题</span>
<span v-if="scope.row.type==2">APP问题</span>
<span v-if="scope.row.type==2">APP问题</span>
</template>
</el-table-column>
<el-table-column label="问题/建议描述" align="center" prop="detail" :show-overflow-tooltip="true"/>
@ -64,15 +64,15 @@
</template>
</el-table-column>
</el-table>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
/>
<el-dialog title="附件列表" :visible.sync="openFile" width="500px" append-to-body>
<div style="width: 100%;height: 240px;padding: 10px;color: #46a6ff;display: flex;flex-wrap: wrap;">
@ -120,17 +120,17 @@
//
title: "",
//
open: false,
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
keyWord:null,
},
fileList:[],
openFile:false,//
fileList:[],
openFile:false,//
dialogVisible:false,//
dialogImageUrl:"",//
dialogImageUrl:"",//
};
},
mounted(){
@ -138,7 +138,7 @@
},
methods: {
methods: {
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
@ -149,17 +149,17 @@
this.queryParams = {
pageNum: 1,
pageSize: 10,
keyWord:null,//
keyWord:null,//
}
this.resetForm("queryForm");
this.handleQuery();
},
/** 查询列表 */
getList() {
getList() {
let param = {
"pageNum":this.queryParams.pageNum,
"pageSize":this.queryParams.pageSize,
"keyWord":this.queryParams.keyWord,
"pageSize":this.queryParams.pageSize,
"keyWord":this.queryParams.keyWord,
}
console.log("param",param)
getFeedbackListPageApi(param).then(response => {
@ -169,11 +169,11 @@
});
},
checkFile(row){
this.fileList=[]
this.fileList=[]
if(row.fileUrl&&row.fileUrl!=''){
let arr = row.fileUrl.split(",");
let arr = row.fileUrl.split(",");
arr.forEach((item,index)=>{
this.fileList.push({url:item})
this.fileList.push({url:item})
})
}
this.openFile = true
@ -182,7 +182,7 @@
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
},
},
formatDate(date) {
// YYYY-MM-DD
const year = date.getFullYear();

View File

@ -144,14 +144,26 @@
<el-form ref="taskForm" :model="taskForm" :rules="taskRules" label-width="120px">
<el-row>
<el-col :span="24">
<el-form-item label="核验截止日期" prop="verificationDate">
<el-date-picker
v-model="taskForm.processDate"
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="startTime">
<el-date-picker
v-model="taskForm.startTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd" style="width: 100%;"
:picker-options="pickerOptionsToday"
@focus="startDateFocus"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="核验结束日期" prop="endTime">
<el-date-picker
v-model="taskForm.endTime"
type="date"
placeholder="选择日期"
:picker-options="pickerOptionsStart"
@focus="endDateFocus"
format="yyyy-MM-dd" style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
@ -247,6 +259,25 @@ export default {
},
]
},
pickerOptionsToday: {
disabledDate(time) {
//
const today = new Date();
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
pickerOptionsStart: {
disabledDate(time) {
//
const startTime=this.taskForm.startTime;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
}
},
}
},
watch: {
@ -266,6 +297,36 @@ export default {
if (!phone) return ''
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
},
startDateFocus() {
this.taskForm.endTime = ''
let endTime = this.taskForm.endTime;
if (!endTime) return;
let that = this;
that.pickerOptionsToday = {
disabledDate(time) {
//
const today = new Date();
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
endDateFocus() {
let startTime = this.taskForm.startTime;
if (!startTime) return;
let that = this;
that.pickerOptionsStart = {
disabledDate(time) {
//
const startTime=that.taskForm.startTime;
const today = new Date(startTime);
today.setHours(0, 0, 0, 0); // 00:00:00
//
return time.getTime() < today.getTime();
},
};
},
initStatistics(){
let param = {}
getStatisticsApi(param).then(response => {
@ -353,12 +414,21 @@ export default {
/** 提交按钮 */
submitTask: function () {
this.$refs['taskForm'].validate((valid) => {
let param = Object.assign({},this.taskForm)
console.log(param)
let paramd = Object.assign({},this.taskForm)
console.log(paramd)
console.log(this.ids)
if (valid) {
param.userIds=this.ids;
param.checkType="1";
paramd.userIds=this.ids;
paramd.checkType="1";
let param={
verifyTitle:"无证核验",
startTime:"",
endTime:"",
verifyUsers:this.ids,
verifyType:"1",
noticeType:"2",
processDate:''
}
addCertificateCheckApi(param).then(response => {
if(response.code=200){
this.$modal.msgSuccess("验证下发成功");

View File

@ -4,7 +4,7 @@
<el-form-item label="关键字" prop="keyWord">
<el-input
v-model="queryParams.keyWord"
placeholder="请输入关键字"
placeholder="请输入标题"
clearable maxlength="20"
style="width: 240px"
@keyup.enter.native="handleQuery"
@ -27,14 +27,14 @@
<el-option label="进行中" value="2"/>
<el-option label="已超时" value="3"/>
<el-option label="已完成" value="4"/>
<el-option label="未完成" value="5"/>
<el-option label="未完成" value="5"/>
</el-select>
</el-form-item>
<el-form-item label="任务类型" prop="verifyType">
<el-select v-model="queryParams.verifyType" placeholder="任务类型" clearable>
<el-option label="有无证件核验" value="1"/>
<el-option label="一人多证核验" value="2"/>
<el-option label="出入境时间核验" value="3"/>
<el-option label="出入境时间核验" value="3"/>
</el-select>
</el-form-item>
<el-form-item>
@ -54,8 +54,8 @@
>新建核验任务</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="tableListData" height="800">
</el-row>
<el-table v-loading="loading" :data="tableListData" height="800">
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
@ -66,7 +66,7 @@
<el-table-column label="开始时间" align="center" prop="startTime" :show-overflow-tooltip="true"/>
<el-table-column label="结束时间" align="center" prop="endTime" :show-overflow-tooltip="true"/>
<el-table-column label="任务标题" align="center" prop="verifyTitle" :show-overflow-tooltip="true"/>
<el-table-column label="任务状态" align="center" prop="verifyStateName" :show-overflow-tooltip="true"/>
<el-table-column label="任务状态" align="center" prop="verifyStateName" :show-overflow-tooltip="true"/>
<el-table-column label="任务类型" align="center" prop="verifyType" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.verifyType==1">有无证件核验</span>
@ -79,7 +79,7 @@
<el-progress :percentage="Math.ceil((scope.row.verifyCount/scope.row.verifyAllCount)*100)"></el-progress>
</template>
</el-table-column>
<!-- <el-table-column label="核验状态" align="center" prop="checkState" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.checkState==0" >待验证</span>
@ -95,7 +95,7 @@
</el-table-column> -->
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
<el-button
size="mini"
type="text"
@click="handleView(scope.row)"
@ -137,7 +137,7 @@
format="yyyy-MM-dd" style="width: 100%;"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-col>
</el-col>
<el-col :span="24">
<el-form-item label="结束时间" prop="endTime">
<el-date-picker
@ -166,12 +166,12 @@
<el-radio label="3">出入境时间核验</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-col>
<el-col :span="24">
<el-form-item label="提醒方式" prop="noticeType">
<el-radio-group v-model="baseForm.noticeType" size="small">
<el-radio label="1">邮件通知</el-radio>
<el-radio label="2">短信通知</el-radio>
<el-radio label="2">短信通知</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -190,19 +190,19 @@
v-model="detailParams.name"
placeholder="请输入姓名"
clearable maxlength="20"
style="width: 200px"
style="width: 200px"
/>
</el-form-item>
<el-form-item label="证件编号" prop="certificateNo">
<el-form-item label="证件编号" prop="certificateNo">
<el-input
v-model="detailParams.certificateNo"
placeholder="请输入证件编号"
clearable maxlength="20"
style="width: 200px"
style="width: 200px"
/>
</el-form-item>
</el-form-item>
<el-form-item label="证件类型" prop="certificateType">
<el-select v-model="detailParams.certificateType" placeholder="证件类型" clearable style="width: 200px">
<el-select v-model="detailParams.certificateType" placeholder="证件类型" clearable style="width: 200px">
<el-option
v-for="dict in dict.type.sys_certificate_type"
:key="dict.value"
@ -212,17 +212,17 @@
</el-select>
</el-form-item>
<el-form-item label="核验状态" prop="verifyState">
<el-select v-model="detailParams.verifyState" placeholder="核验状态" clearable style="width: 200px">
<el-select v-model="detailParams.verifyState" placeholder="核验状态" clearable style="width: 200px">
<el-option label="待验证" value="0" />
<el-option label="已验证" value="1" />
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery2">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery2">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="detailList" height="550">
</el-form>
<el-table v-loading="loading" :data="detailList" height="550">
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{(detailParams.pageNum - 1) * detailParams.pageSize + scope.$index + 1}}</span>
@ -233,14 +233,14 @@
<el-table-column label="证件编号" align="center" prop="certificateNo" :show-overflow-tooltip="true"/>
<el-table-column label="申请出境时间" align="center" prop="exitTime" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.exitTime||"/"}}</span>
<span>{{scope.row.exitTime||"/"}}</span>
</template>
</el-table-column>
<el-table-column label="申请入境时间" align="center" prop="entryTime" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.entryTime||"/"}}</span>
<span>{{scope.row.entryTime||"/"}}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="核验类型" align="center" prop="verifyType" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.verifyType==1">有无证件核验</span>
@ -261,14 +261,14 @@
<span v-if="scope.row.verifyResult==1">已通过</span>
</template>
</el-table-column>
</el-table>
</el-table>
<pagination
v-show="total2>0"
:total="total2"
:page.sync="detailParams.pageNum"
:limit.sync="detailParams.pageSize"
@pagination="getDetailList"
/>
/>
<div slot="footer" class="dialog-footer">
<!-- <el-button type="primary" @click="openDetail=false"> </el-button> -->
<el-button @click="openDetail=false"> </el-button>
@ -333,7 +333,7 @@
noticeType:"1",
},
//
baseFormRules: {
baseFormRules: {
verifyTitle: [
{ required: true, message: "任务标题不能为空", trigger: "change" }
],
@ -369,7 +369,7 @@
},
mounted(){
this.getDeptList();
this.getList();
this.getList();
},
methods: {
@ -420,7 +420,7 @@
"startTime":this.dateRange[0]||"",
"endTime":this.dateRange[1]||"",
}
console.log("param",param)
console.log("param",param)
getCertificateVerifyListPageApi(param).then(response => {
this.tableListData = response.rows;
this.total = Number(response.total);
@ -449,7 +449,7 @@
this.reset();
this.open = true;
console.log("this.baseForm",this.baseForm);
},
},
/** 提交按钮 */
submitForm: function() {
console.log("this.baseForm",this.baseForm);
@ -480,7 +480,7 @@
this.getDetailList();
},
/** 重置按钮操作 */
resetQuery2() {
resetQuery2() {
this.detailParams = {
pageNum: 1,
pageSize: 10,
@ -489,7 +489,7 @@
}
this.resetForm("detailForm");
this.handleQuery2();
},
},
getDetailList(){
let param = {
batchId:this.rowData.batchId,
@ -502,7 +502,7 @@
}
getCertificateVerifyDetailApi(param).then(response => {
this.detailList = response.rows;
this.total2 = Number(response.total);
this.total2 = Number(response.total);
});
},
formatDate(date) {