dk-label-multiple-select.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  1. /*******************************************************************************
  2. * Copyright(c) 2022 dongke All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:
  5. * 编辑履历:
  6. * 作者 日期 版本 修改内容
  7. * 于继渤 2022-5-28 1.00 筛选多选标签
  8. * 作者 日期 版本 修改内容
  9. * 于继渤 2022-5-31 1.01 完善抛出事件
  10. *******************************************************************************/
  11. const app = getApp()
  12. const Constants = require('../../../utils/Constants.js');
  13. const api = require('../../../utils/api.js');
  14. Component({
  15. /**
  16. * 组件的属性列表
  17. */
  18. properties: {
  19. typeName: {
  20. type: String,
  21. default: ''
  22. },
  23. oneSelectFlag: {
  24. type: Boolean,
  25. default: false
  26. },
  27. show: {
  28. type: Boolean,
  29. default: true,
  30. observer: function (newVal) {
  31. let show = this.properties.show
  32. if (show) {
  33. let stowList = this.data.stowList;
  34. let moreList = this.data.moreList;
  35. if (stowList.length == 0 && moreList.length == 0) {
  36. let dataSourceCode = this.data.dataSourceCode
  37. let typeName = this.data.typeName
  38. // 从数据库中取值
  39. if (this.data.loadDataFlag) {
  40. this.getData(dataSourceCode).then(res => {
  41. // 赋值逻辑
  42. let list = res.data
  43. list.forEach(function(item){
  44. if(!item.id){
  45. item.id = item.code
  46. }
  47. })
  48. if (list == null || list.length <= 0) return
  49. list.forEach(item => {
  50. item.infotype = 'default'
  51. })
  52. if (list.length > 4) {
  53. //收起内容(不包含前4个)
  54. stowList = list.slice(5, list.length - 1)
  55. moreList = list.slice(0, 4)
  56. } else {
  57. //更多 前4个
  58. moreList = list
  59. }
  60. this.setData({
  61. stowList: stowList,
  62. moreList: moreList
  63. })
  64. })
  65. }
  66. }
  67. }
  68. }
  69. }
  70. },
  71. options: {
  72. multipleSlots: true, //插槽
  73. },
  74. /**
  75. * 组件的初始数据
  76. */
  77. data: {
  78. stowList: [],
  79. moreList: [],
  80. dataList: [],
  81. dataListTemp: [],
  82. loadDataFlag: true, // 是否从数据库加载数据
  83. },
  84. /**
  85. * 组件生命周期
  86. */
  87. lifetimes: {
  88. attached: function () {
  89. let dataSourceCode = ''
  90. let typeName = this.data.typeName
  91. let name = ''
  92. if (typeName === 'other') {
  93. dataSourceCode = 'other'
  94. name = '其他'
  95. }
  96. if (typeName === 'salesChannel') {
  97. dataSourceCode = 'salesChannel'
  98. name = '销售渠道'
  99. }
  100. if (typeName === 'org') {
  101. dataSourceCode = 'org'
  102. name = '业务部门'
  103. }
  104. //收付款类型
  105. if (typeName === 'rpType') {
  106. dataSourceCode = 'rpType'
  107. name = '收付款类型'
  108. let stowList = [{
  109. name: '收款',
  110. id: '收付款类型-收款',
  111. infotype: 'default'
  112. },
  113. {
  114. name: '付款',
  115. id: '收付款类型-付款',
  116. infotype: 'default'
  117. },
  118. ];
  119. this.setData({
  120. moreList: stowList,
  121. moreFlag: false,
  122. loadDataFlag: false
  123. })
  124. }
  125. //业务员
  126. if (typeName === 'staff') {
  127. dataSourceCode = 'staff'
  128. name = '业务员'
  129. }
  130. //入库类型
  131. if (typeName === 'intoType') {
  132. dataSourceCode = 'intoType'
  133. name = '入库类型'
  134. let stowList = [{
  135. name: '采购入库',
  136. id: '入库类型-采购入库',
  137. infotype: 'default'
  138. },
  139. {
  140. name: '销退入库',
  141. id: '入库类型-销退入库',
  142. infotype: 'default'
  143. },
  144. {
  145. name: '其他入库',
  146. id: '入库类型-其他入库',
  147. infotype: 'default'
  148. },
  149. {
  150. name: '暂存入库',
  151. id: '入库类型-暂存入库',
  152. infotype: 'default'
  153. },
  154. ];
  155. this.setData({
  156. moreList: stowList,
  157. moreFlag: false,
  158. loadDataFlag: false
  159. })
  160. }
  161. //出库进度
  162. if (typeName === 'outStatus') {
  163. dataSourceCode = 'outStatus'
  164. name = '出库进度'
  165. let stowList = [{
  166. name: '未出库',
  167. id: 0,
  168. infotype: 'default'
  169. },
  170. {
  171. name: '出库中',
  172. id: 1,
  173. infotype: 'default'
  174. },
  175. {
  176. name: '已出库',
  177. id: 2,
  178. infotype: 'default'
  179. },
  180. {
  181. name: '有退货',
  182. id: 3,
  183. infotype: 'default'
  184. }
  185. ];
  186. this.setData({
  187. moreList: stowList,
  188. moreFlag: false,
  189. loadDataFlag: false
  190. })
  191. }
  192. //入库类型
  193. if (typeName === 'receiptType') {
  194. dataSourceCode = 'entryType'
  195. name = '入库类型'
  196. }
  197. //入库原因
  198. if (typeName === 'inBoundReason') {
  199. dataSourceCode = 'inReason'
  200. name = '入库原因'
  201. let stowList = [{
  202. name: '其他采购',
  203. id: '基础资料-入库',
  204. infotype: 'default'
  205. },
  206. ];
  207. this.setData({
  208. moreList: stowList,
  209. moreFlag: false,
  210. loadDataFlag: false
  211. })
  212. }
  213. //出库类型
  214. if (typeName === 'outboundType') {
  215. dataSourceCode = 'outType'
  216. name = '出库类型'
  217. let stowList = [{
  218. name: '销售出库',
  219. id: '出库类型-销售出库',
  220. infotype: 'default'
  221. },
  222. {
  223. name: '采退出库',
  224. id: '出库类型-采退出库',
  225. infotype: 'default'
  226. },
  227. {
  228. name: '其他出库',
  229. id: '出库类型-其他出库',
  230. infotype: 'default'
  231. },
  232. ];
  233. this.setData({
  234. moreList: stowList,
  235. moreFlag: false,
  236. loadDataFlag: false
  237. })
  238. }
  239. //出库原因
  240. if (typeName === 'outboundReason') {
  241. dataSourceCode = 'outReason'
  242. name = '出库原因'
  243. let stowList = [{
  244. name: '破损出库',
  245. id: '基础资料-出库',
  246. infotype: 'default'
  247. },
  248. ];
  249. this.setData({
  250. moreList: stowList,
  251. moreFlag: false,
  252. loadDataFlag: false
  253. })
  254. }
  255. //采购入库状态
  256. if (typeName === 'inInventoryStatus') {
  257. dataSourceCode = 'inInventoryStatus'
  258. name = '入库状态'
  259. let stowList = [{
  260. name: '待入库',
  261. id: 0,
  262. infotype: 'default'
  263. },
  264. {
  265. name: '已入库',
  266. id: 1,
  267. infotype: 'default'
  268. }
  269. ];
  270. this.setData({
  271. moreList: stowList,
  272. moreFlag: false,
  273. loadDataFlag: false
  274. })
  275. }
  276. //采购状态
  277. if (typeName === 'purchaseStatus') {
  278. dataSourceCode = 'purchaseStatus'
  279. name = '采购状态'
  280. let stowList = [{
  281. name: '暂存',
  282. id: 0,
  283. infotype: 'default'
  284. },
  285. {
  286. name: '成交',
  287. id: 1,
  288. infotype: 'default'
  289. },
  290. {
  291. name: '出库中',
  292. id: 2,
  293. infotype: 'default'
  294. },
  295. {
  296. name: '待入库',
  297. id: 3,
  298. infotype: 'default'
  299. },
  300. {
  301. name: '已入库',
  302. id: 4,
  303. infotype: 'default'
  304. }
  305. ];
  306. this.setData({
  307. moreList: stowList,
  308. moreFlag: false,
  309. loadDataFlag: false
  310. })
  311. }
  312. //退货状态
  313. if (typeName === 'outInventoryStatus') {
  314. dataSourceCode = 'outInventoryStatus'
  315. name = '退货状态'
  316. let stowList = [{
  317. name: '审批中',
  318. id: 0,
  319. infotype: 'default'
  320. },
  321. {
  322. name: '未出库',
  323. id: 1,
  324. infotype: 'default'
  325. },
  326. {
  327. name: '已出库',
  328. id: 2,
  329. infotype: 'default'
  330. },
  331. {
  332. name: '已退货',
  333. id: 3,
  334. infotype: 'default'
  335. }
  336. ];
  337. this.setData({
  338. moreList: stowList,
  339. moreFlag: false,
  340. loadDataFlag: false
  341. })
  342. }
  343. if (typeName === 'purchaseAccordingStatus') {
  344. dataSourceCode = 'purchaseAccordingStatus'
  345. name = '采购状态'
  346. let stowList = [
  347. {
  348. name: '成交',
  349. id: 0,
  350. infotype: 'info'
  351. },
  352. {
  353. name: '出库中',
  354. id: 1,
  355. infotype: 'default'
  356. }
  357. ];
  358. this.setData({
  359. moreList: stowList,
  360. moreFlag: false,
  361. loadDataFlag: false
  362. })
  363. }
  364. //收款进度
  365. if (typeName === 'receiveStatus') {
  366. dataSourceCode = 'receiveStatus'
  367. name = '收款进度'
  368. let stowList = [{
  369. name: '未收款',
  370. id: 0,
  371. infotype: 'default'
  372. },
  373. {
  374. name: '部分收款',
  375. id: 1,
  376. infotype: 'default'
  377. },
  378. {
  379. name: '收款完成',
  380. id: 2,
  381. infotype: 'default'
  382. }
  383. ];
  384. this.setData({
  385. moreList: stowList,
  386. moreFlag: false,
  387. loadDataFlag: false
  388. })
  389. }
  390. //客户接待
  391. if (typeName === 'followStatus') {
  392. dataSourceCode = 'followStatus'
  393. name = '接待类型'
  394. let stowList = [{
  395. name: '留资接待',
  396. id: 0,
  397. infotype: 'default'
  398. },
  399. {
  400. name: '陌生接待',
  401. id: 1,
  402. infotype: 'default'
  403. }
  404. ]
  405. this.setData({
  406. moreList: stowList,
  407. moreFlag: false,
  408. loadDataFlag: false
  409. })
  410. }
  411. this.setData({
  412. dataSourceCode: dataSourceCode,
  413. name: name
  414. })
  415. },
  416. detached: function () {
  417. // 在组件实例被从页面节点树移除时执行
  418. },
  419. },
  420. /**
  421. * 组件的方法列表
  422. */
  423. methods: {
  424. /**
  425. * @desc : 筛选更多触发事件
  426. * @author : 于继渤
  427. * @date : 2022/5/28 08:50
  428. */
  429. onChangeMore(e) {
  430. if (this.data.stowList.length == 0) {
  431. return
  432. }
  433. this.setData({
  434. moreFlag: !this.data.moreFlag
  435. })
  436. },
  437. /**
  438. * @desc : 点击标签事件
  439. * @author : 于继渤
  440. * @date : 2022/5/28 08:50
  441. */
  442. onClickTag(e) {
  443. let key = e.currentTarget.dataset.key
  444. let typekey = e.currentTarget.dataset.typekey
  445. let index = e.currentTarget.dataset.index
  446. let moreList = this.data.moreList
  447. let stowList = this.data.stowList
  448. if (key === 'more') {
  449. if (moreList[index].infotype === 'default') {
  450. moreList[index].infotype = 'info'
  451. } else if (moreList[index].infotype === 'info') {
  452. moreList[index].infotype = 'default'
  453. }
  454. }
  455. if (key === 'stow') {
  456. if (stowList[index].infotype === 'default') {
  457. stowList[index].infotype = 'info'
  458. } else if (stowList[index].infotype === 'info') {
  459. stowList[index].infotype = 'default'
  460. }
  461. }
  462. this.setData({
  463. moreList: moreList,
  464. stowList: stowList
  465. })
  466. let dataList = this.data.dataList
  467. if (moreList.length > 0) {
  468. moreList.forEach(res1 => {
  469. if (res1.infotype === 'info') {
  470. dataList.push(res1)
  471. }
  472. })
  473. }
  474. if (this.data.oneSelectFlag) {
  475. moreList.forEach(itt => {
  476. if (itt.name == moreList[index].name) {
  477. itt.infotype = 'info'
  478. } else {
  479. itt.infotype = 'default'
  480. }
  481. })
  482. this.setData({
  483. moreList: moreList
  484. })
  485. }
  486. if (stowList.length > 0) {
  487. stowList.forEach(res2 => {
  488. if (res2.infotype === 'info') {
  489. dataList.push(res2)
  490. }
  491. })
  492. }
  493. let dataListTemp = []
  494. dataList.forEach(res3 => {
  495. if (res3.infotype == 'info') {
  496. dataListTemp.push(res3.id)
  497. }
  498. })
  499. dataList = dataList.filter((item, index) => {
  500. return dataList.indexOf(item) === index
  501. })
  502. this.triggerEvent('onClickTag', {
  503. dataList: Array.from(new Set(dataListTemp)),
  504. key: typekey
  505. })
  506. },
  507. /**
  508. * @desc : 重置事件
  509. * @author : 于继渤
  510. * @date : 2022/5/28 08:50
  511. */
  512. clearForm() {
  513. let moreList = this.data.moreList
  514. let stowList = this.data.stowList
  515. if (moreList.length > 0) {
  516. moreList.forEach(res => {
  517. res.infotype = 'default'
  518. })
  519. }
  520. if (stowList.length > 0) {
  521. stowList.forEach(res => {
  522. res.infotype = 'default'
  523. })
  524. }
  525. this.setData({
  526. moreList: moreList,
  527. stowList: stowList,
  528. dataList: []
  529. })
  530. },
  531. /**
  532. * @desc : 筛选数据源获取
  533. * @author : 于继渤
  534. * @date : 2022/5/28 08:50
  535. */
  536. getData(dataSourceCode) {
  537. let param = {
  538. dataSourceCode: dataSourceCode
  539. }
  540. return new Promise((resolve, reject) => {
  541. api.request(Constants.BASIC_COMMON_API + 'get_wx_init_data', 'POST', param).then(res => {
  542. if (res.data.code === 200) {
  543. resolve(res.data)
  544. } else {
  545. reject(res.data)
  546. }
  547. })
  548. })
  549. },
  550. }
  551. })