import React, { Component } from "react"; import { View, Button, Text, Picker, RadioGroup, Label, Radio } from "@tarojs/components"; import Taro, { getCurrentInstance } from "@tarojs/taro"; import { getProvince } from '../../utils/tools/index' import { AtSearchBar, AtTextarea, AtModal, AtModalHeader, AtModalContent, AtModalAction, AtInput, AtIcon, AtButton, AtInputNumber } from "taro-ui"; import Skeleton from "taro-skeleton"; import { queryByUidAll, getInterviewByPrdid, updateUser, getInterviewListByPage, addOneContact, findCustomerContacts, updateMainContact, limitUser, getBusinessProjectByName, addProject, queryProjectList, delProject } from "../../utils/servers/servers"; import "./index.less"; import "taro-ui/dist/style/components/icon.scss"; import "taro-ui/dist/style/components/textarea.scss"; import "taro-ui/dist/style/components/modal.scss"; import "taro-ui/dist/style/components/timeline.scss"; import "taro-ui/dist/style/components/calendar.scss"; import "taro-ui/dist/style/components/input.scss"; import "taro-ui/dist/style/components/search-bar.scss"; import MessageNoticebar from "../../components/common/messageNoticebar"; import { industry, channelTypeList, yearList, addressList } from '../../utils/tools/config'; import { getChannel } from "../../utils/tools"; import Superior from "../../components/common/superior"; import CheckboxPicker from "../../components/common/CheckboxPicker"; import AddressPicker from "../../components/common/addressPicker" import CustomerProjectSelect from '../../components/common/CustomerProjectSelect'; import InterviewHisList from "../../components/common/InterviewHisList"; class CustomerOtherProfile extends Component { $instance = getCurrentInstance(); constructor(props) { super(props); this.state = { dtails: { interviewList: [] }, interactShow: false, interactShowType: '', interactTitle: '', interactList: [], }; // this.update = this.update.bind(this); } componentDidMount() { this.queryByUidAll(); } componentDidUpdate(prevProps) { const { interviewIdx, customerList } = this.props; if ((interviewIdx != prevProps.interviewIdx && interviewIdx >= 0 && interviewIdx < customerList.length)) { this.queryByUidAll(); } else if (this.props.refreshInterview) { this.queryByUidAll(); } } handlePrevClick() { this.props.onPrevClick(); } handleNextClick() { this.onSaveAllData((resData) => { this.props.onNextClick(resData); }) } // 获取面谈思路表 getInterviewData() { const uid = this.props.customerList[this.props.interviewIdx].id getInterviewListByPage({ uid, pageNo: 1, pageSize: 9999 }).then(res => { // 是否在面谈中,表示本次面谈未结束 let isInterviewIng = this.props.uaiIdList.some(item => item.uid == uid); const { list } = res.data; let earlyCommunication = '', customerDemand = '', interviewIdeas = '', interviewPurpose = '', interviewRecommend = '', interviewFeedback = '', followUpPlan = ''; if (list.length) { if (!list[list.length - 1].prdid || isInterviewIng) { earlyCommunication = list[list.length - 1].earlyCommunication; customerDemand = list[list.length - 1].customerDemand; interviewIdeas = list[list.length - 1].interviewIdeas; interviewPurpose = list[list.length - 1].interviewPurpose; interviewRecommend = list[list.length - 1].interviewRecommend; interviewFeedback = list[list.length - 1].interviewFeedback; followUpPlan = list[list.length - 1].followUpPlan; } } let defaultDetailData = this.state.dtails || {}; this.setState({ dtails: { ...defaultDetailData, earlyCommunication, customerDemand, interviewIdeas, interviewPurpose, interviewRecommend, interviewFeedback, followUpPlan, interviewList: list.filter(item => !!item.prdid), } }); }) } // 客户档案详情 queryByUidAll() { const id = this.props.customerList[this.props.interviewIdx].id; queryByUidAll( true, { id } ) .then((v) => { if (v.error.length === 0) { let dtailsData = { ...v.data, } this.setState({ dtails: { ...dtailsData } }, () => { this.getInterviewData(); }); } else { setTimeout(() => { Taro.navigateBack({ delta: 1 }) }, 1800); Taro.showToast({ title: v.error[0].message, icon: "none", duration: 1800, }); } }) .catch((err) => { Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" }); }); } validParams(params) { const { dtails } = this.state; let flag = true; let message = ''; if (dtails.newChannel === 0 && !params.earlyCommunication || (params.earlyCommunication && params.earlyCommunication.length < 20)) { message = '请输入客户的难处,并且在20字以上'; flag = false; } else if (dtails.newChannel === 0 && !params.customerDemand || (params.customerDemand && params.customerDemand.length < 20)) { message = '请输入客户的需求,并且在20字以上'; flag = false; } else if (!params.interviewIdeas || (params.interviewIdeas && params.interviewIdeas.length < 20)) { message = '请输入面谈思路,并且在20字以上'; flag = false; } else if (!params.interviewPurpose || (params.interviewPurpose && params.interviewPurpose.length < 20)) { message = '请输入面谈达成的目的,并且在20字以上'; flag = false; } else if (dtails.newChannel === 0 && !params.interviewRecommend || (params.interviewRecommend && params.interviewRecommend.length < 20)) { message = '请输入经理/上级面谈建议,并且在20字以上'; flag = false; } else { if (this.state.dtails.interviewList.length) { if (!params.interviewFeedback || (params.interviewFeedback && params.interviewFeedback.length < 20)) { message = '请输入面谈后的反馈,并且在20字以上'; flag = false; } else if (!params.followUpPlan || (params.followUpPlan && params.followUpPlan.length < 20)) { message = '请输入后续跟进计划,并且在20字以上'; flag = false; } } } return { flag, message }; } onSaveAllData(callback) { const { dtails } = this.state; let params = { id: dtails.id, uid: dtails.uid, locationProvince: dtails.locationProvince, locationProvinceName: dtails.locationProvinceName, locationCity: dtails.locationCity, locationCityName: dtails.locationCityName, locationArea: dtails.locationArea, locationAreaName: dtails.locationAreaName, type: 2, // 1、更新档案和面谈,0、只更新档案,2、只更新面谈 }; // 是否在面谈中,表示本次面谈未结束 let curruaiIdList = this.props.uaiIdList.filter(item => item.uid == dtails.uid); if (curruaiIdList.length) { // 面谈编号 params.uaiId = curruaiIdList[0].uaiId; } if (dtails.newChannel == 1) { // 渠道客户 params = { ...params, channelType: dtails.channelType, enterpriseCount: dtails.enterpriseCount, channelIndicators: dtails.channelIndicators, interviewIdeas: dtails.interviewIdeas, interviewPurpose: dtails.interviewPurpose, interviewFeedback: dtails.interviewFeedback, followUpPlan: dtails.followUpPlan, }; } else { params = { ...params, industry: dtails.industry, industryName: dtails.industryName, earlyCommunication: dtails.earlyCommunication, customerDemand: dtails.customerDemand, interviewIdeas: dtails.interviewIdeas, interviewPurpose: dtails.interviewPurpose, interviewRecommend: dtails.interviewRecommend, interviewFeedback: dtails.interviewFeedback, followUpPlan: dtails.followUpPlan, patentCount: dtails.patentCount, inventionPatentCount: dtails.inventionPatentCount, utilityModelCount: dtails.utilityModelCount, appearancePatentCount: dtails.appearancePatentCount, softwareWorksCount: dtails.softwareWorksCount, otherCount: dtails.otherCount, financialData: dtails.financialData, companyCount: dtails.companyCount, socialSecurityCount: dtails.socialSecurityCount, externalInvestCount: dtails.externalInvestCount, externalInvestIndustry: dtails.externalInvestIndustry, externalInvestIndustryName: dtails.externalInvestIndustryName, externalInvestId: dtails.externalInvestId, externalInvestName: dtails.externalInvestName, financialRevenue: dtails.financialRevenue, financialTax: dtails.financialTax, financialProperty: dtails.financialProperty, financialRd: dtails.financialRd, standard: dtails.standard, businessScope: dtails.businessScope, }; } for (let key in params) { if (params[key] === undefined || params[key] === 'undefined' || params[key] === null || params[key] === 'null') { delete params[key]; } } const { flag, message } = this.validParams(params); if (!flag) { Taro.showToast({ title: message, icon: "none", }); return; } updateUser(params).then((v) => { if (v.error.length === 0) { Taro.showToast({ title: "修改成功", }); callback && callback(v.data); } else { Taro.showToast({ title: v.error[0].message, icon: "none", }); } }) } openInteractHis(type) { let interactTitle; let interactList = this.state.dtails.interviewList; switch (type) { case 'earlyCommunication': interactTitle = '客户的难处历史记录'; break; case 'customerDemand': interactTitle = '客户的需求历史记录'; break; case 'interviewIdeas': interactTitle = '面谈思路历史记录'; break; case 'interviewPurpose': interactTitle = '面谈达成的目的历史记录'; break; case 'interviewRecommend': interactTitle = '经理/上级面谈建议历史记录'; break; case 'interviewFeedback': interactTitle = '面谈后反馈历史记录'; interactList = interactList.slice(1, interactList.length); break; case 'followUpPlan': interactTitle = '后续跟进计划历史记录'; interactList = interactList.slice(1, interactList.length); break; default: break; } this.setState({ interactShow: true, interactShowType: type, interactTitle, interactList }); } render() { const { dtails } = this.state; return ( 企业面谈思路表 您正在面谈他人企业! 企业名称:{dtails.nickname} {dtails.newChannel === 0 && ( <> 客户的难处: (20字以上) {dtails.interviewList && dtails.interviewList.length ? ( this.openInteractHis('earlyCommunication')}> ) : null} { dtails.earlyCommunication = value; this.setState({ dtails }); }} /> 客户的需求: (20字以上) {dtails.interviewList && dtails.interviewList.length ? ( this.openInteractHis('customerDemand')}> ) : null} { dtails.customerDemand = value; this.setState({ dtails }); }} /> )} 面谈思路: (20字以上) {dtails.interviewList && dtails.interviewList.length ? ( this.openInteractHis('interviewIdeas')}> ) : null} { dtails.interviewIdeas = value; this.setState({ dtails }); }} /> 面谈达成的目的: (20字以上) {dtails.interviewList && dtails.interviewList.length ? ( this.openInteractHis('interviewPurpose')}> ) : null} { dtails.interviewPurpose = value; this.setState({ dtails }); }} /> {dtails.newChannel === 0 && ( 经理/上级面谈建议: (由经理/上级口述,本人整理,20字以上) {dtails.interviewList && dtails.interviewList.length ? ( this.openInteractHis('interviewRecommend')}> ) : null} { dtails.interviewRecommend = value; this.setState({ dtails }); }} /> )} {dtails.interviewList && dtails.interviewList.length ? ( <> 面谈后的反馈: (20字以上) {dtails.interviewList && dtails.interviewList.length > 1 ? ( this.openInteractHis('interviewFeedback')}> ) : null} { dtails.interviewFeedback = value; this.setState({ dtails }); }} /> 后续跟进计划: (20字以上) {dtails.interviewList && dtails.interviewList.length > 1 ? ( this.openInteractHis('followUpPlan')}> ) : null} { dtails.followUpPlan = value; this.setState({ dtails }); }} /> ) : null} 上一页 下一页 {/* 沟通情况历史记录 */} { this.setState({ interactShow: false }) }} /> ); } } export default CustomerOtherProfile;