dk-form.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  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. if(item.item.readonly){
  326. return
  327. }
  328. this.setData({
  329. showDate: true,
  330. index: item.index,
  331. key: item.key,
  332. card: item.card
  333. })
  334. },
  335. /**
  336. * @desc : 关闭日期pop
  337. * @author : 周兴
  338. * @date : 2024/1/26 11:46
  339. */
  340. cancelDatePop() {
  341. this.setData({
  342. showDate: false
  343. })
  344. },
  345. /**
  346. * @desc : 选择日期
  347. * @author : 周兴
  348. * @date : 2024/1/26 11:46
  349. */
  350. chooseDate(e) {
  351. let form = this.data.form;
  352. let index = this.data.index;
  353. let card = this.data.card;
  354. let code = this.data.key;
  355. form[code + '_time'] = e.detail
  356. form[code] = util.toDateStr(e.detail);
  357. let contentObj = this.data.contentObj;
  358. if (card && contentObj[card][index]?.errMsg && e.detail) {
  359. contentObj[card][index].errMsg = undefined;
  360. }
  361. this.setData({
  362. value: JSON.stringify(form),
  363. form: form,
  364. contentObj: contentObj,
  365. showDate: false
  366. })
  367. },
  368. /**
  369. * @desc : 修改输入框的值
  370. * @author : 周兴
  371. * @date : 2024/2/2 11:46
  372. */
  373. changeField(e) {
  374. let ds = e.currentTarget.dataset
  375. let key = ds.key
  376. let item = ds.item
  377. let form = this.data.form
  378. form[key] = e.detail
  379. let contentObj = this.data.contentObj;
  380. // 输入值后清空校验提示信息
  381. if (item.errMsg && e.detail) {
  382. contentObj[ds.card][ds.index].errMsg = undefined;
  383. }
  384. this.setData({
  385. value: JSON.stringify(form),
  386. form: form,
  387. contentObj: contentObj
  388. })
  389. },
  390. /**
  391. * @desc : 清空输入框的值
  392. * @author : 周兴
  393. * @date : 2024/2/2 11:46
  394. */
  395. clearField(e) {
  396. console.log('eee', e);
  397. let ds = e.currentTarget.dataset
  398. let key = ds.key
  399. let form = this.data.form
  400. form[key] = undefined
  401. this.setData({
  402. value: JSON.stringify(form),
  403. form: form
  404. })
  405. // 如果要清除其他值,需要调用
  406. this.triggerEvent("clear", {
  407. code: ds.key
  408. })
  409. },
  410. /**
  411. * @desc : 清空选单的值
  412. * @author : 周兴
  413. * @date : 2024/2/2 11:46
  414. */
  415. clearChoose(e) {
  416. let ds = e.currentTarget.dataset
  417. let key = ds.key
  418. let name = ds.name
  419. let form = this.data.form
  420. form[key] = undefined
  421. form[name] = undefined
  422. this.setData({
  423. value: JSON.stringify(form),
  424. form: form
  425. })
  426. // 如果要清除其他值,需要调用
  427. this.triggerEvent("clear", {
  428. code: ds.key
  429. })
  430. },
  431. /**
  432. * @desc : 清空地址的值
  433. * @author : 周兴
  434. * @date : 2024/2/2 11:46
  435. */
  436. clearAddress(e) {
  437. let form = this.data.form
  438. form['address'] = undefined
  439. this.setData({
  440. value: JSON.stringify(form),
  441. form: form
  442. })
  443. // 如果要清除其他值,需要调用
  444. this.triggerEvent("clear", {
  445. code: ds.key
  446. })
  447. },
  448. /**
  449. * @desc : 清空日期的值
  450. * @author : 周兴
  451. * @date : 2024/2/2 11:46
  452. */
  453. clearDate(e) {
  454. let ds = e.currentTarget.dataset
  455. if(ds.item.readonly){
  456. return
  457. }
  458. let key = ds.key
  459. let form = this.data.form
  460. form[key] = undefined
  461. form[key + '_time'] = undefined
  462. this.setData({
  463. value: JSON.stringify(form),
  464. form: form
  465. })
  466. },
  467. /**
  468. * @desc : 修改数值输入框的值
  469. * @author : 周兴
  470. * @date : 2024/2/2 11:46
  471. */
  472. changeNumberField(e) {
  473. let ds = e.currentTarget.dataset
  474. let key = ds.key
  475. let item = ds.item
  476. let form = this.data.form
  477. form[key] = e.detail.value
  478. let contentObj = this.data.contentObj;
  479. // 输入值后清空校验提示信息
  480. if (item.errMsg && e.detail) {
  481. contentObj[ds.card][ds.index].errMsg = undefined;
  482. }
  483. this.setData({
  484. value: JSON.stringify(form),
  485. form: form,
  486. contentObj: contentObj
  487. })
  488. },
  489. /**
  490. * @desc : 修改电话的值
  491. * @author : 周兴
  492. * @date : 2024/2/2 11:46
  493. */
  494. changePhone(e) {
  495. let ds = e.currentTarget.dataset;
  496. let key = ds.key;
  497. let index = ds.index;
  498. let card = ds.card;
  499. let form = this.data.form
  500. form[key] = e.detail.detail
  501. let contentObj = this.data.contentObj;
  502. if (card && contentObj[card][index]?.errMsg && e.detail.detail) {
  503. contentObj[card][index].errMsg = undefined;
  504. }
  505. this.setData({
  506. value: JSON.stringify(form),
  507. form: form,
  508. contentObj: contentObj
  509. })
  510. },
  511. /**
  512. * @desc : 给电话赋值错误信息
  513. * @author : 周兴
  514. * @date : 2024/2/20 11:46
  515. */
  516. changePhoneblur(e) {
  517. let ds = e.currentTarget.dataset
  518. let errMsg = e.detail.errMsg;
  519. let card = ds.card;
  520. let index = ds.index;
  521. let contentObj = this.data.contentObj;
  522. if (errMsg && card && contentObj[card][index]) {
  523. contentObj[card][index].errMsg = errMsg;
  524. this.setData({
  525. errMsg: errMsg
  526. })
  527. }
  528. this.triggerEvent('changePhoneblur', e)
  529. },
  530. /**
  531. * @desc : 小程序地图调用
  532. * @author : 周兴
  533. * @date : 2024/2/18 18:16
  534. */
  535. onClickWxchartAddress(e) {
  536. // 跳转新建地图实例
  537. common.onClickWxchartAddress();
  538. let item = e.currentTarget.dataset;
  539. this.setData({
  540. index: item.index,
  541. card: item.card
  542. })
  543. },
  544. /**
  545. * @desc : 改变选择框内容
  546. * @author : 周兴
  547. * @date : 2024/1/26 11:46
  548. */
  549. onChange(e) {
  550. let key = e.currentTarget.dataset.key
  551. let checkFlag = e.currentTarget.dataset.value
  552. let form = this.data.form
  553. form[key] = !checkFlag
  554. this.setData({
  555. value: JSON.stringify(form),
  556. form: form
  557. })
  558. },
  559. /**
  560. * @desc : 改变选择框内容
  561. * @author : 周兴
  562. * @date : 2024/1/26 11:46
  563. */
  564. changeTabs(e) {
  565. let key = e.currentTarget.dataset.key
  566. let id = e.detail.id
  567. let form = this.data.form
  568. form[key] = id
  569. this.setData({
  570. value: JSON.stringify(form),
  571. form: form
  572. })
  573. },
  574. /**
  575. * @desc : 打开日期pop
  576. * @author : 周兴
  577. * @date : 2024/1/26 11:46
  578. */
  579. openDatePopTime(e) {
  580. console.log('openDatePopTime')
  581. let item = e.currentTarget.dataset;
  582. this.setData({
  583. showDateTime: true,
  584. index: item.index,
  585. key: item.key,
  586. card: item.card
  587. })
  588. },
  589. /**
  590. * @desc : 关闭日期pop
  591. * @author : 周兴
  592. * @date : 2024/1/26 11:46
  593. */
  594. cancelDatePopTime() {
  595. this.setData({
  596. showDateTime: false
  597. })
  598. },
  599. /**
  600. * @desc : 选择日期
  601. * @author : 周兴
  602. * @date : 2024/1/26 11:46
  603. */
  604. chooseDateTime(e) {
  605. let form = this.data.form;
  606. let index = this.data.index;
  607. let card = this.data.card;
  608. let code = this.data.key;
  609. form[code + '_time'] = e.detail
  610. form[code] = util.formatDataTime(new Date(e.detail));
  611. let contentObj = this.data.contentObj;
  612. if (card && contentObj[card][index]?.errMsg && e.detail) {
  613. contentObj[card][index].errMsg = undefined;
  614. }
  615. this.setData({
  616. value: JSON.stringify(form),
  617. form: form,
  618. contentObj: contentObj,
  619. showDateTime: false
  620. })
  621. },
  622. /**
  623. * @desc : 是点击事件
  624. * @author : 于继渤
  625. * @date : 2024/1/26 11:46
  626. */
  627. onChangeCheckedBoxYes(e) {
  628. let form = this.data.form;
  629. let code = e.currentTarget.dataset.key;
  630. form[code] = e.detail
  631. this.setData({
  632. value: JSON.stringify(form),
  633. form: form,
  634. })
  635. },
  636. /**
  637. * @desc : 否点击事件
  638. * @author : 于继渤
  639. * @date : 2024/1/26 11:46
  640. */
  641. onChangeCheckedBoxNo(e) {
  642. let form = this.data.form;
  643. let code = e.currentTarget.dataset.key;
  644. form[code] = !e.detail
  645. this.setData({
  646. value: JSON.stringify(form),
  647. form: form,
  648. })
  649. },
  650. /**
  651. * @desc : 上传附件超出大小
  652. * @author : 周兴
  653. * @date : 2024/3/27 16:16
  654. */
  655. overSize(e) {
  656. util.showToast('文件超出' + Constants.uploadFileConfig.maxSizeMB);
  657. },
  658. /**
  659. * @desc : 上传附件
  660. * @author : 周兴
  661. * @date : 2024/3/27 16:16
  662. */
  663. afterRead(e) {
  664. // this.setData({
  665. // uploadFileFlag:true
  666. // })
  667. const _this = this;
  668. const {
  669. file
  670. } = e.detail;
  671. // 配置存放的文件夹 公司code - 表名 - 年月 -- 日
  672. let folder = app.globalData.company.cpCode + '/' + this.data.table + '/' + new Date().toYearMonth2() + '/' + new Date().toDay()
  673. let url = config.upload_url;
  674. url = url.replace('mdm-server', 'mdm-server' + '-' + app.globalData.company.svcCode.replace('_', '-'))
  675. file.forEach(res => {
  676. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  677. wx.uploadFile({
  678. url: url,
  679. filePath: res.path,
  680. name: 'file',
  681. formData: {
  682. 'folder': folder
  683. },
  684. header: {
  685. 'Authorization': 'Bearer ' + app.globalData.token
  686. },
  687. success(res) {
  688. let data = JSON.parse(res.data)
  689. if (data.code === 200) {
  690. _this.setData({
  691. uploadFileFlag: false
  692. })
  693. let form = _this.data.form
  694. let annexPaths = form['annexPaths'] || []
  695. data.data.url = config.image_url + data.data.path
  696. annexPaths.push(data.data)
  697. form.annexPaths = annexPaths;
  698. _this.setData({
  699. form: form,
  700. value: JSON.stringify(form)
  701. })
  702. console.log('ff', _this.data.form);
  703. }
  704. },
  705. })
  706. })
  707. },
  708. /**
  709. * @desc : 获取语言的方法
  710. * @author : 周兴
  711. * @date : 2024/1/19
  712. */
  713. $t(name) {
  714. if (this.data.$t[name]) {
  715. return this.data.$t[name];
  716. } else {
  717. return name;
  718. }
  719. },
  720. },
  721. })