dbd-meeting-html/src/views/admin/CustomerEdit.vue
2024-07-29 10:48:18 +08:00

1096 lines
39 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-card :body-style="{padding: '24px 32px'}" :bordered='false'>
<a-form @submit='handleSubmit' :form='form' :label-col='{ span: 4 }' :wrapper-col='{ span: 6 }'>
<a-tabs :defaultActiveKey='defaultActiveKey' @change='callback'>
<a-tab-pane tab='企业详情' key='1'>
<a-form-item style='display:none'>
<a-input v-decorator="['id']" />
</a-form-item>
<a-row>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='企业名称'>
<a-input placeholder='企业名称'
v-decorator="['name', {rules: [{required: true, message: '请输入企业名称'}]}]" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='简称'>
<a-input placeholder='简称' v-decorator="['shortName']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='企业类型'>
<a-select
v-decorator="['type', {initialValue:'COMPANY',rules: [{required: true, message: '请选择企业类型'}]}]">
<a-select-option value='COMPANY'>公司</a-select-option>
<a-select-option value='PERSON'>个人</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='企业状态'>
<a-select
v-decorator="['customerStatus', {initialValue:'DEAL',rules: [{required: true, message: '请选择企业状态'}]}]">
<a-select-option value='POTENTIAL'>潜在企业</a-select-option>
<a-select-option value='PURPOSE'>意向企业</a-select-option>
<a-select-option value='DEAL'>成交企业</a-select-option>
<a-select-option value='LOSE'>流失企业</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属地区'>
<a-select v-decorator="['tenantId', {rules: [{ required: true, message: '请选择所属地区' }]}]"
@change='selectTenant'
:disabled='tenantEnable'>
<a-select-option v-for='item in tenantList' :key='item.id'>{{ item.name }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属园区'>
<a-select v-decorator="['parkId', {rules: [{ required: true, message: '请选择所属园区' }]}]"
@change='selectPark'
:disabled='parkEnable'>
<a-select-option v-for='item in parkList' :key='item.id'>{{ item.name }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属楼宇'>
<a-select v-decorator="['buildingId', {rules: [{ required: true, message: '请选择所属楼宇' }]}]"
@change='selectBuilding'>
<a-select-option v-for='item in buildingList' :key='item.id'>{{ item.buildingName }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属楼层'>
<a-select v-decorator="['buildingDetailIds',{rules: [{ required: true, message: '请选择所属楼层' }]}]"
placeholder='所属楼层'
mode='multiple'
@change='selectBuildingDetail'>
<a-select-option v-for='item in buildingDetailList' :key='item.id' :value='item.id'>
{{ item.floorName }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属房间'>
<a-select v-decorator="['roomIds',{rules: [{ required: true, message: '选择所属房间' }]}]"
placeholder='所属房间'
mode='multiple'>
<a-select-option v-for='item in roomList' :key='item.id' :value='item.id'>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='入住时间'>
<a-date-picker
format='YYYY-MM-DD HH:mm'
valueFormat='YYYY-MM-DD HH:mm:ss'
:show-time="{ format: 'HH:mm' }"
v-decorator="['startDate',{rules: [{ required: true, message: '选择入住时间' }]}]"
type='date'
placeholder='入住时间'
style='width: 100%'
/>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='租期结束时间'>
<a-date-picker
format='YYYY-MM-DD HH:mm'
valueFormat='YYYY-MM-DD HH:mm:ss'
:show-time="{ format: 'HH:mm' }"
v-decorator="['endDate',{rules: [{ required: true, message: '选择租期结束时间' }]}]"
type='date'
placeholder='租期结束时间'
style='width: 100%'
/>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属行业'>
<a-input placeholder='所属行业' v-decorator="['sector']" />
</a-form-item>
</a-col>
<!-- <a-col :span='12'>-->
<!-- <a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='所属国家'>-->
<!-- <a-input placeholder='所属国家' v-decorator="['country']" />-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='过程管理'>
<a-select v-decorator="['process']">
<a-select-option value='FIRST_VISIT'>初次拜访</a-select-option>
<a-select-option value='NEED_GUID'>需求引导分析</a-select-option>
<a-select-option value='COMPETE'>竞争阶段</a-select-option>
<a-select-option value='PREDETERMINE'>预定阶段</a-select-option>
<a-select-option value='CONTRACT'>合同阶段</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='联系人'>
<a-input placeholder='联系人'
v-decorator="['contacts',{rules: [{ required: true, message: '请输入联系人' }]}]" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='联系电话'>
<a-input placeholder='联系电话'
v-decorator="['phone',{rules: [{ required: true, message: '请输入联系电话' }]}]" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='邮箱'>
<a-input placeholder='邮箱' v-decorator="['email']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='统一信用代码'>
<a-input placeholder='统一信用代码' v-decorator="['creditNo']" />
<a-button type='primary' @click='getQiXinBasicInfo'>同步工商数据</a-button>
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='邮编'>
<a-input placeholder='邮编' v-decorator="['postalCode']" />
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='通讯地址'>
<a-input placeholder='通讯地址' v-decorator="['mailAddress']" />
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='上传公司logo'
extra='尺寸建议宽160px高160px'>
<a-upload
v-decorator="['headImg']"
list-type='picture-card'
class='avatar-uploader'
:show-upload-list='false'
:action='uploadUrl'
:headers='headers'
:before-upload='beforeUpload'
@change='handleChange'
>
<img v-if='imageUrl' :src='imageUrl' style='width: 102px; height: 102px' />
<div v-else>
<a-icon :type="loading ? 'loading' : 'plus'" />
<div class='ant-upload-text'> 上传</div>
</div>
</a-upload>
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='上传照片墙'>
<a-upload
v-decorator="['bannerImages', {rules: [{ required: false, message: '上传照片墙' }]}]"
list-type='picture-card'
class='avatar-uploader'
:file-list='fileList'
:action='uploadUrl'
:headers='headers'
@preview='handlePreview'
@change='handleChangeFileList'
>
<div v-if='fileList.length < 4'>
<a-icon type='plus' />
<div class='ant-upload-text'> 上传</div>
</div>
</a-upload>
<a-modal :visible='previewVisible' :footer='null' @cancel='handleCancel'>
<img style='width: 100%' :src='previewImage' />
</a-modal>
</a-form-item>
</a-col>
<a-col :span='8'>
<a-form-item :labelCol='labelColOneThird' :wrapperCol='wrapperColOneThird' label='渠道类型'>
<a-select v-decorator="['channelType']">
<a-select-option value='AGENT'>中介公司</a-select-option>
<a-select-option value='AD'>广告</a-select-option>
<a-select-option value='COOPERATE'>合作推荐</a-select-option>
<a-select-option value='MY_CHANNEL'>自开发渠道</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='8'>
<a-form-item :labelCol='labelColOneThird' :wrapperCol='wrapperColOneThird' label='渠道名称'>
<a-input placeholder='渠道名称' v-decorator="['channelName']" />
</a-form-item>
</a-col>
<a-col :span='8'>
<a-form-item :labelCol='labelColOneThird' :wrapperCol='wrapperColOneThird' label='是否黑名单'>
<a-switch :checked='mdl.isBlacklist' @change='onChangeBlacklist'
v-decorator="['isBlacklist']" />
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperColOneThird' label='企业备注'>
<a-input placeholder='企业备注' v-decorator="['remark']" />
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='工商注册号'>
<a-input placeholder='工商注册号' v-decorator="['regNo']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='组织机构代码'>
<a-input placeholder='组织机构代码' v-decorator="['orgNo']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='法人名'>
<a-input placeholder='法人名' v-decorator="['operName']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='经营状态'>
<a-input placeholder='经营状态' v-decorator="['status']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='公司类型(企业性质)'>
<a-input placeholder='公司类型(企业性质)' v-decorator="['econKind']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='注册资金'>
<a-input placeholder='注册资金' v-decorator="['registCapi']" />
</a-form-item>
</a-col>
<a-col :span='12'>
<a-form-item :labelCol='labelColHalf' :wrapperCol='wrapperColHalf' label='登记机关'>
<a-input placeholder='登记机关'
v-decorator="['belongOrg']" />
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='注册地址'>
<a-input placeholder='注册地址'
v-decorator="['address']" />
</a-form-item>
</a-col>
<a-col :span='24'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='经营范围'>
<!-- <a-input placeholder="经营范围" v-decorator="['scope']" /> -->
<a-textarea placeholder='经营范围' v-decorator="['scope']"
:autoSize='{ minRows: 3, maxRows: 5 }'></a-textarea>
</a-form-item>
</a-col>
</a-row>
<a-form-item :wrapperCol='{ span: 24 }' style='text-align: center'>
<a-button htmlType='submit' type='primary'>提交</a-button>
<a-button icon='rollback' style='margin-left: 8px' @click='rollback'>关闭</a-button>
</a-form-item>
</a-tab-pane>
<a-tab-pane tab='关联合同' key='2' forceRender v-if='$route.query.customerId'>
<div style='margin: 10px'>
<a-button type='primary' @click='navContract'>新增合同</a-button>
</div>
<a-table
:pagination='false'
:columns='contractColumns'
:dataSource='contractData'
rowKey='id'
>
<div slot='sn' slot-scope='text, record' style='cursor:pointer;color:#1890ff'
@click='handleDetail(record.id)'>
<span>{{ text }}</span>
</div>
<span slot='serial' slot-scope='text, record, index'>
{{ index + 1 }}
</span>
<span slot='status' slot-scope='text'>
{{ text | statusFilter }}
</span>
</a-table>
</a-tab-pane>
<a-tab-pane tab='企业员工管理' key='3' v-if='$route.query.customerId'>
<div style='margin: 10px;display:flex; justify-content: flex-start; align-items: flex-start'>
<a-button type='primary' @click='$refs.contactModal.add({ customerId: $route.query.customerId })'>
新建企业员工
</a-button>
<a-button style='margin-left: 30px' type='success' @click='importUser'>
导入用户
</a-button>
<a-form layout='inline'>
<a-form-item style='margin-left: 200px;margin-bottom: 20px' label='关键词'>
<a-input placeholder='请输入关键词' v-model='queryParam.keyword' />
</a-form-item>
</a-form>
<a-button style='margin-left: 30px;margin-top: 3px' type='success' @click='searchData' >
查询
</a-button>
</div>
<a-table :pagination='true' :columns='contactsItemColumns'
:dataSource='contactsItemData'
ref='userTable'
rowKey='id'>
<span slot='gender' slot-scope='text, record'>
{{ record.gender === '1' ? '女' : '男' }}
</span>
<span slot='num' slot-scope='text, record'>
<a @click='handleDeviceTable(record)'>{{ record.num }}</a>
</span>
<template slot='operation' slot-scope='text, record'>
<a-button type='link' @click='$refs.contactModal.add(record)'>编辑</a-button>
<a-divider type='vertical' />
<a-popconfirm @confirm='handleDeleteContact(record)'>
<template slot='title'>
<span>确定删除 {{ record.name }} </span>
</template>
<a-icon slot='icon' type='question-circle-o' style='color: red' />
<a-button type='link'>删除</a-button>
</a-popconfirm>
</template>
</a-table>
</a-tab-pane>
<a-tab-pane tab='相关文件' key='4' v-if='$route.query.customerId'>
<customer-attachment-list :customer-id='$route.query.customerId'></customer-attachment-list>
</a-tab-pane>
</a-tabs>
</a-form>
<customer-contacts-modal ref='contactModal' @ok='handleContactSaved' />
<a-modal v-model='visible' title='导入用户' @ok='handleFileOk'>
<div style='display: flex'>
<a-upload
:headers='headers'
accept='.xlsx,.xls'
@change='customChange'
:customRequest='customRequest'>
<a-button type='primary'>导入用户数据</a-button>
</a-upload>
<a-button style='margin-left: 40px' type='primary' @click='exportTemplate'>导出用户模板</a-button>
</div>
</a-modal>
<a-modal v-model='visible1' title='设备授权' width='500px' @ok='itemHandleOk()'>
<div class='table-page-search-wrapper'>
<a-form layout='inline'>
<a-row :gutter='48'>
<a-col :md='8' :sm='24'>
<span class='table-page-search-submitButtons'>
<!-- 查询有问题-->
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
<a-button style='margin-left: 8px' @click='() => (deviceQueryParam = {})'>重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<div class='table-operator'>
</div>
<a-table
size='default'
ref='itemTable'
rowKey='id'
:rowSelection='{ selectedRowKeys: selectedDeviceRowKeys, onChange: onDeviceSelectChange }'
:columns='deviceColumns'
:dataSource='deviceData'
>
<span slot='floorName' slot-scope='text, record'>
{{ record.roomName ? record.buildName + record.roomName : record.buildName }}
</span>
</a-table>
</a-modal>
</a-card>
</template>
<script>
import { getTenantList } from '@/api/tenant'
import storage from 'store'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import {
getCustomer,
getQiXinBasicInfo,
importData,
saveCustomer,
saveUserEquipment,
selectCustomerStaffList,
selectEquipmentListById,
selectUserDeviceList,
updateStaffByCustomer
} from '@/api/admin/customer'
import { getRoomListByBuildIdsRq } from '@/api/admin/meeting/roomContent'
import { getCustomerContractList } from '@/api/admin/customerContract'
import CustomerContactsModal from './modules/CustomerContactsModal.vue'
import CustomerAttachmentList from './modules/CustomerAttachmentList.vue'
import pick from 'lodash.pick'
import { getParkList } from '@/api/admin/park'
import { getBuildingList } from '@/api/admin/building'
import { getBuildingDetailList } from '@/api/admin/buildingDetail'
import { getInfo } from '@/api/login'
let downloadLoadingInstance
export default {
name: 'BaseForm',
components: {
CustomerContactsModal,
CustomerAttachmentList
},
data() {
return {
id: '',
defaultActiveKey: '1',
// 合同行
contractColumns: [
{
title: '合同编号',
dataIndex: 'sn',
scopedSlots: { customRender: 'sn' }
},
{
title: '物管合同号',
dataIndex: 'pmSn'
},
{
title: '合同名称',
dataIndex: 'name'
},
{
title: '签订时间',
dataIndex: 'signDate'
},
{
title: '记租时间',
dataIndex: 'startDate'
},
{
title: '到期时间',
dataIndex: 'endDate'
},
{
title: '状态',
dataIndex: 'status',
scopedSlots: { customRender: 'status' }
},
{
title: '签订人',
dataIndex: 'operName'
}
],
// 联系人列表表头
contactsItemColumns: [
{
title: '姓名',
dataIndex: 'username'
},
{
title: '手机号',
dataIndex: 'mobile'
},
{
title: '授权设备数量',
dataIndex: 'num',
scopedSlots: { customRender: 'num' }
},
{
title: '性别',
dataIndex: 'gender',
scopedSlots: { customRender: 'gender' }
},
{
title: '操作',
key: 'operation',
scopedSlots: { customRender: 'operation' }
}
],
deviceColumns: [
{
title: '设备名称',
dataIndex: 'equipmentName'
},
{
title: '设备编号',
dataIndex: 'equipmentNum'
},
{
title: '所属地区',
dataIndex: 'floorName',
scopedSlots: { customRender: 'floorName' }
}
],
deviceData: [],
labelColHalf: {
span: 6
},
wrapperColHalf: {
span: 18
},
labelColOneThird: {
span: 9
},
wrapperColOneThird: {
span: 15
},
labelCol: {
xs: { span: 24 },
sm: { span: 3 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 21 }
},
contractData: [],
orderPaymentData: [],
orderRefundsData: [],
orderShippingData: [],
orderReturnsData: [],
contactsItemData: [],
queryParam:{
keyword:''
},
selectedDeviceRowKeys: [],
selectedRowKeys: [],
uploadUrl: process.env.VUE_APP_API_BASE_URL + '/api/dfs/upload',
headers: {
Authorization: 'Bearer ' + storage.get(ACCESS_TOKEN)
},
fileList: [],
previewVisible: false,
previewImage: '',
loading: false,
imageUrl: '',
userId: '',
// form
form: this.$form.createForm(this),
file: '',
visible: false,
visible1: false,
tenantList: [], // 地区
parkList: [], // 园区
buildingList: [], // 楼宇
buildingDetailList: [], // 楼层
roomList: [], //房间
tenantEnable: false,
parkEnable: false,
mdl: {},
customerId: null
}
},
filters: {
statusFilter(type) {
const statusMap = {
'DRAFT': '草稿',
'APPROVING': '待审批',
'APPROVED': '已审批',
'REFUSE': '已拒绝',
'EXECUTING': '执行中',
'VOIDED': '已作废',
'OVERDUE': '已到期',
'END': '已结束'
}
return statusMap[type]
}
},
created() {
this.id = this.$route.query.customerId
if (this.$route.query.types) {
this.defaultActiveKey = '2'
}
this.handleInit()
this.selectUserDeviceList()
// 查询地区
this.getTenantData()
// 获取用户详细信息
this.getUserDetail()
},
methods: {
//查询企业用户数据
searchData(){
let param = {
username:this.queryParam.keyword,
customerId: this.$route.query.customerId
}
selectCustomerStaffList(param).then(res => {
this.contactsItemData = res.rows
})
},
// 获取用户详细信息
getUserDetail() {
getInfo().then(res => {
console.log('getUserDetail', res)
this.userDetail = res
// 园区5
if (this.userDetail.roleIds && this.userDetail.roleIds.length > 0 && this.userDetail.roleIds[0] == 5) {
//
// 判断:是新增就查询园区
const { customerId } = this.$route.query
if (!customerId) {
// 选择地区 -> 查询园区
this.selectTenant(this.userDetail.tenantId)
// 选择园区 -> 查询楼宇
this.selectPark(this.userDetail.parkId)
}
//
// 不可编辑
this.tenantEnable = true
this.parkEnable = true
// 关联地区和园区
this.mdl.parkId = this.userDetail.parkId
this.mdl.tenantId = this.userDetail.tenantId
this.form.setFieldsValue({
parkId: this.mdl.parkId,
tenantId: this.mdl.tenantId
})
}
})
},
// 查询地区
getTenantData() {
getTenantList().then(res => {
this.tenantList = res.rows
})
},
// 选择地区 -> 查询园区
selectTenant(id) {
console.log('selectTenant', id)
// 清空数据
this.mdl.parkId = null // 园区
this.mdl.buildingId = null // 楼宇
this.mdl.buildingDetailIds = [] // 楼层
this.mdl.roomIds = [] // 所属房间
this.form.setFieldsValue({
parkId: null, // 园区
buildingId: null, // 楼宇
buildingDetailIds: [], // 楼层
roomIds: [] // 所属房间
})
// 查询园区
getParkList({
tenantId: id
}).then(res => {
this.parkList = res.rows
})
},
// 选择园区 -> 查询楼宇
selectPark(id) {
// 清空数据
this.mdl.buildingId = null // 楼宇
this.mdl.buildingDetailIds = [] // 楼层
this.mdl.roomIds = [] // 所属房间
this.form.setFieldsValue({
buildingId: null, // 楼宇
buildingDetailIds: [], // 楼层
roomIds: [] // 所属房间
})
// 查询楼宇
getBuildingList({
parkId: id
}).then(res => {
this.buildingList = res.rows
})
},
// 选择楼宇 -> 查询楼层
selectBuilding(id) {
// 清空数据
this.mdl.buildingDetailIds = [] // 楼层
this.mdl.roomIds = [] // 所属房间
this.form.setFieldsValue({
buildingDetailIds: [], // 楼层
roomIds: [] // 所属房间
})
// 查询楼层
getBuildingDetailList({
buildingId: id
}).then(res => {
this.buildingDetailList = res.rows
})
},
// 选择楼层 -> 查询房间
selectBuildingDetail(buildingDetailId) {
console.log('buildingDetailId', buildingDetailId)
// 查询房间
this.getRoomListByFloorIdMethod(buildingDetailId)
},
// 查询房间
getRoomListByFloorIdMethod(buildingDetailIds) {
// 清空数据
this.mdl.roomIds = [] // 所属房间
this.form.setFieldsValue({
roomIds: [] // 所属房间
})
//
let type = 0
// 河南建安
const { customerId } = this.$route.query
if (customerId == 83) {
type = null
}
// 查询房间
getRoomListByBuildIdsRq({
'customerId': this.customerId,
'buildingDetailIds': buildingDetailIds,
'type': type
}).then((res) => {
this.roomList = res.data
})
},
//获取设备数量
handleDeviceTable(record) {
this.visible1 = true
this.userId = record.id
selectEquipmentListById({ userId: record.id }).then(res => {
if (res.data) {
this.selectedDeviceRowKeys = res.data.map(d => d.id)
this.selectedRowKeys = res.data
} else {
this.selectedDeviceRowKeys = []
this.selectedRowKeys = []
}
})
},
//设备选中事件
onDeviceSelectChange(selectedRowKeys, selectedRows) {
this.selectedDeviceRowKeys = selectedRowKeys
this.selectedRowKeys = selectedRows
},
itemHandleOk() {
saveUserEquipment(
{
userId: this.userId,
userIds: this.selectedDeviceRowKeys
}
).then(res => {
this.getContastsList()
this.visible1 = false
this.$message.success(res.msg)
})
},
//获取所有设备
selectUserDeviceList() {
selectUserDeviceList().then(res => {
this.deviceData = res.data
})
},
exportTemplate() {
const baseURL = process.env.VUE_APP_API_BASE_URL
window.open(`${baseURL}/admin/staff/exportTemplate`)
},
customRequest(file) {
// file 是上传的文件 其内容会在放在下面截图中
// 后端需要接受的参数是 formData数据
// uploadFile 我自己的接口
let customerId = this.$route.query.customerId
const formData = new FormData()
formData.append('file', file.file)
console.log(file)
importData(formData, customerId).then(res => {
if (res.code == 0) {
// 调用组件内方法, 设置为成功状态
file.onSuccess(res, file.file)
file.status = 'done'
this.visible = false
this.$message.success(res.data)
this.getContastsList()
} else {
this.$message.error(res.msg)
file.onError()
file.status = 'error'
this.getContastsList()
}
})
},
handleFileChange(info) {
this.fileList = info.fileList
if (info.file.status === 'done') {
const result = info.file.response
this.file = info.file.response
this.fileName = result.fileName
}
},
customChange() {
},
//导入用户数据
importUser() {
this.visible = true
},
handleFileOk() {
importData({ file: this.file }).then(res => {
})
},
handleDetail(id) {
this.$router.push({
name: 'customerContractDetailModal',
query: { id: id, customerId: this.$route.query.customerId, url: 'customerEdit' }
})
},
navContract(e) {
this.$router.push({ name: 'customerContractEdit', query: { customerId: this.id, url: 'customerEdit' } })
},
onChangeBlacklist(checked) {
this.mdl.isBlacklist = checked
},
getQiXinBasicInfo() {
var keyword = this.form.getFieldValue('creditNo')
getQiXinBasicInfo({ 'keyword': keyword }).then(res => {
if (res.code === 0) {
var qiXinResult = JSON.parse(res.data)
if (!(isNaN(qiXinResult) && !isNaN(Date.parse(qiXinResult.endDate)))) {
qiXinResult.endDate = null
}
this.form.setFieldsValue(pick(qiXinResult, 'creditNo', 'regNo', 'status', 'orgNo', 'operName', 'econKind', 'startDate', 'registCapi', 'endDate', 'address', 'scope', 'delFlag', 'belongOrg', 'remark'))
} else {
this.$message.error('同步工商信息失败:' + res.msg)
}
})
},
handleInit() {
const { customerId } = this.$route.query
this.customerId = customerId
if (customerId) {
getCustomer(customerId).then(res => {
this.mdl = Object.assign(this.mdl, res)
let copyMdl = JSON.parse(JSON.stringify(this.mdl))
// 头像
if (this.mdl.headImg) {
this.imageUrl = process.env.VUE_APP_API_BASE_URL + this.mdl.headImg
}
// 照片墙
this.mdl.bannerImages.forEach((item, i) => {
item.url = process.env.VUE_APP_API_BASE_URL + item.url
})
this.fileList = this.mdl.bannerImages
// 选择地区 -> 查询园区
if (copyMdl.tenantId) {
this.mdl = JSON.parse(JSON.stringify(copyMdl))
this.selectTenant(copyMdl.tenantId)
}
// 选择园区 -> 查询楼宇
if (copyMdl.parkId) {
this.mdl = JSON.parse(JSON.stringify(copyMdl))
this.selectPark(copyMdl.parkId)
}
// 选择楼宇 -> 查询楼层
if (copyMdl.buildingId) {
this.mdl = JSON.parse(JSON.stringify(copyMdl))
this.selectBuilding(copyMdl.buildingId)
}
// 选择楼层 -> 查询房间
if (copyMdl.buildingDetailIds) {
this.mdl = JSON.parse(JSON.stringify(copyMdl))
this.getRoomListByFloorIdMethod(copyMdl.buildingDetailIds, copyMdl.roomIds)
}
// 防止替换
this.mdl = JSON.parse(JSON.stringify(copyMdl))
//
this.form.setFieldsValue(pick(this.mdl, 'id', 'name', 'shortName', 'type', 'customerStatus',
'sector', 'country', 'process', 'contacts', 'phone', 'email', 'creditNo', 'mailAddress',
'postalCode', 'channelType', 'channelName', 'isBlacklist', 'regNo', 'status', 'orgNo',
'operName', 'econKind', 'startDate', 'registCapi', 'endDate',
'address', 'scope', 'delFlag', 'belongOrg', 'remark', 'headImg', 'bannerImages',
'roomId', 'buildId', 'roomIds', 'buildingDetailIds', 'tenantId', 'parkId',
'buildingId'))
//
})
}
this.getContastsList()
this.getContractList()
},
onChange(date, dateString) {
console.log(date, dateString)
},
// handler
handleSubmit(e) {
e.preventDefault()
this.form.validateFields((err, values) => {
if (!err) {
// eslint-disable-next-line no-console
const bannerImages = []
this.fileList.forEach((file, index) => {
// 添加原来的
if (file.hasOwnProperty('name') && file.hasOwnProperty('url') && file.hasOwnProperty('uid')) {
bannerImages.push({ 'name': file.name, 'url': file.name, 'uid': index })
}
if (file.status === 'done' && file.response.code === 0) {
const data = file.response
bannerImages.push({ 'name': data.fileName, 'url': data.fileName, 'uid': index })
}
})
// 照片墙
values.bannerImages = bannerImages
console.log('Received values of form: ', values)
// values.startDate = moment(values.startDate).format('YYYY-MM-DD')
// console.log(values.startDate)
this.confirmLoading = true
saveCustomer(values).then(res => {
if (res.code === 0) {
this.$message.success('保存成功')
this.$emit('ok')
this.visible = false
this.rollback()
} else {
this.$message.error(res.msg)
}
}).catch(() => {
this.$message.error('系统错误,请稍后再试')
}).finally(() => {
this.confirmLoading = false
})
}
})
},
rollback() {
this.$router.push('/admin/service/customer')
},
// 联系人列表
getContastsList() {
let param = {
customerId: this.$route.query.customerId
}
selectCustomerStaffList(param).then(res => {
this.contactsItemData = res.rows
})
},
// 合同列表
getContractList() {
getCustomerContractList({ customerId: this.$route.query.customerId }).then(res => {
// console.log(res)
if (res.code === 0) {
this.contractData = res.rows
}
})
},
// 新增联系人回调
handleContactSaved() {
this.getContastsList()
},
// 删除联系人
handleDeleteContact(contactInfo) {
console.log(contactInfo)
contactInfo.icsCustomerId = this.$route.query.customerId
// contactInfo.
updateStaffByCustomer(contactInfo).then(res => {
if (res.code === 0) {
this.$message.success('删除成功')
this.deleteVisible = false
this.getContastsList()
} else {
this.$message.error(res.msg)
}
}).catch(() => {
this.$message.error('系统错误,请稍后再试')
}).finally(() => {
})
},
beforeUpload(file) {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'
if (!isJpgOrPng) {
this.$message.error('You can only upload JPG file!')
}
const isLt2M = file.size / 1024 / 1024 < 2
if (!isLt2M) {
this.$message.error('图片必须小于 2MB!')
}
return isJpgOrPng && isLt2M
},
handleChange(info) {
if (info.file.status === 'uploading') {
this.loading = true
return
}
if (info.file.status === 'done') {
const { form: { setFieldsValue } } = this
const result = info.file.response
// 设置值
this.$nextTick(() => {
setFieldsValue({
headImg: result.fileName
})
})
// Get this url from response in real world.
getBase64(info.file.originFileObj, imageUrl => {
this.imageUrl = imageUrl
this.loading = false
})
}
},
async handlePreview(file) {
if (!file.url && !file.preview) {
file.preview = await getBase64FileList(file.originFileObj)
}
this.previewImage = file.url || file.preview
this.previewVisible = true
},
handleCancel() {
this.previewVisible = false
},
// 上传照片墙
handleChangeFileList({ fileList }) {
this.fileList = fileList
}
}
}
// 上传头像
function getBase64(img, callback) {
const reader = new FileReader()
reader.addEventListener('load', () => callback(reader.result))
reader.readAsDataURL(img)
}
// 上传照片墙
function getBase64FileList(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => resolve(reader.result)
reader.onerror = error => reject(error)
})
}
</script>
<style>
.avatar-uploader > .ant-upload {
width: 102px;
height: 102px;
}
.ant-upload-select-picture-card i {
font-size: 32px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
color: #666;
}
</style>