selectSectionBottom.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. var app = getApp()
  2. var that;
  3. Component({
  4. mixins: [],
  5. data: {
  6. all_rule_list: {},
  7. isShow: false,
  8. terr: [
  9. { name: '全部', id: 0 }
  10. ],
  11. rule_tree: [],
  12. selectSenction: [],
  13. },
  14. props: {
  15. onConfirm: (data) => console.log(data),
  16. onClose: (data) => console.log(data),
  17. defaultSection: [],
  18. },
  19. didMount() {
  20. that = this;
  21. this.setData({
  22. isShow: this.props.isShow,
  23. terr: [{ name: '全部', id: 0 }],
  24. selectSenction: this.props.defaultSection,
  25. })
  26. this.getBmData();
  27. },
  28. methods: {
  29. onConfirm() {
  30. if (!this.data.selectSenction) {
  31. app.globalData.showToast("请选择部门");
  32. return;
  33. }
  34. this.props.onConfirm(this.data.selectSenction);
  35. this.props.onClose();
  36. },
  37. //点击导航栏
  38. activeItem(e) {
  39. var item = e.target.dataset.item;
  40. var index = e.target.dataset.index;
  41. var terr = this.data.terr;
  42. if ((index + 1) == terr.length) { return false };
  43. this.setData({ rule_tree: [] });
  44. if (index == 0) {
  45. var all_rule_list= this.data.all_rule_list;
  46. var selectSenction=this.data.selectSenction;
  47. all_rule_list.map((item) => { //设置列表的选中状态
  48. item.checked = false;
  49. if (selectSenction.length > 0) {
  50. selectSenction.forEach(item2 => {
  51. if (item.id == item2.id) {
  52. item.checked = true;
  53. }
  54. })
  55. }
  56. })
  57. this.setData({
  58. terr: [{ name: '全部', id: 0 }],
  59. rule_tree: all_rule_list
  60. })
  61. } else {
  62. var arr = terr.slice(0, index + 1);
  63. this.setData({
  64. rule_tree: item._child,
  65. terr: arr
  66. })
  67. }
  68. },
  69. // 点击下一级
  70. openDown(e) {
  71. this.setData({ rule_tree: [] });
  72. var item = e.target.dataset.item;
  73. var terr = this.data.terr;
  74. var selectSenction=this.data.selectSenction;
  75. terr.push(item);
  76. if (item._child.length > 0) {
  77. item._child.map(item => {
  78. if (selectSenction.length > 0) {
  79. selectSenction.forEach(item2 => {
  80. if (item.id == item2.id) {
  81. item.checked = true;
  82. }
  83. })
  84. }
  85. })
  86. that.setData({
  87. rule_tree: item._child,
  88. terr: terr
  89. })
  90. }
  91. },
  92. radioChange: function (e) {
  93. var selectSenction = this.data.selectSenction;
  94. var isExist = false;
  95. let item = e.target.dataset.item;
  96. let index = e.target.dataset.index;
  97. let checked = `rule_tree[${index}].checked`;//获取当前控制选中的字段
  98. let elm = this.data.rule_tree[index].checked;//当前的状态
  99. this.setData({
  100. [checked]: !elm,
  101. })
  102. if (e.detail.value) {//当有值时选中
  103. selectSenction.forEach((element, _this) => {
  104. if (element.id == item.id) {
  105. isExist = true;
  106. }
  107. });
  108. if (!isExist) {
  109. selectSenction.push(item);
  110. }
  111. } else {//取消选中
  112. selectSenction.forEach((element, index, _this) => {
  113. if (element.id == item.id) {
  114. _this.splice(index, 1);
  115. }
  116. });
  117. }
  118. this.setData({
  119. selectSenction: selectSenction
  120. })
  121. },
  122. //获取部门列表
  123. getBmData() {
  124. app.$get("api/department/tree", {}).then((res) => {
  125. var list = res.data.data.list || [];
  126. var defaultSection = that.props.defaultSection;
  127. list.map((item) => { //设置列表的选中状态
  128. item.checked = false;
  129. if (defaultSection.length > 0) {
  130. defaultSection.forEach(item2 => {
  131. if (item.id == item2.id) {
  132. item.checked = true;
  133. }
  134. })
  135. }
  136. })
  137. this.setData({
  138. rule_tree: list,
  139. all_rule_list: list,
  140. })
  141. })
  142. },
  143. //关闭
  144. onClose(e) {
  145. this.props.onClose();
  146. },
  147. },
  148. });