addSetclientOffer.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. const _Http = getApp().globalData.http,
  2. getTime = require("../../utils/getTime");
  3. let sa_quotedpriceid = 0,
  4. quotedpricenotes = [],
  5. address = "";
  6. Page({
  7. data: {
  8. loading: false,
  9. subLoading: false,
  10. sa_quotedpriceid: 0,
  11. showAll: false,
  12. accessory: true,
  13. form: [{
  14. label: "客户",
  15. error: false,
  16. errMsg: "",
  17. type: "route",
  18. url: "/packageA/contract/add/setclient/select",
  19. value: "",
  20. params: {
  21. "id": 20220920083901,
  22. "content": {
  23. "pageNumber": 1,
  24. "pageSize": 20,
  25. "where": {
  26. "condition": "",
  27. "type": 19,
  28. "sa_projectid": ""
  29. }
  30. },
  31. },
  32. interrupt: true,
  33. query: "&radio=true&idname=sys_enterpriseid",
  34. placeholder: "选择客户",
  35. valueName: "sys_enterpriseid",
  36. checking: "base",
  37. required: true
  38. }, {
  39. label: "报价金额(元)",
  40. error: false,
  41. errMsg: "",
  42. type: "digit",
  43. value: "",
  44. placeholder: "请填写金额",
  45. valueName: "quotedpriceamount",
  46. checking: "twoDecimalPlaces",
  47. required: true
  48. }, {
  49. label: "产品系列",
  50. error: false,
  51. errMsg: "",
  52. type: "option",
  53. optionNmae: "itemtype",
  54. optionType: "checkbox", //复选 radio 单选
  55. value: "",
  56. placeholder: "请选择产品系列",
  57. valueName: "itemtype",
  58. checking: "base",
  59. required: true
  60. }, {
  61. label: "折扣(%)",
  62. error: false,
  63. errMsg: "",
  64. hint: "请输入0-100%",
  65. type: "digit",
  66. value: "",
  67. placeholder: "请填写折扣(%)",
  68. valueName: "discountrate", //绑定的字段名称
  69. required: false, //必填
  70. checking: `^(100|\\d{0,2})(\\.\\d{1,2})?$`, //0-100%
  71. slot: "discountrate"
  72. }, {
  73. label: "报价日期",
  74. error: false,
  75. errMsg: "",
  76. type: "date",
  77. value: getTime.formatTime(new Date(), '-').split(' ')[0] + "",
  78. placeholder: "报价日期",
  79. valueName: "billdate",
  80. checking: "base",
  81. required: false
  82. }, {
  83. label: "有效期",
  84. error: false,
  85. errMsg: "",
  86. type: "dateRange",
  87. value: [getTime.formatTime(new Date(), '-').split(' ')[0] + "", getTime.formatTime(new Date(Date.now() + (86400000 * 30)), '-').split(' ')[0] + ""],
  88. placeholder: ['生效日期', '截止日期'],
  89. valueName: "invaliddate",
  90. checking: "base",
  91. required: true
  92. }, {
  93. label: "备注",
  94. error: false,
  95. errMsg: "",
  96. type: "textarea",
  97. value: "",
  98. placeholder: "报价单说明",
  99. valueName: "remarks",
  100. required: false, //必填
  101. }],
  102. disabled: true
  103. },
  104. changeState({
  105. detail
  106. }) {
  107. this.setData({
  108. loading: detail,
  109. subLoading: detail
  110. })
  111. },
  112. onLoad(options) {
  113. sa_quotedpriceid = 0
  114. quotedpricenotes = []
  115. address = ""
  116. if (options.data) {
  117. let data = JSON.parse(options.data);
  118. let form = this.data.form;
  119. sa_quotedpriceid = data.sa_quotedpriceid || 0;
  120. quotedpricenotes = data.quotedpricenotes || [];
  121. address = data.address || "";
  122. data.discountrate = data.discountrate == 1 ? 100 : (data.discountrate * 100).toFixed(2);
  123. data.sys_enterpriseid = [data.enterprisename, [data.sys_enterpriseid]];
  124. form = form.map(v => {
  125. if (v.valueName == "invaliddate") {
  126. v.value = [data.begdate, data.enddate]
  127. } else {
  128. v.value = data[v.valueName] || "";
  129. if (v.valueName == "quotedpriceamount") v.disabled = data.iseditamount == 0
  130. }
  131. return v
  132. })
  133. form.splice(1, 0, {
  134. label: "联系人",
  135. error: false,
  136. errMsg: "",
  137. type: "route",
  138. url: "/packageA/select/contacts/select",
  139. value: [data.contactsname, [data.sys_phonebookid]],
  140. params: {
  141. "id": "20240614151004",
  142. "version": 1,
  143. "content": {
  144. nocache: true,
  145. "sys_enterpriseid": data.sys_enterpriseid[1][0],
  146. sa_projectid: 0,
  147. "where": {
  148. "condition": "",
  149. "workaddress": 0
  150. }
  151. }
  152. },
  153. query: "&radio=true&idname=sys_phonebookid",
  154. placeholder: "选择客户联系人",
  155. valueName: "sys_phonebookid",
  156. checking: "base",
  157. required: true
  158. });
  159. form.splice(form.findIndex(v => v.label == '备注'), 0, {
  160. label: "业务员",
  161. error: false,
  162. errMsg: "",
  163. type: "route",
  164. url: "/packageA/select/contacts/select",
  165. value: [data.name, [data.saler_hrid]],
  166. params: {
  167. "id": "20230306144402",
  168. "content": {
  169. nocache: true,
  170. "type": 1, //type:1客户2:项目
  171. "sys_enterpriseid": data.sys_enterpriseid[1][0],
  172. "where": {
  173. "condition": ""
  174. }
  175. }
  176. },
  177. query: "&radio=true&idname=hrid",
  178. placeholder: "选择业务员",
  179. valueName: "saler_hrid",
  180. checking: "base",
  181. required: true
  182. });
  183. this.setData({
  184. form,
  185. accessory: false,
  186. sa_quotedpriceid
  187. });
  188. this.selectComponent("#Form").confirm();
  189. } else {
  190. _Http.basic({
  191. "classname": "sysmanage.develop.optiontype.optiontype",
  192. "method": "optiontypeselect",
  193. "content": {
  194. "pageNumber": 1,
  195. "pageSize": 1,
  196. "typename": "itemtype",
  197. "parameter": {
  198. "siteid": wx.getStorageSync('siteP').siteid
  199. }
  200. },
  201. }).then(res => {
  202. console.log(res)
  203. if (res.code == 1 && res.data.length) {
  204. this.data.form[this.data.form.findIndex(v => v.label == '产品系列')].value = [res.data[0].value]
  205. this.setData({
  206. form: this.data.form
  207. })
  208. }
  209. })
  210. }
  211. getApp().globalData.Language.getLanguagePackage(this, '客户报价');
  212. },
  213. /* 打断处理form */
  214. interrupt(e) {
  215. let {
  216. data,
  217. form,
  218. temporary
  219. } = e.detail;
  220. if (temporary.item.value[0] == data.value[0]) return wx.navigateBack();
  221. temporary.item.value = data.value;
  222. if (temporary.item.valueName == "sys_enterpriseid") {
  223. //联系人
  224. let contacts = {
  225. label: "联系人",
  226. error: false,
  227. errMsg: "",
  228. type: "route",
  229. url: "/packageA/select/contacts/select",
  230. value: "",
  231. params: {
  232. "id": "20240614151004",
  233. "version": 1,
  234. "content": {
  235. nocache: true,
  236. "sys_enterpriseid": data.value[1][0],
  237. sa_projectid: 0,
  238. "where": {
  239. "condition": "",
  240. "workaddress": 0
  241. }
  242. }
  243. },
  244. query: "&radio=true",
  245. placeholder: "选择客户联系人",
  246. query: "&radio=true&idname=sys_phonebookid",
  247. valueName: "sys_phonebookid",
  248. checking: "base",
  249. required: true
  250. };
  251. form.splice(1, form.some(v => v.label == '联系人') ? 1 : 0, contacts);
  252. let hr = {
  253. label: "业务员",
  254. error: false,
  255. errMsg: "",
  256. type: "route",
  257. url: "/packageA/select/contacts/select",
  258. value: "",
  259. params: {
  260. "id": "20230306144402",
  261. "content": {
  262. nocache: true,
  263. "type": 1, //type:1客户2:项目
  264. "sys_enterpriseid": data.value[1][0],
  265. "where": {
  266. "condition": ""
  267. }
  268. }
  269. },
  270. query: "&radio=true&idname=hrid",
  271. placeholder: "选择业务员",
  272. valueName: "saler_hrid",
  273. checking: "base",
  274. required: true
  275. };
  276. if (form.some(v => v.label == '业务员')) {
  277. form.splice(form.findIndex(v => v.label == '备注') - 1, 1, hr);
  278. } else {
  279. form.splice(form.findIndex(v => v.label == '备注'), 0, hr);
  280. }
  281. }
  282. form[temporary.index] = temporary.item;
  283. wx.navigateBack()
  284. this.setData({
  285. form
  286. })
  287. },
  288. /* 绑定媒体 */
  289. insertImgEdit({
  290. detail
  291. }) {
  292. this.handleFileLink(detail)
  293. },
  294. handleFileLink(attachmentids, ownertable = "temporary", ownerid = 1, data) {
  295. _Http.basic({
  296. "classname": "system.attachment.Attachment",
  297. "method": "createFileLink",
  298. "content": {
  299. ownertable,
  300. ownerid,
  301. usetype: 'default',
  302. attachmentids
  303. }
  304. }).then(res => {
  305. console.log('跟进记录绑定附件', res)
  306. if (res.code != '1') return wx.showToast({
  307. title: res.msg,
  308. icon: "none"
  309. })
  310. if (ownertable == 'temporary') {
  311. this.selectComponent("#Yl_files").handleFiles(res.data)
  312. } else {
  313. if (res.data.length) data.attinfos = res.data;
  314. this.changeItem(data)
  315. setTimeout(() => {
  316. wx.navigateBack()
  317. }, 500)
  318. }
  319. })
  320. },
  321. changeItem(data) {
  322. this.setData({
  323. loading: false,
  324. subLoading: false
  325. })
  326. let pages = getCurrentPages(),
  327. page = pages[pages.length - 2];
  328. if (page.__route__ == 'packageA/offers/detail') {
  329. page.getDetail(true);
  330. wx.navigateBack()
  331. } else {
  332. if (['packageA/setclient/detail', 'packageA/publicCustomer/detail'].includes(page.__route__)) {
  333. let model = page.selectComponent("#Offers");
  334. model.getList(model.data.sys_enterpriseid, true);
  335. }
  336. wx.redirectTo({
  337. url: '/packageA/offers/detail?sa_quotedpriceid=' + data.sa_quotedpriceid
  338. })
  339. }
  340. },
  341. submit(e) {
  342. const {
  343. submit
  344. } = e.currentTarget.dataset;
  345. if (submit == 1) {
  346. this.setData({
  347. subLoading: true
  348. })
  349. } else {
  350. this.setData({
  351. loading: true
  352. })
  353. }
  354. let content = {
  355. ...this.selectComponent("#Form").submit(),
  356. "sa_projectid": 0, //项目id
  357. projectname: "",
  358. sa_quotedpriceid,
  359. quotedpricenotes,
  360. address
  361. };
  362. content.sys_enterpriseid = content.sys_enterpriseid[1] ? content.sys_enterpriseid[1][0] : 0;
  363. content.sys_phonebookid = content.sys_phonebookid[1] ? content.sys_phonebookid[1][0] : 0;
  364. content.saler_hrid = content.saler_hrid[1] ? content.saler_hrid[1][0] : 0;
  365. content.discountrate = (content.discountrate / 100).toFixed(4) || 1;
  366. content.begdate = content.invaliddate[0];
  367. content.enddate = content.invaliddate[1];
  368. delete(content.invaliddate)
  369. _Http.basic({
  370. "id": 20221020164803,
  371. "version": 1,
  372. content
  373. }).then(res => {
  374. console.log("添加客户报价单", res)
  375. wx.showToast({
  376. title: res.code != '1' ? res.msg : getApp().globalData.Language.getMapText('保存成功'),
  377. icon: "none",
  378. mask: true
  379. })
  380. if (res.code != '1') return this.setData({
  381. loading: false,
  382. subLoading: false
  383. });
  384. if (submit == 1) {
  385. _Http.basic({
  386. "id": 20221020165303,
  387. "version": 1,
  388. "content": {
  389. "sa_quotedpriceid": res.data.sa_quotedpriceid
  390. }
  391. }).then(s => {
  392. console.log("提交报价单", s)
  393. getApp().globalData.Language.showToast(s.code == '1' ? "创建成功" : s.msg)
  394. try {
  395. let attachmentids = this.selectComponent("#Yl_files").getFiles().attachmentids;
  396. if (attachmentids.length) return this.handleFileLink(attachmentids, 'sa_quotedprice', res.data.sa_quotedpriceid, res.data);
  397. } catch (error) {
  398. }
  399. setTimeout(() => {
  400. this.changeItem(res.data)
  401. }, 500)
  402. })
  403. } else {
  404. try {
  405. let attachmentids = this.selectComponent("#Yl_files").getFiles().attachmentids;
  406. if (attachmentids.length) return this.handleFileLink(attachmentids, 'sa_quotedprice', res.data.sa_quotedpriceid, res.data);
  407. } catch (error) {
  408. }
  409. setTimeout(() => {
  410. this.changeItem(res.data)
  411. }, 500)
  412. }
  413. })
  414. },
  415. // 是否显示全部
  416. onChange({
  417. detail
  418. }) {
  419. this.setData({
  420. showAll: detail
  421. })
  422. },
  423. /* 表单必填项是否完成 */
  424. onConfirm({
  425. detail
  426. }) {
  427. this.setData({
  428. disabled: detail
  429. })
  430. }
  431. })