| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- <template>
- <div class="visit-add">
- <nav-bar></nav-bar>
- <div class="page-container">
- <!-- 基本信息 -->
- <div class="card">
- <van-panel >
- <template #header>
- <van-cell title="申请信息"></van-cell>
- </template>
- <div class="panel-box">
- <select-cell
- title="来访类型"
- :prop="prop"
- v-model="visitType"
- :data-list="typeList"
- required>
- </select-cell>
- <van-cell
- v-if="visitType == 1"
- title="到访机构"
- required
- is-link
- @click="showOrg"
- :label="formData.orgName">
- </van-cell>
- <van-field
- label="出入事由"
- required
- rows="1"
- autosize
- type="textarea"
- v-model="formData.reasons"
- placeholder="请输入"
- :maxlength="200"/>
- <van-field
- v-if="visitType != 3"
- label="介绍信编号"
- required
- v-model="formData.letterNo"
- placeholder="请输入"
- :maxlength="20"/>
- <van-cell
- required
- title="有效期"
- :label="formData.date"
- is-link
- @click="showCalendar">
- </van-cell>
- <div class="upload-box" v-if="visitType != 3" >
- <span><i>*</i> 介绍信上传</span>
- <uploader :maxCount="1" v-model="formData.letterFile"/>
- </div>
- <van-field
- v-model="formData.description"
- rows="1"
- autosize
- :maxlength="200"
- label="备注信息"
- type="textarea"
- placeholder="请输入"/>
- </div>
- <van-cell required title="添加人员">
- <template #right-icon>
- <div class="flex-box">
- <span style="color: #aaa;"></span>
- <van-switch size="20px" v-model="checked" />
- </div>
- </template>
- </van-cell>
- </van-panel>
- </div>
- <!-- 人员列表 -->
- <div class="card" v-for="(v,i) in pList" :key="i">
- <van-swipe-cell>
- <div class="goods-card">
- <div class="card-img-box" @click="preView(v.imgFile)">
- <p>{{v.imgFile[0].imgPath}}</p>
- <img :src="imgUrl(v.imgFile[0].imgPath)" alt="">
- </div>
- <div class="card-cell-box">
- <van-cell title="出入人员" :value="v.userName"></van-cell>
- <van-cell title="身份证" :value="v.idCard"></van-cell>
- <van-cell title="单位" :value="v.companyName"></van-cell>
- </div>
- </div>
- <template #left>
- <van-button style="height: 100%;" square text="编辑" type="info" @click="editPerson(v,i)" class="delete-button" />
- </template>
- <template #right>
- <van-button style="height: 100%;" square text="删除" type="danger" @click="deletePerson(v,i)" class="delete-button" />
- </template>
- </van-swipe-cell>
- </div>
- <!-- 添加人员信息 -->
- <div class="card" v-show="checked">
- <van-cell title="人员信息">
- <template #right-icon>
- <van-button type="primary" icon="plus" size="mini" @click="onAdd">添加</van-button>
- </template>
- </van-cell>
- <div class="panel-box">
- <van-form validate-first @failed="onFailed">
- <van-field
- required
- v-model="personnel.userName"
- rows="1"
- autosize
- :maxlength="20"
- label="出入人员"
- :rules="[{ pattern:/^(.+)$/, message: '请输入' }]"
- placeholder="请输入"/>
- <van-field
- required
- v-model="personnel.idCard"
- rows="1"
- autosize
- :maxlength="20"
- label="证件号码"
- :rules="[{ pattern:/^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{4}([0-9]|X)$/, message: '请输入正确身份证号码' }]"
- placeholder="请输入"/>
- <van-field
- required
- v-model="personnel.companyName"
- rows="1"
- autosize
- :maxlength="20"
- label="单位"
- :rules="[{ pattern:/^(.+)$/, message: '请输入' }]"
- placeholder="请输入"/>
- </van-form>
- <div class="upload-box" >
- <span><i>*</i> 证件上传</span>
- <uploader :maxCount="2" v-model="personnel.imgFile"/>
- </div>
- </div>
- </div>
- <div class="big-btn-box" >
- <van-button type="info" size="large" @click="onSubmit">提交申请</van-button>
- </div>
- </div>
- <!-- <van-calendar-->
- <!-- v-model="showCalendar"-->
- <!-- :allow-same-day="true"-->
- <!-- type="range"-->
- <!-- :show-confirm="false"-->
- <!-- @confirm="onConfirm"/>-->
- <calendar-picker ref="CalendarPicker" @change="getDate"></calendar-picker>
- <org-picker
- :show="showPicker"
- @cancel="cancelPicker"
- @confirm="changeOrg">
- </org-picker>
- </div>
- </template>
- <script>
- import SelectCell from "@/components/selectCell/index.vue";
- import DateCell from "@/components/dateCell/index.vue";
- import Uploader from "@/components/upload/gxuploader.vue";
- import OrgPicker from "@/components/OrgPicker/index.vue";
- import CalendarPicker from "@/components/CalendarPicker/index.vue";
- import {formatDate} from "@/filters/filter";
- import {mapGetters} from "vuex";
- import {imgUrl} from "@/utils";
- import { ImagePreview } from 'vant'
- import {visitAdd} from './api'
- export default {
- components: {SelectCell,Uploader,DateCell,CalendarPicker,OrgPicker},
- data(){
- return {
- visitType:2,
- checked:false,
- visitInfo: {},
- formData:{
- receptionOrgIds:null,
- reasons:null,
- letterNo:null,
- letterFile:null,
- description:null,
- range:null,
- date:null,
- },
- personnel:{
- userName:null,
- idCard:null,
- companyName:null,
- imgFile:[],
- },
- pList:[],
- showPicker:false,
- openCalendar:false,
- prop:{
- label:'name',
- value:'value'
- },
- typeList:[
- {
- name:'临时出入',
- value:2
- },
- {
- name:'紧急出入',
- value:3
- }
- ],
- }
- },
- computed:{
- ...mapGetters(['orgId','id'])
- },
- methods:{
- imgUrl,formatDate,
- onSubmit(){
- // if(this.visitType == '1'){
- // if(!this.formData.receptionOrgIds){
- // this.$toast('请选择来访机构');
- // return;
- // }
- // if(!this.formData.letterNo){
- // this.$toast('请输入介绍信编号');
- // return;
- // }
- // if(!this.formData.letterFile){
- // this.$toast('请上传介绍信');
- // return;
- // }
- // }
- if(this.visitType == '2'){
- if(!this.formData.letterNo){
- this.$toast('请输入介绍信编号');
- return;
- }
- if(!this.formData.letterFile){
- this.$toast('请上传介绍信');
- return;
- }
- }
- if(!this.formData.reasons){
- this.$toast('请输入出入事由');
- return;
- }
- if(!this.formData.range){
- this.$toast('请选择有效期');
- return;
- }
- if(this.pList.length == 0){
- this.$toast('请添加人员信息');
- return;
- }
- this.formData.status = 1;
- this.formData.type = this.visitType;
- this.formData.receptionOrgIds = [this.orgId];
- this.formData.userInfos = this.pList;
- let data = this.formData;
- alert(JSON.stringify(data))
- if(this.visitType == '2'){
- data.letterFile = this.formData.letterFile.map(v=>{
- return JSON.stringify(v);
- })
- }
- data.userInfos = this.pList.map(user=>{
- let urlArr = user.imgFile.map(v=>{
- return v.imgPath
- })
- user.imgFile = urlArr.join(',');
- return user
- })
- alert(JSON.stringify(data))
- visitAdd(data).then(res=>{
- this.$toast.success('提交成功');
- this.$router.replace({
- path:'/visitRegister',
- });
- })
- },
- onFailed(errorInfo) {
- console.log('failed', errorInfo);
- },
- getDate(date){
- console.log(date,'date');
- const [start, end] = date;
- this.formData.range = date;
- this.formData.date = `${start} ~ ${end}`;
- console.log( this.formData.date,'date');
- },
- showCalendar(){
- this.$refs.CalendarPicker.show = true;
- },
- editPerson(v,i){
- console.log(v,'vvvvv');
- this.checked = true;
- this.personnel = JSON.parse(JSON.stringify(v));
- },
- deletePerson(v,i){
- console.log(v,'vvvvv')
- this.pList.splice(i,1);
- },
- onAdd(){
- // this.personnel.imgFile = [{
- // url:'askjdkajsdjajkdsa',
- // imgPath:'asjkdklaslkdasdlasld',
- // name:'asdasdasd'
- // }]
- if(!this.personnel.userName || !this.personnel.idCard || !this.personnel.companyName || !this.personnel.imgFile){
- this.$toast('请完善人员信息');
- return;
- }
- if(this.personnel.imgFile.length < 2) {
- this.$toast('请上传证件照正反面');
- return;
- }
- let strObj = JSON.parse(JSON.stringify(this.personnel));
- this.pList.push(strObj);
- this.personnel = {
- userName:null,
- idCard:null,
- companyName:null,
- imgFile:[],
- };
- },
- showOrg(){
- this.showPicker = true;
- },
- changeOrg(selected){
- this.showPicker = false;
- this.formData.orgName = selected[0].text;
- this.formData.receptionOrgIds = [selected[0].id];
- },
- cancelPicker(){
- this.showPicker = false;
- },
- preView(imgs) {
- let arr = imgs.map(v=>{return v.imgPath});
- console.log(arr,'imgs')
- ImagePreview(arr)
- },
- }
- }
- </script>
- <style lang="scss">
- .visit-add{
- .van-card{
- padding: 20px;
- }
- .card-cell-box{
- width: 70%;
- .van-cell{
- padding: 10px;
- &::after{
- left:10px;
- right:10px;
- }
- }
- .van-cell__title{
- flex:.25;
- }
- .van-cell__value{
- flex:.75;
- }
- }
- }
- </style>
- <style scoped lang="scss">
- .visit-add{
- height: 100%;
- overflow: hidden;
- }
- .page-container{
- height: calc(100vh - 94px);
- overflow: auto;
- padding: 20px;
- }
- .flex-box{
- display: flex;
- justify-content: space-between;
- align-items: center;
- >span{
- margin: 0 20px;
- }
- }
- .card{
- margin-bottom: 20px;
- box-shadow: 0 10px 10px #eaeaea;
- }
- .card:last-child{
- margin-bottom: 0;
- }
- .panel-box{
- padding:0 20px;
- background-color: #fff;
- }
- .panel-box-item{
- height: 36px;
- line-height: 36px;
- }
- .item-label{
- width: 100%;
- display: flex;
- justify-content: right;
- align-items: center;
- }
- .item-value{
- width: 100%;
- display: flex;
- justify-content: left;
- align-items: center;
- }
- .upload-box{
- padding: 20px 30px;
- display: flex;
- >span{
- display: inline-block;
- height: 160px;
- width: 200px;
- line-height: 160px;
- font-size: 28px;
- color:#999;
- >i{
- font-style: normal;
- color: #ee0a24;
- }
- }
- }
- .goods-card{
- width: 100%;
- display: flex;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- .card-img-box{
- width: 200px;
- height: 200px;
- margin-right: 10px;
- >img{
- width: 100%;
- height: 100%;
- object-fit: cover;
- border-radius: 10px;
- }
- }
- }
- .big-btn-box{
- padding-bottom: 20px;
- }
- </style>
|