You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

811 lines
23 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<page-meta :page-style="'overflow:'+(adminListShow||configshow?'hidden':'visible')"></page-meta>
<view class="containers">
<!-- 拜访须知 -->
<u-popup :show="configshow" class="configwrap" closeable mode="bottom" @close="closeConfig">
<view class="configtitle">
{{configInfo.name}}
</view>
<view class="configvalue" v-html="configInfo.value">
</view>
</u-popup>
<view class="steps">
<uni-steps :options="steps" :active="stepActive" active-color="#044ed7" />
</view>
<uni-forms ref="formdata" :model="form" :rules="rules" labelWidth="100px">
<view class="formtext">拜访信息</view>
<uni-forms-item label="到访日期" required name="date">
<uni-datetime-picker type="date" :start="toadyStart" return-type="string" v-model="form.date" />
</uni-forms-item>
<uni-forms-item label="到访时段" required name="visit_time_id">
<uni-data-checkbox v-model="form.visit_time_id" :localdata="visitTime"
:map="{text:'visitTimeRange',value:'id'}" />
</uni-forms-item>
<uni-forms-item label="前往区域" required name="visit_area_id">
<uni-data-checkbox @change='changeVisitArea' v-model="form.visit_area_id" :localdata="visitArea"
:map="{text:'name',value:'id'}" />
</uni-forms-item>
<uni-forms-item label="到访事由" v-if="form.type==1">
<uni-data-select v-model="form.reason" :localdata="reasonList">
</uni-data-select>
</uni-forms-item>
<uni-forms-item label="施工开始时段" v-if="form.type==2">
<uni-datetime-picker type="date" :start="toadyStart" return-type="string"
v-model="form.work_start_time" />
</uni-forms-item>
<uni-forms-item label="施工结束时段" v-if="form.type==2">
<uni-datetime-picker type="date" :start="toadyStart" return-type="string"
v-model="form.work_end_time" />
</uni-forms-item>
<!-- <uni-forms-item label="车牌号" v-if="form.type==3"> -->
<uni-forms-item label="车辆类型" required name="plate" v-if="form.type==3">
<uni-data-checkbox v-model="form.plate" :localdata="parkAreaList" :map="{text:'value',value:'value'}" />
</uni-forms-item>
<uni-forms-item label="备注">
<uni-easyinput type="textarea" v-model="form.remark" placeholder="请输入自我备注" />
</uni-forms-item>
<view class="formtext">拜访人信息</view>
<uni-forms-item label="姓名" required name="name">
<uni-easyinput v-model="form.name" placeholder="请输入姓名" />
</uni-forms-item>
<uni-forms-item label="联系电话" required name="mobile">
<uni-easyinput v-model="form.mobile" placeholder="请输入联系电话" />
</uni-forms-item>
<uni-forms-item label="证件类型" required name="credent">
<uni-data-select v-model="form.credent" :localdata="credentList">
</uni-data-select>
</uni-forms-item>
<uni-forms-item label="证件号码" required name="idcard" v-if="form.credent==1">
<uni-easyinput type="idcard" v-model="form.idcard" placeholder="请输入证件号码" />
</uni-forms-item>
<uni-forms-item label="护照号码" required name="passcard" v-if="form.credent==2">
<uni-easyinput type="text" v-model="form.passcard" placeholder="请输入证件号码" />
</uni-forms-item>
<uni-forms-item label="单位名称" required name="company_name">
<uni-easyinput v-model="form.company_name" placeholder="请输入单位名称" />
</uni-forms-item>
<uni-forms-item label="CDA编号" required name="cda" v-if="form.type==1&&visitAreaText=='生产区'">
<uni-easyinput type='textarea' v-model="form.cda" placeholder="请输入CDA编号(如无注明原因)" />
</uni-forms-item>
<uni-forms-item label="到访车辆" v-if="form.type!=3">
<view style="text-align: right;">
<button style="background-color: #044ed7;" type="primary" size="mini"
@click="form.cars.push('')">新增车辆</button>
</view>
<view v-for='(item,index) in form.cars' class="justify-between align-center"
style="margin-bottom:20rpx">
<uni-easyinput disabled @tap="plateShow=true,carindex=index" v-model.trim="form.cars[index]"
placeholder="请输入到访车辆" />
<text @click="form.cars.splice(index,1)"
style="color: red;margin-left:20rpx">删除</text>
</view>
<plate-input v-if="plateShow" :plate="form.cars[carindex]" @export="setCars"
@close="plateShow = false" />
</uni-forms-item>
<uni-forms-item label="到访车辆" required name="cars" v-else>
<view style="text-align: right;">
<button style="background-color: #044ed7;" type="primary" size="mini"
@click="form.cars.push('')">新增车辆</button>
</view>
<view v-for='(item,index) in form.cars' class="justify-between align-center"
style="margin-bottom:20rpx">
<uni-easyinput disabled @tap="plateShow=true,carindex=index" v-model.trim="form.cars[index]"
placeholder="请输入到访车辆" />
<text @click="form.cars.splice(index,1)"
style="color: red;margin-left:20rpx">删除</text>
</view>
<plate-input v-if="plateShow" :plate="form.cars[carindex]" @export="setCars"
@close="plateShow = false" />
</uni-forms-item>
<template v-if="form.type!=3">
<view class="formtext" style="display: flex;justify-content: space-between;">
<text>随访人员</text>
<button style="background-color: #044ed7;" type="primary" size="mini"
@click="$refs.showRight.open(),follw_people_obj={credent:1},follow_people_index=-1">新增随访人员</button>
</view>
<!-- 随访人员表格 -->
<template>
<uni-table ref="table" border emptyText="暂无更多数据">
<uni-tr>
<uni-th width="160" align="center">操作</uni-th>
<uni-th width="120" align="center">姓名</uni-th>
<uni-th width="120" align="left">联系电话</uni-th>
<uni-th width="120" align="center">证件类型</uni-th>
<uni-th width="120" align="left">证件号码</uni-th>
</uni-tr>
<uni-tr style="vertical-align: middle;" v-for="(item, index) in form.follw_people" :key="index">
<uni-td>
<view class="uni-group">
<text @click="editFollwPeople(index)"
style="color: #044ed7;margin-right:8px">修改</text>
<text @click="form.follw_people.splice(index,1)"
style="color: red;margin-right:8px">删除</text>
</view>
</uni-td>
<uni-td>{{ item.name }}</uni-td>
<uni-td>
<view class="name">{{ item.mobile }}</view>
</uni-td>
<uni-td align="center">{{ item.credent==1?'身份证':"护照" }}</uni-td>
<uni-td align="center">{{ item.idcard }}</uni-td>
</uni-tr>
</uni-table>
</template>
</template>
<uni-forms-item label="长访客申请">
<uni-data-checkbox v-model="form.long_time" :localdata="longList" :map="{text:'value',value:'id'}" />
</uni-forms-item>
<template v-if="form.long_time==1">
<uni-forms-item label="开始日期">
<uni-datetime-picker type="date" :start="toadyStart" return-type="string"
v-model="form.start_date" />
</uni-forms-item>
<uni-forms-item label="结束日期">
<uni-datetime-picker type="date" :start="toadyStart" return-type="string" v-model="form.end_date" />
</uni-forms-item>
</template>
<view class="formtext">被访人信息</view>
<uni-forms-item label="被访人" required name="acceptName" v-if="form.type==1||form.type==2">
<uni-easyinput @clear="clearAccept('accept')" disabled v-model="form.acceptName"
@tap="adminListShowOpen('accept')" placeholder="请选择联系人员" />
</uni-forms-item>
<uni-forms-item label="收货人" v-if="form.type==3" required name="goodsName">
<uni-easyinput @clear="clearAccept('goods')" disabled v-model="form.goodsName"
@tap="adminListShowOpen('goods')" placeholder="请选择联系人员" />
</uni-forms-item>
<qianziyu-select :show="adminListShow" type="radio" :popupTitle="'联系人员'" name="cworkStationName"
:dataLists="adminList" placeholder="输入被访人具体姓名或手机号搜索" @search="selectSearch" @submit="submitAccept"
@cancel="cancelAccept" />
</uni-forms>
<button type="primary" style="background-color: #044ed7;" @click="saveFormgoStudy">{{goStudy}}</button>
<!-- 随访人员弹出 -->
<uni-drawer ref="showRight" mode="right" :mask-click="true">
<uni-forms ref="peopleform" :model="follw_people_obj" :rules="peoplerules" labelWidth="80px">
<uni-forms-item label="姓名" required name='name'>
<uni-easyinput v-model="follw_people_obj.name" placeholder="请输入姓名" />
</uni-forms-item>
<uni-forms-item label="联系电话" required name='mobile'>
<uni-easyinput v-model="follw_people_obj.mobile" placeholder="请输入联系电话" />
</uni-forms-item>
<uni-forms-item label="证件类型" required name='credent'>
<uni-data-select @change="chooseCredent" v-model="follw_people_obj.credent"
:localdata="credentList">
</uni-data-select>
</uni-forms-item>
<uni-forms-item label="证件号码" required name='idcard' v-if="follw_people_obj.credent==1">
<uni-easyinput type="idcard" v-model="follw_people_obj.idcard" placeholder="请输入证件号码" />
</uni-forms-item>
<uni-forms-item label="护照号码" required name='passcard' v-if="follw_people_obj.credent==2">
<uni-easyinput type="text" v-model="follw_people_obj.passcard" placeholder="请输入证件号码" />
</uni-forms-item>
</uni-forms>
<view class="uni-group" style="text-align: right;">
<button @click="closeDrawer" size="mini">取消</button>
<button @click="pushFollowPeople" size="mini" type="primary"
style="background-color: #044ed7;margin-left:8px"></button>
</view>
</uni-drawer>
</view>
</template>
<script>
import plateInput from '@/uni_modules/uni-plate-input/uni-plate-input.vue'
import qianziyuSelect from '@/components/qianziyu-select/qianziyu-select.vue'
export default {
components: {
plateInput,
qianziyuSelect
},
data() {
return {
steps: [{
title: '填报'
}, {
title: '学习'
}, {
title: '完成'
}],
stepActive: 0,
configshow: false,
configInfo: {},
configKey: "ptfk",
toadyStart: '',
carindex: 0,
plateShow: false,
adminListShow: false,
adminKeyword: '',
acceptType: "",
acceptName: "",
goodsName: '',
visitAreaText:'',
form: {
type: 1,
date: "",
visit_time_id: "",
visit_area_id: "",
reason: "",
plate: "",
remark: "",
name: "",
mobile: "",
credent: 1,
idcard: "",
passcard:"",
company_name: "",
cars: [],
follw_people: [],
long_time: 0,
start_date: "",
end_date: "",
accpet_department_id: "",
accept_admin_id: "",
accept_goods_admin_id: "",
acceptName: "",
goodsName: '',
},
follw_people_obj: {
name: "",
mobile: "",
credent: 1,
idcard: "",
},
follow_people_index: -1,
rules: {
date: {
rules: [{
required: true,
errorMessage: '请选择到访日期'
}]
},
visit_time_id: {
rules: [{
required: true,
errorMessage: '请选择拜访时段'
}]
},
visit_area_id: {
rules: [{
required: true,
errorMessage: '请选择前往区域'
}]
},
plate: {
rules: [{
required: true,
errorMessage: '请选择车辆类型'
}]
},
name: {
rules: [{
required: true,
errorMessage: '姓名不能为空'
}]
},
mobile: {
rules: [{
required: true,
errorMessage: '联系电话不能为空'
}, {
pattern: '^[1][3-9][\\d]{9}',
errorMessage: '联系号码格式错误'
}]
},
credent: {
rules: [{
required: true,
errorMessage: '请选择身份证类型'
}]
},
idcard: {
rules: [{
required: true,
errorMessage: '身份证号码不能为空'
}, {
pattern: '^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]',
errorMessage: '身份证格式错误'
}]
},
passcard:{
rules: [{
required: true,
errorMessage: '护照号码不能为空'
}, {
pattern: '/^([a-zA-z]|[0-9]){5,17}$/',
errorMessage: '护照格式错误'
}]
},
company_name: {
rules: [{
required: true,
errorMessage: '单位名称不能为空'
}]
},
cda: {
rules: [{
required: true,
errorMessage: 'CDA编号不能为空'
}]
},
cars:{
rules: [{
required: true,
errorMessage: '车牌号不能为空'
}]
},
acceptName: {
rules: [{
required: true,
errorMessage: '请选择被访人'
}]
},
goodsName: {
rules: [{
required: true,
errorMessage: '请选择收货人'
}]
}
},
peoplerules: {
name: {
rules: [{
required: true,
errorMessage: '随访人姓名不能为空'
}]
},
mobile: {
rules: [{
required: true,
errorMessage: '联系电话不能为空'
}, {
pattern: '^[1][3-9][\\d]{9}',
errorMessage: '联系号码格式错误'
}]
},
credent: {
rules: [{
required: true,
errorMessage: '请选择身份证类型'
}]
},
idcard: {
rules: [{
required: true,
errorMessage: '身份证号码不能为空'
}, {
pattern: '^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]',
errorMessage: '身份证格式错误'
}]
},
passcard:{
rules: [{
required: true,
errorMessage: '护照号码不能为空'
}, {
pattern: '/^([a-zA-z]|[0-9]){5,17}$/',
errorMessage: '护照格式错误'
}]
}
},
// 单选数据源
visitTime: [],
visitArea: [],
reasonList: [],
parkAreaList: [],
credentList: [{
value: 1,
text: "身份证"
},
{
value: 2,
text: "护照"
}
],
longList: [{
id: 0,
value: '否'
}, {
id: 1,
value: '是'
}],
adminList: [],
isCall: '', // 是否待邀约
goStudy: '去学习',
isStudy:false
}
},
onLoad(options) {
// uni.navigateTo({
// url:'/pages/visit/testStudy?type=3'
// })
// return
this.toadyStart = new Date()
this.form.type = options.type
this.configKey = options.type == 1 ? 'ptfk' : (options.type == 2 ? 'sgfk' : 'wlcl')
this.isCall = options.iscall ? options.iscall : ''
this.goStudy = this.isCall == 'call' ? '提交' : '去学习'
this.form.audit_status = this.isCall == 'call' ? 1 : 0
this.getStudy()
this.getConfig()
this.getVisitArea()
this.getVisitTime()
this.getReason()
this.getPark()
// this.getAdminList()
},
onReady() {},
methods: {
adminListShowOpen(type) {
this.acceptType = type
this.adminKeyword = ""
// this.getAdminList()
this.adminListShow = true
},
cancelAccept() {
console.log('123')
this.adminKeyword = ""
this.adminList = []
this.adminListShow = false
},
selectSearch(e) {
this.adminKeyword = e
this.getAdminList()
},
clearAccept(type) {
if (type == 'accept') {
this.form.accept_admin_id = ''
this.form.acceptName = ''
} else {
this.form.accept_goods_admin_id = ''
this.form.goodsName = ''
}
},
submitAccept(e) {
console.log(e)
if (this.acceptType == 'accept') {
this.form.accept_admin_id = e.id
this.form.accpet_department_id = e.department_id
this.form.acceptName = e.name
} else {
this.form.accept_goods_admin_id = e.id
this.form.accept_admin_id = e.id
this.form.accpet_department_id = e.department_id
this.form.goodsName = e.name
}
this.adminListShow = false
},
setCars(e) {
this.form.cars[this.carindex] = e
this.plateShow = false
console.log(e, this.carindex)
},
closeConfig() {
this.configshow = false
},
async getConfig() {
let that = this
// util.request()
this.util.request({
api: '/api/mobile/user/config',
data: {
page: 1,
page_size: 99
},
// requestType: 'bd',
utilSuccess: function(res) {
console.log(res)
let data = res
for (let k of data) {
if (k.key == that.configKey) {
that.configInfo = k
}
}
that.configshow = true
},
utilFail: function(res) {}
})
},
// 获取单选数据
async getStudy() {
let that = this
this.util.request({
api: '/api/mobile/visit/ask-log',
method: "get",
data:{
type:that.form.type
},
utilSuccess: function(res) {
console.log("res",res)
if(res.msg=='学习有效中'){
that.isStudy = true
that.goStudy = '提交'
}
},
utilFail: function(res) {
// console.log(res)
// uni.showToast({
// title: res,
// duration: 2000,
// icon: 'none'
// })
}
})
},
async getVisitArea() {
let that = this
// util.request()
this.util.request({
api: '/api/mobile/visit/visit-area',
data: {},
utilSuccess: function(res) {
console.log(res)
that.visitArea = res
},
utilFail: function(res) {}
})
},
changeVisitArea(e){
console.log(e)
this.visitAreaText = e.detail.data.name
},
async getVisitTime() {
let that = this
// util.request()
this.util.request({
api: '/api/mobile/visit/visit-time',
data: {},
utilSuccess: function(res) {
for (var m of res) {
m.visitTimeRange = m.start_time + "-" + m.end_time
}
console.log(res)
that.visitTime = res
},
utilFail: function(res) {}
})
},
async getReason() {
let that = this
// util.request()
this.util.request({
api: '/api/admin/parameter/show',
data: {
number: 'reasonList'
},
utilSuccess: function(res) {
let arr = []
console.log(res)
for (var m of res.detail) {
arr.push({
text: m.value,
value: m.value
})
}
that.reasonList = arr
},
utilFail: function(res) {}
})
},
async getPark() {
let that = this
// util.request()
this.util.request({
api: '/api/admin/parameter/show',
data: {
number: 'parkArea'
},
utilSuccess: function(res) {
that.parkAreaList = res.detail
},
utilFail: function(res) {}
})
},
async getAdminList() {
let that = this
// util.request()
this.util.request({
api: '/api/admin/other/admin-user-list',
data: {
page_size: 99,
page: 1,
keyword: this.adminKeyword
},
utilSuccess: function(res) {
that.adminList = res.data
},
utilFail: function(res) {}
})
},
//
chooseCredent(e) {
console.log(e)
},
// 随访人员弹出
editFollwPeople(index) {
this.follow_people_index = index
this.follw_people_obj = this.form.follw_people[index]
this.$refs.showRight.open()
},
closeDrawer() {
this.follw_people_obj = {}
this.follow_people_index = -1
this.$refs.showRight.close()
},
pushFollowPeople() {
console.log('this.follw_people_obj', this.follw_people_obj)
if(this.follw_people_obj.credent==2){
this.follw_people_obj.idcard = this.follw_people_obj.passcard
}
this.$refs['peopleform'].validate().then(res => {
if (this.follow_people_index > -1) {
this.form.follw_people[this.follow_people_index] = this.follw_people_obj
} else {
this.form.follw_people.push(this.follw_people_obj)
}
this.follow_people_index = -1
this.$refs.showRight.close()
}).catch(err => {
console.log('err', err);
})
},
// 去学习
saveFormgoStudy() {
if(this.form.credent==2){
this.form.idcard = this.form.passcard
}
this.$refs['formdata'].validate().then(res => {
console.log("form", this.form)
// return
if (this.isCall === 'call') {
this.submitForm()
return
}
if(this.isStudy){
this.submitNoStudy()
}else{
uni.setStorageSync('formdata', this.form)
uni.redirectTo({
url: '/pages/visit/study?type=' + this.form.type
})
}
}).catch(err => {
console.log('err', err);
})
},
submitForm() {
let that = this
this.util.request({
api: '/api/admin/visit/save',
method: "POST",
requestType: 'bd',
data: that.form,
utilSuccess: function(res) {
uni.showToast({
title: res.msg,
duration: 2000,
icon: 'none'
})
// uni.removeStorageSync('formData')
uni.redirectTo({
url: '/pages/visit/successform?iscall=call'
})
},
utilFail: function(res) {
uni.showToast({
title: res,
duration: 2000,
icon: 'none'
})
}
})
},
submitNoStudy(){
let that = this
this.util.request({
api: '/api/mobile/visit/visit-save',
method: "POST",
data: that.form,
utilSuccess: function(res) {
uni.showToast({
title: res.msg,
duration: 2000,
icon: 'none'
})
that.newsSubscription()
},
utilFail: function(res) {
console.log(res)
uni.showToast({
title: res,
duration: 2000,
icon: 'none'
})
}
})
},
newsSubscription() {
uni.getSetting({
withSubscriptions: true, //是否获取用户订阅消息的订阅状态默认false不返回
success(res) {
if (res.authSetting['scope.subscribeMessage']) {
uni.redirectTo({
url: '/pages/visit/successform'
})
} else {
// 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
uni.requestSubscribeMessage({
tmplIds: ['DmzNRREPFdZrMWconNDdbj_ebtVPRWufq27kRQ25eNg','IczaKkCmwf55tAAzCcxb_fbbf5L25SWrSKvaBrkIyk4'],
success(res) {
console.log("res", res)
uni.showToast({
title:'订阅成功'
})
uni.redirectTo({
url: '/pages/visit/successform'
})
}
})
}
}
});
},
}
}
</script>
<style scoped>
.containers {
background-color: #fff;
min-height: 100vh;
padding: 20rpx;
padding-bottom: 60rpx;
}
.steps {
margin-bottom: 40rpx
}
.formtext {
margin-bottom: 20rpx
}
/deep/ .uni-table-td {
vertical-align: middle;
}
/deep/ .uni-drawer__content {
padding: 40rpx
}
.configtitle {
font-size: 40rpx;
text-align: center;
margin-top:36rpx
}
.configvalue {
padding: 40rpx;
font-size: 36rpx;
height: 600rpx;
overflow-y: auto;
}
/deep/ .u-popup__content__close .u-icon__icon{
color:#fff!important
}
</style>