addSetclientOffer.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  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. showAll: false,
  10. accessory: true,
  11. form: [{
  12. label: "客户",
  13. error: false,
  14. errMsg: "",
  15. type: "route",
  16. url: "/packageA/contract/add/setclient/select",
  17. value: "",
  18. params: {
  19. "id": 20220920083901,
  20. "content": {
  21. "pageNumber": 1,
  22. "pageSize": 20,
  23. "where": {
  24. "condition": "",
  25. "type": 19,
  26. "sa_projectid": ""
  27. }
  28. },
  29. },
  30. interrupt: true,
  31. query: "&radio=true&idname=sys_enterpriseid",
  32. placeholder: "选择客户",
  33. valueName: "sys_enterpriseid",
  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: "base",
  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. hint: "请输入0-100%",
  63. type: "digit",
  64. value: "",
  65. placeholder: "请填写折扣(%)",
  66. valueName: "discountrate", //绑定的字段名称
  67. required: false, //必填
  68. checking: `^(100|\\d{0,2})(\\.\\d{1,2})?$`, //0-100%
  69. slot: "discountrate"
  70. }, {
  71. label: "报价日期",
  72. error: false,
  73. errMsg: "",
  74. type: "date",
  75. value: getTime.formatTime(new Date(), '-').split(' ')[0] + "",
  76. placeholder: "报价日期",
  77. valueName: "billdate",
  78. checking: "base",
  79. required: false
  80. }, {
  81. label: "有效期",
  82. error: false,
  83. errMsg: "",
  84. type: "dateRange",
  85. value: [getTime.formatTime(new Date(), '-').split(' ')[0] + "", ""],
  86. placeholder: ['生效日期', '截止日期'],
  87. valueName: "invaliddate",
  88. checking: "base",
  89. required: true
  90. }, {
  91. label: "备注",
  92. error: false,
  93. errMsg: "",
  94. type: "textarea",
  95. value: "",
  96. placeholder: "报价单说明",
  97. valueName: "remarks",
  98. required: false, //必填
  99. }],
  100. disabled: true
  101. },
  102. onLoad(options) {
  103. if (options.data) {
  104. let data = JSON.parse(options.data);
  105. let form = this.data.form;
  106. sa_quotedpriceid = data.sa_quotedpriceid || 0;
  107. quotedpricenotes = data.quotedpricenotes || [];
  108. address = data.address || "";
  109. data.discountrate = data.discountrate == 1 ? 100 : (data.discountrate * 100).toFixed(2);
  110. data.sys_enterpriseid = [data.enterprisename, [data.sys_enterpriseid]];
  111. form = form.map(v => {
  112. if (v.valueName == "invaliddate") {
  113. v.value = [data.begdate, data.enddate]
  114. } else {
  115. v.value = data[v.valueName] || "";
  116. if (v.valueName == "quotedpriceamount") v.disabled = data.iseditamount == 0
  117. }
  118. return v
  119. })
  120. form.splice(1, 0, {
  121. label: "联系人",
  122. error: false,
  123. errMsg: "",
  124. type: "route",
  125. url: "/packageA/select/contacts/select",
  126. value: [data.contactsname, [data.sys_phonebookid]],
  127. params: {
  128. "id": "20240614151004",
  129. "version": 1,
  130. "content": {
  131. nocache: true,
  132. "sys_enterpriseid": data.sys_enterpriseid[1][0],
  133. sa_projectid: 0,
  134. "where": {
  135. "condition": "",
  136. "workaddress": 0
  137. }
  138. }
  139. },
  140. query: "&radio=true&idname=sys_phonebookid",
  141. placeholder: "选择客户联系人",
  142. valueName: "sys_phonebookid",
  143. checking: "base",
  144. required: true
  145. });
  146. form.splice(form.findIndex(v => v.label == '备注'), 0, {
  147. label: "业务员",
  148. error: false,
  149. errMsg: "",
  150. type: "route",
  151. url: "/packageA/select/contacts/select",
  152. value: [data.name, [data.saler_hrid]],
  153. params: {
  154. "id": "20230306144402",
  155. "content": {
  156. nocache: true,
  157. "type": 1, //type:1客户2:项目
  158. "sys_enterpriseid": data.sys_enterpriseid[1][0],
  159. "where": {
  160. "condition": ""
  161. }
  162. }
  163. },
  164. query: "&radio=true&idname=hrid",
  165. placeholder: "选择业务员",
  166. valueName: "saler_hrid",
  167. checking: "base",
  168. required: true
  169. });
  170. this.setData({
  171. form,
  172. accessory: false
  173. });
  174. this.selectComponent("#Form").confirm();
  175. }
  176. },
  177. /* 打断处理form */
  178. interrupt(e) {
  179. let {
  180. data,
  181. form,
  182. temporary
  183. } = e.detail;
  184. console.log("处理", data, form, temporary)
  185. if (temporary.item.value[0] == data.value[0]) return wx.navigateBack();
  186. temporary.item.value = data.value;
  187. if (temporary.item.valueName == "sys_enterpriseid") {
  188. //联系人
  189. let contacts = {
  190. label: "联系人",
  191. error: false,
  192. errMsg: "",
  193. type: "route",
  194. url: "/packageA/select/contacts/select",
  195. value: "",
  196. params: {
  197. "id": "20240614151004",
  198. "version": 1,
  199. "content": {
  200. nocache: true,
  201. "sys_enterpriseid": data.value[1][0],
  202. sa_projectid: 0,
  203. "where": {
  204. "condition": "",
  205. "workaddress": 0
  206. }
  207. }
  208. },
  209. query: "&radio=true",
  210. placeholder: "选择客户联系人",
  211. query: "&radio=true&idname=sys_phonebookid",
  212. valueName: "sys_phonebookid",
  213. checking: "base",
  214. required: true
  215. };
  216. form.splice(1, form.some(v => v.label == '联系人') ? 1 : 0, contacts);
  217. //业务员
  218. let hr = {
  219. label: "业务员",
  220. error: false,
  221. errMsg: "",
  222. type: "route",
  223. url: "/packageA/select/contacts/select",
  224. value: "",
  225. params: {
  226. "id": "20230306144402",
  227. "content": {
  228. nocache: true,
  229. "type": 1, //type:1客户2:项目
  230. "sys_enterpriseid": data.value[1][0],
  231. "where": {
  232. "condition": ""
  233. }
  234. }
  235. },
  236. query: "&radio=true&idname=hrid",
  237. placeholder: "选择业务员",
  238. valueName: "saler_hrid",
  239. checking: "base",
  240. required: true
  241. };
  242. form.splice(form.findIndex(v => v.label == '备注'), form.some(v => v.label == '业务员') ? 1 : 0, hr);
  243. }
  244. form[temporary.index] = temporary.item;
  245. wx.navigateBack()
  246. this.setData({
  247. form
  248. })
  249. },
  250. /* 绑定媒体 */
  251. insertImgEdit({
  252. detail
  253. }) {
  254. this.handleFileLink(detail)
  255. },
  256. handleFileLink(attachmentids, ownertable = "temporary", ownerid = 1, data) {
  257. _Http.basic({
  258. "classname": "system.attachment.Attachment",
  259. "method": "createFileLink",
  260. "content": {
  261. ownertable,
  262. ownerid,
  263. usetype: 'default',
  264. attachmentids
  265. }
  266. }).then(res => {
  267. console.log('跟进记录绑定附件', res)
  268. if (res.msg != '成功') return wx.showToast({
  269. title: res.msg,
  270. icon: "none"
  271. })
  272. if (ownertable == 'temporary') {
  273. this.selectComponent("#Yl_files").handleFiles(res.data)
  274. } else {
  275. if (res.data.length) data.attinfos = res.data;
  276. this.changeItem(data)
  277. setTimeout(() => {
  278. wx.navigateBack()
  279. }, 500)
  280. }
  281. })
  282. },
  283. changeItem(data) {
  284. this.setData({
  285. loading: false
  286. })
  287. let pages = getCurrentPages(),
  288. page = pages[pages.length - 2];
  289. if (page.__route__ == 'packageA/offers/detail') {
  290. page.getDetail(true);
  291. wx.navigateBack()
  292. } else {
  293. if (['packageA/setclient/detail', 'packageA/publicCustomer/detail'].includes(page.__route__)) {
  294. let model = page.selectComponent("#Offers");
  295. model.getList(model.data.sys_enterpriseid, true);
  296. }
  297. wx.redirectTo({
  298. url: '/packageA/offers/detail?sa_quotedpriceid=' + data.sa_quotedpriceid
  299. })
  300. }
  301. },
  302. submit() {
  303. this.setData({
  304. loading: true
  305. })
  306. let content = {
  307. ...this.selectComponent("#Form").submit(),
  308. "sa_projectid": 0, //项目id
  309. projectname: "",
  310. sa_quotedpriceid,
  311. quotedpricenotes,
  312. address
  313. };
  314. content.sys_enterpriseid = content.sys_enterpriseid[1] ? content.sys_enterpriseid[1][0] : 0;
  315. content.sys_phonebookid = content.sys_phonebookid[1] ? content.sys_phonebookid[1][0] : 0;
  316. content.saler_hrid = content.saler_hrid[1] ? content.saler_hrid[1][0] : 0;
  317. content.discountrate = (content.discountrate / 100).toFixed(4) || 1;
  318. content.begdate = content.invaliddate[0];
  319. content.enddate = content.invaliddate[1];
  320. delete(content.invaliddate)
  321. _Http.basic({
  322. "id": 20221020164803,
  323. "version": 1,
  324. content
  325. }).then(res => {
  326. console.log("添加客户报价单", res)
  327. wx.showToast({
  328. title: res.msg != '成功' ? res.msg : '保存成功',
  329. icon: "none",
  330. mask: true
  331. })
  332. if (res.msg != '成功') return this.setData({
  333. loading: false
  334. });
  335. try {
  336. let attachmentids = this.selectComponent("#Yl_files").getFiles().attachmentids;
  337. if (attachmentids.length) return this.handleFileLink(attachmentids, 'sa_quotedprice', res.data.sa_quotedpriceid, res.data);
  338. } catch (error) {
  339. }
  340. setTimeout(() => {
  341. this.changeItem(res.data)
  342. }, 500)
  343. })
  344. },
  345. // 是否显示全部
  346. onChange({
  347. detail
  348. }) {
  349. this.setData({
  350. showAll: detail
  351. })
  352. },
  353. /* 表单必填项是否完成 */
  354. onConfirm({
  355. detail
  356. }) {
  357. this.setData({
  358. disabled: detail
  359. })
  360. }
  361. })