addProjectOffer.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. const _Http = getApp().globalData.http,
  2. getTime = require("../../utils/getTime");
  3. let source = 0,
  4. sa_quotedpriceid = 0,
  5. quotedpricenotes = [],
  6. address = "";
  7. Page({
  8. data: {
  9. loading: false,
  10. subLoading: false,
  11. showAll: false,
  12. accessory: true,
  13. form: [{
  14. label: "项目",
  15. error: false,
  16. errMsg: "",
  17. type: "route",
  18. url: "/packageA/select/project/select",
  19. value: "",
  20. params: {
  21. "id": 20221020143503,
  22. content: {
  23. nocache: true,
  24. "type": 1,
  25. "where": {
  26. "condition": "",
  27. }
  28. },
  29. },
  30. interrupt: true,
  31. query: "&radio=true",
  32. placeholder: "选择项目",
  33. valueName: "sa_projectid",
  34. checking: "base",
  35. required: true
  36. }, {
  37. label: "报价金额(元)",
  38. error: false,
  39. errMsg: "",
  40. type: "digit",
  41. value: "",
  42. placeholder: "请填写金额",
  43. valueName: "quotedpriceamount",
  44. checking: "twoDecimalPlaces",
  45. required: true
  46. }, {
  47. label: "产品系列",
  48. error: false,
  49. errMsg: "",
  50. type: "option",
  51. optionNmae: "itemtype",
  52. optionType: "checkbox", //复选 radio 单选
  53. value: "",
  54. placeholder: "请选择产品系列",
  55. valueName: "itemtype",
  56. checking: "base",
  57. required: true
  58. }, {
  59. label: "报价日期",
  60. error: false,
  61. errMsg: "",
  62. type: "date",
  63. value: getTime.formatTime(new Date(), '-').split(' ')[0],
  64. placeholder: "报价日期",
  65. valueName: "billdate",
  66. checking: "base",
  67. required: false
  68. }, {
  69. label: "有效期",
  70. error: false,
  71. errMsg: "",
  72. type: "dateRange",
  73. value: [getTime.formatTime(new Date(), '-').split(' ')[0] + "", getTime.formatTime(new Date(Date.now() + (86400000 * 30)), '-').split(' ')[0] + ""],
  74. placeholder: ['生效日期', '截止日期'],
  75. valueName: "invaliddate",
  76. checking: "base",
  77. required: true
  78. }, {
  79. label: "备注",
  80. error: false,
  81. errMsg: "",
  82. type: "textarea",
  83. value: "",
  84. placeholder: "报价单说明",
  85. valueName: "remarks",
  86. required: false, //必填
  87. }],
  88. disabled: true,
  89. sa_quotedpriceid: 0
  90. },
  91. changeState({
  92. detail
  93. }) {
  94. this.setData({
  95. loading: detail,
  96. subLoading: detail
  97. })
  98. },
  99. onLoad(options) {
  100. source = 0;
  101. sa_quotedpriceid = 0;
  102. quotedpricenotes = [];
  103. address = "";
  104. let form = this.data.form;
  105. /* 项目商机进入 */
  106. if (options.sa_projectid) {
  107. let data = JSON.parse(options.sa_projectid);
  108. if (data.sa_projectid) {
  109. form[0].value = data.sa_projectid;
  110. form[0].disabled = true;
  111. source = 1;
  112. form.splice(1, 0, {
  113. label: "选择客户",
  114. error: false,
  115. errMsg: "",
  116. type: "route",
  117. url: "/packageA/select/setclient/select",
  118. value: "",
  119. params: {
  120. id: 20221027143702,
  121. "content": {
  122. nocache: true,
  123. "sa_projectid": data.sa_projectid[1][0],
  124. "where": {
  125. "condition": ""
  126. }
  127. },
  128. },
  129. query: "&radio=true&idname=sys_enterpriseid",
  130. placeholder: "选择客户",
  131. valueName: "sys_enterpriseid",
  132. checking: "base",
  133. required: true,
  134. interrupt: true
  135. });
  136. //业务员
  137. let hr = {
  138. label: "业务员",
  139. error: false,
  140. errMsg: "",
  141. type: "route",
  142. url: "/packageA/select/contacts/select",
  143. value: "",
  144. params: {
  145. "id": "20230306144402",
  146. "content": {
  147. nocache: true,
  148. "type": 2, //type:1客户2:项目
  149. "sa_projectid": data.sa_projectid[1][0],
  150. "where": {
  151. "condition": ""
  152. }
  153. }
  154. },
  155. query: "&radio=true&idname=hrid",
  156. placeholder: "选择业务员",
  157. valueName: "saler_hrid",
  158. checking: "base",
  159. required: true
  160. };
  161. _Http.basic({
  162. "id": "20230306144402",
  163. "content": {
  164. "nocache": true,
  165. "type": 2, //type:1客户2:项目
  166. "sa_projectid": data.sa_projectid[1][0],
  167. "where": {
  168. "condition": ""
  169. },
  170. "pageNumber": 1,
  171. "pageSize": 1,
  172. },
  173. }).then(res => {
  174. console.log('获取一个业务员', res)
  175. if (res.code == 1 && res.data.length) {
  176. hr.value = [res.data[0].name, [res.data[0].hrid]]
  177. if (form.some(v => v.label == '业务员')) {
  178. form.splice(form.findIndex(v => v.label == '备注') - 1, 1, hr);
  179. } else {
  180. form.splice(form.findIndex(v => v.label == '备注'), 0, hr);
  181. }
  182. this.setData({
  183. form
  184. })
  185. }
  186. })
  187. if (form.some(v => v.label == '业务员')) {
  188. form.splice(form.findIndex(v => v.label == '备注') - 1, 1, hr);
  189. } else {
  190. form.splice(form.findIndex(v => v.label == '备注'), 0, hr);
  191. }
  192. };
  193. this.setData({
  194. disabled: false,
  195. form
  196. });
  197. };
  198. if (options.data) {
  199. let data1 = JSON.parse(options.data);
  200. sa_quotedpriceid = data1.sa_quotedpriceid;
  201. quotedpricenotes = data1.quotedpricenotes;
  202. address = data1.address;
  203. data1.sa_projectid = [data1.projectname, [data1.sa_projectid]]
  204. form = form.map(v => {
  205. if (v.valueName == "invaliddate") {
  206. v.value = [data1.begdate, data1.enddate]
  207. } else {
  208. v.value = data1[v.valueName] || "";
  209. if (v.valueName == "quotedpriceamount") v.disabled = data1.iseditamount == 0
  210. }
  211. return v
  212. })
  213. form.splice(1, 0, {
  214. label: "选择客户",
  215. error: false,
  216. errMsg: "",
  217. type: "route",
  218. url: "/packageA/select/setclient/select",
  219. value: [data1.enterprisename, [data1.sys_enterpriseid]],
  220. params: {
  221. id: 20221027143702,
  222. "content": {
  223. nocache: true,
  224. "sa_projectid": data1.sa_projectid[1][0],
  225. "where": {
  226. "condition": ""
  227. }
  228. },
  229. },
  230. interrupt: true,
  231. query: "&radio=true&idname=sys_enterpriseid",
  232. placeholder: "选择客户",
  233. valueName: "sys_enterpriseid",
  234. checking: "base",
  235. required: true,
  236. interrupt: true
  237. });
  238. form.splice(2, 0, {
  239. label: "联系人",
  240. error: false,
  241. errMsg: "",
  242. type: "route",
  243. url: "/packageA/select/contacts/select",
  244. value: [data1.contactsname, [data1.sys_phonebookid]],
  245. params: {
  246. "id": "20240614151004",
  247. "content": {
  248. nocache: true,
  249. "sys_enterpriseid": data1.sys_enterpriseid,
  250. sa_projectid: data1.sa_projectid[1][0],
  251. pageNumber: 1,
  252. pageSize: 10,
  253. pageTotal: 1,
  254. "where": {
  255. "condition": "",
  256. "workaddress": 0
  257. }
  258. }
  259. },
  260. query: "&radio=true&idname=sys_phonebookid",
  261. placeholder: "选择客户联系人",
  262. valueName: "sys_phonebookid",
  263. checking: "base",
  264. required: true
  265. });
  266. form.splice(form.findIndex(v => v.label == '备注'), 0, {
  267. label: "业务员",
  268. error: false,
  269. errMsg: "",
  270. type: "route",
  271. url: "/packageA/select/contacts/select",
  272. value: [data1.name, [data1.saler_hrid]],
  273. params: {
  274. "id": "20230306144402",
  275. "content": {
  276. nocache: true,
  277. "type": 2, //type:1客户2:项目
  278. "sa_projectid": data1.sa_projectid[1][0],
  279. "where": {
  280. "condition": ""
  281. }
  282. }
  283. },
  284. query: "&radio=true&idname=hrid",
  285. placeholder: "选择业务员",
  286. valueName: "saler_hrid",
  287. checking: "base",
  288. required: true
  289. });
  290. this.setData({
  291. form,
  292. accessory: false,
  293. sa_quotedpriceid
  294. })
  295. } else {
  296. _Http.basic({
  297. "classname": "sysmanage.develop.optiontype.optiontype",
  298. "method": "optiontypeselect",
  299. "content": {
  300. "pageNumber": 1,
  301. "pageSize": 1,
  302. "typename": "itemtype",
  303. "parameter": {
  304. "siteid": wx.getStorageSync('siteP').siteid
  305. }
  306. },
  307. }).then(res => {
  308. console.log(res)
  309. if (res.code == 1 && res.data.length) {
  310. this.data.form[this.data.form.findIndex(v => v.label == '产品系列')].value = [res.data[0].value]
  311. this.setData({
  312. form: this.data.form
  313. })
  314. }
  315. })
  316. }
  317. getApp().globalData.Language.getLanguagePackage(this, '项目报价');
  318. },
  319. /* 打断处理form */
  320. interrupt(e) {
  321. let {
  322. data,
  323. form,
  324. temporary
  325. } = e.detail;
  326. if (temporary.item.value[0] == data.value[0]) return wx.navigateBack();
  327. let obj = {};
  328. temporary.item.value = data.value;
  329. switch (temporary.item.valueName) {
  330. case "sa_projectid":
  331. obj = {
  332. label: "选择客户",
  333. error: false,
  334. errMsg: "",
  335. type: "route",
  336. url: "/packageA/select/setclient/select",
  337. value: "",
  338. params: {
  339. id: 20221027143702,
  340. "content": {
  341. nocache: true,
  342. "sa_projectid": data.value[1][0],
  343. "where": {
  344. "condition": ""
  345. }
  346. },
  347. },
  348. interrupt: true,
  349. query: "&radio=true&idname=sys_enterpriseid",
  350. placeholder: "选择客户",
  351. valueName: "sys_enterpriseid",
  352. checking: "base",
  353. required: true
  354. };
  355. form.splice(1, form[1].label == "选择客户" ? 1 : 0, obj);
  356. address = data.item.province + data.item.city + data.item.county + data.item.address
  357. //业务员
  358. let hr = {
  359. label: "业务员",
  360. error: false,
  361. errMsg: "",
  362. type: "route",
  363. url: "/packageA/select/contacts/select",
  364. value: "",
  365. params: {
  366. "id": "20230306144402",
  367. "content": {
  368. nocache: true,
  369. "type": 2, //type:1客户2:项目
  370. "sa_projectid": data.value[1][0],
  371. "where": {
  372. "condition": ""
  373. }
  374. }
  375. },
  376. query: "&radio=true&idname=hrid",
  377. placeholder: "选择业务员",
  378. valueName: "saler_hrid",
  379. checking: "base",
  380. required: true
  381. };
  382. _Http.basic({
  383. "id": "20230306144402",
  384. "content": {
  385. "nocache": true,
  386. "type": 2, //type:1客户2:项目
  387. "sa_projectid": data.value[1][0],
  388. "where": {
  389. "condition": ""
  390. },
  391. "pageNumber": 1,
  392. "pageSize": 1,
  393. },
  394. }).then(res => {
  395. console.log('获取一个业务员', res)
  396. if (res.code == 1 && res.data.length) {
  397. hr.value = [res.data[0].name, [res.data[0].hrid]]
  398. if (form.some(v => v.label == '业务员')) {
  399. form.splice(form.findIndex(v => v.label == '备注') - 1, 1, hr);
  400. } else {
  401. form.splice(form.findIndex(v => v.label == '备注'), 0, hr);
  402. }
  403. this.setData({
  404. form
  405. })
  406. }
  407. })
  408. if (form.some(v => v.label == '业务员')) {
  409. form.splice(form.findIndex(v => v.label == '备注') - 1, 1, hr);
  410. } else {
  411. form.splice(form.findIndex(v => v.label == '备注'), 0, hr);
  412. }
  413. break;
  414. case "sys_enterpriseid":
  415. obj = {
  416. label: "联系人",
  417. error: false,
  418. errMsg: "",
  419. type: "route",
  420. url: "/packageA/select/contacts/select",
  421. value: "",
  422. params: {
  423. "id": "20240614151004",
  424. "content": {
  425. nocache: true,
  426. "sys_enterpriseid": data.value[1][0],
  427. sa_projectid: form.find(v => v.valueName == 'sys_enterpriseid').params.content.sa_projectid,
  428. pageNumber: 1,
  429. pageSize: 10,
  430. pageTotal: 1,
  431. "where": {
  432. "condition": "",
  433. "workaddress": 0
  434. }
  435. }
  436. },
  437. query: "&radio=true&idname=sys_phonebookid",
  438. placeholder: "选择客户联系人",
  439. valueName: "sys_phonebookid",
  440. checking: "base",
  441. required: true
  442. };
  443. form.splice(2, form.some(v => v.label == '联系人') ? 1 : 0, obj);
  444. break;
  445. }
  446. form[temporary.index] = temporary.item;
  447. wx.navigateBack()
  448. this.setData({
  449. form
  450. })
  451. },
  452. /* 绑定媒体 */
  453. insertImgEdit({
  454. detail
  455. }) {
  456. this.handleFileLink(detail)
  457. },
  458. handleFileLink(attachmentids, ownertable = "temporary", ownerid = 1, data) {
  459. _Http.basic({
  460. "classname": "system.attachment.Attachment",
  461. "method": "createFileLink",
  462. "content": {
  463. ownertable,
  464. ownerid,
  465. usetype: 'default',
  466. attachmentids
  467. }
  468. }).then(res => {
  469. console.log('跟进记录绑定附件', res)
  470. if (res.code != '1') return wx.showToast({
  471. title: res.msg,
  472. icon: "none"
  473. })
  474. if (ownertable == 'temporary') {
  475. this.selectComponent("#Yl_files").handleFiles(res.data)
  476. } else {
  477. if (res.data.length) data.attinfos = res.data;
  478. this.changeItem(data)
  479. }
  480. })
  481. },
  482. changeItem(data) {
  483. this.setData({
  484. loading: false,
  485. subLoading: false
  486. })
  487. let pages = getCurrentPages(),
  488. page = pages[pages.length - 2];
  489. if (page.__route__ == 'packageA/offers/detail') {
  490. page.getDetail(true);
  491. wx.navigateBack()
  492. } else {
  493. if (page.__route__ == 'packageA/offers/index') {
  494. page.getList(true);
  495. } else if (page.__route__ == 'packageA/project/detail') {
  496. let model = page.selectComponent("#Offers");
  497. model.getList(model.data.sa_projectid, true);
  498. }
  499. wx.redirectTo({
  500. url: '/packageA/offers/detail?sa_quotedpriceid=' + data.sa_quotedpriceid
  501. })
  502. }
  503. },
  504. submit(e) {
  505. const {
  506. submit
  507. } = e.currentTarget.dataset;
  508. console.log(submit)
  509. if (submit == 1) {
  510. this.setData({
  511. subLoading: true
  512. })
  513. } else {
  514. this.setData({
  515. loading: true
  516. })
  517. }
  518. let content = {
  519. ...this.selectComponent("#Form").submit(),
  520. sa_quotedpriceid,
  521. quotedpricenotes,
  522. address,
  523. source
  524. };
  525. content.sys_enterpriseid = content.sys_enterpriseid[1] ? content.sys_enterpriseid[1][0] : 0;
  526. content.projectname = content.sa_projectid[0] || "";
  527. content.sa_projectid = content.sa_projectid[1] ? content.sa_projectid[1][0] : 0;
  528. content.sys_phonebookid = content.sys_phonebookid ? content.sys_phonebookid[1][0] : 0;
  529. content.saler_hrid = content.saler_hrid[1] ? content.saler_hrid[1][0] : 0;
  530. content.discountrate = ''
  531. content.begdate = content.invaliddate[0];
  532. content.enddate = content.invaliddate[1];
  533. delete(content.invaliddate)
  534. _Http.basic({
  535. "id": 20221020164803,
  536. "version": 1,
  537. content
  538. }).then(res => {
  539. console.log("添加项目报价单", res)
  540. wx.showToast({
  541. title: res.code != '1' ? res.msg : getApp().globalData.Language.getMapText('保存成功'),
  542. icon: "none",
  543. mask: true
  544. })
  545. if (res.code != '1') return this.setData({
  546. loading: false,
  547. subLoading: false
  548. });
  549. if (submit == 1) {
  550. _Http.basic({
  551. "id": 20221020165303,
  552. "version": 1,
  553. "content": {
  554. "sa_quotedpriceid": res.data.sa_quotedpriceid
  555. }
  556. }).then(s => {
  557. console.log("提交报价单", s)
  558. getApp().globalData.Language.showToast(s.code == '1' ? "创建成功" : s.msg)
  559. try {
  560. let attachmentids = this.selectComponent("#Yl_files").getFiles().attachmentids;
  561. if (attachmentids.length) {
  562. this.handleFileLink(attachmentids, 'sa_quotedprice', res.data.sa_quotedpriceid, res.data)
  563. } else {
  564. setTimeout(() => {
  565. this.changeItem(res.data)
  566. }, 500)
  567. }
  568. } catch (error) {
  569. setTimeout(() => {
  570. this.changeItem(res.data)
  571. }, 500)
  572. }
  573. })
  574. } else {
  575. try {
  576. let attachmentids = this.selectComponent("#Yl_files").getFiles().attachmentids;
  577. if (attachmentids.length) {
  578. this.handleFileLink(attachmentids, 'sa_quotedprice', res.data.sa_quotedpriceid, res.data)
  579. } else {
  580. setTimeout(() => {
  581. this.changeItem(res.data)
  582. }, 500)
  583. }
  584. } catch (error) {
  585. setTimeout(() => {
  586. this.changeItem(res.data)
  587. }, 500)
  588. }
  589. }
  590. })
  591. },
  592. // 是否显示全部
  593. onChange({
  594. detail
  595. }) {
  596. this.setData({
  597. showAll: detail
  598. })
  599. },
  600. /* 表单必填项是否完成 */
  601. onConfirm({
  602. detail
  603. }) {
  604. this.setData({
  605. disabled: detail
  606. })
  607. }
  608. })