1
0

customfield.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. // miniprogram/customfield/customfield.js
  2. const utils = require("../../utils/http");
  3. const app = getApp();
  4. Component({
  5. /**
  6. * 组件的属性列表
  7. */
  8. properties: {
  9. arrField: Array,
  10. nowcid: String | Number
  11. },
  12. /**
  13. * 组件的初始数据
  14. */
  15. data: {
  16. showSelect: true,
  17. showlive1: false,
  18. showlive2: false,
  19. showlive3: false,
  20. multiple: false,
  21. areaList: "",
  22. personame: "",
  23. phonenum: "",
  24. level: "",
  25. sourcetext: "",
  26. source: "",
  27. sex: "男",
  28. curItem: {},
  29. extarr: {},
  30. crmvalarr: [],
  31. communityarr:null,
  32. },
  33. lifetimes: {
  34. attached: function () {
  35. // 在组件实例进入页面节点树时执行
  36. },
  37. detached: function () {
  38. // 在组件实例被从页面节点树移除时执行
  39. },
  40. },
  41. /**
  42. * 组件的方法列表
  43. */
  44. methods: {
  45. selectGrade: function (e) {
  46. let type = e.currentTarget.dataset.type;
  47. this.setData({
  48. level: type
  49. })
  50. },
  51. handleCheckbox: function (e) {
  52. let item = e.currentTarget.dataset.item;
  53. this.data.extarr[item.id].showflag = !this.data.extarr[item.id].showflag;
  54. this.setData({
  55. extarr: this.data.extarr
  56. })
  57. },
  58. checkboxItem: function (e) {
  59. let obj = e.currentTarget.dataset;
  60. this.data.extarr[obj.fitem.id].showflag = false;
  61. let index = this.data.extarr[obj.fitem.id].value.indexOf(obj.item.id);
  62. if (index > -1) {
  63. this.data.crmvalarr[obj.index].select[obj.idx].selected = false;
  64. this.data.extarr[obj.fitem.id].keytext.splice(index, 1);
  65. this.data.extarr[obj.fitem.id].value.splice(index, 1);
  66. } else {
  67. this.data.crmvalarr[obj.index].select[obj.idx].selected = true;
  68. this.data.extarr[obj.fitem.id].keytext.push(obj.item.name);
  69. this.data.extarr[obj.fitem.id].value.push(obj.item.id);
  70. }
  71. if (obj.fitem.keyname == 'live_broadcast') {
  72. let liveText = this.data.extarr[obj.fitem.id].keytext.join('');
  73. this.setData({
  74. showlive1: liveText.indexOf("业务直播") >= 0 ? true : false,
  75. showlive2: liveText.indexOf("设计直播") >= 0 ? true : false,
  76. showlive3: liveText.indexOf("一对多直播") >= 0 ? true : false,
  77. })
  78. }
  79. this.setData({
  80. crmvalarr: this.data.crmvalarr,
  81. extarr: this.data.extarr
  82. })
  83. },
  84. handleRadioCheck: function (e) {
  85. let item = e.currentTarget.dataset.item;
  86. this.data.extarr[item.id].showflag = !this.data.extarr[item.id].showflag;
  87. this.setData({
  88. extarr: this.data.extarr
  89. })
  90. },
  91. radioSelectItem: function (e) {
  92. let obj = e.currentTarget.dataset;
  93. if (obj.fitem.keyname == 'source_id') {
  94. this.data.extarr[obj.fitem.id].showflag = false;
  95. this.setData({
  96. source: obj.item.id,
  97. sourcetext: obj.item.name
  98. })
  99. } else {
  100. this.data.extarr[obj.fitem.id].showflag = false;
  101. this.data.extarr[obj.fitem.id].keytext = obj.item.name;
  102. this.data.extarr[obj.fitem.id].value = obj.item.id;
  103. this.setData({
  104. extarr: this.data.extarr
  105. })
  106. }
  107. },
  108. radioSexChange: function (e) {
  109. this.setData({
  110. sex: e.detail.value
  111. })
  112. },
  113. radioOtherChange: function (e) {
  114. let item = e.currentTarget.dataset.item;
  115. this.data.extarr[item.id].value = e.detail.value;
  116. this.setData({
  117. extarr: this.data.extarr
  118. })
  119. },
  120. getNumberInput: function (e) {
  121. let item = e.currentTarget.dataset.item;
  122. let val = e.detail.value;
  123. this.data.extarr[item.id].value = val;
  124. this.setData({
  125. extarr: this.data.extarr
  126. })
  127. },
  128. getPhoneInput: function (e) {
  129. let val = e.detail.value;
  130. this.setData({
  131. phonenum: val
  132. })
  133. },
  134. getNameInput: function (e) {
  135. let val = e.detail.value;
  136. this.setData({
  137. personame: val
  138. })
  139. },
  140. getTextInput: function (e) {
  141. let item = e.currentTarget.dataset.item;
  142. let val = e.detail.value;
  143. this.data.extarr[item.id].value = val;
  144. this.setData({
  145. extarr: this.data.extarr
  146. })
  147. if(item.keyname == 'community_name'){
  148. this.communityfun(val);
  149. }
  150. },
  151. communityfun(text){
  152. const that=this;
  153. utils.$post({
  154. url: app.globalData.webUrl + 'api/crm_customer/getCommunity',
  155. header: {
  156. 'Authorization': 'bearer ' + app.globalData.token
  157. },
  158. data: {
  159. name: text
  160. },
  161. success: function (res) {
  162. if (res.data.code == 0) {
  163. that.setData({
  164. communityarr:res.data.data
  165. })
  166. }
  167. }
  168. })
  169. },
  170. setcommunitytap(e){
  171. let obj = e.currentTarget.dataset.item;
  172. let extarr=this.data.extarr;
  173. for(let i=0;i<this.data.crmvalarr.length;i++){
  174. if (this.data.crmvalarr[i].keyname == 'community_name') {
  175. extarr[this.data.crmvalarr[i].id].value = obj.name;
  176. }
  177. if (this.data.crmvalarr[i].keyname == 'house_delivery_time') {
  178. extarr[this.data.crmvalarr[i].id].value = obj.duetime;
  179. }
  180. }
  181. this.setData({
  182. extarr:extarr,
  183. communityarr:null,
  184. })
  185. },
  186. blurcommunitytap(){
  187. this.setData({
  188. communityarr:null
  189. })
  190. },
  191. bindDateChange: function (e) {
  192. let item = e.currentTarget.dataset.item;
  193. let val = e.detail.value;
  194. this.data.extarr[item.id].value = val;
  195. this.setData({
  196. extarr: this.data.extarr
  197. })
  198. },
  199. showSelectPerson: function (e) {
  200. let item = e.currentTarget.dataset.item;
  201. if (item.keyname == 'live_broadcast_business') {
  202. this.setData({
  203. curItem: item,
  204. showSelect: false,
  205. multiple: false
  206. })
  207. } else if (item.keyname == 'live_broadcast_design') {
  208. this.setData({
  209. curItem: item,
  210. showSelect: false,
  211. multiple: false
  212. })
  213. } else {
  214. this.setData({
  215. curItem: item,
  216. showSelect: false,
  217. multiple: true
  218. })
  219. }
  220. },
  221. closeDialog: function (e) {
  222. this.setData({
  223. showSelect: true
  224. })
  225. },
  226. setCurrentPerson: function (e) {
  227. if (this.data.multiple) {
  228. this.data.extarr[this.data.curItem.id].value = e.detail.map(v => v.name).join(',');
  229. this.setData({
  230. showSelect: true,
  231. extarr: this.data.extarr
  232. })
  233. } else {
  234. this.data.extarr[this.data.curItem.id].value = e.detail.name;
  235. this.setData({
  236. showSelect: true,
  237. extarr: this.data.extarr
  238. })
  239. }
  240. },
  241. chooseImage: function (e) {
  242. let that = this;
  243. let item = e.currentTarget.dataset.item;
  244. wx.chooseMedia({
  245. count: 9,
  246. mediaType: ["image"],
  247. sourceType: ["album", "camera"],
  248. success: function (res) {
  249. if (res.errMsg == 'chooseMedia:ok') {
  250. let imageArr = res.tempFiles;
  251. that.ossuploadimg(imageArr, item);
  252. }
  253. }
  254. })
  255. },
  256. ossuploadimg: function (imageArr, item) {
  257. let that = this;
  258. var arr = [];
  259. for (let i = 0; i < imageArr.length; i++) {
  260. // 随机生成文件名称
  261. var fileRandName = Date.now() + "" + parseInt(Math.random() * 10000) + i;
  262. var imgName = fileRandName + '.' + 'png';
  263. var date = new Date();
  264. var time = date.getFullYear() + '' + (date.getMonth() * 1 + 1) + '' + date.getDate();
  265. var imgstr = 'crm/' + time + '/' + imgName;
  266. wx.uploadFile({
  267. url: 'https://o.nczyzs.com',
  268. filePath: imageArr[i].tempFilePath,
  269. name: 'file',
  270. formData: {
  271. key: 'crm/' + time + '/' + imgName,
  272. policy: "eyJleHBpcmF0aW9uIjoiMjAyNS0wMS0wMVQxMjowMDowMC4wMDBaIiwiY29uZGl0aW9ucyI6W1siY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjAwMF1dfQ==",
  273. OSSaccessKeyId: "LTAI5tHjWupJSCAycy2yVbQZ",
  274. success_action_status: "200",
  275. signature: "bWaeUQYnGAcWynj3FxAfGZLy5n0=",
  276. },
  277. header: {
  278. "Content-Type": "multipart/form-data",
  279. 'accept': 'application/json',
  280. },
  281. success: function (rs) {
  282. if (rs.errMsg == 'uploadFile:ok') {
  283. that.data.extarr[item.id].value.push({
  284. img: imageArr[i].tempFilePath,
  285. url: imgstr
  286. })
  287. that.setData({
  288. extarr: that.data.extarr
  289. })
  290. }
  291. },
  292. fail(res) {
  293. wx.hideLoading()
  294. }
  295. })
  296. }
  297. },
  298. bindDelImage(e) {
  299. let index = parseInt(e.currentTarget.dataset.index);
  300. let item = e.currentTarget.dataset.item;
  301. this.data.extarr[item.id].value.splice(index, 1);
  302. this.setData({
  303. extarr: this.data.extarr
  304. })
  305. },
  306. getField: function () {
  307. const that = this;
  308. for (let j in this.data.arrField) {
  309. if (this.data.arrField[j].name == "姓名") {
  310. that.setData({
  311. personame: this.data.arrField[j].value
  312. })
  313. } else if (this.data.arrField[j].name == "手机号") {
  314. that.setData({
  315. phonenum: this.data.arrField[j].value ? this.data.arrField[j]
  316. .value : that.data.phonenum
  317. })
  318. } else if (this.data.arrField[j].name == "客户等级") {
  319. that.setData({
  320. level: this.data.arrField[j].valname
  321. })
  322. } else if (this.data.arrField[j].name == "客户来源") {
  323. that.setData({
  324. source: this.data.arrField[j].value,
  325. sourcetext: this.data.arrField[j].valname
  326. })
  327. }
  328. if (this.data.arrField[j].name == "直播情况") {
  329. that.setData({
  330. livearr: this.data.arrField[j].valname ? this.data.arrField[j]
  331. .valname.split(',') : []
  332. })
  333. }
  334. if (
  335. this.data.arrField[j].name != "姓名" &&
  336. this.data.arrField[j].name != "手机号" &&
  337. this.data.arrField[j].name != "性别" &&
  338. this.data.arrField[j].name != "客户等级" &&
  339. this.data.arrField[j].keyname != "add_wechat_type"
  340. ) {
  341. let str, text;
  342. str =
  343. this.data.arrField[j].type != 4 ?
  344. this.data.arrField[j].value ?
  345. this.data.arrField[j].value :
  346. "" :
  347. this.data.arrField[j].value ?
  348. this.data.arrField[j].value.split(",") :
  349. [];
  350. text =
  351. this.data.arrField[j].type != 4 ?
  352. this.data.arrField[j].valname ?
  353. this.data.arrField[j].valname :
  354. "" :
  355. this.data.arrField[j].valname ?
  356. this.data.arrField[j].valname.split(",") :
  357. [];
  358. if (this.data.arrField[j].keyname == "live_broadcast_personnel") {
  359. str =
  360. this.data.arrField[j].value &&
  361. this.data.arrField[j].value.length != 0 ?
  362. Array.isArray(this.data.arrField[j].value) ?
  363. this.data.arrField[j].value.join(",") :
  364. this.data.arrField[j].value :
  365. "";
  366. this.setData({
  367. showlive3: this.data.arrField[j].value ? true : false
  368. })
  369. }
  370. if (this.data.arrField[j].keyname == "live_broadcast_design") {
  371. this.setData({
  372. showlive2: this.data.arrField[j].value ? true : false
  373. })
  374. }
  375. if (this.data.arrField[j].keyname == "live_broadcast_business") {
  376. this.setData({
  377. showlive1: this.data.arrField[j].value ? true : false
  378. })
  379. }
  380. if (this.data.arrField[j].keyname == 'add_wechat_time') {
  381. let date = new Date();
  382. let nowTime = date.getFullYear() + '' + (date.getMonth() * 1 + 1) + '' + date.getDate();
  383. str = this.data.arrField[j].value ? this.data.arrField[j]
  384. .value : nowTime;
  385. }
  386. if (this.data.arrField[j].type == 6) {
  387. str = Array.isArray(this.data.arrField[j].value) && this.data.arrField[j].value.length ? this.data.arrField[j].value.map(
  388. f => {
  389. return {
  390. img: f.oss_url,
  391. url: f.url,
  392. serverId: "",
  393. localId: ""
  394. };
  395. }) : [];
  396. }
  397. let obj = {
  398. keyname: this.data.arrField[j].keyname,
  399. value: str,
  400. keytext: text,
  401. type: this.data.arrField[j].type,
  402. showflag: false,
  403. isMust: this.data.arrField[j].is_must
  404. };
  405. that.data.extarr[this.data.arrField[j].id] = obj;
  406. that.setData({
  407. extarr: that.data.extarr
  408. })
  409. } else if (this.data.arrField[j].keyname == "add_wechat_type") {
  410. let str = this.data.arrField[j].value,
  411. text = this.data.arrField[j].valname;
  412. for (let r in this.data.arrField[j].select) {
  413. if (this.data.arrField[j].select[r].name == '常规加微' && !str) {
  414. text = '常规加微';
  415. str = this.data.arrField[j].select[r].id;
  416. }
  417. }
  418. let obj = {
  419. id: this.data.arrField[j].id,
  420. keyname: this.data.arrField[j].keyname,
  421. name: this.data.arrField[j].name,
  422. value: str,
  423. keytext: text,
  424. showflag: false,
  425. type: this.data.arrField[j].type,
  426. select: this.data.arrField[j].select,
  427. isMust: this.data.arrField[j].is_must
  428. };
  429. that.data.extarr[this.data.arrField[j].id] = obj;
  430. that.setData({
  431. extarr: that.data.extarr
  432. })
  433. }
  434. }
  435. that.setData({
  436. crmvalarr: this.data.arrField
  437. })
  438. },
  439. addCustomer: function () {
  440. const that = this;
  441. let data = {
  442. id: that.data.nowcid,
  443. name: that.data.personame,
  444. phone: that.data.phonenum,
  445. sex: that.data.sex == "男" ?
  446. 1 : that.data.sex == "女" ?
  447. 2 : "",
  448. level: that.data.level,
  449. source_id: that.data.source,
  450. };
  451. Object.keys(data).forEach(key => {
  452. if (!data[key]) {
  453. delete data[key]
  454. }
  455. })
  456. utils.$post({
  457. url: app.globalData.webUrl + 'api/crm_customer/edit',
  458. header: {
  459. 'Authorization': 'bearer ' + app.globalData.token
  460. },
  461. data: data,
  462. success: function (res) {
  463. if (res.data.code == 0) {
  464. that.crmExtField();
  465. }
  466. }
  467. })
  468. },
  469. crmExtField: function () {
  470. const that = this;
  471. let data,
  472. arr = [],
  473. extarr = this.data.extarr;
  474. // type 1=>输入框,2=>数字框,3=>单选框,4=>多选框,5=>日期, 1,2,5,value,34,value
  475. for (let i in extarr) {
  476. let obj;
  477. if (
  478. extarr[i].type == "1" ||
  479. extarr[i].type == "2" ||
  480. extarr[i].type == "5" ||
  481. extarr[i].type == "3"
  482. ) {
  483. if (extarr[i].keyname == "live_broadcast_personnel") {
  484. obj = {
  485. id: i,
  486. keyname: extarr[i].keyname,
  487. type: extarr[i].type,
  488. value: Array.isArray(extarr[i].value) ?
  489. extarr[i].value.join(",") : extarr[i].value ?
  490. extarr[i].value : "",
  491. };
  492. } else {
  493. obj = {
  494. id: i,
  495. keyname: extarr[i].keyname,
  496. type: extarr[i].type,
  497. value: extarr[i].value,
  498. };
  499. }
  500. } else if (extarr[i].type == "4") {
  501. obj = {
  502. id: i,
  503. keyname: extarr[i].keyname,
  504. type: extarr[i].type,
  505. value: extarr[i].value ? extarr[i].value.join(",") : "",
  506. };
  507. } else if (extarr[i].type == "6") {
  508. obj = {
  509. id: i,
  510. keyname: extarr[i].keyname,
  511. type: extarr[i].type,
  512. value: extarr[i].value.length ? extarr[i].value.map(k => {
  513. return { serverId: k.serverId || "", img: k.url || "" };
  514. }) : "",
  515. };
  516. }
  517. arr.push(obj);
  518. }
  519. if (!arr.length) {
  520. return;
  521. }
  522. data = {
  523. id: this.data.nowcid,
  524. ext: arr,
  525. };
  526. utils.$post({
  527. url: app.globalData.webUrl + 'api/crm_customer/add_customer_extfield',
  528. header: {
  529. 'Authorization': 'bearer ' + app.globalData.token
  530. },
  531. data: data,
  532. success: function (res) {
  533. if (res.data.code == 0) { }
  534. }
  535. })
  536. }
  537. }
  538. })