bonus-Certificate-app/pages/certificateExamCenter/certificateApply/applyEdit.vue

428 lines
14 KiB
Vue

<template>
<page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
<Navbar2 title="存取证申请" :showRightText="false" :isBack="false" :goTo="'/pages/certificateExamCenter/certificateApply/index'"/>
<view class="apply-view">
<view class="apply-item">
<view style="margin-bottom: 10px;"> / <span style="color: red;">*</span> </view>
<view><uni-data-checkbox v-model="apply.applyType" :localdata="checkBoxLocalData" @change="changeApplyType"/></view>
</view>
<view class="apply-item" style="height: auto;">
<view style="margin-bottom: 10px;">证件编号<span style="color: red;">*</span> </view>
<view>
<zxz-uni-data-select v-model="apply.certificateNos" :multiple="true" :localdata="certificateList"></zxz-uni-data-select>
<!-- <uni-data-select v-model="apply.certificateNos" multiple :localdata="certificateList"></uni-data-select> -->
</view>
</view>
<view class="apply-item" v-if="apply.applyType==1">
<view style="margin-bottom: 10px;">证件柜<span style="color: red;">*</span> </view>
<view><uni-data-select v-model="apply.deviceId" :localdata="deviceList"></uni-data-select></view>
</view>
<view class="apply-item">
<view style="margin-bottom: 10px;">证件用途<span style="color: red;">*</span> </view>
<view><uni-data-checkbox v-model="apply.applyReason" :localdata="checkBoxLocalData2" /></view>
</view>
<view class="apply-item">
<view style="margin-bottom: 10px;">事由<span style="color: red;">*</span></view>
<view><uni-easyinput type="text" :inputBorder="false" v-model="apply.applyDetail" maxlength="50" placeholder="请输入" /></view>
</view>
<view class="apply-item" v-if="apply.applyType==2">
<view style="margin-bottom: 10px;">计划出国(境)地点<span style="color: red;">*</span></view>
<view><uni-easyinput type="text" :inputBorder="false" v-model="apply.exitAddr" maxlength="30" placeholder="请输入" /></view>
</view>
<view class="apply-item" v-if="apply.applyType==2">
<view style="margin-bottom: 10px;">计划出国(境)日期<span style="color: red;">*</span></view>
<view><uni-datetime-picker type="date" :clear-icon="false" format="YYYY-MM-DD" v-model="apply.exitTime"/></view>
</view>
<view class="apply-item" v-if="apply.applyType==2">
<view style="margin-bottom: 10px;">计划回国(境)日期<span style="color: red;">*</span></view>
<view><uni-datetime-picker type="date" :clear-icon="false" format="YYYY-MM-DD" v-model="apply.entryTime"/></view>
</view>
<view class="apply-item" v-if="apply.applyType==2">
<view style="margin-bottom: 10px;">允许他人代办<span style="color: red;">*</span> </view>
<view><uni-data-checkbox v-model="apply.isThrid" :localdata="checkBoxLocalData3" @change="changeIsThrid"/></view>
</view>
<view class="apply-item" v-if="apply.isThrid==1">
<view style="margin-bottom: 10px;">代办人姓名<span style="color: red;">*</span></view>
<view><uni-data-select v-model="apply.thridId" :localdata="thridManList" @change="changThridId"></uni-data-select></view>
</view>
<view class="apply-item" v-if="apply.isThrid==1">
<view style="margin-bottom: 10px;">代办人身份证号<span style="color: red;">*</span></view>
<view><uni-easyinput type="text" :inputBorder="false" v-model="apply.thridIdNumber" :disabled="true" maxlength="30" placeholder="请输入" /></view>
</view>
<view class="apply-item">
<view style="margin-bottom: 10px;">备注</view>
<view><uni-easyinput type="text" :inputBorder="false" v-model="apply.remark" maxlength="50" placeholder="请输入" /></view>
</view>
<view class="apply-item" style="height: 120px;">
<view style="margin-bottom: 10px;">附件</view>
<view>
<!-- multiple -->
<u-upload
:fileList="fileList"
@afterRead="afterRead"
@delete="deletePic"
:maxCount="5"
width="60" height="60"
>
<view class="upload-btn">
<u-icon name="camera" size="28" color="#666666"></u-icon>
</view>
</u-upload>
</view>
</view>
</view>
<!-- <view style="width: 100%;background: #fff;padding: 20rpx;">
<view style="font-weight: 600;">流程</view>
<u-steps current="0" direction="column" style="margin: 20rpx;">
<u-steps-item title="李四">
<view slot="desc"> 一级审批 10:35 </view>
</u-steps-item>
<u-steps-item title="王五" desc="10:35">
<view slot="desc"> 二级审批 10:35 </view>
</u-steps-item>
<u-steps-item title="张三" desc="10:35">
<view slot="desc"> 三级级审批 10:35 </view>
</u-steps-item>
</u-steps>
</view> -->
<view style="width: 100%;padding: 20rpx;margin: 40rpx auto;background: #fff;">
<view @click="submitApply" style="width: 92%;height: 80rpx;margin: 20rpx auto;background: #3888FF;color: #fff;border-radius: 10rpx;text-align: center;line-height: 80rpx;" >
发起申请
</view>
</view>
</template>
<script>
import { applyCertificateNoListApi,thridListApi,addCertificateApplyApi,editCertificateApplyApi,deviceListApi } from '@/api/certificateExamCenter/index.js';
import { pathToBase64, base64ToPath } from 'image-tools';
import { uploadBase64,uploadImg } from "@/api/upload";
export default {
data() {
return {
fontValue:uni.getStorageSync('fontSize') || 8,
certificateList:[],
thridManList:[],
columns: [[
{text:"往来国外",value:'1'},
{text:"往来台湾通行证",value:'2'},
{text:"往来香港通行证",value:'3'},
]],
show:false,
// 单选数据源
checkBoxLocalData: [{text: '存证',value: 1}, {text: '取证',value: 2}],
checkBoxLocalData2: [{text: '公事',value: 1}, {text: '私事',value: 2}],
checkBoxLocalData3: [{text: '是',value: 1}, {text: '否',value: 2}],
isSumbit:false,
apply:{
applyType:1,
applyReason:1,
applyLocation:"",
isThrid:2,
thridId:"",
thridName:"",
thridIdNumber:"",
applyDetail:"",
exitAddr:"",
exitTime:"",
entryTime:"",
remark:"",
certificateNos:[],
},
fileList: [],
deviceList: [],
}
},
onLoad(options) {
this.apply = JSON.parse(options.apply)
this.getCertificateList()
this.getDeviceList()
this.getThridList()
console.log(this.apply)
setTimeout(()=>{
this.initDetail()
},500)
},
methods: {
initDetail(){
this.$set(this.apply,"applyType",Number(this.apply.applyType))
this.$set(this.apply,"applyReason",Number(this.apply.applyReason))
this.$set(this.apply,"isThrid",Number(this.apply.isThrid))
if(this.apply.fileUrl!=""){
let arr = this.apply.fileUrl.split(',')
arr.forEach((item,index)=>{
this.fileList.push({url:item,name:"附件"+(index+1)})
})
}
},
//获取证件柜列表
async getDeviceList() {
const params = {}
this.deviceList=[]
try {
const res = await deviceListApi(params)
console.log('?? ~ getList ~ res:', res)
if(res&&res.length>0){
res.forEach(item=>{
this.deviceList.push({value:item.deviceId,text:item.deviceName})
})
}
} catch (error) {
console.log(error)
}
},
//获取证件列表
async getCertificateList() {
const params = {
applyType:this.apply.applyType,
userId:uni.getStorageSync("userId")
}
this.certificateList=[]
try {
const res = await applyCertificateNoListApi(params)
console.log('?? ~ getList ~ res:', res)
if(res&&res.length>0){
res.forEach(item=>{
this.certificateList.push({value:item.certificateNo,text:item.certificateNo+"-"+item.certificateTypeName})
})
}
} catch (error) {
console.log(error)
}
},
//获取代办人列表
async getThridList() {
const params = {
userId:uni.getStorageSync("userId")
}
this.thridManList=[]
try {
const res = await thridListApi(params)
console.log('?? ~ getList ~ res:', res)
if(res.data&&res.data.length>0){
res.data.forEach(item=>{
this.thridManList.push({value:item.id,text:item.name,idNumber:item.idNumber})
})
}
} catch (error) {
console.log(error)
}
},
//更改申请类型
changeApplyType(e){
console.log('e:',this.apply.applyType);
this.getCertificateList()
this.$set(this.apply,"deviceId","")
this.$set(this.apply,"exitAddr","")
this.$set(this.apply,"exitTime","")
this.$set(this.apply,"entryTime","")
this.$set(this.apply,"isThrid",2)
this.$set(this.apply,'thridId',"")
this.$set(this.apply,'thridName',"")
this.$set(this.apply,'thridIdNumber',"")
},
changeIsThrid(e){
this.$set(this.apply,'thridId',"")
this.$set(this.apply,'thridName',"")
this.$set(this.apply,'thridIdNumber',"")
},
changThridId(e){
console.log('e:',e);
let index = this.thridManList.findIndex(v=>v.value==e)
console.log(index)
this.$set(this.apply,'thridName',this.thridManList[index].text)
this.$set(this.apply,'thridIdNumber',this.thridManList[index].idNumber)
},
submitApply() {
console.log(this.fileList)
let arr = []
let arr1 = []
if(this.fileList&&this.fileList.length>0){
this.fileList.forEach(item=>{
arr.push(item.url)
arr1.push(item.name)
})
}
//fileUrls 附件 数组
this.apply.fileUrls = arr
this.apply.fileNames = arr1
const regex = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;
console.log(this.apply)
if(this.apply.certificateNos.length==0){
uni.$u.toast(`请选择证件编号!`)
}else if(this.apply.applyDetail==""){
uni.$u.toast(`事由不能为空`)
}else if(this.apply.isThrid==1){
if(this.apply.thridName==""){
uni.$u.toast(`代办人姓名不能为空`)
}else if(this.apply.thridIdNumber==""){
uni.$u.toast(`代办人身份证号不能为空`)
}else if(this.apply.applyType==2){
if(this.apply.exitAddr==""){
uni.$u.toast(`计划出国(境)地点不能为空`)
return false
}else if(this.apply.exitTime==""){
uni.$u.toast(`计划出国(境)日期不能为空`)
return false
}else if(this.apply.entryTime==""){
uni.$u.toast(`计划回国(境)日期不能为空`)
return false
}else if(!this.isSumbit){
console.log("请求添加")
this.insertApply();
}
}else if(!this.isSumbit){
console.log("请求添加")
this.insertApply();
}
}else if(this.apply.isThrid==2){
this.apply.thridId=""
this.apply.thridName=""
this.apply.thridIdNumber=""
if(this.apply.applyType==2){
if(this.apply.exitAddr==""){
uni.$u.toast(`计划出国(境)地点不能为空`)
return false
}else if(this.apply.exitTime==""){
uni.$u.toast(`计划出国(境)日期不能为空`)
return false
}else if(this.apply.entryTime==""){
uni.$u.toast(`计划回国(境)日期不能为空`)
return false
}else if(!this.isSumbit){
console.log("请求添加")
this.insertApply();
}
}else if(this.apply.applyType==1){
if(this.apply.deviceId==""){
uni.$u.toast(`证件柜不能为空`)
return false
}else if(!this.isSumbit){
console.log("请求添加")
this.insertApply();
}
}else if(!this.isSumbit){
console.log("请求添加")
this.insertApply();
}
}
},
async insertApply(){
this.isSumbit=true
setTimeout(()=>{
this.isSumbit=false
},800)
this.apply.applyState=0;
let param = this.apply;
const res = await editCertificateApplyApi(param);
if(res.code==200){
uni.$u.toast(`提交成功!`,1000)
setTimeout(()=>{
uni.navigateBack()
},1000)
}
},
// 新增图片
async afterRead(event) {
console.log(event)
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file);
let fileListLen = this[`fileList${event.name}`].length;
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
status: "uploading",
message: "上传中",
});
});
console.log(lists)
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url);
console.log(result)
let item = this[`fileList${event.name}`][fileListLen];
this[`fileList${event.name}`].splice(
fileListLen,
1,
Object.assign(item, {
status: "success",
message: "",
name:'图片'+(i+1),
url: result.url,
})
);
fileListLen++;
}
},
//上传接口
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
this.imgToBase64(url).then(base64 => {
let param = {
"base64File":base64
}
uploadBase64(param).then(res => {
if(res.code==200){
res.data.base64 = base64
resolve(res.data)
}
})
})
});
},
imgToBase64(data) {
return new Promise((resolve, reject) => {
pathToBase64(data).then(base64 => {
resolve(base64)
}).catch(error => {
console.error(error)
reject(error)
})
})
},
deletePic(event) {
this.fileList.splice(event.index, 1);
},
}
}
</script>
<style lang="scss">
page {
background-color: #F5F5F5;
}
.apply-view{
width: 100%;
height: auto;
margin: 40rpx auto;
}
.apply-item{
width: 100%;
height: 80px;
padding: 20rpx;
background: #FFF;
border-bottom: 1px solid rgba(209,211,215,0.5);
font-size: 28rpx;
}
.upload-btn {
width: 120rpx;
height: 120rpx;
// background-color: #f7f8fa;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border: 1px dashed #000;
border-radius: 8rpx;
.upload-text {
font-size: 24rpx;
color: #666666;
margin-top: 10rpx;
}
}
</style>