hls_crm/pagesA/crm/createCustomer/createCustomer.vue

678 lines
15 KiB
Vue

<template>
<view class="create_customer">
<view class="top_required">
只展示<span style="color:#f00">必填</span>字段<switch :checked="isRequired" color="#008EFF" @change="changeRequired" />
</view>
<view class="fllow_form">
<input type="text" class="nameinput" :class="name ? 'valueActive' : '' " v-model="name" placeholder="输入门店名称" />
<view class="form_right theme">
<image style="width: 40rpx;height: 40rpx;
margin: 0 20rpx 0 30rpx;" :src="BASE_IMG_URL+'chachong.png'" mode="scaleToFill"></image>
<view @click="checkName" style="color:#008EFF;">查重</view>
</view>
</view>
<!-- 基础信息 -->
<view class="info_head">基础信息</view>
<view class="fllow_form" v-if="!isRequired">
<view style="padding-left: 20rpx;">上级公司</view>
<view class="form_right" @click="changeParent">
<view :class="parentName ? 'valueActive' : '' ">{{parentName ? parentName : '点击选择'}}</view>
<view class="iconfont icon-arrows_right"></view>
</view>
</view>
<view class="fllow_form">
<view><text>*</text>地理位置</view>
<!-- #ifdef MP-ALIPAY || H5 -->
<view class="form_right" @click="show = true">
<view :class="address_dingwei ? 'valueActive' : '' ">{{address_dingwei ? address_dingwei : '点击选择'}}</view>
<view class="iconfont icon-arrows_right"></view>
</view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN || APP-PLUS-->
<view class="form_right" @click="detailAddClick">
<view class="location" :class="address_dingwei ? 'valueActive' : '' ">
{{address_dingwei ? address_dingwei : '点击选择'}}
</view>
<view class="iconfont icon-arrows_right"></view>
</view>
<!-- #endif -->
</view>
<view class="fllow_form_text">
<view style="flex-shrink: 0;"><text>*</text>详细地址</view>
<view class="form_right">
<textarea
class="detailText"
:class="address_detail ? 'valueActive' : '' "
v-model="address_detail"
placeholder="填写详细地址"
placeholder-style="font-size:30rpx;color: #999;"
/>
</view>
</view>
<form-item v-for="(item,index) in listForm" :key="index" :isNotRequired="isRequired" :objInfo="item" @changeData="changeData"></form-item>
<view class="" v-if="isAddContact">
<view class="info_head">联系人信息</view>
<form-item v-for="(citem,cindex) in contactsForm" :key="cindex" :isNotRequired="isRequired" :objInfo="citem" @changeData="changeContactData"></form-item>
</view>
<!-- 审核信息 -->
<examine-template :flag="false" :remindPeople="remindPeople" title="提醒谁看" @delExamine="delRemind"></examine-template>
<view id="btn" class="btn_g bg-blue button-hover round" @click="$noMultipleClicks(subSave)">
保存
</view>
<!-- <view class="bot_btn">
<view class="b_btn" @click="$noMultipleClicks(subSave)">保存</view>
<view class="b_btn" style="width:440rpx" @click="$noMultipleClicks(saveAdd)">保存并添加联系人</view>
</view> -->
<view class="safebottom"></view>
<!-- 位置选择 -->
<u-select
v-model="show"
mode="mutil-column-auto"
value-name="code"
label-name="name"
child-name="children"
:list="addressList"
@confirm="confirm"
></u-select>
<!-- 选择门店 -->
<select-customer ref="customerChild" @getCustomerinfo="sureSelect"></select-customer>
</view>
</template>
<script>
import {
BASE_IMG_URL
} from '@/util/api.js'
import {
dateTimePicker,
getMonthDay
} from '@/util/dateTimePicker.js'
import {
netSetForm,
netStaffDefaultReviewer,
uploadUrl
} from '@/api/index.js'
import formItem from '@/components/form/formitem.vue'
import {
checkPhone,
checkCNPhone
} from '@/util/util.js'
import {
pageJumps
} from "./createCust_page_jumps.js";
import {
netAddkehu,
netSelect,
netPrevCustomer,
netCheckName
} from '@/api/kehu.js'
import { netCluesDetail } from '@/api/clues.js'
import { commonF } from '@/common/common'
const citysJSON = require('@/util/address.js');
import selectCustomer from '@/components/selectCustomer.vue'
export default {
mixins: [pageJumps,commonF],
components: {
formItem,
selectCustomer
},
data() {
return {
BASE_IMG_URL: BASE_IMG_URL,
noClick: true, //防止 重复点击
name: '', //门店名称
subname: '', //助记名称
industry: '', //门店行业
level: '', //门店星级
source: '', //门店来源
follow: '', //跟进状态
address_dingwei: '', //地址定位
address_detail: '', //详细地址
lng: '', //经度
lat: '', //纬度
parent_id: '', //上级公司
parentList: [],
plist: [],
parentIndex: null,
parentName: '',
BASE_IMG_URL: BASE_IMG_URL,
location: '', //所在地区
show: false,
//联系人
remindPeople: [], //提醒谁看
remindType:'customer',
sourceIndex: null,
listForm: [], //门店附加信息
isAddContact:false, //是否添加联系人
contactsForm:[], //联系人信息
list: [],
isRequired:false, //是否只展示必填字段
//地址
addressList:[],
parentDisabled:false,
leads_id:'', //线索ID
}
},
onLoad(options) {
this.addressList = citysJSON.citys
if(options.id) {
this.parent_id = options.id
uni.setNavigationBarTitle({
title:'新建子公司'
})
}
//转客
if(options.leads_id) {
this.leads_id = options.leads_id
}
this.listForm = []
this.init()
// #ifdef MP-WEIXIN
this.initTime()
// #endif
},
onShow() {
},
methods: {
//切换是否只展示必填字段
changeRequired(e) {
this.isRequired = e.detail.value
},
init() {
if(this.leads_id){
return Promise.all([this.getForm(),this.getPrevCoustomer(),this.getclubInfo()])
}else{
return Promise.all([this.getForm(),this.getPrevCoustomer()])
}
},
initTime() {
// 获取完整的年月日 时分秒,以及默认显示的数组
let obj = dateTimePicker()
// 精确到分的处理,将数组的秒去掉
let lastArray = obj.dateTimeArray.pop();
let lastTime = obj.dateTime.pop();
let lastDate = obj.dateArray.pop()
this.dateTimeArray = obj.dateTimeArray
this.dateTime = obj.dateTime
this.dateArr = obj.dateArray
},
//获取线索信息
getclubInfo() {
netCluesDetail({id:this.leads_id}).then(res=>{
this.name = res.data.name
this.address_detail = res.data.address_detail
//处理默认 门店附加信息
this.listForm.forEach(item=>{
item.value = res.data[item.id]
})
res.data.name='';
})
},
// 选择成员
moreClick() {
uni.navigateTo({
url: '/pagesA/crm/selectMember/selectMember'
})
},
getForm() {
netSetForm({
type: 'customer'
}).then(res => {
res = res.data
let customerForm = res.data
this.isAddContact = res.isAddContact
let arr = []
customerForm.forEach((item, index) => {
if (item.id != 'name') {
item.value = ''
arr.push(item)
}else{
item.value = item.value?item.value:''
}
})
this.listForm = arr
if(res.isAddContact){
this.getContactForm()
}
})
},
getContactForm() {
netSetForm({type:'contacts'}).then(res=>{
let arr = res.data.data
arr.forEach(ele=>{
ele.value = ele.value?ele.value:''
})
this.contactsForm = arr
})
},
changeData(name, value, obj) {
let arr = this.listForm
arr.forEach((ele, index) => {
if (ele.id == name) {
ele.value = value
this.$set(this.listForm, index, ele)
}
})
},
changeContactData(name,value,obj) {
let arr = this.contactsForm
arr.forEach((ele, index) => {
if (ele.id == name) {
ele.value = value
this.$set(this.contactsForm, index, ele)
}
})
},
getPrevCoustomer() {
netPrevCustomer().then(res => {
this.parentList = res.data
this.handleData(res.data)
if (this.parent_id) {
//设置默认 上级公司
this.handleParent()
this.parentDisabled = true
} else {
this.parentDisabled = false
}
})
},
handleData(data) {
let arr = []
data.forEach(ele => {
arr.push(ele.name)
})
this.plist = arr
},
handleParent() {
let id = this.parent_id
this.parentList.forEach((ele, index) => {
if (ele.id == id) {
this.parentIndex = index
this.parentName = ele.name
}
})
},
//姓名查重
checkName() {
let name = this.name
if (!name) {
uni.showToast({
title: '请填写门店姓名',
icon: 'none',
duration: 2000
})
return
}
netCheckName({
name
}).then(res => {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
})
},
//改变上级
changeParent() {
this.$refs.customerChild.init()
},
sureSelect(obj) {
this.parentName = obj.name
this.parent_id = obj.id
},
// 详细地址
detailAddClick() {
uni.chooseLocation({
success: res => {
this.lat = res.latitude //纬度
this.lng = res.longitude //经度
this.address_detail = res.name //位置名称
this.address_dingwei = res.address //详细地址
},
fail: err => {
if (err.errMsg == 'chooseLocation:fail auth deny') {
uni.showToast({
title: '请允许使用位置信息',
icon: 'none'
})
}
}
})
},
confirm(e) {
this.address_dingwei = e[0].label+e[1].label+e[2].label
},
//保存并添加联系人
saveAdd() {
this.subSave(2)
},
//完成
subSave(type) {
let {
name, //门店名称
location, //所在地区
address_dingwei,
address_detail, //详细地址
lng, //经度
lat, //纬度
parent_id, //上级公司
} = this
if (!name) {
uni.showToast({
title: '请填写门店名称',
icon: 'none',
duration: 2000
})
return
}
if (!address_dingwei) {
uni.showToast({
title: '请选择所在位置',
icon: 'none',
duration: 2000
})
return
}
if(!address_detail){
uni.showToast({
title: '请填写详细地址',
icon: 'none',
duration: 2000
})
return
}
let params = {}
// 附加信息
let customer = this.checkCommonForm(this.listForm)
if(!customer){
return
}
customer = Object.assign({}, customer, {
name,
address_detail,
lng,
lat,
address: address_dingwei,
parent_id
})
//联系人信息
let contacts = {}
if(this.isAddContact){
contacts = this.checkCommonForm(this.contactsForm)
if(!contacts){
return
}
}
let remindsid = '' //提醒谁看
let remarr = []
this.remindPeople.forEach(ele => {
remarr.push(ele.id)
})
remindsid = remarr.join(',')
let record = {
reminds_id: remindsid,
}
params.record = record
params.customer = customer
params.contacts = contacts
if(this.leads_id){
params.leads_id = this.leads_id
}
console.log(params,'提交')
netAddkehu(params).then(res => {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
setTimeout(() => {
if(type && type == 2){
uni.redirectTo({
url:'/pagesA/crm/linkman/newLinkman/newLinkman?id='+res.data.id
})
}else{
uni.redirectTo({
url: '/pagesA/crm/customerManagement/customerManagement'
})
}
}, 2000)
})
}
}
}
</script>
<style lang="scss" scoped>
.bot_btn{
width:750rpx;
display: flex;
justify-content: space-around;
align-items: center;
margin-bottom:45rpx;
.b_btn{
width:200rpx;
height: 88rpx;
background: $uni-text-color;
border-radius: 44rpx;
font-size: 32rpx;
color: #fff;
line-height: 88rpx;
text-align: center;
}
}
.linktab {
padding: 0rpx 24rpx 20rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
.link_right {
display: flex;
justify-content: flex-end;
align-items: center;
.linkbtn {
margin-right: 15rpx;
width: 120rpx;
height: 60rpx;
border-radius: 45rpx;
font-size: 24rpx;
color: #666;
text-align: center;
line-height: 58rpx;
border: 1rpx solid #DDDDDD;
}
.linkbtnactive {
background: $uni-text-color;
border: 1rpx solid $uni-text-color;
color: #fff;
}
}
}
.imglist {
padding: 24rpx 34rpx;
background: #fff;
border-bottom: 1rpx solid #EAEAEA;
display: flex;
justify-content: flex-start;
align-items: center;
flex-wrap: wrap;
.imgbox {
width: 160rpx;
height: 160rpx;
margin-right: 14rpx;
position: relative;
margin-bottom: 24rpx;
border: 1rpx solid #EAEAEA;
.delimg {
width: 32rpx;
height: 32rpx;
border-radius: 50%;
position: absolute;
right: -16rpx;
top: -16rpx;
background: rgba(0, 0, 0, 0.5);
z-index: 2;
color:#fff;
font-size:26rpx;
display: flex;
justify-content: center;
align-items: center;
}
.selfimg {
width: 160rpx;
height: 160rpx;
}
}
}
.fllow_file_li {
padding: 24rpx 34rpx;
background: #fff;
border-bottom: 1rpx solid #EAEAEA;
.fil_li {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 14rpx;
.fileimg {
width: 20rpx;
height: 20rpx;
}
.filename {
font-size: 24rpx;
color: #999999;
}
.closeimg {
width: 32rpx;
height: 32rpx;
}
}
}
.create_customer {
font-size: 28rpx;
.info_head {
height: 80rpx;
line-height: 80rpx;
font-size: 30rpx;
color: #999;
padding-left: 30rpx;
}
.mar_top {
margin-top: 30rpx;
}
.fllow_form_text{
background-color: #fff;
border-bottom: 1rpx solid #EAEAEA;
padding: 30rpx 20rpx;
color: #999;
font-size: 32rpx;
.theme {
color: #5ca9fe;
}
text {
color: #f00;
margin-left: 10rpx;
}
.detailText{
width:85%;
background:#f8f8f8;
border-radius: 10rpx;
height:120rpx;
padding:10rpx;
margin:20rpx auto 0;
}
}
.fllow_form {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #fff;
border-bottom: 1rpx solid #EAEAEA;
padding: 30rpx 20rpx;
color: #999;
font-size: 32rpx;
.nameinput {
width: 450rpx;
margin-left: 20rpx;
}
.form_right {
display: flex;
align-items: center;
justify-content: flex-end;
color: #999;
text-align: right;
.location {
width: 450rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.theme {
color: #5ca9fe;
}
text {
color: #f00;
margin-left: 10rpx;
}
.form_input {
input {
width: 300rpx;
text-align: right;
height: 100rpx;
line-height: 100rpx;
text-align: right;
margin-right: 10rpx;
}
}
}
.fllow_area {
background-color: #fff;
// padding: 0 70rpx;
margin-bottom: 30rpx;
padding-bottom: 30rpx;
color: #999;
.area_head {
height: 100rpx;
line-height: 100rpx;
font-size: 32rpx;
padding: 0 55rpx;
text {
color: #f00;
}
}
textarea {
width: 80%;
height: 300rpx;
padding: 30rpx;
background: #f8f8f8;
margin: 0 auto;
}
}
}
</style>