dk-form.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. /*******************************************************************************
  2. * Copyright(c) 2024 dongke All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:
  5. * 2.功能描述:表单-(基础数据)
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 周兴 2024-1-30 1.00 新建
  9. *******************************************************************************/
  10. const common = require('@/utils/common');
  11. const Constants = require('@/utils/Constants');
  12. const util = require('@/utils/util.js')
  13. const chooseLocation = requirePlugin('chooseLocation');
  14. const config = require('@/config/config.js')
  15. const app = getApp();
  16. Component({
  17. /**
  18. * 组件的属性列表
  19. */
  20. properties: {
  21. // 区域
  22. cardList: {
  23. type: Array,
  24. value: []
  25. },
  26. // 表名,用于上传附件
  27. table: {
  28. type: String,
  29. },
  30. // 内容
  31. contentObj: {
  32. type: Object,
  33. },
  34. // 结果集
  35. value: {
  36. type: String,
  37. observer: function (newVal) {
  38. if (newVal) {
  39. this.setData({
  40. form: JSON.parse(newVal) || {}
  41. })
  42. } else {
  43. this.setData({
  44. form: {}
  45. })
  46. }
  47. }
  48. },
  49. routeObjName: {
  50. type: String,
  51. }
  52. },
  53. /**
  54. * 组件的初始数据
  55. */
  56. data: {
  57. // 是否显示pop
  58. show: false,
  59. mutishow: false,
  60. showDate: false,
  61. showDateTime: false,
  62. currentDate: new Date().getTime(),
  63. $t: app.globalData.lang,
  64. routeUrl: app.globalData['routeUrl'],
  65. item: null,
  66. index: null,
  67. card: null,
  68. // 下拉类型
  69. dropType: null,
  70. dropCode: null,
  71. dropName: null,
  72. // 根据值控制组件的显示隐藏
  73. changeObj: null,
  74. form: {},
  75. maxSize: Constants.uploadFileConfig.maxSize,
  76. checked: false
  77. },
  78. lifetimes: {
  79. attached: function () {},
  80. detached: function () {
  81. // 在组件实例被从页面节点树移除时执行
  82. },
  83. },
  84. pageLifetimes: {
  85. /**
  86. * @desc : 生命周期函数--监听页面显示
  87. * @author : 周兴
  88. * @date : 2024/2/19 12:16
  89. */
  90. show: function () {
  91. const location = chooseLocation.getLocation();
  92. let form = this.data.form
  93. if (location) {
  94. form['address'] = location;
  95. form['addressName'] = location.name;
  96. form['addressFull'] = form['addressFull'] ? form['addressFull'] : location.address + location.name;
  97. form['addressGcj02'] = {
  98. latitude: location.latitude,
  99. longitude: location.longitude
  100. };
  101. form['addressArea'] = {
  102. province: location.province,
  103. city: location.city,
  104. district: location.district == undefined || !location.district ? location.city : location.district
  105. }
  106. // 如果有校验信息就清除掉
  107. let card = this.data.card;
  108. let index = this.data.index;
  109. let contentObj = this.data.contentObj;
  110. if (card && contentObj[card][index]?.errMsg) {
  111. contentObj[card][index].errMsg = undefined;
  112. this.setData({
  113. contentObj: contentObj
  114. })
  115. }
  116. }
  117. this.setData({
  118. value: JSON.stringify(form),
  119. form: form
  120. })
  121. }
  122. },
  123. /**
  124. * 组件的方法列表
  125. */
  126. methods: {
  127. /**
  128. * @desc : 打开下拉
  129. * @author : 周兴
  130. * @date : 2024/1/26 11:46
  131. */
  132. open(e) {
  133. let item = e.currentTarget.dataset;
  134. this.setData({
  135. dropCode: item.key,
  136. dropName: item.name,
  137. dropType: item.type,
  138. index: item.index,
  139. card: item.card
  140. })
  141. console.log('ee', e);
  142. // 单选
  143. if (item.item.type == 'drop') {
  144. this.setData({
  145. show: true,
  146. changeObj: item.item.changeObj,
  147. })
  148. // 多选
  149. } else if (item.item.type == 'mutidrop') {
  150. this.setData({
  151. mutishow: true
  152. })
  153. } else if (item.item.type == 'choose') {
  154. let that = this
  155. console.log(item, this.data.routeObjName, this.data.routeUrl);
  156. that.setData({
  157. changeObj: item.item.changeObj,
  158. })
  159. // 跳转链接
  160. if (item.item.urlKey) {
  161. let route = this.data.routeUrl[this.data.routeObjName][item.item.urlKey]
  162. let url = route.url
  163. // TODO
  164. // url = '/package-base-select/pages/select-customers/select-customers'
  165. if (url) {
  166. wx.navigateTo({
  167. url: url,
  168. events: {
  169. // 回调后
  170. bindData: function (data) {
  171. let contentObj = that.data.contentObj
  172. // 是否根据值进行控制其他组件显示、隐藏
  173. let changeObj = that.data.changeObj
  174. let key = data.data.id;
  175. let card = that.data.card;
  176. if (changeObj && changeObj[key]) {
  177. // 显示
  178. if (changeObj[key]['visible']) {
  179. changeObj[key]['visible'].forEach(it => {
  180. let index = contentObj[card].findIndex(t => t.code == it)
  181. console.log('index', index);
  182. if (contentObj[card][index]) {
  183. contentObj[card][index].hide = false
  184. }
  185. })
  186. }
  187. // 隐藏
  188. if (changeObj[key]['hide']) {
  189. changeObj[key]['hide'].forEach(it => {
  190. let index = contentObj[card].findIndex(t => t.code == it)
  191. console.log('index', index);
  192. if (contentObj[card][index]) {
  193. contentObj[card][index].hide = true
  194. }
  195. })
  196. }
  197. }
  198. that.setData({
  199. contentObj: contentObj
  200. })
  201. that.triggerEvent("chooseData", {
  202. code: item.key,
  203. data: data
  204. })
  205. }
  206. },
  207. success: function (res) {
  208. console.log('item', that.data.form)
  209. let data = {
  210. route: route,
  211. formMode: item.item.formMode,
  212. id: that.data.form[item.item.idKey],
  213. chooseType: item.item.chooseType
  214. }
  215. if (that.data.form[item.item.code]) {
  216. data[item.item.code] = that.data.form[item.item.code]
  217. }
  218. // 通过eventChannel向被打开页面传送数据
  219. // that.data.form.formMode = item.item.formMode
  220. // that.data.form.id = that.data.form[item.item.idKey]
  221. // that.data.form.chooseType = item.item.chooseType
  222. res.eventChannel.emit('params', data)
  223. }
  224. })
  225. }
  226. }
  227. }
  228. },
  229. /**
  230. * @desc : 非空校验
  231. * @author : 周兴
  232. * @date : 2024/2/20 11:46
  233. */
  234. validData() {
  235. let flag = true;
  236. let cardList = this.data.cardList;
  237. if (!cardList || cardList.length == 0) {
  238. return flag;
  239. }
  240. let form = this.data.form;
  241. let contentObj = this.data.contentObj;
  242. cardList.forEach(card => {
  243. if (contentObj[card]) {
  244. contentObj[card].forEach(item => {
  245. let title = this.$t(item.title ? item.title : item.code)
  246. // 如果必须输入,就要进行判断
  247. if (item.required && !form[item.code]) {
  248. item.errMsg = title + '不为空'
  249. flag = false;
  250. }
  251. })
  252. }
  253. })
  254. this.setData({
  255. contentObj: contentObj
  256. })
  257. return flag;
  258. },
  259. /**
  260. * @desc : 选择数据
  261. * @author : 周兴
  262. * @date : 2024/1/26 11:46
  263. */
  264. chooseData(e) {
  265. let contentObj = this.data.contentObj;
  266. let form = this.data.form
  267. if (e.detail.ids) {
  268. form[this.data.dropCode + 's'] = e.detail.ids;
  269. form[this.data.dropName + 's'] = e.detail.names;
  270. } else {
  271. form[this.data.dropCode] = e.detail.value;
  272. form[this.data.dropName] = e.detail.text;
  273. }
  274. let card = this.data.card;
  275. // 选择后清空校验提示信息
  276. if (card && contentObj[card][this.data.index]?.errMsg && e.detail) {
  277. contentObj[card][this.data.index].errMsg = undefined;
  278. }
  279. this.setData({
  280. value: JSON.stringify(form),
  281. form: form,
  282. contentObj: contentObj
  283. })
  284. // 是否根据值进行控制其他组件显示、隐藏
  285. let changeObj = this.data.changeObj
  286. let key = util.getKeyByValue(Constants.kindCode, e.detail.value);
  287. if (changeObj && changeObj[key]) {
  288. // 显示
  289. if (changeObj[key]['visible']) {
  290. changeObj[key]['visible'].forEach(it => {
  291. let index = contentObj[card].findIndex(t => t.code == it)
  292. console.log('index', index);
  293. if (contentObj[card][index]) {
  294. contentObj[card][index].hide = false
  295. }
  296. })
  297. }
  298. // 隐藏
  299. if (changeObj[key]['hide']) {
  300. changeObj[key]['hide'].forEach(it => {
  301. let index = contentObj[card].findIndex(t => t.code == it)
  302. console.log('index', index);
  303. if (contentObj[card][index]) {
  304. contentObj[card][index].hide = true
  305. }
  306. })
  307. }
  308. }
  309. this.setData({
  310. contentObj: contentObj
  311. })
  312. // 如果处理id,name还需要赋值其他,需要在页面事件中自行处理
  313. this.triggerEvent("chooseData", {
  314. code: this.data.dropCode,
  315. list: e.detail.list
  316. })
  317. },
  318. /**
  319. * @desc : 打开日期pop
  320. * @author : 周兴
  321. * @date : 2024/1/26 11:46
  322. */
  323. openDatePop(e) {
  324. let item = e.currentTarget.dataset;
  325. this.setData({
  326. showDate: true,
  327. index: item.index,
  328. key: item.key,
  329. card: item.card
  330. })
  331. },
  332. /**
  333. * @desc : 关闭日期pop
  334. * @author : 周兴
  335. * @date : 2024/1/26 11:46
  336. */
  337. cancelDatePop() {
  338. this.setData({
  339. showDate: false
  340. })
  341. },
  342. /**
  343. * @desc : 选择日期
  344. * @author : 周兴
  345. * @date : 2024/1/26 11:46
  346. */
  347. chooseDate(e) {
  348. let form = this.data.form;
  349. let index = this.data.index;
  350. let card = this.data.card;
  351. let code = this.data.key;
  352. form[code + '_time'] = e.detail
  353. form[code] = util.toDateStr(e.detail);
  354. let contentObj = this.data.contentObj;
  355. if (card && contentObj[card][index]?.errMsg && e.detail) {
  356. contentObj[card][index].errMsg = undefined;
  357. }
  358. this.setData({
  359. value: JSON.stringify(form),
  360. form: form,
  361. contentObj: contentObj,
  362. showDate: false
  363. })
  364. },
  365. /**
  366. * @desc : 修改输入框的值
  367. * @author : 周兴
  368. * @date : 2024/2/2 11:46
  369. */
  370. changeField(e) {
  371. let ds = e.currentTarget.dataset
  372. let key = ds.key
  373. let item = ds.item
  374. let form = this.data.form
  375. form[key] = e.detail
  376. let contentObj = this.data.contentObj;
  377. // 输入值后清空校验提示信息
  378. if (item.errMsg && e.detail) {
  379. contentObj[ds.card][ds.index].errMsg = undefined;
  380. }
  381. this.setData({
  382. value: JSON.stringify(form),
  383. form: form,
  384. contentObj: contentObj
  385. })
  386. },
  387. /**
  388. * @desc : 清空输入框的值
  389. * @author : 周兴
  390. * @date : 2024/2/2 11:46
  391. */
  392. clearField(e) {
  393. console.log('eee', e);
  394. let ds = e.currentTarget.dataset
  395. let key = ds.key
  396. let form = this.data.form
  397. form[key] = undefined
  398. this.setData({
  399. value: JSON.stringify(form),
  400. form: form
  401. })
  402. // 如果要清除其他值,需要调用
  403. this.triggerEvent("clear", {
  404. code: ds.key
  405. })
  406. },
  407. /**
  408. * @desc : 清空选单的值
  409. * @author : 周兴
  410. * @date : 2024/2/2 11:46
  411. */
  412. clearChoose(e) {
  413. let ds = e.currentTarget.dataset
  414. let key = ds.key
  415. let name = ds.name
  416. let form = this.data.form
  417. form[key] = undefined
  418. form[name] = undefined
  419. this.setData({
  420. value: JSON.stringify(form),
  421. form: form
  422. })
  423. // 如果要清除其他值,需要调用
  424. this.triggerEvent("clear", {
  425. code: ds.key
  426. })
  427. },
  428. /**
  429. * @desc : 清空地址的值
  430. * @author : 周兴
  431. * @date : 2024/2/2 11:46
  432. */
  433. clearAddress(e) {
  434. let form = this.data.form
  435. form['address'] = undefined
  436. this.setData({
  437. value: JSON.stringify(form),
  438. form: form
  439. })
  440. // 如果要清除其他值,需要调用
  441. this.triggerEvent("clear", {
  442. code: ds.key
  443. })
  444. },
  445. /**
  446. * @desc : 清空日期的值
  447. * @author : 周兴
  448. * @date : 2024/2/2 11:46
  449. */
  450. clearDate(e) {
  451. let ds = e.currentTarget.dataset
  452. let key = ds.key
  453. let form = this.data.form
  454. form[key] = undefined
  455. form[key + '_time'] = undefined
  456. this.setData({
  457. value: JSON.stringify(form),
  458. form: form
  459. })
  460. },
  461. /**
  462. * @desc : 修改数值输入框的值
  463. * @author : 周兴
  464. * @date : 2024/2/2 11:46
  465. */
  466. changeNumberField(e) {
  467. let ds = e.currentTarget.dataset
  468. let key = ds.key
  469. let item = ds.item
  470. let form = this.data.form
  471. form[key] = e.detail.value
  472. let contentObj = this.data.contentObj;
  473. // 输入值后清空校验提示信息
  474. if (item.errMsg && e.detail) {
  475. contentObj[ds.card][ds.index].errMsg = undefined;
  476. }
  477. this.setData({
  478. value: JSON.stringify(form),
  479. form: form,
  480. contentObj: contentObj
  481. })
  482. },
  483. /**
  484. * @desc : 修改电话的值
  485. * @author : 周兴
  486. * @date : 2024/2/2 11:46
  487. */
  488. changePhone(e) {
  489. let ds = e.currentTarget.dataset;
  490. let key = ds.key;
  491. let index = ds.index;
  492. let card = ds.card;
  493. let form = this.data.form
  494. form[key] = e.detail.detail
  495. let contentObj = this.data.contentObj;
  496. if (card && contentObj[card][index]?.errMsg && e.detail.detail) {
  497. contentObj[card][index].errMsg = undefined;
  498. }
  499. this.setData({
  500. value: JSON.stringify(form),
  501. form: form,
  502. contentObj: contentObj
  503. })
  504. },
  505. /**
  506. * @desc : 给电话赋值错误信息
  507. * @author : 周兴
  508. * @date : 2024/2/20 11:46
  509. */
  510. changePhoneblur(e) {
  511. let ds = e.currentTarget.dataset
  512. let errMsg = e.detail.errMsg;
  513. let card = ds.card;
  514. let index = ds.index;
  515. let contentObj = this.data.contentObj;
  516. if (errMsg && card && contentObj[card][index]) {
  517. contentObj[card][index].errMsg = errMsg;
  518. this.setData({
  519. errMsg: errMsg
  520. })
  521. }
  522. this.triggerEvent('changePhoneblur', e)
  523. },
  524. /**
  525. * @desc : 小程序地图调用
  526. * @author : 周兴
  527. * @date : 2024/2/18 18:16
  528. */
  529. onClickWxchartAddress(e) {
  530. // 跳转新建地图实例
  531. common.onClickWxchartAddress();
  532. let item = e.currentTarget.dataset;
  533. this.setData({
  534. index: item.index,
  535. card: item.card
  536. })
  537. },
  538. /**
  539. * @desc : 改变选择框内容
  540. * @author : 周兴
  541. * @date : 2024/1/26 11:46
  542. */
  543. onChange(e) {
  544. let key = e.currentTarget.dataset.key
  545. let checkFlag = e.currentTarget.dataset.value
  546. let form = this.data.form
  547. form[key] = !checkFlag
  548. this.setData({
  549. value: JSON.stringify(form),
  550. form: form
  551. })
  552. },
  553. /**
  554. * @desc : 改变选择框内容
  555. * @author : 周兴
  556. * @date : 2024/1/26 11:46
  557. */
  558. changeTabs(e) {
  559. let key = e.currentTarget.dataset.key
  560. let id = e.detail.id
  561. let form = this.data.form
  562. form[key] = id
  563. this.setData({
  564. value: JSON.stringify(form),
  565. form: form
  566. })
  567. },
  568. /**
  569. * @desc : 打开日期pop
  570. * @author : 周兴
  571. * @date : 2024/1/26 11:46
  572. */
  573. openDatePopTime(e) {
  574. console.log('openDatePopTime')
  575. let item = e.currentTarget.dataset;
  576. this.setData({
  577. showDateTime: true,
  578. index: item.index,
  579. key: item.key,
  580. card: item.card
  581. })
  582. },
  583. /**
  584. * @desc : 关闭日期pop
  585. * @author : 周兴
  586. * @date : 2024/1/26 11:46
  587. */
  588. cancelDatePopTime() {
  589. this.setData({
  590. showDateTime: false
  591. })
  592. },
  593. /**
  594. * @desc : 选择日期
  595. * @author : 周兴
  596. * @date : 2024/1/26 11:46
  597. */
  598. chooseDateTime(e) {
  599. let form = this.data.form;
  600. let index = this.data.index;
  601. let card = this.data.card;
  602. let code = this.data.key;
  603. form[code + '_time'] = e.detail
  604. form[code] = util.formatDataTime(new Date(e.detail));
  605. let contentObj = this.data.contentObj;
  606. if (card && contentObj[card][index]?.errMsg && e.detail) {
  607. contentObj[card][index].errMsg = undefined;
  608. }
  609. this.setData({
  610. value: JSON.stringify(form),
  611. form: form,
  612. contentObj: contentObj,
  613. showDateTime: false
  614. })
  615. },
  616. /**
  617. * @desc : 是点击事件
  618. * @author : 于继渤
  619. * @date : 2024/1/26 11:46
  620. */
  621. onChangeCheckedBoxYes(e) {
  622. let form = this.data.form;
  623. let code = e.currentTarget.dataset.key;
  624. form[code] = e.detail
  625. this.setData({
  626. value: JSON.stringify(form),
  627. form: form,
  628. })
  629. },
  630. /**
  631. * @desc : 否点击事件
  632. * @author : 于继渤
  633. * @date : 2024/1/26 11:46
  634. */
  635. onChangeCheckedBoxNo(e) {
  636. let form = this.data.form;
  637. let code = e.currentTarget.dataset.key;
  638. form[code] = !e.detail
  639. this.setData({
  640. value: JSON.stringify(form),
  641. form: form,
  642. })
  643. },
  644. /**
  645. * @desc : 上传附件超出大小
  646. * @author : 周兴
  647. * @date : 2024/3/27 16:16
  648. */
  649. overSize(e) {
  650. util.showToast('文件超出' + Constants.uploadFileConfig.maxSizeMB);
  651. },
  652. /**
  653. * @desc : 上传附件
  654. * @author : 周兴
  655. * @date : 2024/3/27 16:16
  656. */
  657. afterRead(e) {
  658. // this.setData({
  659. // uploadFileFlag:true
  660. // })
  661. const _this = this;
  662. const {
  663. file
  664. } = e.detail;
  665. // 配置存放的文件夹 公司code - 表名 - 年月 -- 日
  666. let folder = app.globalData.company.cpCode + '/' + this.data.table + '/' + new Date().toYearMonth2() + '/' + new Date().toDay()
  667. let url = config.upload_url;
  668. url = url.replace('mdm-server', 'mdm-server' + '-' + app.globalData.company.svcCode.replace('_', '-'))
  669. file.forEach(res => {
  670. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  671. wx.uploadFile({
  672. url: url,
  673. filePath: res.path,
  674. name: 'file',
  675. formData: {
  676. 'folder': folder
  677. },
  678. header: {
  679. 'Authorization': 'Bearer ' + app.globalData.token
  680. },
  681. success(res) {
  682. let data = JSON.parse(res.data)
  683. if (data.code === 200) {
  684. _this.setData({
  685. uploadFileFlag: false
  686. })
  687. let form = _this.data.form
  688. let annexPaths = form['annexPaths'] || []
  689. data.data.url = config.image_url + data.data.path
  690. annexPaths.push(data.data)
  691. form.annexPaths = annexPaths;
  692. _this.setData({
  693. form: form,
  694. value: JSON.stringify(form)
  695. })
  696. console.log('ff', _this.data.form);
  697. }
  698. },
  699. })
  700. })
  701. },
  702. /**
  703. * @desc : 获取语言的方法
  704. * @author : 周兴
  705. * @date : 2024/1/19
  706. */
  707. $t(name) {
  708. if (this.data.$t[name]) {
  709. return this.data.$t[name];
  710. } else {
  711. return name;
  712. }
  713. },
  714. },
  715. })