dk-form.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  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 app = getApp();
  15. Component({
  16. /**
  17. * 组件的属性列表
  18. */
  19. properties: {
  20. // 区域
  21. cardList: {
  22. type: Array,
  23. value: []
  24. },
  25. // 内容
  26. contentObj: {
  27. type: Object,
  28. },
  29. // 结果集
  30. value: {
  31. type: String,
  32. observer: function (newVal) {
  33. if (newVal) {
  34. this.setData({
  35. form: JSON.parse(newVal) || {}
  36. })
  37. }
  38. }
  39. },
  40. routeObjName: {
  41. type: String,
  42. }
  43. },
  44. /**
  45. * 组件的初始数据
  46. */
  47. data: {
  48. // 是否显示pop
  49. show: false,
  50. mutishow: false,
  51. showDate: false,
  52. $t: app.globalData.lang,
  53. routeUrl: app.globalData['routeUrl'],
  54. item: null,
  55. index: null,
  56. card: null,
  57. // 下拉类型
  58. dropType: null,
  59. dropCode: null,
  60. dropName: null,
  61. // 根据值控制组件的显示隐藏
  62. changeObj: null,
  63. form: {}
  64. },
  65. lifetimes: {
  66. attached: function () {
  67. },
  68. detached: function () {
  69. // 在组件实例被从页面节点树移除时执行
  70. },
  71. },
  72. pageLifetimes: {
  73. /**
  74. * @desc : 生命周期函数--监听页面显示
  75. * @author : 周兴
  76. * @date : 2024/2/19 12:16
  77. */
  78. show: function () {
  79. const location = chooseLocation.getLocation();
  80. // console.log('loc', location);
  81. let form = this.data.form
  82. if (location) {
  83. form['address'] = location;
  84. // 如果有校验信息就清除掉
  85. let card = this.data.card;
  86. let index = this.data.index;
  87. let contentObj = this.data.contentObj;
  88. if (card && contentObj[card][index]?.errMsg) {
  89. contentObj[card][index].errMsg = undefined;
  90. this.setData({
  91. contentObj: contentObj
  92. })
  93. }
  94. }
  95. this.setData({
  96. value: JSON.stringify(form),
  97. form: form
  98. })
  99. }
  100. },
  101. /**
  102. * 组件的方法列表
  103. */
  104. methods: {
  105. /**
  106. * @desc : 打开下拉
  107. * @author : 周兴
  108. * @date : 2024/1/26 11:46
  109. */
  110. open(e) {
  111. let item = e.currentTarget.dataset;
  112. this.setData({
  113. dropCode: item.key,
  114. dropName: item.name,
  115. dropType: item.type,
  116. index: item.index,
  117. card: item.card
  118. })
  119. console.log('ee', e);
  120. // 单选
  121. if (item.item.type == 'drop') {
  122. this.setData({
  123. show: true,
  124. changeObj: item.item.changeObj,
  125. })
  126. // 多选
  127. } else if (item.item.type == 'mutidrop') {
  128. this.setData({
  129. mutishow: true
  130. })
  131. } else if (item.item.type == 'choose') {
  132. let that = this
  133. // 跳转链接
  134. if (item.item.urlKey) {
  135. let url = this.data.routeUrl[this.data.routeObjName][item.item.urlKey].url
  136. // TODO
  137. // url = '/package-base-select/pages/select-customers/select-customers'
  138. if (url) {
  139. wx.navigateTo({
  140. url: url,
  141. events: {
  142. // 回调后
  143. bindData: function (data) {
  144. that.triggerEvent("chooseData", { code: item.key, data: data })
  145. }
  146. },
  147. success: function (res) {
  148. console.log('item', that.data.form)
  149. // 通过eventChannel向被打开页面传送数据
  150. that.data.form.formMode = item.item.formMode
  151. that.data.form.id = that.data.form[item.item.idKey]
  152. that.data.form.chooseType = item.item.chooseType
  153. res.eventChannel.emit('params', that.data.form)
  154. }
  155. })
  156. }
  157. }
  158. }
  159. },
  160. /**
  161. * @desc : 非空校验
  162. * @author : 周兴
  163. * @date : 2024/2/20 11:46
  164. */
  165. validData() {
  166. let flag = true;
  167. let cardList = this.data.cardList;
  168. if (!cardList || cardList.length == 0) {
  169. return flag;
  170. }
  171. let form = this.data.form;
  172. let contentObj = this.data.contentObj;
  173. cardList.forEach(card => {
  174. if (contentObj[card]) {
  175. contentObj[card].forEach(item => {
  176. let title = this.$t(item.title ? item.title : item.code)
  177. // 如果必须输入,就要进行判断
  178. if (item.required && !form[item.code]) {
  179. item.errMsg = title + '不为空'
  180. flag = false;
  181. }
  182. })
  183. }
  184. })
  185. this.setData({
  186. contentObj: contentObj
  187. })
  188. return flag;
  189. },
  190. /**
  191. * @desc : 选择数据
  192. * @author : 周兴
  193. * @date : 2024/1/26 11:46
  194. */
  195. chooseData(e) {
  196. let contentObj = this.data.contentObj;
  197. let form = this.data.form
  198. if (e.detail.ids) {
  199. form[this.data.dropCode + 's'] = e.detail.ids;
  200. form[this.data.dropName + 's'] = e.detail.names;
  201. } else {
  202. form[this.data.dropCode] = e.detail.value;
  203. form[this.data.dropName] = e.detail.text;
  204. }
  205. let card = this.data.card;
  206. // 选择后清空校验提示信息
  207. if (card && contentObj[card][this.data.index]?.errMsg && e.detail) {
  208. contentObj[card][this.data.index].errMsg = undefined;
  209. }
  210. this.setData({
  211. value: JSON.stringify(form),
  212. form: form,
  213. contentObj: contentObj
  214. })
  215. // 是否根据值进行控制其他组件显示、隐藏
  216. let changeObj = this.data.changeObj
  217. let key = util.getKeyByValue(Constants.supType, e.detail.value);
  218. if (changeObj && changeObj[key]) {
  219. // 显示
  220. if (changeObj[key]['visible']) {
  221. changeObj[key]['visible'].forEach(it => {
  222. let index = contentObj[card].findIndex(t => t.code == it)
  223. console.log('index', index);
  224. if (contentObj[card][index]) {
  225. contentObj[card][index].hide = false
  226. }
  227. })
  228. }
  229. // 隐藏
  230. if (changeObj[key]['hide']) {
  231. changeObj[key]['hide'].forEach(it => {
  232. let index = contentObj[card].findIndex(t => t.code == it)
  233. console.log('index', index);
  234. if (contentObj[card][index]) {
  235. contentObj[card][index].hide = true
  236. }
  237. })
  238. }
  239. }
  240. this.setData({
  241. contentObj: contentObj
  242. })
  243. // 如果处理id,name还需要赋值其他,需要在页面事件中自行处理
  244. this.triggerEvent("chooseData", { code: this.data.dropCode, list: e.detail.list })
  245. },
  246. /**
  247. * @desc : 打开日期pop
  248. * @author : 周兴
  249. * @date : 2024/1/26 11:46
  250. */
  251. openDatePop(e) {
  252. let item = e.currentTarget.dataset;
  253. this.setData({
  254. showDate: true,
  255. index: item.index,
  256. key: item.key,
  257. card: item.card
  258. })
  259. },
  260. /**
  261. * @desc : 关闭日期pop
  262. * @author : 周兴
  263. * @date : 2024/1/26 11:46
  264. */
  265. cancelDatePop() {
  266. this.setData({
  267. showDate: false
  268. })
  269. },
  270. /**
  271. * @desc : 选择日期
  272. * @author : 周兴
  273. * @date : 2024/1/26 11:46
  274. */
  275. chooseDate(e) {
  276. let form = this.data.form;
  277. let index = this.data.index;
  278. let card = this.data.card;
  279. let code = this.data.key;
  280. form[code + '_time'] = e.detail
  281. form[code] = util.toDateStr(e.detail);
  282. let contentObj = this.data.contentObj;
  283. if (card && contentObj[card][index]?.errMsg && e.detail) {
  284. contentObj[card][index].errMsg = undefined;
  285. }
  286. this.setData({
  287. value: JSON.stringify(form),
  288. form: form,
  289. contentObj: contentObj,
  290. showDate: false
  291. })
  292. },
  293. /**
  294. * @desc : 修改输入框的值
  295. * @author : 周兴
  296. * @date : 2024/2/2 11:46
  297. */
  298. changeField(e) {
  299. let ds = e.currentTarget.dataset
  300. let key = ds.key
  301. let item = ds.item
  302. let form = this.data.form
  303. form[key] = e.detail
  304. let contentObj = this.data.contentObj;
  305. // 输入值后清空校验提示信息
  306. if (item.errMsg && e.detail) {
  307. contentObj[ds.card][ds.index].errMsg = undefined;
  308. }
  309. this.setData({
  310. value: JSON.stringify(form),
  311. form: form,
  312. contentObj: contentObj
  313. })
  314. },
  315. /**
  316. * @desc : 修改数值输入框的值
  317. * @author : 周兴
  318. * @date : 2024/2/2 11:46
  319. */
  320. changeNumberField(e) {
  321. let ds = e.currentTarget.dataset
  322. let key = ds.key
  323. let item = ds.item
  324. let form = this.data.form
  325. form[key] = e.detail.value
  326. let contentObj = this.data.contentObj;
  327. // 输入值后清空校验提示信息
  328. if (item.errMsg && e.detail) {
  329. contentObj[ds.card][ds.index].errMsg = undefined;
  330. }
  331. this.setData({
  332. value: JSON.stringify(form),
  333. form: form,
  334. contentObj: contentObj
  335. })
  336. },
  337. /**
  338. * @desc : 修改电话的值
  339. * @author : 周兴
  340. * @date : 2024/2/2 11:46
  341. */
  342. changePhone(e) {
  343. let ds = e.currentTarget.dataset;
  344. let key = ds.key;
  345. let index = ds.index;
  346. let card = ds.card;
  347. let form = this.data.form
  348. form[key] = e.detail.detail
  349. let contentObj = this.data.contentObj;
  350. if (card && contentObj[card][index]?.errMsg && e.detail.detail) {
  351. contentObj[card][index].errMsg = undefined;
  352. }
  353. this.setData({
  354. value: JSON.stringify(form),
  355. form: form,
  356. contentObj: contentObj
  357. })
  358. },
  359. /**
  360. * @desc : 给电话赋值错误信息
  361. * @author : 周兴
  362. * @date : 2024/2/20 11:46
  363. */
  364. changePhoneblur(e) {
  365. let ds = e.currentTarget.dataset
  366. let errMsg = e.detail.errMsg;
  367. let card = ds.card;
  368. let index = ds.index;
  369. let contentObj = this.data.contentObj;
  370. if (errMsg && card && contentObj[card][index]) {
  371. contentObj[card][index].errMsg = errMsg;
  372. this.setData({
  373. errMsg: errMsg
  374. })
  375. }
  376. },
  377. /**
  378. * @desc : 小程序地图调用
  379. * @author : 周兴
  380. * @date : 2024/2/18 18:16
  381. */
  382. onClickWxchartAddress(e) {
  383. // 跳转新建地图实例
  384. common.onClickWxchartAddress();
  385. let item = e.currentTarget.dataset;
  386. this.setData({
  387. index: item.index,
  388. card: item.card
  389. })
  390. },
  391. /**
  392. * @desc : 改变选择框内容
  393. * @author : 周兴
  394. * @date : 2024/1/26 11:46
  395. */
  396. onChange(e) {
  397. let key = e.currentTarget.dataset.key
  398. let checkFlag = e.currentTarget.dataset.value
  399. let form = this.data.form
  400. form[key] = !checkFlag
  401. this.setData({
  402. value: JSON.stringify(form),
  403. form: form
  404. })
  405. },
  406. /**
  407. * @desc : 改变选择框内容
  408. * @author : 周兴
  409. * @date : 2024/1/26 11:46
  410. */
  411. changeTabs(e) {
  412. let key = e.currentTarget.dataset.key
  413. let id = e.detail.id
  414. let form = this.data.form
  415. form[key] = id
  416. this.setData({
  417. value: JSON.stringify(form),
  418. form: form
  419. })
  420. },
  421. /**
  422. * @desc : 获取语言的方法
  423. * @author : 周兴
  424. * @date : 2024/1/19
  425. */
  426. $t(name) {
  427. if (this.data.$t[name]) {
  428. return this.data.$t[name];
  429. } else {
  430. return name;
  431. }
  432. },
  433. },
  434. })