| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731 | import React, { Component } from "react";import { View, Input, Button, Text, Picker, RadioGroup, Label, Radio } from "@tarojs/components";import Taro, { getCurrentInstance } from "@tarojs/taro";import { getProvince } from '../../utils/tools/index'import {  AtSearchBar,  AtCheckbox,  AtTextarea,  AtModal,  AtModalHeader,  AtModalContent,  AtModalAction,  AtInput,  AtIcon,  AtButton,  AtTag,  AtRadio} from "taro-ui";import Skeleton from "taro-skeleton";import {  queryByUidAll,  updateUserDate,  updateUser,  addOneContact,  findCustomerContacts,  updateMainContact,  limitUser,  getBusinessProjectByName,} 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/checkbox.scss";import "taro-ui/dist/style/components/search-bar.scss";import "taro-ui/dist/style/components/tag.scss";import MessageNoticebar from "../../components/common/messageNoticebar";import { industry, channelTypeList } 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 InteractList from "./components/InteractList";class CustomerProfile extends Component {  $instance = getCurrentInstance();  constructor(props) {    super(props);    this.state = {      upType: -1,      isOpened: false,      dtails: {},      info: {},      sector: {},      isAdd: false,      obj: {},      userList: [],      options: [],      checkOptions: [],      isSuperior: false,      channe: {},      isMask: false,      addressPickerShow: false,      region: [],      customItem: [],      multiplePickerShow: false,      multiplePickerTitle: '',      multiplePickerType: '',      multiplePickerOptions: [],      multiplePickerCheckedList: [],      addItemShow: false,      addItemType: '',      addItemTitle: '',      addItemInputVal: '',      interactShow: false,      interactShowType: '',      interactTitle: ''    };    this.queryByUidAll = this.queryByUidAll.bind(this);    this.update = this.update.bind(this);    this.add = this.add.bind(this);    this.getUserList = this.getUserList.bind(this);    this.getBusinessProjectByName = this.getBusinessProjectByName.bind(this);    this.onSearchChange = this.onSearchChange.bind(this);    this.handleOpenMultiplePicker = this.handleOpenMultiplePicker.bind(this);    this.handleMultipleConfirm = this.handleMultipleConfirm.bind(this);    this.handleAddItemSave = this.handleAddItemSave.bind(this);    this.handleCloseAddItemDialog = this.handleCloseAddItemDialog.bind(this);  }  componentDidMount() {    this.setState({      isMask: false    })    this.queryByUidAll();    if (!this.isLogin()) {      Taro.setStorageSync('currentPage', `/pages/customerProfile/index?id=${this.$instance.router.params.id}`)    }  }  toggleAddressPicker(e) {      const addressIds = getProvince(e.province, e.city, e.area);      const { dtails } = this.state;      dtails.locationProvince = addressIds[0];      dtails.locationProvinceName = e.province;      dtails.locationCity = addressIds[1];      dtails.locationCityName = e.city;      dtails.locationArea = addressIds[2];      dtails.locationAreaName = e.area;      this.setState({ dtails, addressPickerShow: false });  }  handleOpenMultiplePicker(type) {      let multiplePickerOptions = [];      let multiplePickerTitle = '';      let multiplePickerCheckedList = [];      const { dtails } = this.state;      switch (type) {        case 'industry':            // 企业所属行业            multiplePickerOptions = industry;            multiplePickerCheckedList = !!dtails.industry ? dtails.industry.toString().split(',') : [];            multiplePickerTitle = '请选择企业所属行业';            break;        case 'externalInvestIndustry':            // 对外投资控股的行业            multiplePickerOptions = industry;            multiplePickerCheckedList = !!dtails.externalInvestIndustry ? dtails.externalInvestIndustry.toString().split(',') : [];            multiplePickerTitle = '请选择对外投资控股的行业';        break;          default:            break;      }    this.setState({        multiplePickerShow: true,        multiplePickerType: type,        multiplePickerTitle,        multiplePickerOptions,        multiplePickerCheckedList: multiplePickerCheckedList.map(item => Number(item))    })  }  handleMultipleConfirm(selectedIds, selectedLabels) {    const { multiplePickerType, dtails } = this.state;    switch (multiplePickerType) {        case "industry":            // 企业所属行业            dtails.industry = selectedIds.join(',');            dtails.industryName = selectedLabels.join('、');            break;        case "externalInvestIndustry":            // 对外投资控股的行业            dtails.externalInvestIndustry = selectedIds.join(',');            dtails.externalInvestIndustryName = selectedLabels.join('、');            break;        default:            break;    }    this.setState({ dtails })  }  bindRegionChange (e) {    console.log('picker发送选择改变,携带值为', e.detail.value)    this.setState({      region: e.detail.value    })  }  isLogin() {    return !!Taro.getStorageSync('userInfor');  }  onShareAppMessage() {    this.limitUser();    return {      title: "客户档案",      path: "/pages/customerProfile/index?id=" + this.$instance.router.params.id,    };  }  // 客户档案详情  queryByUidAll() {    queryByUidAll(      this.$instance.router.params.notRequired,      { id: this.$instance.router.params.id, }    )      .then((v) => {        if (v.error.length === 0) {          this.setState({            dtails: v.data          })        } 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" });      });  }  onSaveAllData() {    const { dtails } = this.state;    const params = {        id: dtails.id,        uid: dtails.uid,        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: '0,0',        externalInvestName: dtails.externalInvestName,        financialRevenue: dtails.financialRevenue,        financialTax: dtails.financialTax,        financialProperty: dtails.financialProperty,        financialRd: dtails.financialRd,        locationProvince: dtails.locationProvince,        locationProvinceName: dtails.locationProvinceName,        locationCity: dtails.locationCity,        locationCityName: dtails.locationCityName,        locationArea: dtails.locationArea,        locationAreaName: dtails.locationAreaName,        standard: dtails.standard,    };    for (let key in params) {        if (params[key] === undefined || params[key] === 'undefined' || params[key] === null || params[key] === 'null') {            delete params[key];        }    }    updateUser(params).then((v) => {        if (v.error.length === 0) {          Taro.showToast({            title: "修改成功",          });          setTimeout(() => {            //表示回到上一页面            Taro.navigateBack({                delta: 1            });          }, 1000)        } else {          Taro.showToast({            title: v.error[0].message,            icon: "none",          });        }      })  }  // 修改客户档案  update() {    // const { upType, info } = this.state    // console.log(info)    // let tipList = [    //   { key: "inventionPatentCount", value: "请填写发明专利数" },    //   { key: "utilityModelCount", value: "请填写实用新型数" },    //   { key: "appearancePatentCount", value: "请填写外观专利数" },    //   { key: "softwareWorksCount", value: "请填写软著数" },    //   { key: "otherCount", value: "请填写其他数量" },    //   { key: "financialData", value: "请填写财务数据" },    //   { key: "earlyCommunication", value: "请填写前期沟通" },    //   { key: "interviewIdeas", value: "请填写面谈思路及目的" },    //   { key: "interviewDistribution", value: "请填写主要面谈人及分工" },    //   { key: "enterpriseCount", value: "请填写覆盖企业数" },    //   { key: "channelIndicators", value: "请填写渠道考核指标" },    // ]    // if (!info.id) {    //   delete info.id    // }    // for (let i in info) {    //   if (!info[i] && info[i] !== 0) {    //     for (var j = 0; j < tipList.length; j++) {    //       if (tipList[j].key == i) {    //         Taro.showToast({    //           title: tipList[j].value,    //           icon: "none",    //         });    //       }    //     }    //     return    //   } else if (info[i] == 0) {    //     if (i == "channelType") {    //       Taro.showToast({    //         title: "请选择渠道类型",    //         icon: "none",    //       });    //       return    //     }    //   }    //   if ((i == "financialData" || i == "earlyCommunication" || i == "interviewIdeas" || i == "interviewDistribution")    //     && info[i].length < 20) {    //     Taro.showToast({    //       title: "至少20字以上",    //       icon: "none",    //     });    //     return    //   }    // }    // updateUserDate(upType, info).then((v) => {    //   if (v.error.length === 0) {    //     Taro.showToast({    //       title: "修改成功",    //     });    //     this.setState({    //       isOpened: false    //     })    //     this.queryByUidAll()    //   } else {    //     Taro.showToast({    //       title: v.error[0].message,    //       icon: "none",    //     });    //   }    // }).catch(() => {    // })    this.setState({ isOpened: false, dtails: { ...this.state.dtails, ...this.state.info } })  }  // 新建联系人  add() {    let data = this.state.obj    for (let i in data) {      if (!data[i] && data[i] !== 0) {        Taro.showToast({          title: "请完善信息",          icon: "none",        });        return      } else if (i == "mobile") {        if (!(/^1[3-9]\d{9}$/.test(data[i]))) {          Taro.showToast({            title: "请输入正确地手机号",            icon: "none",          });          return        }      }    }    data.major = 1    addOneContact(data).then((v) => {      if (v.error.length === 0) {        Taro.showToast({          title: "添加成功",        });        this.setState({          isAdd: false        })        this.queryByUidAll()      } else {        Taro.showToast({          title: v.error[0].message,          icon: "none",        });      }    }).catch(() => {    })  }  // 项目列表  getBusinessProjectByName(val) {    getBusinessProjectByName({      businessName: val || "",    })      .then((v) => {        if (v.error.length === 0) {          let theArr = [];          if (v.data.length > 0) {            for (let i = 0; i < v.data.length; i++) {              let thisdata = v.data[i];              theArr.push({                value: thisdata.bname,                label: thisdata.bname,              });            };          }          this.setState({            options: theArr          })        } else {          Taro.showToast({ title: v.error[0].message, icon: "none" });        }      })      .catch((err) => {        Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" });      });  }  onSearchChange(value) {    this.setState({      value,    });  }  getUserList() {    findCustomerContacts({      uid: this.$instance.router.params.id,    })      .then((v) => {        if (v.error.length === 0) {          this.setState({            userList: v.data || []          })        } else {          Taro.showToast({ title: v.error[0].message, icon: "none" });        }      })      .catch((err) => {        Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" });      });  }  updateMainContact(id) {    updateMainContact({      uid: this.$instance.router.params.id,      ocbId: id,    }).then((v) => {      if (v.error.length === 0) {        Taro.showToast({          title: "设置成功",        });        this.getUserList()      } else {        Taro.showToast({          title: v.error[0].message,          icon: "none",        });      }    }).catch(() => {    })  }  limitUser() {    limitUser({      uid: this.$instance.router.params.id,      // hours: 1,    }).then((v) => {      if (v.error.length === 0) {      } else {        Taro.showToast({          title: v.error[0].message,          icon: "none",        });      }    }).catch(() => {    })  }  addItemDialog(type) {    let title;    switch (type) {        case 'externalInvestName':            // 对外投资控股的企业名称            title = '添加对外投资控股的企业名称';            break;            default:            break;    }    this.setState({ addItemShow: true, addItemType: type, addItemTitle: title });  }  handleCloseAddItemDialog() {      this.setState({ addItemShow: false, addItemType: '', addItemInputVal: '' });  }  handleAddItemSave() {      switch (this.state.addItemType) {          case 'externalInvestName':              const { dtails } = this.state;              let externalInvestName = this.state.dtails.externalInvestName || '';              let externalInvestNameArr = externalInvestName.split('、').filter(item => !!item);              externalInvestNameArr.push(this.state.addItemInputVal);              dtails.externalInvestName = externalInvestNameArr.join('、');              this.setState({ dtails }, () => {                  this.handleCloseAddItemDialog();              });              break;                default:              break;      }  }  openInteractHis(type) {      console.log(this.state.dtails)    this.setState({        interactShow: true,        interactShowType: type,        interactTitle: '客户的难处历史记录'    });  }  render() {    const { dtails, upType, info, obj, userList } = this.state;    return (      <View className="customerProfile">        <MessageNoticebar />        <View          className="titleContent"        >          {Object.keys(dtails).length === 0 ? (            <Skeleton              title              row={3}              animateName="elastic"              avatarShape="square"              loading            />          ) : (            <View className="content">              <View className="name">                <Text style={{ width: "80%" }}>                  <Text className="bod">{dtails.nickname}  </Text>                  <Text style={{ fontSize: "12px", color: ["red", "green"][dtails.signBills] }}>{["未签单", "已签单"][dtails.signBills]}</Text>                </Text>                {dtails.myUser == 1 && <Button className="share" plain type='primary' open-type="share">分享</Button>}                {/* <View className="share">分享</View> */}              </View>              <View className="button">                <View className="but"                  onClick={e => {                    e.stopPropagation()                    this.setState({                      isSuperior: true                    })                  }}                >上级指导</View>                {                  this.state.isSuperior &&                  <Superior                    id={dtails.uid}                    userNames={dtails.nickname}                    isOpinion={this.state.isSuperior}                    isFill={dtails.myUser == 0}                    onClose={() => {                      this.setState({                        isSuperior: false                      })                    }}                  />                }                <View className="but"                  onClick={e => {                    e.stopPropagation()                    Taro.navigateTo({                      url: "/pages/situation/index?id=" + this.$instance.router.params.id + "¬Required=" + this.$instance.router.params.notRequired,                    });                  }}                >公出记录</View>              </View>              <View className="row">                <View className="code">{dtails.orgCode}</View>                <View className="time">{dtails.createTime}</View>              </View>              {                dtails.newChannel == 1                  ?                  <View className="first">                    <View className="tit">                      已知渠道情况                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 7,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                channelType: dtails.channelType,                                enterpriseCount: dtails.enterpriseCount,                                channelIndicators: dtails.channelIndicators,                              },                              channe: {                                id: dtails.channelType,                                title: getChannel(dtails.channelType)                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">渠道类别:{getChannel(dtails.channelType)}</View>                    <View className="val">渠道企业数:{dtails.enterpriseCount}</View>                    <View className="val">渠道考核指标:{dtails.channelIndicators}</View>                    <View className="tit">                      <Text>                        联系人                        <Text className="txt">(面谈人)</Text>                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.getUserList();                            this.setState({                              isAdd: true,                              obj: {                                uid: this.$instance.router.params.id,                                name: "",                                position: "",                                department: "",                                mobile: "",                              }                            })                          }}                        >新增</View>                      }                    </View>                    {                      !!dtails.contactList && dtails.contactList.map((v, k) =>                        <View className="val" key={k}>{v.name}  {v.position}  {v.department}  {v.mobile}</View>                      )                    }                  </View>                  :                  <View className="first">                    <View className="title">企业面谈思路表</View>                    <View className="val" style={{ display: 'flex' }}>                        企业所在地省市区:                        {/* <Picker                            mode='region'                            value={this.state.region}                            customItem={this.state.customItem}                            onChange={this.bindRegionChange.bind(this)}                        >                            <View className='picker'>                            { this.state.region.length ? this.state.region.join('-') : '请选择' }                            </View>                        </Picker> */}                        <View onClick={() => {this.setState({ addressPickerShow: true })}}>                            { dtails.locationProvince ? `${dtails.locationProvinceName}-${dtails.locationCityName}-${dtails.locationAreaName}` : '请选择' }                        </View>                        <AddressPicker                            pickerShow={this.state.addressPickerShow}                            onHandleToggleShow={this.toggleAddressPicker.bind(this)}                        />                    </View>                    {/* <View className="tit">                      企业面谈思路表                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 0,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                industry: dtails.industry,                                businessScope: dtails.businessScope,                              },                              sector: {                                id: dtails.industry,                                title: dtails.industryName                              }                            })                          }}                        >修改</View>                      }                    </View> */}                    <View className="val" style={{display: 'flex'}}>                        企业所属行业:                        <View onClick={() => this.handleOpenMultiplePicker('industry')}>                            { this.state.dtails.industryName || '请选择' }                        </View>                    </View>                    <View className="val" style={{display: 'flex', alignItems: 'center'}}>                        主营产品:                        <View style={{flex: 1}}>                            <AtInput                            value={dtails.businessScope}                            name='businessScope'                            placeholder='可填写多个,用“、”隔开'                            size='mini'                            onChange={value => {                                dtails.businessScope = value;                                this.setState({ dtails })                            }}                            />                        </View>                                            </View>                    <View className="val" style={{ display: 'flex', alignItems: 'center' }}>                        母/子公司数:                        <View style={{width: '180rpx'}}>                            <AtInput                            value={dtails.companyCount}                            name='companyCount'                            type='number'                            placeholder='请输入数量'                            size='mini'                            onChange={value => {                                dtails.companyCount = value;                                this.setState({ dtails })                            }}                            />                        </View>                    </View>                    <View className="val" style={{ display: 'flex', alignItems: 'center' }}>                        社保人数:                        <View style={{width: '180rpx'}}>                            <AtInput                            value={dtails.socialSecurityCount}                            name='socialSecurityCount'                            type='number'                            placeholder='请输入数量'                            size='mini'                            onChange={value => {                                dtails.socialSecurityCount = value;                                this.setState({ dtails })                            }}                            />                        </View>                    </View>                    <View className="val" style={{ display: 'flex', alignItems: 'center' }}>                        对外投资控股的企业数:                        <View style={{width: '180rpx'}}>                            <AtInput                            value={dtails.externalInvestCount}                            name='externalInvestCount'                            type='number'                            placeholder='请输入数量'                            size='mini'                            onChange={value => {                                dtails.externalInvestCount = value;                                this.setState({ dtails })                            }}                            />                        </View>                    </View>                    <View className="val" style={{display: 'flex'}}>                        对外投资控股的行业:                        <View onClick={() => this.handleOpenMultiplePicker('externalInvestIndustry')}>                            { this.state.dtails.externalInvestIndustryName || '请选择' }                        </View>                    </View>                    <View className="val" style={{display: 'flex'}}>                        对外投资控股的企业名称:                        <View onClick={() => this.addItemDialog('externalInvestName')}>                            { this.state.dtails.externalInvestName || '点击新增' }                        </View>                    </View>                    <View className="tit">                      <Text>                        主要面谈联系信息                        {/* <Text className="txt">(面谈人)</Text> */}                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.getUserList();                            this.setState({                              isAdd: true,                              obj: {                                uid: this.$instance.router.params.id,                                name: "",                                position: "",                                department: "",                                mobile: "",                              }                            })                          }}                        >新增</View>                      }                    </View>                    {                      !!dtails.contactList && dtails.contactList.map((v, k) =>                        <View className="val" key={k}>                          {v.name}  {v.position}  {v.department}  {v.mobile}                          {this.state.isMask && <View className="mask"></View>}                        </View>                      )                    }                    <View className="tit">                      本次面谈项目                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.getBusinessProjectByName("")                            this.setState({                              upType: 5,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                intendedProject: dtails.intendedProject,                              },                              checkOptions: !!dtails.intendedProject ? dtails.intendedProject.split(",") : []                            })                          }}                        >新增</View>                      }                    </View>                    <View className="val">{dtails.intendedProject || "无"}</View>                    <View style={{marginTop: '60rpx'}}>                        <View className="title">面谈已知企业情况</View>                        <View className="tit">                            <Text>                                1.知识产权情况                                <Text className="txt">(专利信息、标准、专利、软著)</Text>                            </Text>                            {                            dtails.myUser == 1 &&                            <View className="up"                            onClick={e => {                                e.stopPropagation()                                this.setState({                                upType: 1,                                isOpened: true,                                info: {                                    uid: this.$instance.router.params.id,                                    id: dtails.id,                                    inventionPatentCount: dtails.inventionPatentCount || 0,                                    utilityModelCount: dtails.utilityModelCount || 0,                                    appearancePatentCount: dtails.appearancePatentCount || 0,                                    softwareWorksCount: dtails.softwareWorksCount || 0,                                    otherCount: dtails.otherCount || 0,                                }                                })                            }}                            >修改</View>                        }                        </View>                        <View className="val">                            专利 <Text className="num">{dtails.patentCount || 0}</Text>                               其中发明专利 <Text className="num">{dtails.inventionPatentCount || 0}</Text>                               实用新型 <Text className="num">{dtails.utilityModelCount || 0}</Text>                               外观设计 <Text className="num">{dtails.appearancePatentCount || 0}</Text>                               软著 <Text className="num">{dtails.softwareWorksCount || 0}</Text>                               标准 <Text className="num">{dtails.standard == 1 ? '有' : '无'}</Text>                               其他类型 <Text className="num">{dtails.otherCount || 0}</Text>                           </View>                        <View className="tit">2.财务数据</View>                        <View className="val" style={{display: 'flex', alignItems: 'center'}}>                            营收(万元):                            <View style={{width: '180rpx'}}>                                <AtInput                                value={dtails.financialRevenue}                                name='financialRevenue'                                type='number'                                placeholder='请输入数量'                                size='mini'                                onChange={value => {                                    dtails.financialRevenue = value;                                    this.setState({ dtails })                                }}                                />                            </View>                        </View>                        <View className="val" style={{display: 'flex', alignItems: 'center'}}>                            税收(万元):                            <View style={{width: '180rpx'}}>                                <AtInput                                value={dtails.financialTax}                                name='financialTax'                                type='number'                                placeholder='请输入数量'                                size='mini'                                onChange={value => {                                    dtails.financialTax = value;                                    this.setState({ dtails })                                }}                                />                            </View>                        </View>                        <View className="val" style={{display: 'flex', alignItems: 'center'}}>                            资产(万元):                            <View style={{width: '180rpx'}}>                                <AtInput                                value={dtails.financialProperty}                                name='financialProperty'                                type='number'                                placeholder='请输入数量'                                size='mini'                                onChange={value => {                                    dtails.financialProperty = value;                                    this.setState({ dtails })                                }}                                />                            </View>                                                    </View>                        <View className="val" style={{display: 'flex', alignItems: 'center'}}>                            研发费用(万元):                            <View style={{width: '180rpx'}}>                                <AtInput                                value={dtails.financialRd}                                name='financialRd'                                type='number'                                placeholder='请输入数量'                                size='mini'                                onChange={value => {                                    dtails.financialRd = value;                                    this.setState({ dtails })                                }}                                />                            </View>                        </View>                        <View className="tit">3.前期沟通情况</View>                        <View className="tit">                            <Text>                            客户的难处                            <Text className="txt">(20字以上)</Text>                            </Text>                            <Text onClick={() => this.openInteractHis('earlyCommunication')}>历史记录</Text>                        </View>                        <View className="val">                            <AtTextarea                            value={dtails.earlyCommunication}                            maxLength={200}                            placeholder='请编写本次面谈客户难处~'                            height={70}                            onChange={value => {                                dtails.earlyCommunication = value;                                this.setState({ dtails });                            }}                            />                        </View>                        <View className="tit">                            <Text>                            客户的需求                            <Text className="txt">(20字以上)</Text>                            </Text>                            <Text onClick={() => this.openInteractHis('customerDemand')}>历史记录</Text>                        </View>                        <View className="val">                            <AtTextarea                            value={dtails.customerDemand}                            maxLength={200}                            placeholder='请编写本次面谈客户需求~'                            height={70}                            onChange={value => {                                dtails.customerDemand = value;                                this.setState({ dtails });                            }}                            />                        </View>                        <View className="tit">                            <Text>                            面谈思路                            <Text className="txt">(20字以上)</Text>                            </Text>                            <Text onClick={() => this.openInteractHis('interviewIdeas')}>历史记录</Text>                        </View>                        <View className="val">                            <AtTextarea                            value={dtails.interviewIdeas}                            maxLength={200}                            placeholder='请编写本次面谈客户思路~'                            height={70}                            onChange={value => {                                dtails.interviewIdeas = value;                                this.setState({ dtails });                            }}                            />                        </View>                        <View className="tit">                            <Text>                            面谈达成的目的                            <Text className="txt">(20字以上)</Text>                            </Text>                            <Text onClick={() => this.openInteractHis('interviewPurpose')}>历史记录</Text>                        </View>                        <View className="val">                            <AtTextarea                            value={dtails.interviewPurpose}                            maxLength={200}                            placeholder='请编写本次面谈达成的目的~'                            height={70}                            onChange={value => {                                dtails.interviewPurpose = value;                                this.setState({ dtails });                            }}                            />                        </View>                        <View className="tit">                            <Text>                            经理/上级面谈建议                            <Text className="txt">(由经理/上级口述,本人整理,20字以上)</Text>                            </Text>                            <Text onClick={() => this.openInteractHis('interviewRecommend')}>历史记录</Text>                        </View>                        <View className="val">                            <AtTextarea                            value={dtails.interviewRecommend}                            maxLength={200}                            placeholder='请编写本次面谈建议~'                            height={70}                            onChange={value => {                                dtails.interviewRecommend = value;                                this.setState({ dtails });                            }}                            />                        </View>                        <AtButton type="primary" onClick={this.onSaveAllData.bind(this)}>保存</AtButton>                    </View>                  </View>              }              {/* {                dtails.newChannel == 1                  ?                  <View className="two">                    <View className="title">面谈前渠道情况</View>                    <View className="tit">                      <Text>                        面谈项目                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.getBusinessProjectByName("")                            this.setState({                              upType: 5,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                intendedProject: dtails.intendedProject,                              },                              checkOptions: !!dtails.intendedProject ? dtails.intendedProject.split(",") : []                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">{dtails.intendedProject || "无"}</View>                    <View className="tit">                      <Text>                        面谈思路及目的                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 4,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                id: dtails.id,                                interviewIdeas: dtails.interviewIdeas,                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">{dtails.interviewIdeas || "无"}</View>                    <View className="tit">                      <Text>                        我方主要面谈人及分工                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 6,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                id: dtails.id,                                interviewDistribution: dtails.interviewDistribution,                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">{dtails.interviewDistribution || "无"}</View>                  </View>                  :                  <View className="two">                                          <View className="title">面谈企业情况</View>                    <AtInput                        name='mzgssl'                        title='母/子公司数'                        type='number'                        placeholder='请输入数量'                    />                     <AtInput                        name='sbrs'                        title=''                        type='number'                        placeholder='请输入数量'                        size='mini'                    />                    <AtInput                        name='qyes'                        title='对外投资控股的企业数'                        type='number'                        placeholder='请输入数量'                    />                    <View className="tit">                      <Text>                        知识产权情况                        <Text className="txt">(专利信息、标准、专利、软著)</Text>                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 1,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                id: dtails.id,                                inventionPatentCount: dtails.inventionPatentCount || 0,                                utilityModelCount: dtails.utilityModelCount || 0,                                appearancePatentCount: dtails.appearancePatentCount || 0,                                softwareWorksCount: dtails.softwareWorksCount || 0,                                otherCount: dtails.otherCount || 0,                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">                      专利 <Text className="num">{dtails.patentCount || 0}</Text>                         其中发明专利 <Text className="num">{dtails.inventionPatentCount || 0}</Text>                         实用新型 <Text className="num">{dtails.utilityModelCount || 0}</Text>                         外观设计 <Text className="num">{dtails.appearancePatentCount || 0}</Text>                         软著 <Text className="num">{dtails.softwareWorksCount || 0}</Text>                         标准 <Text className="num">{'有'}</Text>                         其他类型 <Text className="num">{dtails.otherCount || 0}</Text>                       </View>                    <View className="tit">                      <Text>                        财务数据                        <Text className="txt">(包括营收、税收、资产、研发费用等)</Text>                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 2,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                id: dtails.id,                                financialData: dtails.financialData,                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">{dtails.financialData || "无"}</View>                    <View className="tit">                      <Text>                        前期沟通                        <Text className="txt">(客户的难处、需求)</Text>                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 3,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                id: dtails.id,                                earlyCommunication: dtails.earlyCommunication,                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">{dtails.earlyCommunication || "无"}</View>                    <View className="tit">                      <Text>                        面谈思路及目的                      </Text>                      {                        dtails.myUser == 1 &&                        <View className="up"                          onClick={e => {                            e.stopPropagation()                            this.setState({                              upType: 4,                              isOpened: true,                              info: {                                uid: this.$instance.router.params.id,                                id: dtails.id,                                interviewIdeas: dtails.interviewIdeas,                              }                            })                          }}                        >修改</View>                      }                    </View>                    <View className="val">{dtails.interviewIdeas || "无"}</View>                  </View>              } */}            </View>          )}        </View>        <AtModal          isOpened={this.state.isOpened}          onClose={() => {            this.setState({              isOpened: false            })          }}        >          <AtModalHeader>信息修改</AtModalHeader>          <AtModalContent>            {              upType == 0 &&              <View>                <View className='selectTitle'>企业行业</View>                <Picker                  value={this.state.sector.id}                  range={industry} rangeKey='title' mode='selector'                  onChange={(e) => {                    this.setState({                      sector: industry[e.detail.value],                      info: Object.assign(info, {                        industry: industry[e.detail.value].id,                      })                    })                  }}>                  <View style={{ marginBottom: "10px", color: !this.state.sector.title && "#CCCCCC" }}>                    {!this.state.sector.title ? "请选择" : this.state.sector.title}                  </View>                </Picker>                <View className='selectTitle'>企业主营产品/服务</View>                <Input                  // name='value'                  // title='企业主营产品/服务'                  type='text'                  placeholder='请用,符号隔开关键字'                  value={info.businessScope}                  onInput={e => {                    this.setState({                      info: Object.assign(info, {                        businessScope: e.detail.value,                      })                    })                  }}                />              </View>            }            {              upType == 1 &&              <View>                <AtInput                  name='inventionPatentCount'                  title='发明专利'                  type='number'                  value={info.inventionPatentCount}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        inventionPatentCount: e,                      })                    })                  }}                />                <AtInput                  name='utilityModelCount'                  title='实用新型'                  type='number'                  value={info.utilityModelCount}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        utilityModelCount: e,                      })                    })                  }}                />                <AtInput                  name='appearancePatentCount'                  title='外观专利'                  type='number'                  value={info.appearancePatentCount}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        appearancePatentCount: e,                      })                    })                  }}                />                <AtInput                  name='softwareWorksCount'                  title='软著'                  type='number'                  value={info.softwareWorksCount}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        softwareWorksCount: e,                      })                    })                  }}                />                <View style={{display: 'flex', margin: '12rpx 0'}}>                    <Text style={{ fontSize: '32rpx', marginRight: '16rpx', width: '172rpx' }}>标准</Text>                    <RadioGroup title="标准" onChange={e => {                        dtails.standard = Number(e.target.value);                        this.setState({ dtails });                    }}>                        <Label className='radio-list__label'>                        <Radio className='radio-list__radio' value={1} checked={dtails.standard == 1}>有</Radio>                        </Label>                        <Label className='radio-list__label'>                        <Radio className='radio-list__radio' value={0} checked={!dtails.standard}>无</Radio>                        </Label>                    </RadioGroup>                </View>                <AtInput                  name='otherCount'                  title='其他'                  type='number'                  value={dtails.otherCount}                  onChange={e => {                    this.setState({                      info: Object.assign(dtails, {                        otherCount: e,                      })                    })                  }}                />              </View>            }            {              upType == 2 &&              <View>                <View className='selectTitle'>财务数据</View>                <AtTextarea                  value={info.financialData || ""}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        financialData: e,                      }),                    })                  }}                  maxLength={200}                  placeholder='请填写财务数据~'                />              </View>            }            {              upType == 3 &&              <View>                <View className='selectTitle'>前期沟通</View>                <AtTextarea                  value={info.earlyCommunication || ""}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        earlyCommunication: e,                      }),                    })                  }}                  maxLength={200}                  placeholder='请填写前期沟通~'                />              </View>            }            {              upType == 4 &&              <View>                <View className='selectTitle'>面谈思路及目的</View>                <AtTextarea                  value={info.interviewIdeas || ""}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        interviewIdeas: e,                      }),                    })                  }}                  maxLength={200}                  placeholder='请填写面谈思路及目的~'                />              </View>            }            {              upType == 5 &&              <View>                <AtSearchBar                  placeholder="请输入项目名称"                  showActionButton                  value={this.state.value}                  onChange={this.onSearchChange}                  onActionClick={() => {                    this.getBusinessProjectByName(this.state.value);                  }}                  onClear={() => {                    this.setState({                      value: "",                    }, () => { this.getBusinessProjectByName(this.state.value) });                  }}                />                {                  this.state.checkOptions.length > 0 &&                  <View className="selproject">                    已选择:                    {                      this.state.checkOptions.map((v, i) =>                        <View className="selptxt" key={i}                          onClick={() => {                            let list = this.state.checkOptions                            for (var j = 0; j < list.length; j++) {                              if (list[j] == v) {                                list.splice(j, 1)                                this.setState({                                  checkOptions: list,                                  info: Object.assign(info, {                                    intendedProject: list.toString(),                                  }),                                })                              }                            }                          }}                        >{v} <AtIcon className='atIcon' value='close-circle' size='12' color='#fff' /></View>                      )                    }                  </View>                }                <AtCheckbox                  options={this.state.options}                  selectedList={this.state.checkOptions}                  onChange={e => {                    this.setState({                      checkOptions: e,                      info: Object.assign(info, {                        intendedProject: e.toString(),                      }),                    })                  }}                />              </View>            }            {              upType == 6 &&              <View>                <View className='selectTitle'>我方主要面谈人及分工</View>                <AtTextarea                  value={info.interviewDistribution || ""}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        interviewDistribution: e,                      }),                    })                  }}                  maxLength={200}                  placeholder='请填写我方主要面谈人及分工~'                />              </View>            }            {              upType == 7 &&              <View>                <View className='selectTitle' style={{ height: "30px" }}>                  渠道类别:                  <Picker                    value={this.state.channe.id}                    range={channelTypeList} rangeKey='title' mode='selector'                    onChange={(e) => {                      this.setState({                        channe: channelTypeList[e.detail.value],                        info: Object.assign(info, {                          channelType: channelTypeList[e.detail.value].id,                        })                      })                    }}>                    <View style={{ marginBottom: "10px", width: "160px", color: !this.state.channe.title && "#CCCCCC" }}>                      {!this.state.channe.title ? "请选择" : this.state.channe.title}                    </View>                  </Picker>                </View>                <View className='selectTitle' style={{ height: "30px" }}>                  覆盖企业数:                  <Input                    style={{ width: "50%" }}                    type='number'                    placeholder='请填写个数'                    value={info.enterpriseCount}                    onInput={e => {                      this.setState({                        info: Object.assign(info, {                          enterpriseCount: e.detail.value,                        })                      })                    }}                  />                </View>                <View className='selectTitle' >渠道考核指标</View>                <AtTextarea                  value={info.channelIndicators || ""}                  onChange={e => {                    this.setState({                      info: Object.assign(info, {                        channelIndicators: e,                      }),                    })                  }}                  maxLength={200}                  placeholder='请填写渠道考核指标~'                />              </View>            }          </AtModalContent>          <AtModalAction>            <Button type='secondary' onClick={() => { this.setState({ isOpened: false }) }}>取消</Button>            <Button type='primary' onClick={this.update}>确定修改</Button>          </AtModalAction>        </AtModal>        <AtModal          isOpened={this.state.isAdd}          onClose={() => {            this.setState({              isAdd: false            })          }}        >          <AtModalHeader>联系人</AtModalHeader>          <AtModalContent>            {              userList.map((item) =>                <View key={item.id} className="additem">                  <Text className="txt">{item.name || " "}</Text>                  <Text className="txt">{item.position || " "}</Text>                  <Text className="txt">{item.department || " "}</Text>                  <Text className="mobile">{item.mobile || " "}</Text>                  <View                    className={item.major == 1 ? "bts" : "bt"}                    onClick={() => {                      item.major != 1 && this.updateMainContact(item.id)                    }}                  >                    {item.major == 1 ? "已选" : "选择"}                  </View>                </View>              )            }            <AtInput              required              name='name'              title='姓名'              type='text'              placeholder='请填写姓名'              value={obj.name}              onChange={e => {                this.setState({                  obj: Object.assign(obj, {                    name: e,                  })                })              }}            />            <AtInput              required              name='position'              title='职位'              type='text'              placeholder='请填写职位'              value={obj.position}              onChange={e => {                this.setState({                  obj: Object.assign(obj, {                    position: e,                  })                })              }}            />            <AtInput              required              name='department'              title='部门'              type='text'              placeholder='请填写部门'              value={obj.department}              onChange={e => {                this.setState({                  obj: Object.assign(obj, {                    department: e,                  })                })              }}            />            <AtInput              required              name='mobile'              title='手机'              type='phone'              placeholder='请填写手机号'              value={obj.mobile}              onChange={e => {                this.setState({                  obj: Object.assign(obj, {                    mobile: e,                  })                })              }}            />          </AtModalContent>          <AtModalAction>            <Button type='secondary'              onClick={() => {                this.setState({                  isAdd: false                }, () => {                  this.queryByUidAll()                })              }}>取消</Button>            <Button type='primary' onClick={this.add}>保存</Button>          </AtModalAction>        </AtModal>        <AtModal            isOpened={this.state.addItemShow}            onClose={this.handleCloseAddItemDialog}        >          <AtModalHeader>新增对外投资控股的企业</AtModalHeader>          <AtModalContent>            <AtInput              required              name='mobile'              title='企业名称'              placeholder='请输入企业名称'              value={this.state.addItemInputVal}              onChange={value => this.setState({ addItemInputVal: value })}            />          </AtModalContent>          <AtModalAction>            <Button type='secondary' onClick={this.handleCloseAddItemDialog}>取消</Button>            <Button type='primary' onClick={this.handleAddItemSave}>保存</Button>          </AtModalAction>        </AtModal>        {/* 多选框 */}        <CheckboxPicker            isOpened={this.state.multiplePickerShow}            title={this.state.multiplePickerTitle}            options={this.state.multiplePickerOptions}            checkedList={this.state.multiplePickerCheckedList}            onClose={() => {this.setState({multiplePickerShow: false})}}            onConfirm={this.handleMultipleConfirm}        ></CheckboxPicker>        {/* 沟通情况历史记录 */}        <InteractList            isOpened={this.state.interactShow}            list={dtails.interviewList || []}            type={this.state.interactShowType}            title={this.state.interactTitle}            onClose={() => {                this.setState({ interactShow: false })            }}        />      </View>    );  }}export default CustomerProfile;
 |