dk-form.js 10 KB

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