index.jsx 80 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102
  1. import React, { Component } from "react";
  2. import { View, Input, Button, Text, Picker, RadioGroup, Label, Radio } from "@tarojs/components";
  3. import Taro, { getCurrentInstance } from "@tarojs/taro";
  4. import { getProvince } from '../../utils/tools/index'
  5. import {
  6. AtSearchBar,
  7. AtTextarea,
  8. AtModal,
  9. AtModalHeader,
  10. AtModalContent,
  11. AtModalAction,
  12. AtInput,
  13. AtButton,
  14. AtInputNumber
  15. } from "taro-ui";
  16. import Skeleton from "taro-skeleton";
  17. import {
  18. queryByUidAll,
  19. updateUser,
  20. addOneContact,
  21. findCustomerContacts,
  22. updateMainContact,
  23. limitUser,
  24. getBusinessProjectByName,
  25. addProject,
  26. queryProjectList,
  27. delProject
  28. } from "../../utils/servers/servers";
  29. import "./index.less";
  30. import "taro-ui/dist/style/components/textarea.scss";
  31. import "taro-ui/dist/style/components/modal.scss";
  32. import "taro-ui/dist/style/components/timeline.scss";
  33. import "taro-ui/dist/style/components/calendar.scss";
  34. import "taro-ui/dist/style/components/input.scss";
  35. import "taro-ui/dist/style/components/search-bar.scss";
  36. import MessageNoticebar from "../../components/common/messageNoticebar";
  37. import { industry, channelTypeList, yearList } from '../../utils/tools/config';
  38. import { getChannel } from "../../utils/tools";
  39. import Superior from "../../components/common/superior";
  40. import CheckboxPicker from "../../components/common/CheckboxPicker";
  41. import AddressPicker from "../../components/common/addressPicker"
  42. import InteractList from "./components/InteractList";
  43. class CustomerProfile extends Component {
  44. $instance = getCurrentInstance();
  45. constructor(props) {
  46. super(props);
  47. this.state = {
  48. upType: -1,
  49. isOpened: false,
  50. dtails: {},
  51. projectList: [],
  52. info: {},
  53. sector: {},
  54. isAdd: false,
  55. obj: {},
  56. userList: [],
  57. allProjectList: [],
  58. options: [],
  59. checkProject: [],
  60. checkOptions: [],
  61. isSuperior: false,
  62. channe: {},
  63. isMask: false,
  64. addressPickerShow: false,
  65. region: [],
  66. customItem: [],
  67. multiplePickerShow: false,
  68. multiplePickerTitle: '',
  69. multiplePickerType: '',
  70. multiplePickerOptions: [],
  71. multiplePickerCheckedList: [],
  72. addItemShow: false,
  73. addItemType: '',
  74. addItemTitle: '',
  75. addItemInputVal: '',
  76. interactShow: false,
  77. interactShowType: '',
  78. interactTitle: '',
  79. interactList: []
  80. };
  81. this.queryByUidAll = this.queryByUidAll.bind(this);
  82. this.update = this.update.bind(this);
  83. this.add = this.add.bind(this);
  84. this.getUserList = this.getUserList.bind(this);
  85. this.getBusinessProjectByName = this.getBusinessProjectByName.bind(this);
  86. this.onSearchChange = this.onSearchChange.bind(this);
  87. this.handleOpenMultiplePicker = this.handleOpenMultiplePicker.bind(this);
  88. this.handleMultipleConfirm = this.handleMultipleConfirm.bind(this);
  89. this.handleAddItemSave = this.handleAddItemSave.bind(this);
  90. this.handleCloseAddItemDialog = this.handleCloseAddItemDialog.bind(this);
  91. }
  92. componentDidMount() {
  93. this.setState({
  94. isMask: false
  95. })
  96. this.queryByUidAll();
  97. this.getProjectList();
  98. if (!this.isLogin()) {
  99. Taro.setStorageSync('currentPage', `/pages/customerProfile/index?id=${this.$instance.router.params.id}`)
  100. }
  101. }
  102. toggleAddressPicker(e) {
  103. if (!Object.keys(e).length) {
  104. this.setState({ addressPickerShow: false });
  105. return;
  106. }
  107. const addressIds = getProvince(e.province, e.city, e.area);
  108. const { dtails } = this.state;
  109. dtails.locationProvince = addressIds[0];
  110. dtails.locationProvinceName = e.province;
  111. dtails.locationCity = addressIds[1];
  112. dtails.locationCityName = e.city;
  113. dtails.locationArea = addressIds[2];
  114. dtails.locationAreaName = e.area;
  115. this.setState({ dtails, addressPickerShow: false });
  116. }
  117. handleOpenMultiplePicker(type) {
  118. let multiplePickerOptions = [];
  119. let multiplePickerTitle = '';
  120. let multiplePickerCheckedList = [];
  121. const { dtails, info } = this.state;
  122. switch (type) {
  123. case 'industry':
  124. // 企业所属行业
  125. multiplePickerOptions = industry;
  126. multiplePickerCheckedList = !!dtails.industry ? dtails.industry.toString().split(',') : [];
  127. multiplePickerTitle = '请选择企业所属行业';
  128. break;
  129. case 'externalInvestIndustry':
  130. // 对外投资控股的行业
  131. multiplePickerOptions = industry;
  132. multiplePickerCheckedList = !!dtails.externalInvestIndustry ? dtails.externalInvestIndustry.toString().split(',') : [];
  133. multiplePickerTitle = '请选择对外投资控股的行业';
  134. break;
  135. case 'examineStatusOther':
  136. // 复审年份
  137. multiplePickerOptions = yearList;
  138. multiplePickerCheckedList = info.examineStatusOther ? info.examineStatusOther.split(',') : [];
  139. multiplePickerTitle = '请选择年份';
  140. break;
  141. case 'buyStatusOther':
  142. // 复购/复审年份
  143. multiplePickerOptions = yearList;
  144. multiplePickerCheckedList = info.buyStatusOther ? info.buyStatusOther.split(',') : [];
  145. multiplePickerTitle = '请选择年份';
  146. break;
  147. default:
  148. break;
  149. }
  150. this.setState({
  151. multiplePickerShow: true,
  152. multiplePickerType: type,
  153. multiplePickerTitle,
  154. multiplePickerOptions,
  155. multiplePickerCheckedList: multiplePickerCheckedList.map(item => Number(item))
  156. })
  157. }
  158. handleMultipleConfirm(selectedIds, selectedLabels) {
  159. const { multiplePickerType, dtails, info } = this.state;
  160. switch (multiplePickerType) {
  161. case "industry":
  162. // 企业所属行业
  163. dtails.industry = selectedIds.join(',');
  164. dtails.industryName = selectedLabels.join('、');
  165. this.setState({ dtails })
  166. break;
  167. case "externalInvestIndustry":
  168. // 对外投资控股的行业
  169. dtails.externalInvestIndustry = selectedIds.join(',');
  170. dtails.externalInvestIndustryName = selectedLabels.join('、');
  171. this.setState({ dtails })
  172. break;
  173. case 'examineStatusOther':
  174. info.examineStatusOther = selectedIds.join(',');
  175. this.setState({ info });
  176. break;
  177. case 'buyStatusOther':
  178. info.buyStatusOther = selectedIds.join(',');
  179. this.setState({ info });
  180. break;
  181. default:
  182. break;
  183. }
  184. }
  185. bindRegionChange (e) {
  186. this.setState({
  187. region: e.detail.value
  188. })
  189. }
  190. isLogin() {
  191. return !!Taro.getStorageSync('userInfor');
  192. }
  193. onShareAppMessage() {
  194. this.limitUser();
  195. return {
  196. title: "客户档案",
  197. path: "/pages/customerProfile/index?id=" + this.$instance.router.params.id,
  198. };
  199. }
  200. // 客户档案详情
  201. queryByUidAll() {
  202. queryByUidAll(
  203. this.$instance.router.params.notRequired,
  204. { id: this.$instance.router.params.id, }
  205. )
  206. .then((v) => {
  207. if (v.error.length === 0) {
  208. this.setState({
  209. dtails: {
  210. ...v.data,
  211. companyCount: v.data.companyCount || 0,
  212. socialSecurityCount: v.data.socialSecurityCount || 0,
  213. externalInvestCount: v.data.externalInvestCount || 0,
  214. financialRevenue: v.data.financialRevenue || 0,
  215. financialTax: v.data.financialTax || 0,
  216. financialProperty: v.data.financialProperty || 0,
  217. financialRd: v.data.financialRd || 0,
  218. enterpriseCount: v.data.enterpriseCount || 0,
  219. earlyCommunication: '',
  220. customerDemand: '',
  221. interviewIdeas: '',
  222. interviewPurpose: '',
  223. interviewRecommend: '',
  224. interviewFeedback: '',
  225. followUpPlan: ''
  226. }
  227. })
  228. } else {
  229. setTimeout(() => {
  230. Taro.navigateBack({
  231. delta: 1
  232. })
  233. }, 1800);
  234. Taro.showToast({
  235. title: v.error[0].message,
  236. icon: "none",
  237. duration: 1800,
  238. });
  239. }
  240. })
  241. .catch((err) => {
  242. Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" });
  243. });
  244. }
  245. validParams(params) {
  246. const { dtails } = this.state;
  247. let flag = true;
  248. let message = '';
  249. if (dtails.newChannel == 1) {
  250. // 渠道客户
  251. if (!params.channelType) {
  252. flag = false;
  253. message = '请选择渠道性质';
  254. } else if (!params.enterpriseCount) {
  255. flag = false;
  256. message = '请输入渠道所覆盖企业数';
  257. } else if (!params.channelIndicators) {
  258. flag = false;
  259. message = '请输入渠道考核指标';
  260. }
  261. } else {
  262. if (!params.locationProvince) {
  263. message = '请选择企业所在地省市区';
  264. flag = false;
  265. } else if (!params.industry) {
  266. message = '请选择企业所属行业';
  267. flag = false;
  268. } else if (!params.businessScope) {
  269. message = '主营产品不能为空';
  270. flag = false;
  271. } else if (params.companyCount === '' || params.companyCount === undefined || params.companyCount === null) {
  272. message = '请输入母/子公司数';
  273. flag = false;
  274. } else if (params.socialSecurityCount === '' || params.socialSecurityCount === undefined || params.socialSecurityCount === null) {
  275. message = '请输入社保人数';
  276. flag = false;
  277. } else if (params.externalInvestCount === '' || params.externalInvestCount === undefined || params.externalInvestCount === null) {
  278. message = '请输入对外投资控股的企业数';
  279. flag = false;
  280. } else if (params.financialRevenue === '' || params.financialRevenue === undefined || params.financialRevenue === null) {
  281. message = '请输入营收数据';
  282. flag = false;
  283. } else if (params.financialTax === '' || params.financialTax === undefined || params.financialTax === null) {
  284. message = '请输入税收数据';
  285. flag = false;
  286. } else if (params.financialProperty === '' || params.financialProperty === undefined || params.financialProperty === null) {
  287. message = '请输入资产数据';
  288. flag = false;
  289. } else if (params.financialRd === '' || params.financialRd === undefined || params.financialRd === null) {
  290. message = '请输入研发费用';
  291. flag = false;
  292. } else if (!params.externalInvestIndustry) {
  293. message = '请选择对外投资控股的行业';
  294. flag = false;
  295. } else if (!params.externalInvestName) {
  296. message = '请选择对外投资控股的企业';
  297. flag = false;
  298. }
  299. }
  300. return { flag, message };
  301. }
  302. onSaveAllData() {
  303. const { dtails } = this.state;
  304. let params = {
  305. id: dtails.id,
  306. uid: dtails.uid,
  307. locationProvince: dtails.locationProvince,
  308. locationProvinceName: dtails.locationProvinceName,
  309. locationCity: dtails.locationCity,
  310. locationCityName: dtails.locationCityName,
  311. locationArea: dtails.locationArea,
  312. locationAreaName: dtails.locationAreaName,
  313. type: 0, // 1、更新档案和面谈,0、只更新档案
  314. };
  315. if (dtails.newChannel == 1) {
  316. // 渠道客户
  317. params = {
  318. ...params,
  319. channelType: dtails.channelType,
  320. enterpriseCount: dtails.enterpriseCount,
  321. channelIndicators: dtails.channelIndicators,
  322. };
  323. } else {
  324. let externalInvestIdArr = [];
  325. if (!!dtails.externalInvestName) {
  326. externalInvestIdArr = dtails.externalInvestName.split('、').map(() => {
  327. return '0';
  328. })
  329. }
  330. params = {
  331. ...params,
  332. industry: dtails.industry,
  333. industryName: dtails.industryName,
  334. // earlyCommunication: dtails.earlyCommunication,
  335. //     customerDemand: dtails.customerDemand,
  336. //     interviewIdeas: dtails.interviewIdeas,
  337. //     interviewPurpose: dtails.interviewPurpose,
  338. //     interviewRecommend: dtails.interviewRecommend,
  339. //     interviewFeedback: dtails.interviewFeedback,
  340. //     followUpPlan: dtails.followUpPlan,
  341.     patentCount: dtails.patentCount,
  342.     inventionPatentCount: dtails.inventionPatentCount,
  343.     utilityModelCount: dtails.utilityModelCount,
  344.     appearancePatentCount: dtails.appearancePatentCount,
  345.     softwareWorksCount: dtails.softwareWorksCount,
  346.     otherCount: dtails.otherCount,
  347. //     financialData: dtails.financialData,
  348.     companyCount: dtails.companyCount,
  349.     socialSecurityCount: dtails.socialSecurityCount,
  350.     externalInvestCount: dtails.externalInvestCount,
  351.     externalInvestIndustry: dtails.externalInvestIndustry,
  352. externalInvestIndustryName: dtails.externalInvestIndustryName,
  353. externalInvestId: externalInvestIdArr.join(','),
  354.     externalInvestName: dtails.externalInvestName,
  355.     financialRevenue: dtails.financialRevenue,
  356.     financialTax: dtails.financialTax,
  357.     financialProperty: dtails.financialProperty,
  358.     financialRd: dtails.financialRd,
  359. standard: dtails.standard,
  360. businessScope: dtails.businessScope,
  361. };
  362. }
  363. for (let key in params) {
  364. if (params[key] === undefined || params[key] === 'undefined' || params[key] === null || params[key] === 'null') {
  365. delete params[key];
  366. }
  367. }
  368. const { flag, message } = this.validParams(params);
  369. if (!flag) {
  370. Taro.showToast({
  371. title: message,
  372. icon: "none",
  373. });
  374. return;
  375. }
  376. updateUser(params).then((v) => {
  377. if (v.error.length === 0) {
  378. Taro.showToast({
  379. title: "修改成功",
  380. });
  381. setTimeout(() => {
  382. //表示回到上一页面
  383. Taro.navigateBack({
  384. delta: 1
  385. });
  386. }, 1000)
  387. } else {
  388. Taro.showToast({
  389. title: v.error[0].message,
  390. icon: "none",
  391. });
  392. }
  393. })
  394. }
  395. // 修改客户档案
  396. update() {
  397. // const { upType, info } = this.state
  398. // console.log(info)
  399. // let tipList = [
  400. // { key: "inventionPatentCount", value: "请填写发明专利数" },
  401. // { key: "utilityModelCount", value: "请填写实用新型数" },
  402. // { key: "appearancePatentCount", value: "请填写外观专利数" },
  403. // { key: "softwareWorksCount", value: "请填写软著数" },
  404. // { key: "otherCount", value: "请填写其他数量" },
  405. // { key: "financialData", value: "请填写财务数据" },
  406. // { key: "earlyCommunication", value: "请填写前期沟通" },
  407. // { key: "interviewIdeas", value: "请填写面谈思路及目的" },
  408. // { key: "interviewDistribution", value: "请填写主要面谈人及分工" },
  409. // { key: "enterpriseCount", value: "请填写覆盖企业数" },
  410. // { key: "channelIndicators", value: "请填写渠道考核指标" },
  411. // ]
  412. // if (!info.id) {
  413. // delete info.id
  414. // }
  415. // for (let i in info) {
  416. // if (!info[i] && info[i] !== 0) {
  417. // for (var j = 0; j < tipList.length; j++) {
  418. // if (tipList[j].key == i) {
  419. // Taro.showToast({
  420. // title: tipList[j].value,
  421. // icon: "none",
  422. // });
  423. // }
  424. // }
  425. // return
  426. // } else if (info[i] == 0) {
  427. // if (i == "channelType") {
  428. // Taro.showToast({
  429. // title: "请选择渠道类型",
  430. // icon: "none",
  431. // });
  432. // return
  433. // }
  434. // }
  435. // if ((i == "financialData" || i == "earlyCommunication" || i == "interviewIdeas" || i == "interviewDistribution")
  436. // && info[i].length < 20) {
  437. // Taro.showToast({
  438. // title: "至少20字以上",
  439. // icon: "none",
  440. // });
  441. // return
  442. // }
  443. // }
  444. // updateUserDate(upType, info).then((v) => {
  445. // if (v.error.length === 0) {
  446. // Taro.showToast({
  447. // title: "修改成功",
  448. // });
  449. // this.setState({
  450. // isOpened: false
  451. // })
  452. // this.queryByUidAll()
  453. // } else {
  454. // Taro.showToast({
  455. // title: v.error[0].message,
  456. // icon: "none",
  457. // });
  458. // }
  459. // }).catch(() => {
  460. // })
  461. if (this.state.upType == 5) {
  462. this.postAddProject();
  463. } else {
  464. this.setState({ isOpened: false, dtails: { ...this.state.dtails, ...this.state.info } })
  465. }
  466. }
  467. postAddProject() {
  468. const { checkProject, dtails, info } = this.state;
  469. const params = { uid: dtails.id };
  470. if (!checkProject.length) {
  471. Taro.showToast({
  472. title: "请选择要添加的项目",
  473. icon: "none",
  474. });
  475. return;
  476. } else {
  477. params.pid = checkProject[0].id;
  478. if (checkProject[0].cSort == 9) {
  479. if (!info.examineStatus) {
  480. Taro.showToast({
  481. title: "请选择审核状态",
  482. icon: "none",
  483. });
  484. return;
  485. } else if (info.examineStatus == 2 && !info.examineStatusOther) {
  486. Taro.showToast({
  487. title: "请选择复审年份",
  488. icon: "none",
  489. });
  490. return;
  491. } else if (info.examineStatus == 2 && info.examineStatusOther.split(',').length > 1) {
  492. Taro.showToast({
  493. title: "复审年份只能选择一个",
  494. icon: "none",
  495. });
  496. return;
  497. } else {
  498. params.examineStatus = info.examineStatus;
  499. params.examineStatusOther = info.examineStatus == 2 ? info.examineStatusOther : '';
  500. }
  501. } else if (checkProject[0].cSort == 6) {
  502. if (!info.buyStatus) {
  503. Taro.showToast({
  504. title: "请选择复购状态",
  505. icon: "none",
  506. });
  507. return;
  508. } else if (info.buyStatus == 2 && !info.buyStatusOther) {
  509. Taro.showToast({
  510. title: "请选择复购/复审年份",
  511. icon: "none",
  512. });
  513. return;
  514. } else {
  515. params.buyStatus = info.buyStatus;
  516. params.buyStatusOther = info.buyStatus == 2 ? info.buyStatusOther : '';
  517. }
  518. }
  519. }
  520. addProject(params).then(res => {
  521. if (res.error.length == 0) {
  522. Taro.showToast({
  523. title: "项目新增成功!",
  524. });
  525. this.setState({ isOpened: false, checkProject: [] })
  526. this.getProjectList();
  527. } else {
  528. Taro.showToast({
  529. title: v.error[0].message,
  530. icon: "none"
  531. });
  532. }
  533. })
  534. }
  535. /**
  536. * 获取项目列表
  537. * @param {*} uid 客户编号
  538. */
  539. getProjectList(uid) {
  540. const params = { uid: this.$instance.router.params.id, pageNo: 1, pageSize: 9999 }
  541. queryProjectList(params).then(res => {
  542. if (!res.error.length) {
  543. this.setState({ projectList: res.data.list });
  544. }
  545. })
  546. }
  547. handleDelProject(data) {
  548. delProject(data.id, data).then(res => {
  549. if (!res.error.length) {
  550. Taro.showToast({
  551. title: "删除成功!",
  552. });
  553. this.getProjectList();
  554. } else {
  555. Taro.showToast({
  556. title: v.error[0].message,
  557. icon: "none"
  558. });
  559. }
  560. })
  561. }
  562. // 新建联系人
  563. add() {
  564. let data = this.state.obj
  565. for (let i in data) {
  566. if (!data[i] && data[i] !== 0) {
  567. Taro.showToast({
  568. title: "请完善信息",
  569. icon: "none",
  570. });
  571. return
  572. } else if (i == "mobile") {
  573. if (!(/^1[3-9]\d{9}$/.test(data[i]))) {
  574. Taro.showToast({
  575. title: "请输入正确地手机号",
  576. icon: "none",
  577. });
  578. return
  579. }
  580. }
  581. }
  582. data.major = 1
  583. addOneContact(data).then((v) => {
  584. if (v.error.length === 0) {
  585. Taro.showToast({
  586. title: "添加成功",
  587. });
  588. this.setState({
  589. isAdd: false
  590. })
  591. this.queryByUidAll()
  592. } else {
  593. Taro.showToast({
  594. title: v.error[0].message,
  595. icon: "none",
  596. });
  597. }
  598. }).catch(() => {
  599. })
  600. }
  601. // 项目列表
  602. getBusinessProjectByName(val) {
  603. getBusinessProjectByName({
  604. businessName: val || "",
  605. })
  606. .then((v) => {
  607. if (v.error.length === 0) {
  608. let theArr = [];
  609. if (v.data.length > 0) {
  610. for (let i = 0; i < v.data.length; i++) {
  611. let thisdata = v.data[i];
  612. theArr.push({
  613. value: thisdata.id,
  614. label: thisdata.bname,
  615. });
  616. };
  617. }
  618. this.setState({
  619. allProjectList: v.data,
  620. options: theArr
  621. })
  622. } else {
  623. Taro.showToast({ title: v.error[0].message, icon: "none" });
  624. }
  625. })
  626. .catch((err) => {
  627. Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" });
  628. });
  629. }
  630. onSearchChange(value) {
  631. this.setState({
  632. value,
  633. });
  634. }
  635. getUserList() {
  636. findCustomerContacts({
  637. uid: this.$instance.router.params.id,
  638. })
  639. .then((v) => {
  640. if (v.error.length === 0) {
  641. this.setState({
  642. userList: v.data || []
  643. })
  644. } else {
  645. Taro.showToast({ title: v.error[0].message, icon: "none" });
  646. }
  647. })
  648. .catch((err) => {
  649. Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" });
  650. });
  651. }
  652. updateMainContact(id) {
  653. updateMainContact({
  654. uid: this.$instance.router.params.id,
  655. ocbId: id,
  656. }).then((v) => {
  657. if (v.error.length === 0) {
  658. Taro.showToast({
  659. title: "设置成功",
  660. });
  661. this.getUserList()
  662. } else {
  663. Taro.showToast({
  664. title: v.error[0].message,
  665. icon: "none",
  666. });
  667. }
  668. }).catch(() => {
  669. })
  670. }
  671. limitUser() {
  672. limitUser({
  673. uid: this.$instance.router.params.id,
  674. // hours: 1,
  675. }).then((v) => {
  676. if (v.error.length === 0) {
  677. } else {
  678. Taro.showToast({
  679. title: v.error[0].message,
  680. icon: "none",
  681. });
  682. }
  683. }).catch(() => {
  684. })
  685. }
  686. addItemDialog(type) {
  687. let title;
  688. switch (type) {
  689. case 'externalInvestName':
  690. // 对外投资控股的企业名称
  691. title = '添加对外投资控股的企业名称';
  692. break;
  693. default:
  694. break;
  695. }
  696. this.setState({ addItemShow: true, addItemType: type, addItemTitle: title });
  697. }
  698. handleCloseAddItemDialog() {
  699. this.setState({ addItemShow: false, addItemType: '', addItemInputVal: '' });
  700. }
  701. handleAddItemSave() {
  702. switch (this.state.addItemType) {
  703. case 'externalInvestName':
  704. const { dtails } = this.state;
  705. let externalInvestName = this.state.dtails.externalInvestName || '';
  706. let externalInvestNameArr = externalInvestName.split('、').filter(item => !!item);
  707. externalInvestNameArr.push(this.state.addItemInputVal);
  708. dtails.externalInvestName = externalInvestNameArr.join('、');
  709. this.setState({ dtails }, () => {
  710. this.handleCloseAddItemDialog();
  711. });
  712. break;
  713. default:
  714. break;
  715. }
  716. }
  717. openInteractHis(type) {
  718. let interactTitle;
  719. let interactList = this.state.dtails.interviewList;
  720. switch (type) {
  721. case 'earlyCommunication':
  722. interactTitle = '客户的难处历史记录';
  723. break;
  724. case 'customerDemand':
  725. interactTitle = '客户的需求历史记录';
  726. break;
  727. case 'interviewIdeas':
  728. interactTitle = '面谈思路历史记录';
  729. break;
  730. case 'interviewPurpose':
  731. interactTitle = '面谈达成的目的历史记录';
  732. break;
  733. case 'interviewRecommend':
  734. interactTitle = '经理/上级面谈建议历史记录';
  735. break;
  736. case 'interviewFeedback':
  737. interactTitle = '面谈后反馈历史记录';
  738. interactList = interactList.slice(1, interactList.length);
  739. break;
  740. case 'followUpPlan':
  741. interactTitle = '后续跟进计划历史记录';
  742. interactList = interactList.slice(1, interactList.length);
  743. break;
  744. default:
  745. break;
  746. }
  747. this.setState({
  748. interactShow: true,
  749. interactShowType: type,
  750. interactTitle,
  751. interactList
  752. });
  753. }
  754. renderProjectItemName(data) {
  755. let name = data.name;
  756. if (!!data.buyStatus) {
  757. // 会员项目
  758. if (data.buyStatus == 1) {
  759. name = name + `(新购)`;
  760. } else if (data.buyStatus == 2) {} {
  761. name = name + `(复购${data.buyStatusOther})`;
  762. }
  763. } else if (!!data.examineStatus) {
  764. // 高新项目
  765. if (data.examineStatus == 1) {
  766. name = name + `(初次审核)`;
  767. } else if (data.examineStatus == 2) {
  768. name = name + `(${data.examineStatusOther}年复审)`;
  769. }
  770. }
  771. return name;
  772. }
  773. render() {
  774. const { dtails, upType, info, obj, userList } = this.state;
  775. return (
  776. <View className="customerProfile">
  777. <MessageNoticebar />
  778. <View
  779. className="titleContent"
  780. >
  781. {Object.keys(dtails).length === 0 ? (
  782. <Skeleton
  783. title
  784. row={3}
  785. animateName="elastic"
  786. avatarShape="square"
  787. loading
  788. />
  789. ) : (
  790. <View className="content">
  791. <View className="name">
  792. <Text style={{ width: "80%" }}>
  793. <Text className="bod">{dtails.nickname}&nbsp;&nbsp;</Text>
  794. <Text style={{ fontSize: "12px", color: ["red", "green"][dtails.signBills] }}>{["未签单", "已签单"][dtails.signBills]}</Text>
  795. </Text>
  796. {dtails.myUser == 1 && <Button className="share" plain type='primary' open-type="share">分享</Button>}
  797. {/* <View className="share">分享</View> */}
  798. </View>
  799. <View className="button">
  800. <View className="but"
  801. onClick={e => {
  802. e.stopPropagation()
  803. this.setState({
  804. isSuperior: true
  805. })
  806. }}
  807. >上级指导</View>
  808. {
  809. this.state.isSuperior &&
  810. <Superior
  811. id={dtails.uid}
  812. userNames={dtails.nickname}
  813. isOpinion={this.state.isSuperior}
  814. isFill={dtails.myUser == 0}
  815. onClose={() => {
  816. this.setState({
  817. isSuperior: false
  818. })
  819. }}
  820. />
  821. }
  822. <View className="but"
  823. onClick={e => {
  824. e.stopPropagation()
  825. Taro.navigateTo({
  826. url: "/pages/situation/index?id=" + this.$instance.router.params.id + "&notRequired=" + this.$instance.router.params.notRequired,
  827. });
  828. }}
  829. >公出记录</View>
  830. </View>
  831. <View className="row">
  832. <View className="code">{dtails.orgCode}</View>
  833. <View className="time">{dtails.createTime}</View>
  834. </View>
  835. {
  836. dtails.newChannel == 1
  837. ?
  838. <View className="first">
  839. <View className="title">渠道档案</View>
  840. <View className="val" style={{ display: 'flex' }}>
  841. 企业所在地省市区:
  842. <View onClick={() => {this.setState({ addressPickerShow: true })}}>
  843. { dtails.locationProvince ? `${dtails.locationProvinceName}-${dtails.locationCityName}-${dtails.locationAreaName}` : '请选择' }
  844. </View>
  845. <AddressPicker
  846. pickerShow={this.state.addressPickerShow}
  847. onHandleToggleShow={this.toggleAddressPicker.bind(this)}
  848. />
  849. </View>
  850. <View className="val" style={{ display: 'flex', alignItems: 'center' }}>
  851. 渠道类别:
  852. <Picker
  853. value={dtails.channelType}
  854. range={channelTypeList}
  855. rangeKey='title'
  856. mode='selector'
  857. onChange={(e) => {
  858. const { dtails } = this.state;
  859. dtails.channelType = e.detail.value;
  860. console.log(dtails.channelType)
  861. this.setState({ dtails })
  862. }}>
  863. <View>
  864. {!getChannel(dtails.channelType) ? "请选择" : getChannel(dtails.channelType)}
  865. </View>
  866. </Picker>
  867. </View>
  868. <View className="val" style={{ display: 'flex', alignItems: 'center' }}>
  869. 渠道企业数:
  870. <View style={{width: '120rpx'}}>
  871. <AtInputNumber
  872. min={0}
  873. max={99999}
  874. value={dtails.enterpriseCount}
  875. name='companyCount'
  876. type='number'
  877. placeholder='请输入数量'
  878. size='mini'
  879. onChange={value => {
  880. dtails.enterpriseCount = value;
  881. this.setState({ dtails })
  882. }}
  883. />
  884. </View>
  885. </View>
  886. <View className="val" style={{display: 'flex'}}>
  887. 渠道考核指标:
  888. <AtTextarea
  889. value={dtails.channelIndicators || ''}
  890. onChange={e => {
  891. this.setState({
  892. dtails: Object.assign(dtails, {
  893. channelIndicators: e,
  894. }),
  895. })
  896. }}
  897. maxLength={200}
  898. placeholder='请填写渠道考核指标~'
  899. />
  900. </View>
  901. <View className="tit" style={{ marginTop: '60rpx' }}>
  902. <Text>
  903. 联系人
  904. <Text className="txt">(面谈人)</Text>
  905. </Text>
  906. {
  907. dtails.myUser == 1 &&
  908. <View className="up"
  909. onClick={e => {
  910. e.stopPropagation()
  911. this.getUserList();
  912. this.setState({
  913. isAdd: true,
  914. obj: {
  915. uid: this.$instance.router.params.id,
  916. name: "",
  917. position: "",
  918. department: "",
  919. mobile: "",
  920. }
  921. })
  922. }}
  923. >新增</View>
  924. }
  925. </View>
  926. {
  927. !!dtails.contactList && dtails.contactList.map((v, k) =>
  928. <View className="val" key={k}>{v.name}&nbsp;&nbsp;{v.position}&nbsp;&nbsp;{v.department}&nbsp;&nbsp;{v.mobile}</View>
  929. )
  930. }
  931. <View className="tit" style={{marginTop: '60rpx'}}>
  932. 已面谈项目
  933. {/* {
  934. dtails.myUser == 1 &&
  935. <View className="up"
  936. onClick={e => {
  937. e.stopPropagation()
  938. this.getBusinessProjectByName("")
  939. this.setState({
  940. upType: 5,
  941. isOpened: true,
  942. info: {
  943. uid: this.$instance.router.params.id,
  944. intendedProject: dtails.intendedProject,
  945. },
  946. checkOptions: []
  947. })
  948. }}
  949. >新增</View>
  950. } */}
  951. </View>
  952. <View className="val">{
  953. this.state.projectList.map(item => {
  954. return <View style={{ display: 'flex', alignItems: 'center' }}>
  955. <Text style={{ fontSize: '30rpx' }} style={{marginRight: '10rpx'}}>
  956. { this.renderProjectItemName(item) }
  957. </Text>
  958. {/* <AtIcon value="close" size='15' color="#f00" onClick={() => {this.handleDelProject(item)}} /> */}
  959. </View>
  960. })
  961. }</View>
  962. </View>
  963. :
  964. <View className="first">
  965. <View className="title">企业档案表</View>
  966. <View className="val" style={{ display: 'flex' }}>
  967. 企业所在地省市区:
  968. {/* <Picker
  969. mode='region'
  970. value={this.state.region}
  971. customItem={this.state.customItem}
  972. onChange={this.bindRegionChange.bind(this)}
  973. >
  974. <View className='picker'>
  975. { this.state.region.length ? this.state.region.join('-') : '请选择' }
  976. </View>
  977. </Picker> */}
  978. <View onClick={() => {this.setState({ addressPickerShow: true })}}>
  979. { dtails.locationProvince ? `${dtails.locationProvinceName}-${dtails.locationCityName}-${dtails.locationAreaName}` : '请选择' }
  980. </View>
  981. <AddressPicker
  982. pickerShow={this.state.addressPickerShow}
  983. onHandleToggleShow={this.toggleAddressPicker.bind(this)}
  984. />
  985. </View>
  986. {/* <View className="tit">
  987. 企业面谈思路表
  988. {
  989. dtails.myUser == 1 &&
  990. <View className="up"
  991. onClick={e => {
  992. e.stopPropagation()
  993. this.setState({
  994. upType: 0,
  995. isOpened: true,
  996. info: {
  997. uid: this.$instance.router.params.id,
  998. industry: dtails.industry,
  999. businessScope: dtails.businessScope,
  1000. },
  1001. sector: {
  1002. id: dtails.industry,
  1003. title: dtails.industryName
  1004. }
  1005. })
  1006. }}
  1007. >修改</View>
  1008. }
  1009. </View> */}
  1010. <View className="val" style={{display: 'flex'}}>
  1011. 企业所属行业:
  1012. <View onClick={() => this.handleOpenMultiplePicker('industry')}>
  1013. { this.state.dtails.industryName || '请选择' }
  1014. </View>
  1015. </View>
  1016. <View className="val" style={{display: 'flex', alignItems: 'center'}}>
  1017. 主营产品:
  1018. <View style={{flex: 1}}>
  1019. <AtInput
  1020. value={dtails.businessScope}
  1021. name='businessScope'
  1022. placeholder='可填写多个,用“、”隔开'
  1023. size='mini'
  1024. onChange={value => {
  1025. dtails.businessScope = value;
  1026. this.setState({ dtails })
  1027. }}
  1028. />
  1029. </View>
  1030. </View>
  1031. <View className="val" style={{ display: 'flex', alignItems: 'center' }}>
  1032. 母/子公司数:
  1033. <View style={{width: '120rpx'}}>
  1034. <AtInputNumber
  1035. min={0}
  1036. max={99999}
  1037. value={dtails.companyCount}
  1038. name='companyCount'
  1039. type='number'
  1040. placeholder='请输入数量'
  1041. size='mini'
  1042. onChange={value => {
  1043. dtails.companyCount = value;
  1044. this.setState({ dtails })
  1045. }}
  1046. />
  1047. </View>
  1048. </View>
  1049. <View className="val" style={{ display: 'flex', alignItems: 'center' }}>
  1050. 社保人数:
  1051. <View style={{width: '120rpx'}}>
  1052. <AtInputNumber
  1053. min={0}
  1054. max={99999}
  1055. value={dtails.socialSecurityCount}
  1056. name='socialSecurityCount'
  1057. type='number'
  1058. placeholder='请输入数量'
  1059. size='mini'
  1060. onChange={value => {
  1061. dtails.socialSecurityCount = value;
  1062. this.setState({ dtails })
  1063. }}
  1064. />
  1065. </View>
  1066. </View>
  1067. <View className="val" style={{ display: 'flex', alignItems: 'center' }}>
  1068. 对外投资控股的企业数:
  1069. <View style={{width: '120rpx'}}>
  1070. <AtInputNumber
  1071. min={0}
  1072. max={99999}
  1073. value={dtails.externalInvestCount}
  1074. name='externalInvestCount'
  1075. type='number'
  1076. placeholder='请输入数量'
  1077. size='mini'
  1078. onChange={value => {
  1079. dtails.externalInvestCount = value;
  1080. this.setState({ dtails })
  1081. }}
  1082. />
  1083. </View>
  1084. </View>
  1085. <View className="val" style={{display: 'flex'}}>
  1086. 对外投资控股的行业:
  1087. <View onClick={() => this.handleOpenMultiplePicker('externalInvestIndustry')}>
  1088. { this.state.dtails.externalInvestIndustryName || '请选择' }
  1089. </View>
  1090. </View>
  1091. <View className="val" style={{display: 'flex'}}>
  1092. 对外投资控股的企业名称:
  1093. <View onClick={() => this.addItemDialog('externalInvestName')}>
  1094. { this.state.dtails.externalInvestName || '点击新增' }
  1095. </View>
  1096. </View>
  1097. <View className="tit">
  1098. <Text>
  1099. 主要面谈联系信息
  1100. {/* <Text className="txt">(面谈人)</Text> */}
  1101. </Text>
  1102. {
  1103. dtails.myUser == 1 &&
  1104. <View className="up"
  1105. onClick={e => {
  1106. e.stopPropagation()
  1107. this.getUserList();
  1108. this.setState({
  1109. isAdd: true,
  1110. obj: {
  1111. uid: this.$instance.router.params.id,
  1112. name: "",
  1113. position: "",
  1114. department: "",
  1115. mobile: "",
  1116. }
  1117. })
  1118. }}
  1119. >新增</View>
  1120. }
  1121. </View>
  1122. {
  1123. !!dtails.contactList && dtails.contactList.map((v, k) =>
  1124. <View className="val" key={k}>
  1125. {v.name}&nbsp;&nbsp;{v.position}&nbsp;&nbsp;{v.department}&nbsp;&nbsp;{v.mobile}
  1126. {this.state.isMask && <View className="mask"></View>}
  1127. </View>
  1128. )
  1129. }
  1130. <View className="tit">
  1131. 已面谈项目
  1132. {/* {
  1133. dtails.myUser == 1 &&
  1134. <View className="up"
  1135. onClick={e => {
  1136. e.stopPropagation()
  1137. this.getBusinessProjectByName("")
  1138. this.setState({
  1139. upType: 5,
  1140. isOpened: true,
  1141. info: {
  1142. uid: this.$instance.router.params.id,
  1143. intendedProject: dtails.intendedProject,
  1144. },
  1145. checkOptions: []
  1146. })
  1147. }}
  1148. >新增</View>
  1149. } */}
  1150. </View>
  1151. <View className="val">{
  1152. this.state.projectList.map(item => {
  1153. return <View style={{ display: 'flex', alignItems: 'center' }}>
  1154. <Text style={{ fontSize: '30rpx' }} style={{marginRight: '10rpx'}}>
  1155. { this.renderProjectItemName(item) }
  1156. </Text>
  1157. {/* <AtIcon value="close" size='15' color="#f00" onClick={() => {this.handleDelProject(item)}} /> */}
  1158. </View>
  1159. })
  1160. }</View>
  1161. <View style={{marginTop: '60rpx'}}>
  1162. <View className="title">企业情况</View>
  1163. <View className="tit">
  1164. <Text>
  1165. 1.知识产权情况
  1166. {/* <Text className="txt">(专利信息、标准、专利、软著)</Text> */}
  1167. </Text>
  1168. {/* {
  1169. dtails.myUser == 1 &&
  1170. <View className="up"
  1171. onClick={e => {
  1172. e.stopPropagation()
  1173. this.setState({
  1174. upType: 1,
  1175. isOpened: true,
  1176. info: {
  1177. uid: this.$instance.router.params.id,
  1178. id: dtails.id,
  1179. inventionPatentCount: dtails.inventionPatentCount || 0,
  1180. utilityModelCount: dtails.utilityModelCount || 0,
  1181. appearancePatentCount: dtails.appearancePatentCount || 0,
  1182. softwareWorksCount: dtails.softwareWorksCount || 0,
  1183. otherCount: dtails.otherCount || 0,
  1184. }
  1185. })
  1186. }}
  1187. >修改</View>
  1188. } */}
  1189. </View>
  1190. <View className="val">
  1191. 专利&nbsp;<Text className="num">{dtails.patentCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1192. 其中发明专利&nbsp;<Text className="num">{dtails.inventionPatentCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1193. 实用新型&nbsp;<Text className="num">{dtails.utilityModelCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1194. 外观设计&nbsp;<Text className="num">{dtails.appearancePatentCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1195. 软著&nbsp;<Text className="num">{dtails.softwareWorksCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1196. 标准&nbsp;<Text className="num">{dtails.standard == 1 ? '有' : '无'}</Text>&nbsp;&nbsp;&nbsp;
  1197. 其他类型&nbsp;<Text className="num">{dtails.otherCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1198. </View>
  1199. <View className="tit">2.财务数据</View>
  1200. <View className="val" style={{display: 'flex', alignItems: 'center'}}>
  1201. 营收(万元):
  1202. <View style={{width: '120rpx'}}>
  1203. <AtInputNumber
  1204. min={0}
  1205. max={99999}
  1206. value={dtails.financialRevenue}
  1207. name='financialRevenue'
  1208. type='number'
  1209. placeholder='请输入数量'
  1210. size='mini'
  1211. onChange={value => {
  1212. dtails.financialRevenue = value;
  1213. this.setState({ dtails })
  1214. }}
  1215. />
  1216. </View>
  1217. </View>
  1218. <View className="val" style={{display: 'flex', alignItems: 'center'}}>
  1219. 税收(万元):
  1220. <View style={{width: '120rpx'}}>
  1221. <AtInputNumber
  1222. min={0}
  1223. max={99999}
  1224. value={dtails.financialTax}
  1225. name='financialTax'
  1226. type='number'
  1227. placeholder='请输入数量'
  1228. size='mini'
  1229. onChange={value => {
  1230. dtails.financialTax = value;
  1231. this.setState({ dtails })
  1232. }}
  1233. />
  1234. </View>
  1235. </View>
  1236. <View className="val" style={{display: 'flex', alignItems: 'center'}}>
  1237. 资产(万元):
  1238. <View style={{width: '120rpx'}}>
  1239. <AtInputNumber
  1240. min={0}
  1241. max={99999}
  1242. value={dtails.financialProperty}
  1243. name='financialProperty'
  1244. type='number'
  1245. placeholder='请输入数量'
  1246. size='mini'
  1247. onChange={value => {
  1248. dtails.financialProperty = value;
  1249. this.setState({ dtails })
  1250. }}
  1251. />
  1252. </View>
  1253. </View>
  1254. <View className="val" style={{display: 'flex', alignItems: 'center'}}>
  1255. 研发费用(万元):
  1256. <View style={{width: '120rpx'}}>
  1257. <AtInputNumber
  1258. min={0}
  1259. max={99999}
  1260. value={dtails.financialRd}
  1261. name='financialRd'
  1262. type='number'
  1263. placeholder='请输入数量'
  1264. size='mini'
  1265. onChange={value => {
  1266. dtails.financialRd = value;
  1267. this.setState({ dtails })
  1268. }}
  1269. />
  1270. </View>
  1271. </View>
  1272. </View>
  1273. </View>
  1274. }
  1275. <View style={{ marginTop: '24rpx'}}>
  1276. <AtButton type="primary" onClick={this.onSaveAllData.bind(this)}>保存</AtButton>
  1277. </View>
  1278. {/* {
  1279. dtails.newChannel == 1
  1280. ?
  1281. <View className="two">
  1282. <View className="title">面谈前渠道情况</View>
  1283. <View className="tit">
  1284. <Text>
  1285. 面谈项目
  1286. </Text>
  1287. {
  1288. dtails.myUser == 1 &&
  1289. <View className="up"
  1290. onClick={e => {
  1291. e.stopPropagation()
  1292. this.getBusinessProjectByName("")
  1293. this.setState({
  1294. upType: 5,
  1295. isOpened: true,
  1296. info: {
  1297. uid: this.$instance.router.params.id,
  1298. intendedProject: dtails.intendedProject,
  1299. },
  1300. checkOptions: !!dtails.intendedProject ? dtails.intendedProject.split(",") : []
  1301. })
  1302. }}
  1303. >修改</View>
  1304. }
  1305. </View>
  1306. <View className="val">{dtails.intendedProject || "无"}</View>
  1307. <View className="tit">
  1308. <Text>
  1309. 面谈思路及目的
  1310. </Text>
  1311. {
  1312. dtails.myUser == 1 &&
  1313. <View className="up"
  1314. onClick={e => {
  1315. e.stopPropagation()
  1316. this.setState({
  1317. upType: 4,
  1318. isOpened: true,
  1319. info: {
  1320. uid: this.$instance.router.params.id,
  1321. id: dtails.id,
  1322. interviewIdeas: dtails.interviewIdeas,
  1323. }
  1324. })
  1325. }}
  1326. >修改</View>
  1327. }
  1328. </View>
  1329. <View className="val">{dtails.interviewIdeas || "无"}</View>
  1330. <View className="tit">
  1331. <Text>
  1332. 我方主要面谈人及分工
  1333. </Text>
  1334. {
  1335. dtails.myUser == 1 &&
  1336. <View className="up"
  1337. onClick={e => {
  1338. e.stopPropagation()
  1339. this.setState({
  1340. upType: 6,
  1341. isOpened: true,
  1342. info: {
  1343. uid: this.$instance.router.params.id,
  1344. id: dtails.id,
  1345. interviewDistribution: dtails.interviewDistribution,
  1346. }
  1347. })
  1348. }}
  1349. >修改</View>
  1350. }
  1351. </View>
  1352. <View className="val">{dtails.interviewDistribution || "无"}</View>
  1353. </View>
  1354. :
  1355. <View className="two">
  1356. <View className="title">面谈企业情况</View>
  1357. <AtInput
  1358. name='mzgssl'
  1359. title='母/子公司数'
  1360. type='number'
  1361. placeholder='请输入数量'
  1362. />
  1363. <AtInput
  1364. name='sbrs'
  1365. title=''
  1366. type='number'
  1367. placeholder='请输入数量'
  1368. size='mini'
  1369. />
  1370. <AtInput
  1371. name='qyes'
  1372. title='对外投资控股的企业数'
  1373. type='number'
  1374. placeholder='请输入数量'
  1375. />
  1376. <View className="tit">
  1377. <Text>
  1378. 知识产权情况
  1379. <Text className="txt">(专利信息、标准、专利、软著)</Text>
  1380. </Text>
  1381. {
  1382. dtails.myUser == 1 &&
  1383. <View className="up"
  1384. onClick={e => {
  1385. e.stopPropagation()
  1386. this.setState({
  1387. upType: 1,
  1388. isOpened: true,
  1389. info: {
  1390. uid: this.$instance.router.params.id,
  1391. id: dtails.id,
  1392. inventionPatentCount: dtails.inventionPatentCount || 0,
  1393. utilityModelCount: dtails.utilityModelCount || 0,
  1394. appearancePatentCount: dtails.appearancePatentCount || 0,
  1395. softwareWorksCount: dtails.softwareWorksCount || 0,
  1396. otherCount: dtails.otherCount || 0,
  1397. }
  1398. })
  1399. }}
  1400. >修改</View>
  1401. }
  1402. </View>
  1403. <View className="val">
  1404. 专利&nbsp;<Text className="num">{dtails.patentCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1405. 其中发明专利&nbsp;<Text className="num">{dtails.inventionPatentCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1406. 实用新型&nbsp;<Text className="num">{dtails.utilityModelCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1407. 外观设计&nbsp;<Text className="num">{dtails.appearancePatentCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1408. 软著&nbsp;<Text className="num">{dtails.softwareWorksCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1409. 标准&nbsp;<Text className="num">{'有'}</Text>&nbsp;&nbsp;&nbsp;
  1410. 其他类型&nbsp;<Text className="num">{dtails.otherCount || 0}</Text>&nbsp;&nbsp;&nbsp;
  1411. </View>
  1412. <View className="tit">
  1413. <Text>
  1414. 财务数据
  1415. <Text className="txt">(包括营收、税收、资产、研发费用等)</Text>
  1416. </Text>
  1417. {
  1418. dtails.myUser == 1 &&
  1419. <View className="up"
  1420. onClick={e => {
  1421. e.stopPropagation()
  1422. this.setState({
  1423. upType: 2,
  1424. isOpened: true,
  1425. info: {
  1426. uid: this.$instance.router.params.id,
  1427. id: dtails.id,
  1428. financialData: dtails.financialData,
  1429. }
  1430. })
  1431. }}
  1432. >修改</View>
  1433. }
  1434. </View>
  1435. <View className="val">{dtails.financialData || "无"}</View>
  1436. <View className="tit">
  1437. <Text>
  1438. 前期沟通
  1439. <Text className="txt">(客户的难处、需求)</Text>
  1440. </Text>
  1441. {
  1442. dtails.myUser == 1 &&
  1443. <View className="up"
  1444. onClick={e => {
  1445. e.stopPropagation()
  1446. this.setState({
  1447. upType: 3,
  1448. isOpened: true,
  1449. info: {
  1450. uid: this.$instance.router.params.id,
  1451. id: dtails.id,
  1452. earlyCommunication: dtails.earlyCommunication,
  1453. }
  1454. })
  1455. }}
  1456. >修改</View>
  1457. }
  1458. </View>
  1459. <View className="val">{dtails.earlyCommunication || "无"}</View>
  1460. <View className="tit">
  1461. <Text>
  1462. 面谈思路及目的
  1463. </Text>
  1464. {
  1465. dtails.myUser == 1 &&
  1466. <View className="up"
  1467. onClick={e => {
  1468. e.stopPropagation()
  1469. this.setState({
  1470. upType: 4,
  1471. isOpened: true,
  1472. info: {
  1473. uid: this.$instance.router.params.id,
  1474. id: dtails.id,
  1475. interviewIdeas: dtails.interviewIdeas,
  1476. }
  1477. })
  1478. }}
  1479. >修改</View>
  1480. }
  1481. </View>
  1482. <View className="val">{dtails.interviewIdeas || "无"}</View>
  1483. </View>
  1484. } */}
  1485. </View>
  1486. )}
  1487. </View>
  1488. <AtModal
  1489. isOpened={this.state.isOpened}
  1490. onClose={() => {
  1491. this.setState({
  1492. isOpened: false,
  1493. checkProject: [],
  1494. checkOptions: []
  1495. })
  1496. }}
  1497. >
  1498. <AtModalHeader>信息修改</AtModalHeader>
  1499. <AtModalContent>
  1500. {
  1501. upType == 0 &&
  1502. <View>
  1503. <View className='selectTitle'>企业行业</View>
  1504. <Picker
  1505. value={this.state.sector.id}
  1506. range={industry} rangeKey='title' mode='selector'
  1507. onChange={(e) => {
  1508. this.setState({
  1509. sector: industry[e.detail.value],
  1510. info: Object.assign(info, {
  1511. industry: industry[e.detail.value].id,
  1512. })
  1513. })
  1514. }}>
  1515. <View style={{ marginBottom: "10px", color: !this.state.sector.title && "#CCCCCC" }}>
  1516. {!this.state.sector.title ? "请选择" : this.state.sector.title}
  1517. </View>
  1518. </Picker>
  1519. <View className='selectTitle'>企业主营产品/服务</View>
  1520. <Input
  1521. // name='value'
  1522. // title='企业主营产品/服务'
  1523. type='text'
  1524. placeholder='请用,符号隔开关键字'
  1525. value={info.businessScope}
  1526. onInput={e => {
  1527. this.setState({
  1528. info: Object.assign(info, {
  1529. businessScope: e.detail.value,
  1530. })
  1531. })
  1532. }}
  1533. />
  1534. </View>
  1535. }
  1536. {
  1537. upType == 1 &&
  1538. <View>
  1539. <AtInput
  1540. name='inventionPatentCount'
  1541. title='发明专利'
  1542. type='number'
  1543. value={info.inventionPatentCount}
  1544. onChange={e => {
  1545. this.setState({
  1546. info: Object.assign(info, {
  1547. inventionPatentCount: e,
  1548. })
  1549. })
  1550. }}
  1551. />
  1552. <AtInput
  1553. name='utilityModelCount'
  1554. title='实用新型'
  1555. type='number'
  1556. value={info.utilityModelCount}
  1557. onChange={e => {
  1558. this.setState({
  1559. info: Object.assign(info, {
  1560. utilityModelCount: e,
  1561. })
  1562. })
  1563. }}
  1564. />
  1565. <AtInput
  1566. name='appearancePatentCount'
  1567. title='外观专利'
  1568. type='number'
  1569. value={info.appearancePatentCount}
  1570. onChange={e => {
  1571. this.setState({
  1572. info: Object.assign(info, {
  1573. appearancePatentCount: e,
  1574. })
  1575. })
  1576. }}
  1577. />
  1578. <AtInput
  1579. name='softwareWorksCount'
  1580. title='软著'
  1581. type='number'
  1582. value={info.softwareWorksCount}
  1583. onChange={e => {
  1584. this.setState({
  1585. info: Object.assign(info, {
  1586. softwareWorksCount: e,
  1587. })
  1588. })
  1589. }}
  1590. />
  1591. <View style={{display: 'flex', margin: '12rpx 0'}}>
  1592. <Text style={{ fontSize: '32rpx', marginRight: '16rpx', width: '172rpx' }}>标准</Text>
  1593. <RadioGroup title="标准" onChange={e => {
  1594. dtails.standard = Number(e.target.value);
  1595. this.setState({ dtails });
  1596. }}>
  1597. <Label className='radio-list__label'>
  1598. <Radio className='radio-list__radio' value={1} checked={dtails.standard == 1}>有</Radio>
  1599. </Label>
  1600. <Label className='radio-list__label'>
  1601. <Radio className='radio-list__radio' value={0} checked={!dtails.standard}>无</Radio>
  1602. </Label>
  1603. </RadioGroup>
  1604. </View>
  1605. <AtInput
  1606. name='otherCount'
  1607. title='其他'
  1608. type='number'
  1609. value={dtails.otherCount}
  1610. onChange={e => {
  1611. this.setState({
  1612. info: Object.assign(dtails, {
  1613. otherCount: e,
  1614. })
  1615. })
  1616. }}
  1617. />
  1618. </View>
  1619. }
  1620. {
  1621. upType == 2 &&
  1622. <View>
  1623. <View className='selectTitle'>财务数据</View>
  1624. <AtTextarea
  1625. value={info.financialData || ""}
  1626. onChange={e => {
  1627. this.setState({
  1628. info: Object.assign(info, {
  1629. financialData: e,
  1630. }),
  1631. })
  1632. }}
  1633. maxLength={200}
  1634. placeholder='请填写财务数据~'
  1635. />
  1636. </View>
  1637. }
  1638. {
  1639. upType == 3 &&
  1640. <View>
  1641. <View className='selectTitle'>前期沟通</View>
  1642. <AtTextarea
  1643. value={info.earlyCommunication || ""}
  1644. onChange={e => {
  1645. this.setState({
  1646. info: Object.assign(info, {
  1647. earlyCommunication: e,
  1648. }),
  1649. })
  1650. }}
  1651. maxLength={200}
  1652. placeholder='请填写前期沟通~'
  1653. />
  1654. </View>
  1655. }
  1656. {
  1657. upType == 4 &&
  1658. <View>
  1659. <View className='selectTitle'>面谈思路及目的</View>
  1660. <AtTextarea
  1661. value={info.interviewIdeas || ""}
  1662. onChange={e => {
  1663. this.setState({
  1664. info: Object.assign(info, {
  1665. interviewIdeas: e,
  1666. }),
  1667. })
  1668. }}
  1669. maxLength={200}
  1670. placeholder='请填写面谈思路及目的~'
  1671. />
  1672. </View>
  1673. }
  1674. {
  1675. upType == 5 &&
  1676. <View>
  1677. <AtSearchBar
  1678. placeholder="请输入项目名称"
  1679. showActionButton
  1680. value={this.state.value}
  1681. onChange={this.onSearchChange}
  1682. onActionClick={() => {
  1683. this.getBusinessProjectByName(this.state.value);
  1684. }}
  1685. onClear={() => {
  1686. this.setState({
  1687. value: "",
  1688. }, () => { this.getBusinessProjectByName(this.state.value) });
  1689. }}
  1690. />
  1691. {/* {
  1692. this.state.checkOptions.length > 0 &&
  1693. <View className="selproject">
  1694. 已选择:
  1695. {
  1696. this.state.checkOptions.map((v, i) =>
  1697. <View className="selptxt" key={i}
  1698. onClick={() => {
  1699. let list = this.state.checkOptions
  1700. for (var j = 0; j < list.length; j++) {
  1701. if (list[j] == v) {
  1702. list.splice(j, 1)
  1703. this.setState({
  1704. checkOptions: list,
  1705. info: Object.assign(info, {
  1706. intendedProject: list.toString(),
  1707. }),
  1708. })
  1709. }
  1710. }
  1711. }}
  1712. >{v}&nbsp;<AtIcon className='atIcon' value='close-circle' size='12' color='#fff' /></View>
  1713. )
  1714. }
  1715. </View>
  1716. } */}
  1717. {/* <AtCheckbox
  1718. options={this.state.options}
  1719. selectedList={this.state.checkOptions}
  1720. onChange={e => {
  1721. this.setState({
  1722. checkOptions: e,
  1723. info: Object.assign(info, {
  1724. intendedProject: e.toString(),
  1725. }),
  1726. })
  1727. }}
  1728. /> */}
  1729. {/* 高新项目 */}
  1730. { this.state.checkProject.length && this.state.checkProject[0].cSort == 9 ? <View style={{backgroundColor: '#eee', padding: '20rpx 24rpx', margin: '24rpx'}}>
  1731. <RadioGroup onChange={e => {
  1732. const { info } = this.state;
  1733. info.examineStatus = e.target.value;
  1734. this.setState({ info });
  1735. }}>
  1736. <Label className='radio-list__label'>
  1737. <Radio className='radio-list__radio' checked={info.examineStatus == 1} value={1}>初次审核</Radio>
  1738. </Label>
  1739. <Label className='radio-list__label'>
  1740. <Radio className='radio-list__radio' checked={info.examineStatus == 2} value={2}>复审</Radio>
  1741. </Label>
  1742. </RadioGroup>
  1743. { this.state.info.examineStatus == 2 && <View>
  1744. <Text>复审年份:</Text>
  1745. <Text style={{textDecoration: 'underline'}} onClick={() => this.handleOpenMultiplePicker('examineStatusOther')}>{ info.examineStatusOther || '请选择' }</Text>
  1746. </View> }
  1747. </View> : null}
  1748. {/* 会员项目 */}
  1749. { this.state.checkProject.length && this.state.checkProject[0].cSort == 6 ? <View style={{backgroundColor: '#eee', padding: '20rpx 24rpx', margin: '24rpx'}}>
  1750. <RadioGroup onChange={e => {
  1751. const { info } = this.state;
  1752. info.buyStatus = e.target.value;
  1753. this.setState({ info });
  1754. }}>
  1755. <Label className='radio-list__label'>
  1756. <Radio className='radio-list__radio' checked={info.buyStatus == 1} value={1}>新购</Radio>
  1757. </Label>
  1758. <Label className='radio-list__label'>
  1759. <Radio className='radio-list__radio' checked={info.buyStatus == 2} value={2}>复购/复审</Radio>
  1760. </Label>
  1761. </RadioGroup>
  1762. { this.state.info.buyStatus == 2 && <View>
  1763. <Text>复购/复审年份:</Text>
  1764. <Text style={{textDecoration: 'underline'}} onClick={() => this.handleOpenMultiplePicker('buyStatusOther')}>{ info.buyStatusOther || '请选择' }</Text>
  1765. </View> }
  1766. </View> : null}
  1767. { this.state.isOpened && <RadioGroup onChange={e => {
  1768. let currProject = this.state.allProjectList.find(item => item.id == e.target.value);
  1769. this.setState({
  1770. checkOptions: [e.target.value],
  1771. checkProject: [currProject]
  1772. });
  1773. }}>
  1774. {this.state.options.map((item, i) => {
  1775. return (
  1776. <View>
  1777. <Label className='radio-list__label' for={i} key={i}>
  1778. <Radio className='radio-list__radio' value={item.value} checked={this.state.checkOptions.indexOf(item.value) > -1}>{item.label}</Radio>
  1779. </Label>
  1780. </View>
  1781. )
  1782. })}
  1783. </RadioGroup>}
  1784. </View>
  1785. }
  1786. {
  1787. upType == 6 &&
  1788. <View>
  1789. <View className='selectTitle'>我方主要面谈人及分工</View>
  1790. <AtTextarea
  1791. value={info.interviewDistribution || ""}
  1792. onChange={e => {
  1793. this.setState({
  1794. info: Object.assign(info, {
  1795. interviewDistribution: e,
  1796. }),
  1797. })
  1798. }}
  1799. maxLength={200}
  1800. placeholder='请填写我方主要面谈人及分工~'
  1801. />
  1802. </View>
  1803. }
  1804. {
  1805. upType == 7 &&
  1806. <View>
  1807. <View className='selectTitle' style={{ height: "30px" }}>
  1808. 渠道类别:
  1809. <Picker
  1810. value={this.state.channe.id}
  1811. range={channelTypeList} rangeKey='title' mode='selector'
  1812. onChange={(e) => {
  1813. this.setState({
  1814. channe: channelTypeList[e.detail.value],
  1815. info: Object.assign(info, {
  1816. channelType: channelTypeList[e.detail.value].id,
  1817. })
  1818. })
  1819. }}>
  1820. <View style={{ marginBottom: "10px", width: "160px", color: !this.state.channe.title && "#CCCCCC" }}>
  1821. {!this.state.channe.title ? "请选择" : this.state.channe.title}
  1822. </View>
  1823. </Picker>
  1824. </View>
  1825. <View className='selectTitle' style={{ height: "30px" }}>
  1826. 覆盖企业数:
  1827. <Input
  1828. style={{ width: "50%" }}
  1829. type='number'
  1830. placeholder='请填写个数'
  1831. value={info.enterpriseCount}
  1832. onInput={e => {
  1833. this.setState({
  1834. info: Object.assign(info, {
  1835. enterpriseCount: e.detail.value,
  1836. })
  1837. })
  1838. }}
  1839. />
  1840. </View>
  1841. <View className='selectTitle' >渠道考核指标</View>
  1842. <AtTextarea
  1843. value={info.channelIndicators || ""}
  1844. onChange={e => {
  1845. this.setState({
  1846. info: Object.assign(info, {
  1847. channelIndicators: e,
  1848. }),
  1849. })
  1850. }}
  1851. maxLength={200}
  1852. placeholder='请填写渠道考核指标~'
  1853. />
  1854. </View>
  1855. }
  1856. </AtModalContent>
  1857. <AtModalAction>
  1858. <Button type='secondary' onClick={() => {
  1859. this.setState({
  1860. isOpened: false,
  1861. checkOptions: [],
  1862. checkProject: []
  1863. })
  1864. }}>取消</Button>
  1865. <Button type='primary' onClick={this.update}>确定修改</Button>
  1866. </AtModalAction>
  1867. </AtModal>
  1868. <AtModal
  1869. isOpened={this.state.isAdd}
  1870. onClose={() => {
  1871. this.setState({
  1872. isAdd: false
  1873. })
  1874. }}
  1875. >
  1876. <AtModalHeader>联系人</AtModalHeader>
  1877. <AtModalContent>
  1878. {
  1879. userList.map((item) =>
  1880. <View key={item.id} className="additem">
  1881. <Text className="txt">{item.name || " "}</Text>
  1882. <Text className="txt">{item.position || " "}</Text>
  1883. <Text className="txt">{item.department || " "}</Text>
  1884. <Text className="mobile">{item.mobile || " "}</Text>
  1885. <View
  1886. className={item.major == 1 ? "bts" : "bt"}
  1887. onClick={() => {
  1888. item.major != 1 && this.updateMainContact(item.id)
  1889. }}
  1890. >
  1891. {item.major == 1 ? "已选" : "选择"}
  1892. </View>
  1893. </View>
  1894. )
  1895. }
  1896. <AtInput
  1897. required
  1898. name='name'
  1899. title='姓名'
  1900. type='text'
  1901. placeholder='请填写姓名'
  1902. value={obj.name}
  1903. onChange={e => {
  1904. this.setState({
  1905. obj: Object.assign(obj, {
  1906. name: e,
  1907. })
  1908. })
  1909. }}
  1910. />
  1911. <AtInput
  1912. required
  1913. name='position'
  1914. title='职位'
  1915. type='text'
  1916. placeholder='请填写职位'
  1917. value={obj.position}
  1918. onChange={e => {
  1919. this.setState({
  1920. obj: Object.assign(obj, {
  1921. position: e,
  1922. })
  1923. })
  1924. }}
  1925. />
  1926. <AtInput
  1927. required
  1928. name='department'
  1929. title='部门'
  1930. type='text'
  1931. placeholder='请填写部门'
  1932. value={obj.department}
  1933. onChange={e => {
  1934. this.setState({
  1935. obj: Object.assign(obj, {
  1936. department: e,
  1937. })
  1938. })
  1939. }}
  1940. />
  1941. <AtInput
  1942. required
  1943. name='mobile'
  1944. title='手机'
  1945. type='phone'
  1946. placeholder='请填写手机号'
  1947. value={obj.mobile}
  1948. onChange={e => {
  1949. this.setState({
  1950. obj: Object.assign(obj, {
  1951. mobile: e,
  1952. })
  1953. })
  1954. }}
  1955. />
  1956. </AtModalContent>
  1957. <AtModalAction>
  1958. <Button type='secondary'
  1959. onClick={() => {
  1960. this.setState({
  1961. isAdd: false,
  1962. }, () => {
  1963. this.queryByUidAll()
  1964. })
  1965. }}>取消</Button>
  1966. <Button type='primary' onClick={this.add}>保存</Button>
  1967. </AtModalAction>
  1968. </AtModal>
  1969. <AtModal
  1970. isOpened={this.state.addItemShow}
  1971. onClose={this.handleCloseAddItemDialog}
  1972. >
  1973. <AtModalHeader>新增对外投资控股的企业</AtModalHeader>
  1974. <AtModalContent>
  1975. <AtInput
  1976. required
  1977. name='mobile'
  1978. title='企业名称'
  1979. placeholder='请输入企业名称'
  1980. value={this.state.addItemInputVal}
  1981. onChange={value => this.setState({ addItemInputVal: value })}
  1982. />
  1983. </AtModalContent>
  1984. <AtModalAction>
  1985. <Button type='secondary' onClick={this.handleCloseAddItemDialog}>取消</Button>
  1986. <Button type='primary' onClick={this.handleAddItemSave}>保存</Button>
  1987. </AtModalAction>
  1988. </AtModal>
  1989. {/* 新增项目 */}
  1990. <AtModal
  1991. isOpened={this.state.addProjectShow}
  1992. onClose={this.handleCloseAddItemDialog}
  1993. >
  1994. <AtModalHeader>新增对外投资控股的企业</AtModalHeader>
  1995. <AtModalContent>
  1996. <AtInput
  1997. required
  1998. name='mobile'
  1999. title='企业名称'
  2000. placeholder='请输入企业名称'
  2001. value={this.state.addItemInputVal}
  2002. onChange={value => this.setState({ addItemInputVal: value })}
  2003. />
  2004. </AtModalContent>
  2005. <AtModalAction>
  2006. <Button type='secondary' onClick={this.handleCloseAddItemDialog}>取消</Button>
  2007. <Button type='primary' onClick={this.handleAddItemSave}>保存</Button>
  2008. </AtModalAction>
  2009. </AtModal>
  2010. {/* 多选框 */}
  2011. <CheckboxPicker
  2012. isOpened={this.state.multiplePickerShow}
  2013. title={this.state.multiplePickerTitle}
  2014. options={this.state.multiplePickerOptions}
  2015. checkedList={this.state.multiplePickerCheckedList}
  2016. onClose={() => {this.setState({multiplePickerShow: false, multiplePickerCheckedList: []})}}
  2017. onConfirm={this.handleMultipleConfirm}
  2018. ></CheckboxPicker>
  2019. {/* 沟通情况历史记录 */}
  2020. <InteractList
  2021. isOpened={this.state.interactShow}
  2022. list={this.state.interactList}
  2023. type={this.state.interactShowType}
  2024. title={this.state.interactTitle}
  2025. onClose={() => {
  2026. this.setState({ interactShow: false })
  2027. }}
  2028. />
  2029. </View>
  2030. );
  2031. }
  2032. }
  2033. export default CustomerProfile;