dk-form.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119
  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. //class暴露 方便外部修改内部样式 -2024/06/11 于继渤
  18. // externalClasses: ['dk-card-class','dk-card-outer-class'],
  19. /**
  20. * 组件的属性列表
  21. */
  22. properties: {
  23. allowZero: {
  24. type: Boolean,
  25. value: false
  26. },
  27. // 区域
  28. cardList: {
  29. type: Array,
  30. value: []
  31. },
  32. transparentStyle: {
  33. type: Boolean,
  34. value: false
  35. },
  36. isCroppingFlag: { //是否开启裁剪功能
  37. type: Boolean,
  38. value: true
  39. },
  40. uploaderMAX: {
  41. type: Number,
  42. value: 5
  43. },
  44. // 表名,用于上传附件
  45. table: {
  46. type: String,
  47. },
  48. // 内容
  49. contentObj: {
  50. type: Object,
  51. },
  52. // 结果集
  53. value: {
  54. type: String,
  55. observer: function (newVal) {
  56. if (newVal) {
  57. this.setData({
  58. form: JSON.parse(newVal) || {}
  59. })
  60. } else {
  61. this.setData({
  62. form: {}
  63. })
  64. }
  65. }
  66. },
  67. routeObjName: {
  68. type: String,
  69. }
  70. },
  71. /**
  72. * 组件的初始数据
  73. */
  74. data: {
  75. // 是否显示pop
  76. show: false,
  77. mutishow: false,
  78. showDate: false,
  79. showDateDay: false,
  80. showDateTime: false,
  81. currentDate: new Date().getTime(),
  82. $t: app.globalData.lang,
  83. routeUrl: app.globalData['routeUrl'],
  84. item: null,
  85. index: null,
  86. card: null,
  87. // 下拉类型
  88. dropType: null,
  89. dropCode: null,
  90. dropName: null,
  91. // 根据值控制组件的显示隐藏
  92. changeObj: null,
  93. form: {},
  94. maxSize: Constants.uploadFileConfig.maxSize,
  95. checked: false
  96. },
  97. lifetimes: {
  98. attached: function () {},
  99. detached: function () {
  100. // 在组件实例被从页面节点树移除时执行
  101. // 清空地址信息
  102. chooseLocation.setLocation(null);
  103. },
  104. },
  105. pageLifetimes: {
  106. /**
  107. * @desc : 生命周期函数--监听页面显示
  108. * @author : 周兴
  109. * @date : 2024/2/19 12:16
  110. */
  111. show: function () {
  112. const location = chooseLocation.getLocation();
  113. let form = this.data.form
  114. if (location) {
  115. form['address'] = location;
  116. form['addressName'] = location.name;
  117. form['addressFull'] = form['addressFull'] ? form['addressFull'] : location.address + location.name;
  118. form['addressGcj02'] = {
  119. latitude: location.latitude,
  120. longitude: location.longitude
  121. };
  122. form['addressArea'] = {
  123. province: location.province,
  124. city: location.city,
  125. district: location.district == undefined || !location.district ? location.city : location.district
  126. }
  127. // 如果有校验信息就清除掉
  128. let card = this.data.card;
  129. let index = this.data.index;
  130. let contentObj = this.data.contentObj;
  131. if (card && contentObj[card][index]?.errMsg) {
  132. contentObj[card][index].errMsg = undefined;
  133. this.setData({
  134. contentObj: contentObj
  135. })
  136. }
  137. }
  138. this.setData({
  139. value: JSON.stringify(form),
  140. form: form
  141. })
  142. }
  143. },
  144. /**
  145. * 组件的方法列表
  146. */
  147. methods: {
  148. /**
  149. * @desc : 显示tip
  150. * @author : 周兴
  151. * @date : 2024/4/25 11:46
  152. */
  153. showTip(e) {
  154. let item = e.currentTarget.dataset.item
  155. if (item.tip) {
  156. util.showToast(item.tip);
  157. }
  158. },
  159. /**
  160. * @desc : 外漏str的点击事件
  161. * @author : 周兴
  162. * @date : 2024/1/26 11:46
  163. */
  164. openStr(e) {
  165. let item = e.currentTarget.dataset;
  166. this.triggerEvent("openStr", {
  167. code: item.key,
  168. readonly: item.item.readonly
  169. })
  170. },
  171. /**
  172. * @desc : 关闭tip
  173. * @date : 2024/5/24 15:49
  174. * @author : 王英杰
  175. */
  176. handleTap() {
  177. let contentObj = this.data.contentObj
  178. Object.keys(contentObj).forEach(key => {
  179. // key 是对象的键名
  180. let array = contentObj[key];
  181. // 检查它是否真的是一个数组
  182. if (Array.isArray(array)) {
  183. array.forEach(item => {
  184. if (item.tip && this.selectComponent('#' + item.code)) {
  185. this.selectComponent('#' + item.code).setShowTipFlag(false)
  186. }
  187. });
  188. }
  189. });
  190. },
  191. /**
  192. * @desc : tip点击事件
  193. * @date : 2024/5/24 15:49
  194. * @author : 王英杰
  195. */
  196. clickTip() {
  197. this.handleTap()
  198. // this.triggerEvent("clickTip", {})
  199. },
  200. /**
  201. * @desc : 打开下拉
  202. * @author : 周兴
  203. * @date : 2024/1/26 11:46
  204. */
  205. open(e) {
  206. let item = e.currentTarget.dataset;
  207. if (item.item.readonly) {
  208. return
  209. }
  210. this.setData({
  211. dropCode: item.key,
  212. dropName: item.name,
  213. dropType: item.type,
  214. index: item.index,
  215. card: item.card
  216. })
  217. // 单选
  218. if (item.item.type == 'drop') {
  219. this.setData({
  220. show: true,
  221. changeObj: item.item.changeObj,
  222. })
  223. // 多选
  224. } else if (item.item.type == 'mutidrop') {
  225. this.setData({
  226. mutishow: true
  227. })
  228. } else if (item.item.type == 'choose' || item.item.type == 'chooseAndStr') {
  229. let that = this
  230. that.setData({
  231. changeObj: item.item.changeObj,
  232. })
  233. // 跳转链接
  234. if (item.item.urlKey) {
  235. let route = this.data.routeUrl[this.data.routeObjName][item.item.urlKey]
  236. let url = route.url
  237. // TODO
  238. // url = '/package-base-select/pages/select-customers/select-customers'
  239. if (url) {
  240. wx.navigateTo({
  241. url: url,
  242. events: {
  243. // 回调后
  244. bindData: function (data) {
  245. let contentObj = that.data.contentObj
  246. // 是否根据值进行控制其他组件显示、隐藏
  247. let changeObj = that.data.changeObj
  248. let key = data.data ? data.data.id : null;
  249. let card = that.data.card;
  250. if (changeObj && changeObj[key]) {
  251. // 显示
  252. if (changeObj[key]['visible']) {
  253. changeObj[key]['visible'].forEach(it => {
  254. let index = contentObj[card].findIndex(t => t.code == it)
  255. if (contentObj[card][index]) {
  256. contentObj[card][index].hide = false
  257. }
  258. })
  259. }
  260. // 隐藏
  261. if (changeObj[key]['hide']) {
  262. changeObj[key]['hide'].forEach(it => {
  263. let index = contentObj[card].findIndex(t => t.code == it)
  264. if (contentObj[card][index]) {
  265. contentObj[card][index].hide = true
  266. }
  267. })
  268. }
  269. }
  270. that.setData({
  271. contentObj: contentObj
  272. })
  273. that.triggerEvent("chooseData", {
  274. code: item.key,
  275. data: data
  276. })
  277. }
  278. },
  279. success: function (res) {
  280. let data = {
  281. item: {
  282. data: item.item.datalist || []
  283. },
  284. route: route,
  285. formMode: item.item.formMode,
  286. id: that.data.form[item.item.idKey],
  287. chooseType: item.item.chooseType
  288. }
  289. if (that.data.form[item.item.code]) {
  290. data[item.item.code] = that.data.form[item.item.code]
  291. }
  292. // 通过eventChannel向被打开页面传送数据
  293. // that.data.form.formMode = item.item.formMode
  294. // that.data.form.id = that.data.form[item.item.idKey]
  295. // that.data.form.chooseType = item.item.chooseType
  296. res.eventChannel.emit('params', data)
  297. }
  298. })
  299. }
  300. }
  301. }
  302. },
  303. /**
  304. * @desc : 非空校验
  305. * @author : 周兴
  306. * @date : 2024/2/20 11:46
  307. */
  308. validData() {
  309. let flag = true;
  310. let cardList = this.data.cardList;
  311. if (!cardList || cardList.length == 0) {
  312. return flag;
  313. }
  314. let form = this.data.form;
  315. let contentObj = this.data.contentObj;
  316. cardList.forEach(card => {
  317. if (contentObj[card]) {
  318. contentObj[card].forEach(item => {
  319. let title = this.$t(item.title ? item.title : item.code)
  320. if (item.required) {
  321. // 如果不允许0值且当前值为0,则设置错误消息
  322. if (!this.data.allowZero && form[item.code] === 0) {
  323. item.errMsg = title + '不能为0';
  324. flag = false;
  325. } else if (form[item.code] === undefined || form[item.code] === null || form[item.code] === '') {
  326. // 如果不允许为空且当前值为空(或假值,但不包括特别处理的0)
  327. item.errMsg = title + '不为空';
  328. flag = false;
  329. } else {
  330. // 其他情况,包括0(如果allowZero为true),清空错误消息
  331. item.errMsg = undefined;
  332. }
  333. } else {
  334. // 如果该项不是必填项,则无需检查,直接清空错误消息
  335. item.errMsg = undefined;
  336. }
  337. // 电话校验
  338. if (item.type == 'phone' && item.required && form[item.code]) {
  339. // 联系电话格式错误
  340. var myreg = Constants.Mobile_Phone_Number_Regular_Expression
  341. if (!myreg.test(form[item.code])) {
  342. item.errMsg = title + '格式错误'
  343. flag = false;
  344. }
  345. }
  346. // 邮箱
  347. if (item.type == 'email' && item.required && form[item.code]) {
  348. //验证一个字符串是否为有效的邮箱地址
  349. var myreg = Constants.Emai_Regular_Expression
  350. if (!myreg.test(form[item.code])) {
  351. item.errMsg = title + '格式错误'
  352. flag = false;
  353. }
  354. }
  355. })
  356. }
  357. })
  358. this.setData({
  359. contentObj: contentObj
  360. })
  361. return flag;
  362. },
  363. /**
  364. * @desc : 默认隐藏或者显示列 四个参数(1.contentObj 要改变的对象列表 2. 对象列表需要改变的块名 3.改变块 里的 changeObj 改变规则 4.规则里的 规则名)
  365. * @author : 周兴
  366. * @date : 2024/1/26 11:46
  367. */
  368. defaultvisibleOrHide(contentObj, card, changeObj, key) {
  369. // 是否根据值进行控制其他组件显示、隐藏
  370. if (changeObj && changeObj[key]) {
  371. // 显示
  372. if (changeObj[key]['visible']) {
  373. changeObj[key]['visible'].forEach(it => {
  374. let index = contentObj[card].findIndex(t => t.code == it)
  375. if (contentObj[card][index]) {
  376. contentObj[card][index].hide = false
  377. }
  378. })
  379. }
  380. // 隐藏
  381. if (changeObj[key]['hide']) {
  382. changeObj[key]['hide'].forEach(it => {
  383. let index = contentObj[card].findIndex(t => t.code == it)
  384. if (contentObj[card][index]) {
  385. contentObj[card][index].hide = true
  386. }
  387. })
  388. }
  389. }
  390. this.setData({
  391. contentObj: contentObj
  392. })
  393. },
  394. /**
  395. * @desc : 选择数据
  396. * @author : 周兴
  397. * @date : 2024/1/26 11:46
  398. */
  399. chooseData(e) {
  400. let contentObj = this.data.contentObj;
  401. let form = this.data.form
  402. if (e.detail.ids) {
  403. form[this.data.dropCode + 's'] = e.detail.ids;
  404. form[this.data.dropName + 's'] = e.detail.names;
  405. } else {
  406. form[this.data.dropCode] = e.detail.value;
  407. form[this.data.dropName] = e.detail.text;
  408. }
  409. let card = this.data.card;
  410. // 选择后清空校验提示信息
  411. if (card && contentObj[card][this.data.index]?.errMsg && e.detail) {
  412. contentObj[card][this.data.index].errMsg = undefined;
  413. }
  414. this.setData({
  415. value: JSON.stringify(form),
  416. form: form,
  417. contentObj: contentObj
  418. })
  419. // 是否根据值进行控制其他组件显示、隐藏
  420. let changeObj = this.data.changeObj
  421. let key = e.detail.value //util.getKeyByValue(Constants.kindCode, e.detail.value);
  422. if (changeObj && changeObj[key]) {
  423. // 显示
  424. if (changeObj[key]['visible']) {
  425. changeObj[key]['visible'].forEach(it => {
  426. let index = contentObj[card].findIndex(t => t.code == it)
  427. if (contentObj[card][index]) {
  428. contentObj[card][index].hide = false
  429. }
  430. })
  431. }
  432. // 隐藏
  433. if (changeObj[key]['hide']) {
  434. changeObj[key]['hide'].forEach(it => {
  435. let index = contentObj[card].findIndex(t => t.code == it)
  436. if (contentObj[card][index]) {
  437. contentObj[card][index].hide = true
  438. }
  439. })
  440. }
  441. }
  442. this.setData({
  443. contentObj: contentObj
  444. })
  445. // 如果处理id,name还需要赋值其他,需要在页面事件中自行处理
  446. this.triggerEvent("chooseData", {
  447. code: this.data.dropCode,
  448. //初始欠款的为空
  449. list: e.detail.list ? e.detail.list : e.detail.item
  450. })
  451. },
  452. /**
  453. * @desc : 打开日期pop
  454. * @author : 周兴
  455. * @date : 2024/1/26 11:46
  456. */
  457. openDatePop(e) {
  458. let item = e.currentTarget.dataset;
  459. if (item.item.readonly) {
  460. return
  461. }
  462. this.setData({
  463. showDate: true,
  464. index: item.index,
  465. key: item.key,
  466. card: item.card
  467. })
  468. },
  469. openDatePopDay(e) {
  470. let item = e.currentTarget.dataset;
  471. if (item.item.readonly) {
  472. return
  473. }
  474. this.setData({
  475. showDateDay: true,
  476. index: item.index,
  477. key: item.key,
  478. card: item.card,
  479. dropDateCode: e.currentTarget.dataset.key
  480. })
  481. },
  482. /**
  483. * @desc : 选择筛选中的日期
  484. * @author : 周兴
  485. * @date : 2024/1/29 08:59
  486. */
  487. pickDateCommit(e) {
  488. let form = this.data.form
  489. let date = e.detail.date[0] + '~' + e.detail.date[1]
  490. form[this.data.dropDateCode] = date
  491. form[this.data.dropDateCode + 'Start'] = e.detail.date[0];
  492. form[this.data.dropDateCode + 'End'] = e.detail.date[1];
  493. this.setData({
  494. form: form,
  495. value: JSON.stringify(form)
  496. })
  497. },
  498. /**
  499. * @desc : 关闭日期pop
  500. * @author : 周兴
  501. * @date : 2024/1/26 11:46
  502. */
  503. cancelDatePop() {
  504. this.setData({
  505. showDate: false
  506. })
  507. },
  508. /**
  509. * @desc : 选择日期
  510. * @author : 周兴
  511. * @date : 2024/1/26 11:46
  512. */
  513. chooseDate(e) {
  514. let form = this.data.form;
  515. let index = this.data.index;
  516. let card = this.data.card;
  517. let code = this.data.key;
  518. form[code + '_time'] = e.detail
  519. form[code] = util.toDateStr(e.detail);
  520. let contentObj = this.data.contentObj;
  521. if (card && contentObj[card][index]?.errMsg && e.detail) {
  522. contentObj[card][index].errMsg = undefined;
  523. }
  524. this.setData({
  525. value: JSON.stringify(form),
  526. form: form,
  527. contentObj: contentObj,
  528. showDate: false
  529. })
  530. },
  531. /**
  532. * @desc : 修改输入框的值
  533. * @author : 周兴
  534. * @date : 2024/2/2 11:46
  535. */
  536. changeField(e) {
  537. let ds = e.currentTarget.dataset
  538. let key = ds.key
  539. let item = ds.item
  540. let form = this.data.form
  541. if (e.detail) {
  542. form[key] = e.detail;
  543. } else {
  544. form[key] = ''
  545. }
  546. let contentObj = this.data.contentObj;
  547. // 输入值后清空校验提示信息
  548. if (item.errMsg && e.detail) {
  549. contentObj[ds.card][ds.index].errMsg = undefined;
  550. }
  551. this.setData({
  552. form: form,
  553. contentObj: contentObj
  554. })
  555. },
  556. /**
  557. * @desc : 失去焦点,把值传出
  558. * @author : 周兴
  559. * @date : 2024/2/2 11:46
  560. */
  561. blurField(e) {
  562. this.setData({
  563. value: JSON.stringify(this.data.form)
  564. })
  565. },
  566. /**
  567. * @desc : 清空输入框的值
  568. * @author : 周兴
  569. * @date : 2024/2/2 11:46
  570. */
  571. clearField(e) {
  572. let ds = e.currentTarget.dataset
  573. let key = ds.key
  574. let form = this.data.form
  575. form[key] = undefined
  576. this.setData({
  577. value: JSON.stringify(form),
  578. form: form
  579. })
  580. // 如果要清除其他值,需要调用
  581. this.triggerEvent("clear", {
  582. code: ds.key
  583. })
  584. },
  585. /**
  586. * @desc : 备注换行按钮监听
  587. * @author : 王英杰
  588. * @date : 2024/2/2 11:46
  589. */
  590. wrapClick(e){
  591. let ds = e.currentTarget.dataset
  592. let key = ds.key
  593. let item = ds.item
  594. let form = this.data.form
  595. form[key] = form[key]? (form[key] + item.addStr):item.addStr
  596. this.setData({
  597. form: form,
  598. value: JSON.stringify(form),
  599. })
  600. },
  601. /**
  602. * @desc : 清空选单的值
  603. * @author : 周兴
  604. * @date : 2024/2/2 11:46
  605. */
  606. clearChoose(e) {
  607. let ds = e.currentTarget.dataset
  608. let key = ds.key
  609. let name = ds.name
  610. let form = this.data.form
  611. if (ds.item.readonly) {
  612. return
  613. }
  614. form[key] = undefined
  615. form[name] = undefined
  616. this.setData({
  617. value: JSON.stringify(form),
  618. form: form
  619. })
  620. // 如果要清除其他值,需要调用
  621. this.triggerEvent("clear", {
  622. code: ds.key
  623. })
  624. },
  625. /**
  626. * @desc : 清空地址的值
  627. * @author : 周兴
  628. * @date : 2024/2/2 11:46
  629. */
  630. clearAddress(e) {
  631. let form = this.data.form
  632. delete form['address']
  633. delete form['addressName'];
  634. delete form['addressFull'];
  635. delete form['addressGcj02'];
  636. delete form['addressArea'];
  637. this.setData({
  638. value: JSON.stringify(form),
  639. form: form
  640. })
  641. // 如果要清除其他值,需要调用
  642. this.triggerEvent("clear", {
  643. code: ds.key
  644. })
  645. },
  646. /**
  647. * @desc : 清空日期的值
  648. * @author : 周兴
  649. * @date : 2024/2/2 11:46
  650. */
  651. clearDate(e) {
  652. let ds = e.currentTarget.dataset
  653. if (ds.item.readonly) {
  654. return
  655. }
  656. let key = ds.key
  657. let form = this.data.form
  658. form[key] = undefined
  659. form[key + '_time'] = undefined
  660. this.setData({
  661. value: JSON.stringify(form),
  662. form: form
  663. })
  664. },
  665. /**
  666. * @desc : 修改数值输入框的值
  667. * @author : 周兴
  668. * @date : 2024/2/2 11:46
  669. */
  670. changeNumberField(e) {
  671. let ds = e.currentTarget.dataset
  672. let key = ds.key
  673. let item = ds.item
  674. let form = this.data.form
  675. form[key] = e.detail.value
  676. let contentObj = this.data.contentObj;
  677. // 输入值后清空校验提示信息
  678. if (item.errMsg && e.detail) {
  679. contentObj[ds.card][ds.index].errMsg = undefined;
  680. }
  681. this.setData({
  682. value: JSON.stringify(form),
  683. form: form,
  684. contentObj: contentObj
  685. })
  686. // 如果要清除其他值,需要调用
  687. this.triggerEvent("changeNumberField", {
  688. code: ds.key
  689. })
  690. },
  691. /**
  692. * @desc : 修改数值离开焦点 输入框的值
  693. * @author : 周兴
  694. * @date : 2024/2/2 11:46
  695. */
  696. triggerBindBlur(e) {
  697. let ds = e.currentTarget.dataset
  698. // 如果要清除其他值,需要调用
  699. this.triggerEvent("triggerBindBlur", {
  700. code: ds.key
  701. })
  702. },
  703. /**
  704. * @desc : 修改电话的值
  705. * @author : 周兴
  706. * @date : 2024/2/2 11:46
  707. */
  708. changePhone(e) {
  709. let ds = e.currentTarget.dataset;
  710. let key = ds.key;
  711. let index = ds.index;
  712. let card = ds.card;
  713. let form = this.data.form
  714. form[key] = e.detail.detail
  715. let contentObj = this.data.contentObj;
  716. if (card && contentObj[card][index]?.errMsg && e.detail.detail) {
  717. contentObj[card][index].errMsg = undefined;
  718. }
  719. this.setData({
  720. value: JSON.stringify(form),
  721. form: form,
  722. contentObj: contentObj
  723. })
  724. },
  725. /**
  726. * @desc : 给电话赋值错误信息
  727. * @author : 周兴
  728. * @date : 2024/2/20 11:46
  729. */
  730. changePhoneblur(e) {
  731. let ds = e.currentTarget.dataset
  732. let errMsg = e.detail.errMsg;
  733. let card = ds.card;
  734. let index = ds.index;
  735. let contentObj = this.data.contentObj;
  736. if (errMsg && card && contentObj[card][index]) {
  737. contentObj[card][index].errMsg = errMsg;
  738. this.setData({
  739. errMsg: errMsg
  740. })
  741. }
  742. this.triggerEvent('changePhoneblur', e)
  743. },
  744. /**
  745. * @desc : 小程序地图调用
  746. * @author : 周兴
  747. * @date : 2024/2/18 18:16
  748. */
  749. onClickWxchartAddress(e) {
  750. let dataset = e.currentTarget.dataset;
  751. if(dataset.item.readonly){
  752. return
  753. }
  754. // 跳转新建地图实例
  755. common.onClickWxchartAddress();
  756. let item = e.currentTarget.dataset;
  757. this.setData({
  758. index: item.index,
  759. card: item.card
  760. })
  761. },
  762. /**
  763. * @desc : 改变选择框内容
  764. * @author : 周兴
  765. * @date : 2024/1/26 11:46
  766. */
  767. onChange(e) {
  768. let key = e.currentTarget.dataset.key
  769. let item = e.currentTarget.dataset.item
  770. let checkFlag = e.currentTarget.dataset.value
  771. let form = this.data.form
  772. if (item && item.readonly) {
  773. return
  774. }
  775. form[key] = !checkFlag
  776. this.setData({
  777. value: JSON.stringify(form),
  778. form: form
  779. })
  780. this.triggerEvent("onSwitchChange", {
  781. code: key,
  782. checkFlag: checkFlag
  783. })
  784. },
  785. /**
  786. * @desc : 改变选择框内容
  787. * @author : 周兴
  788. * @date : 2024/1/26 11:46
  789. */
  790. changeTabs(e) {
  791. let key = e.currentTarget.dataset.key
  792. let id = e.detail.id
  793. let form = this.data.form
  794. form[key] = id
  795. this.setData({
  796. value: JSON.stringify(form),
  797. form: form
  798. })
  799. this.triggerEvent("changeTab", {
  800. code: key,
  801. id: id
  802. })
  803. },
  804. /**
  805. * @desc : 打开日期pop
  806. * @author : 周兴
  807. * @date : 2024/1/26 11:46
  808. */
  809. openDatePopTime(e) {
  810. let item = e.currentTarget.dataset;
  811. this.setData({
  812. showDateTime: true,
  813. index: item.index,
  814. key: item.key,
  815. card: item.card
  816. })
  817. },
  818. /**
  819. * @desc : 消息订阅
  820. * @author : 刘尧
  821. * @date : 2024/1/26 11:46
  822. */
  823. openRemindDatePopTime(e) {
  824. const that = this
  825. const tmplIds = Constants.miniMessageModelIds
  826. wx.requestSubscribeMessage({
  827. tmplIds: tmplIds,
  828. success(res) {
  829. console.log(res,"success");
  830. that.openDatePopTime(e)
  831. },
  832. fail(res) {
  833. console.log(res,"fail");
  834. that.openDatePopTime(e)
  835. }
  836. })
  837. // 获取微信基础配置
  838. // wx.getSetting({
  839. // withSubscriptions: true,
  840. // success(res) {
  841. // let bol = false
  842. // // 适配存在多个订阅消息模板的情况
  843. // if (res.subscriptionsSetting.itemSettings) {
  844. // const obj = res.subscriptionsSetting.itemSettings
  845. // Object.keys(obj).forEach((key) => {
  846. // if (obj[key] !== 'accept') {
  847. // bol = true
  848. // }
  849. // })
  850. // } else {
  851. // bol = true
  852. // }
  853. // if (bol) {
  854. // // 如果配置中用户未订阅消息 则弹窗
  855. // wx.requestSubscribeMessage({
  856. // tmplIds: tmplIds,
  857. // success(res) {
  858. // that.openDatePopTime(e)
  859. // },
  860. // fail(res) {
  861. // that.openDatePopTime(e)
  862. // }
  863. // })
  864. // } else {
  865. // that.openDatePopTime(e)
  866. // }
  867. // },
  868. // fail(res) {
  869. // that.openDatePopTime(e)
  870. // }
  871. // })
  872. },
  873. /**
  874. * @desc : 关闭日期pop
  875. * @author : 周兴
  876. * @date : 2024/1/26 11:46
  877. */
  878. cancelDatePopTime() {
  879. this.setData({
  880. showDateTime: false
  881. })
  882. },
  883. /**
  884. * @desc : 选择日期
  885. * @author : 周兴
  886. * @date : 2024/1/26 11:46
  887. */
  888. chooseDateTime(e) {
  889. let form = this.data.form;
  890. let index = this.data.index;
  891. let card = this.data.card;
  892. let code = this.data.key;
  893. form[code + '_time'] = e.detail
  894. form[code] = util.formatDataTime(new Date(e.detail));
  895. let contentObj = this.data.contentObj;
  896. if (card && contentObj[card][index]?.errMsg && e.detail) {
  897. contentObj[card][index].errMsg = undefined;
  898. }
  899. this.setData({
  900. value: JSON.stringify(form),
  901. form: form,
  902. contentObj: contentObj,
  903. showDateTime: false
  904. })
  905. },
  906. /**
  907. * @desc : 是点击事件
  908. * @author : 于继渤
  909. * @date : 2024/1/26 11:46
  910. */
  911. onChangeCheckedBoxYes(e) {
  912. let form = this.data.form;
  913. let code = e.currentTarget.dataset.key;
  914. form[code] = e.detail
  915. this.setData({
  916. value: JSON.stringify(form),
  917. form: form,
  918. })
  919. },
  920. /**
  921. * @desc : 否点击事件
  922. * @author : 于继渤
  923. * @date : 2024/1/26 11:46
  924. */
  925. onChangeCheckedBoxNo(e) {
  926. let form = this.data.form;
  927. let code = e.currentTarget.dataset.key;
  928. form[code] = !e.detail
  929. this.setData({
  930. value: JSON.stringify(form),
  931. form: form,
  932. })
  933. },
  934. /**
  935. * @desc : 上传附件超出大小
  936. * @author : 周兴
  937. * @date : 2024/3/27 16:16
  938. */
  939. overSize(e) {
  940. util.showToast('文件超出' + Constants.uploadFileConfig.maxSizeMB);
  941. },
  942. /**
  943. * @desc : 删除图片
  944. * @author : 周兴
  945. * @date : 2024/4/29 18:16
  946. */
  947. deleteImg(e) {
  948. let form = this.data.form;
  949. let index = e.detail.index;
  950. let arr = form['annexPaths']
  951. arr.splice(index, 1);
  952. this.setData({
  953. form: form,
  954. value: JSON.stringify(form)
  955. })
  956. },
  957. /**
  958. * @desc : 点击上传附件
  959. * @author : 周兴
  960. * @date : 2024/6/24
  961. */
  962. clickAttach(e) {
  963. this.triggerEvent("clickAttach", {})
  964. },
  965. /**
  966. * @desc : 点击预览附件
  967. * @author : 周兴
  968. * @date : 2024/6/24
  969. */
  970. clickPreview(e) {
  971. this.triggerEvent("clickPreview", {})
  972. },
  973. /**
  974. * @desc : 点击上传附件(取消)
  975. * @author : 周兴
  976. * @date : 2024/6/24
  977. */
  978. uploadError(e) {
  979. this.triggerEvent("uploadError", {})
  980. },
  981. /**
  982. * @desc : 上传附件
  983. * @author : 周兴
  984. * @date : 2024/3/27 16:16
  985. */
  986. afterRead(e) {
  987. const _this = this;
  988. if (this.data.isCroppingFlag) { //开启裁剪功能
  989. // 获取裁剪图片资源后,给data添加src属性及其值
  990. wx.navigateTo({
  991. url: '/package-base-select/pages/cropper/cropper',
  992. events: {
  993. // 回调后
  994. bindData: function (data) {
  995. const {
  996. file
  997. } = {
  998. file: [{
  999. path: data
  1000. }]
  1001. };
  1002. // 配置存放的文件夹 公司code - 表名 - 年月 -- 日
  1003. let folder = app.globalData.company.cpCode + '/' + _this.data.table + '/' + new Date().toYearMonth2() + '/' + new Date().toDay()
  1004. let url = config.upload_url;
  1005. url = url.replace('mdm-server', 'mdm-server' + '-' + app.globalData.company.svcCode.replace('_', '-'))
  1006. file.forEach((res, index) => {
  1007. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  1008. wx.uploadFile({
  1009. url: url,
  1010. filePath: res.path,
  1011. name: 'file',
  1012. formData: {
  1013. 'folder': folder
  1014. },
  1015. header: {
  1016. 'Authorization': 'Bearer ' + app.globalData.token
  1017. },
  1018. success(res) {
  1019. let data = JSON.parse(res.data)
  1020. if (data.code === 200) {
  1021. let form = _this.data.form
  1022. let annexPaths = form['annexPaths'] || []
  1023. data.data.url = config.image_url + data.data.path
  1024. annexPaths.push(data.data)
  1025. form.annexPaths = annexPaths;
  1026. _this.setData({
  1027. form: form,
  1028. value: JSON.stringify(form)
  1029. })
  1030. // 如果是最后一条
  1031. if (index == file.length - 1) {
  1032. _this.triggerEvent("uploadSucess", {})
  1033. }
  1034. }
  1035. },
  1036. })
  1037. })
  1038. }
  1039. },
  1040. success: function (res) {
  1041. // 通过eventChannel向被打开页面传送数据
  1042. res.eventChannel.emit('params', {
  1043. src: e.detail.file[0].path,
  1044. })
  1045. }
  1046. })
  1047. } else {
  1048. const {
  1049. file
  1050. } = e.detail;
  1051. // 配置存放的文件夹 公司code - 表名 - 年月 -- 日
  1052. let folder = app.globalData.company.cpCode + '/' + this.data.table + '/' + new Date().toYearMonth2() + '/' + new Date().toDay()
  1053. let url = config.upload_url;
  1054. url = url.replace('mdm-server', 'mdm-server' + '-' + app.globalData.company.svcCode.replace('_', '-'))
  1055. file.forEach((res, index) => {
  1056. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  1057. wx.uploadFile({
  1058. url: url,
  1059. filePath: res.path,
  1060. name: 'file',
  1061. formData: {
  1062. 'folder': folder
  1063. },
  1064. header: {
  1065. 'Authorization': 'Bearer ' + app.globalData.token
  1066. },
  1067. success(res) {
  1068. let data = JSON.parse(res.data)
  1069. if (data.code === 200) {
  1070. let form = _this.data.form
  1071. let annexPaths = form['annexPaths'] || []
  1072. data.data.url = config.image_url + data.data.path
  1073. annexPaths.push(data.data)
  1074. form.annexPaths = annexPaths;
  1075. _this.setData({
  1076. form: form,
  1077. value: JSON.stringify(form)
  1078. })
  1079. // 如果是最后一条
  1080. if (index == file.length - 1) {
  1081. _this.triggerEvent("uploadSucess", {})
  1082. }
  1083. }
  1084. },
  1085. })
  1086. })
  1087. }
  1088. },
  1089. /**
  1090. * @desc : 获取语言的方法
  1091. * @author : 周兴
  1092. * @date : 2024/1/19
  1093. */
  1094. $t(name) {
  1095. if (this.data.$t[name]) {
  1096. return this.data.$t[name];
  1097. } else {
  1098. return name;
  1099. }
  1100. },
  1101. },
  1102. })