add.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. /*******************************************************************************
  2. * Copyright(c) 2021 dongke All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:
  5. * 2.功能描述:客户收款新建
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 于继渤 2022-5-25 1.00 新建
  9. *******************************************************************************/
  10. const Constants = require('@/utils/Constants.js');
  11. import Dialog from '@/dist/dialog/dialog.js';
  12. const mixins = require('@/mixins/index.js')
  13. const app = getApp()
  14. Page({
  15. mixins: [mixins],
  16. /**
  17. * 页面的初始数据
  18. */
  19. data: {
  20. cardList: [{
  21. name: 'main'
  22. },],
  23. contentObj: {
  24. main: [{
  25. code: 'cusName',
  26. type: 'selectIcon',
  27. urlKey: 'selectCustomers',
  28. required: true,
  29. title: mixins.$t('customerName'),
  30. },
  31. {
  32. code: 'cusPhone',
  33. type: 'phone',
  34. title: mixins.$t('cusPhone'),
  35. required: true,
  36. },
  37. {
  38. code: 'addressFull',
  39. type: 'address',
  40. title: mixins.$t('adddressFull'),
  41. required: true,
  42. readonly: true,
  43. },
  44. {
  45. code: 'addressNo',
  46. type: 'str',
  47. required: true,
  48. title: mixins.$t('addressNo')
  49. },
  50. {
  51. code: 'staffId',
  52. name: 'staffName',
  53. title: mixins.$t('staffId'),
  54. type: 'choose',
  55. required: true,
  56. urlKey: 'chooseStaff'
  57. }, {
  58. code: 'orgId',
  59. name: 'orgName',
  60. title: mixins.$t('orgId'),
  61. type: 'choose',
  62. required: true,
  63. urlKey: 'chooseOrg'
  64. },
  65. {
  66. code: 'cusDebt',
  67. type: 'number',
  68. title: mixins.$t("cusDebt"),
  69. readonly: true
  70. },
  71. {
  72. code: 'sumAmtRec',
  73. type: 'number',
  74. title: mixins.$t("amountCollected"),
  75. readonly: false,
  76. required: true,
  77. },
  78. {
  79. code: 'remarks',
  80. type: 'textarea',
  81. title: mixins.$t("remarks"),
  82. readonly: false
  83. },
  84. {
  85. code: 'file',
  86. type: 'uploader',
  87. title: mixins.$t("uploader")
  88. }
  89. ],
  90. },
  91. objInfo: {},
  92. buttonSaveList: [{
  93. code: 'add',
  94. title: mixins.$t("collection")
  95. }],
  96. contentSaveList: [{
  97. code: 'need',
  98. title: mixins.$t("saleCollection"),
  99. type: 'str'
  100. }, {
  101. code: 'amount',
  102. content: 0,
  103. type: 'number'
  104. }],
  105. routeObjName: 'cusReceiptPayment',
  106. accountService: app.globalData['accountService'],
  107. customerService: app.globalData['customerService'],
  108. },
  109. /**
  110. * @desc : 计算需收款
  111. * @date : 2024/2/1 15:49
  112. * @author : 于继渤
  113. */
  114. changeNumberBlur(e) {
  115. let formData = JSON.parse(this.data.formData)
  116. let contentSaveList = this.data.contentSaveList
  117. contentSaveList[1].content = formData.sumAmtRec ? formData.sumAmtRec : 0
  118. this.setData({
  119. contentSaveList: contentSaveList
  120. })
  121. },
  122. /**
  123. * @desc : 非空校验
  124. * @author : 周兴
  125. * @date : 2024/2/20 11:46
  126. */
  127. validDatas(formData) {
  128. let flag = true;
  129. let contentObj = this.data.contentObj;
  130. contentObj['main'].forEach(item => {
  131. let title = item.title ? item.title : item.code
  132. // 如果必须输入,就要进行判断
  133. if (item.required && formData[item.code] == null) {
  134. item.errMsg = title + '不为空'
  135. flag = false;
  136. }
  137. if (item.code == 'cusPhone') {
  138. let myreg = Constants.Mobile_Phone_Number_Regular_Expression
  139. if (!myreg.test(formData[item.code])) {
  140. item.errMsg = title + '格式错误'
  141. flag = false;
  142. }
  143. }
  144. })
  145. this.setData({
  146. contentObj: contentObj
  147. })
  148. return flag;
  149. },
  150. /**
  151. * @desc : 保存数据服务-跳转收款页面
  152. * @date : 2024/2/1 15:49
  153. * @author : 于继渤
  154. */
  155. open(e) {
  156. let _this = this
  157. let data = JSON.parse(_this.data.formData)
  158. if (!_this.validDatas(data)) {
  159. return
  160. }
  161. if (!data.sumAmtRec || data.sumAmtRec == 0) {
  162. // 是否弹出询问框
  163. Dialog.confirm({
  164. message: '请输入金额',
  165. showCancelButton: false,
  166. }).then(() => {
  167. }).catch(() => { })
  168. return
  169. }
  170. // TODO 要考虑
  171. // this.setData({
  172. // loading:true
  173. // })
  174. wx.navigateTo({
  175. url: this.data.route.selectCollectionConfirm.url,
  176. events: {
  177. // 回调后
  178. refresh: function (data) {
  179. //销售订单跳转
  180. if (_this.data.formType == Constants.formMode.add) {
  181. _this.setData({
  182. loading: true,
  183. isrefresh: true
  184. })
  185. } else {
  186. let formData = {}
  187. formData.staff = {
  188. text: _this.data.orgStaffInfo.staffName,
  189. value: [_this.data.orgStaffInfo.staffId]
  190. }
  191. formData.org = {
  192. text: _this.data.orgStaffInfo.orgName,
  193. value: [_this.data.orgStaffInfo.orgId]
  194. }
  195. formData.orgId = _this.data.orgStaffInfo.orgId
  196. formData.orgName = _this.data.orgStaffInfo.orgName
  197. formData.orgList = [{
  198. orgId: _this.data.orgStaffInfo.orgId,
  199. orgName: _this.data.orgStaffInfo.orgName,
  200. ownerFlag: true,
  201. allocationRatio: 100,
  202. }]
  203. formData.staffId = _this.data.orgStaffInfo.staffId
  204. formData.staffName = _this.data.orgStaffInfo.staffName
  205. formData.staffList = [{
  206. staffId: _this.data.orgStaffInfo.staffId,
  207. staffName: _this.data.orgStaffInfo.staffName,
  208. ownerFlag: true,
  209. allocationRatio: 100,
  210. }]
  211. // 需收款
  212. let contentSaveList = _this.data.contentSaveList
  213. contentSaveList.forEach(item => {
  214. if (item.code == 'amount') {
  215. item.content = 0
  216. }
  217. })
  218. _this.setData({
  219. formData: JSON.stringify(formData),
  220. contentSaveList
  221. })
  222. }
  223. }
  224. },
  225. success: function (res) {
  226. //设置参数
  227. let item = _this.setSaveData()
  228. res.eventChannel.emit('params', {
  229. item: item,
  230. formType: 3,
  231. formReturnMode: _this.data.formReturnMode
  232. })
  233. }
  234. })
  235. },
  236. onShow() {
  237. if (this.data.isrefresh) {
  238. this.handleNavBack()
  239. }
  240. },
  241. /**
  242. * @desc : 处理保存参数
  243. * @date : 2024/2/1 15:49
  244. * @author : 于继渤
  245. */
  246. setSaveData() {
  247. let formData = JSON.parse(this.data.formData)
  248. let param = formData
  249. param.cusName = formData.cusName
  250. param.objInfo = {}
  251. param.objInfo['cusPhone'] = formData.cusPhone
  252. param.objInfo['cusName'] = formData.cusName
  253. param.objInfo['objectId'] = formData.cusId
  254. param.objInfo['addressFull'] = formData.addressFull
  255. param.cusName = formData.cusName
  256. param.cusPhone = formData.cusPhone
  257. param.addressFull = formData.addressFull
  258. if (this.data.formMode !== Constants.formMode.other) {
  259. param.orgId = formData.orgId ? formData.orgId : app.globalData.user.orgId
  260. param.orgName = formData.orgName ? formData.orgName : app.globalData.user.orgName
  261. param.staffId = formData.staffId ? formData.staffId : app.globalData.user.staffId
  262. param.staffName = formData.staffName ? formData.staffName : app.globalData.user.staffName
  263. param.objectId = formData.cusId
  264. } else {
  265. //编辑退款
  266. param.editFlag = true
  267. this.data.dataItem.forEach(res => {
  268. res.checked = true
  269. res.sumAmount = Number(res.amtRec).toFixed(2)
  270. })
  271. param.dataItem = this.data.dataItem
  272. }
  273. param.annexPaths = formData.annexPaths
  274. param.rpType = '收付款类型-收款'
  275. param.sumAmtRec = formData.sumAmtRec
  276. param.sumAmount = formData.sumAmtRec
  277. // 设定当前多业务部门业务员
  278. this.setData({
  279. orgStaffInfo: {
  280. staff: {
  281. text: param.staffName ? param.staffName : app.globalData.user.staffName,
  282. value: [param.staffId ? param.staffId : app.globalData.user.staffId]
  283. },
  284. org: {
  285. text: param.orgName ? param.orgName : app.globalData.user.orgName,
  286. value: [param.orgId ? param.orgId : app.globalData.user.orgId]
  287. },
  288. orgId: param.orgId ? param.orgId : app.globalData.user.orgId,
  289. staffId: param.staffId ? param.staffId : app.globalData.user.staffId,
  290. orgName: param.orgName,
  291. staffName: param.staffName,
  292. staffList: param.staffList,
  293. orgList: param.orgList,
  294. }
  295. })
  296. return JSON.stringify(param)
  297. },
  298. /**
  299. * @desc : 选择回调
  300. * @author : 于继渤
  301. * @date : 2024/1/26 11:46
  302. */
  303. chooseData(e) {
  304. let item = e.detail.data
  305. let code = e.detail.code
  306. let formData = JSON.parse(this.data.formData)
  307. if (code == "staffId") { //员工
  308. formData.staffId = item.data.id
  309. formData.staffName = item.data.name
  310. formData.orgId = item.data.orgId
  311. formData.orgName = item.data.orgName
  312. }
  313. if (code == "orgId") { //部门
  314. formData.orgId = item.data.id
  315. formData.orgName = item.data.name
  316. }
  317. //设置客户信息
  318. if (code == 'cusName') {
  319. formData.cusCode = item.cusCode
  320. formData.cusId = item.cusId
  321. formData.cusName = item.cusName
  322. formData.cusPhone = item.cusPhone
  323. formData.cusFromName = item.cusFromName
  324. formData.cusFrom = item.cusFrom
  325. formData.cusDebt = item.cusDebt
  326. //处理地址
  327. formData.address = {
  328. address: item.addressFull,
  329. addressFull: item.addressFull,
  330. addressArea: item.addressArea,
  331. addressGcj02: item.addressGcj02,
  332. addressName: item.addressName,
  333. }
  334. formData.addressArea = item.addressArea
  335. formData.addressFull = item.addressFull
  336. formData.addressGcj02 = item.addressGcj02
  337. formData.addressName = item.addressName
  338. formData.addressNo = item.addressNo
  339. //订单销售渠道 ,默认取的客户的渠道
  340. formData.salesChannel = item.channelId
  341. formData.channelId = item.channelId
  342. formData.channelName = item.channelName
  343. formData.contactPhone = item.contactPhone
  344. formData.contactPhone = item.contactPhone
  345. }
  346. ///设置主从业务员
  347. if (code == 'staff') {
  348. formData.staff = item.staffItem
  349. formData['staffId'] = item.staffMain.staffId
  350. formData['staffName'] = item.staffMain.staffName
  351. formData['staffList'] = item.staffList
  352. }
  353. ///设置主从业务部门
  354. if (code == 'org') {
  355. formData.org = item.orgItem
  356. formData['orgId'] = item.orgMain.orgId
  357. formData['orgName'] = item.orgMain.orgName
  358. formData['orgList'] = item.orgList
  359. }
  360. this.setData({
  361. formData: JSON.stringify(formData)
  362. })
  363. },
  364. /**
  365. * @desc : 编辑用
  366. * @date : 2024/2/1 15:49
  367. * @author : 于继渤
  368. */
  369. getRpForUpdate(id) {
  370. return this.excute(this.data.service, this.data.service.getRpForUpdate + '/' + id, {}).then(res => {
  371. if (res.data.code == 200) {
  372. let data = res.data.data.data
  373. data.customerId = data.cusId
  374. data.objInfo = {
  375. cusId: data.cusId,
  376. cusName: data.cusName,
  377. cusPhone: data.cusPhone,
  378. cusCode: data.cusCode
  379. }
  380. //处理地址
  381. data.address = {
  382. address: data.addressFull,
  383. addressFull: data.addressFull,
  384. addressArea: data.addressArea,
  385. addressGcj02: data.addressGcj02,
  386. addressName: data.addressName,
  387. }
  388. //处理顶部
  389. data['staff'] = {
  390. text: data.staffName,
  391. value: [data.staffId]
  392. }
  393. data['org'] = {
  394. text: data.orgName,
  395. value: [data.orgId]
  396. }
  397. data.orgList = [{
  398. orgId: data.orgId,
  399. orgName: data.orgName,
  400. ownerFlag: true,
  401. allocationRatio: 100,
  402. }]
  403. data.staffList = [{
  404. staffId: data.staffId,
  405. staffName: data.staffName,
  406. ownerFlag: true,
  407. allocationRatio: 100,
  408. }]
  409. this.setData({
  410. formData: JSON.stringify(data),
  411. dataItem: res.data.data.dataItem
  412. })
  413. // 获取当前客户的账款信息
  414. this.getAccount(data.objectId)
  415. this.changeNumberBlur()
  416. }
  417. });
  418. },
  419. /**
  420. * @desc : 获取当前客户的账款信息
  421. * @date : 2024/2/1 15:49
  422. * @author : 姜永辉
  423. */
  424. getAccount(id) {
  425. return this.excute(this.data.accountService, this.data.accountService.getAccount + id, {}).then(res => {
  426. if (res.data.code == 200) {
  427. let formData = JSON.parse(this.data.formData)
  428. if (res.data.data) {
  429. let data = res.data.data
  430. if (data!=null) {
  431. data.receivableResidue = data.receivableResidue ? Number(data.receivableResidue) : 0
  432. data.receiptResidue = data.receiptResidue ? Number(data.receiptResidue) : 0
  433. formData.cusDebt = Number(data.receivableResidue - data.receiptResidue) > 0 ? Number(data.receivableResidue - data.receiptResidue) : 0
  434. }else {
  435. formData.cusDebt = 0
  436. }
  437. } else {
  438. formData.cusDebt = 0
  439. }
  440. this.setData({
  441. formData: JSON.stringify(formData)
  442. })
  443. }
  444. });
  445. },
  446. /**
  447. * 生命周期函数--监听页面加载
  448. */
  449. loadInit() {
  450. let formData = JSON.parse(this.data.formData)
  451. formData['staff'] = {
  452. text: app.globalData.user.staffName,
  453. value: [app.globalData.user.staffId]
  454. }
  455. formData['org'] = {
  456. text: app.globalData.user.orgName,
  457. value: [app.globalData.user.orgId]
  458. }
  459. formData.staffName = app.globalData.user.staffName,
  460. formData.orgName = app.globalData.user.orgName,
  461. formData.orgId = app.globalData.user.orgId
  462. formData.orgList = [{
  463. orgId: app.globalData.user.orgId,
  464. orgName: app.globalData.user.orgName,
  465. ownerFlag: true,
  466. allocationRatio: 100,
  467. }]
  468. formData.staffId = app.globalData.user.staffId
  469. formData.staffList = [{
  470. staffId: app.globalData.user.staffId,
  471. staffName: app.globalData.user.staffName,
  472. ownerFlag: true,
  473. allocationRatio: 100,
  474. }]
  475. //编辑收款
  476. if (this.data.formMode == Constants.formMode.other) {
  477. wx.setNavigationBarTitle({
  478. title: '编辑客户收款',
  479. })
  480. this.getRpForUpdate(this.data.id)
  481. // 控制客户名称和电话不能修改
  482. let contentObj = this.data.contentObj
  483. contentObj.main.forEach(it=>{
  484. if(it.code == 'cusName' || it.code == 'cusPhone' || it.code == 'addressFull'|| it.code == 'addressNo'){
  485. it.readonly = true
  486. it.readonlyItem = true
  487. }
  488. })
  489. this.setData({
  490. contentObj:contentObj
  491. })
  492. console.log('contentObj',contentObj);
  493. }
  494. //销售订单跳转
  495. if (this.data.formType == Constants.formMode.add) {
  496. formData.cusCode = this.data.item.cusCode
  497. formData.cusId = this.data.item.cusId
  498. formData.cusName = this.data.item.cusName
  499. formData.cusPhone = this.data.item.cusPhone
  500. formData.cusFromName = this.data.item.cusFromName
  501. formData.cusFrom = this.data.item.cusFrom
  502. //处理地址
  503. formData.address = {
  504. address: this.data.item.addressFull,
  505. addressFull: this.data.item.addressFull,
  506. addressArea: this.data.item.addressArea,
  507. addressGcj02: this.data.item.addressGcj02,
  508. addressName: this.data.item.addressName,
  509. }
  510. formData.addressArea = this.data.item.addressArea
  511. formData.addressFull = this.data.item.addressFull
  512. formData.addressGcj02 = this.data.item.addressGcj02
  513. formData.addressName = this.data.item.addressName
  514. formData.addressNo = this.data.item.addressNo
  515. //订单销售渠道 ,默认取的客户的渠道
  516. formData.salesChannel = this.data.item.channelId
  517. formData.channelId = this.data.item.channelId
  518. formData.channelName = this.data.item.channelName
  519. formData.contactPhone = this.data.item.contactPhone
  520. formData.contactPhone = this.data.item.contactPhone
  521. // 获取当前客户的账款信息
  522. this.getAccount(formData.cusId)
  523. }
  524. if (this.data.formMode == "sourceCus") { //从客户列表跳转过来的
  525. let contentObj = this.data.contentObj
  526. contentObj = this.setContentObjReadonly(contentObj)
  527. this.setData({
  528. contentObj:contentObj
  529. })
  530. }
  531. this.setData({
  532. formData: JSON.stringify(formData)
  533. })
  534. },
  535. /**
  536. * 客户列表中 客户跟进,跟进任务和客户收款,跳转到新建界面都要把客户信息带过去,并且客户信息不能修改(bug 7605)
  537. * @desc : 设置form (ContentObj)哪些可以输入
  538. * @date : 2024/2/1 15:49
  539. * @author : 王英杰
  540. */
  541. setContentObjReadonly(Obj) {
  542. let contentObj = Obj
  543. if (this.data.formMode == "sourceCus") { //从客户列表跳转过来的
  544. let cusName_index = contentObj.main.findIndex(it => it.code == "cusName")
  545. let cusPhone_index = contentObj.main.findIndex(it => it.code == "cusPhone")
  546. let addressFull_index = contentObj.main.findIndex(it => it.code == "addressFull")
  547. let addressNo_index = contentObj.main.findIndex(it => it.code == "addressNo")
  548. if (cusName_index >= 0) {
  549. contentObj.main[cusName_index].readonly = true
  550. }
  551. if (cusPhone_index >= 0) {
  552. contentObj.main[cusPhone_index].readonly = true
  553. }
  554. if (addressFull_index >= 0) {
  555. contentObj.main[addressFull_index].readonly = true
  556. }
  557. if (addressNo_index >= 0) {
  558. contentObj.main[addressNo_index].readonly = true
  559. }
  560. }
  561. return contentObj
  562. },
  563. /**
  564. * @desc : 手机号离焦事件
  565. * @author : 于继渤
  566. * @date : 2024/1/26 11:46
  567. */
  568. changePhoneblur(e) {
  569. let formData = JSON.parse(this.data.formData)
  570. if (formData.cusPhone) {
  571. this.getCustomerData({
  572. cusPhone: formData.cusPhone
  573. })
  574. }
  575. },
  576. /**
  577. * @desc : 查询客户信息
  578. * @author : 于继渤
  579. * @date : 2024/1/23 9:16
  580. */
  581. getCustomerData(params) {
  582. return this.excute(this.data.customerService, this.data.customerService.selectByCondNoPage, params).then(res => {
  583. if (res.data.code == 200) {
  584. if (res.data.data.length > 0) {
  585. let formData = JSON.parse(this.data.formData)
  586. let item = res.data.data[0]
  587. formData.cusCode = item.cusCode
  588. formData.cusId = item.cusId
  589. formData.cusName = item.cusName
  590. // formData.cusPhone = item.cusPhone
  591. formData.cusFromName = item.cusFromName
  592. formData.cusFrom = item.cusFrom
  593. //处理地址
  594. formData.address = {
  595. address: item.addressFull,
  596. addressFull: item.addressFull,
  597. addressArea: item.addressArea,
  598. addressGcj02: item.addressGcj02,
  599. addressName: item.addressName,
  600. }
  601. formData.addressArea = item.addressArea
  602. formData.addressFull = item.addressFull
  603. formData.addressGcj02 = item.addressGcj02
  604. formData.addressName = item.addressName
  605. formData.addressNo = item.addressNo
  606. //订单销售渠道 ,默认取的部门的渠道
  607. // formData.salesChannel = item.channelId
  608. // formData.channelId = item.channelId
  609. // formData.channelName = item.channelName
  610. formData.contactPhone = item.contactPhone
  611. formData.contactPhone = item.contactPhone
  612. this.setData({
  613. formData: JSON.stringify(formData)
  614. })
  615. }
  616. }
  617. });
  618. },
  619. })