dk-form.js 12 KB

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