index.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import {
  2. getHeight
  3. } from "../../utils/GetRheRemainingHeight";
  4. Component({
  5. properties: {
  6. list: {
  7. type: {
  8. type: Array
  9. },
  10. value: [{
  11. label: "筛选1",
  12. index: null,
  13. showName: "name", //显示字段
  14. valueKey: "name", //返回Key
  15. selectKey: "id", //传参 代表选着字段 不传参返回整个选择对象
  16. value: "", //选中值
  17. default: "", //默认索引
  18. list: [{
  19. name: "a1",
  20. id: 0
  21. }, {
  22. name: "a2",
  23. id: 1
  24. }]
  25. }]
  26. },
  27. show: {
  28. type: Boolean
  29. },
  30. handle: {
  31. type: Function
  32. }, //按钮回调函数
  33. dateRange: {
  34. type: Boolean
  35. }, //是否开启日期范围筛选
  36. dateRangeName: {
  37. type: String,
  38. value: "日期范围"
  39. },
  40. dateRange1: {
  41. type: Boolean
  42. }, //是否开启日期范围筛选
  43. zIndex: {
  44. type: String,
  45. value: 99999,
  46. },
  47. interrupt: {
  48. type: Function
  49. },
  50. isReset: {
  51. type: Boolean,
  52. value: true
  53. },
  54. minus: {
  55. type: [Number, String],
  56. value: 80
  57. }
  58. },
  59. data: {
  60. startdate: "", //开始时间
  61. enddate: "", //结束时间
  62. periodstart: "",
  63. periodend: "",
  64. },
  65. observers: {
  66. "show"(newVal) {
  67. if (newVal) getHeight('.head', this).then(res => this.setData({
  68. listHeight: res - this.data.minus
  69. }));
  70. }
  71. },
  72. methods: {
  73. /* 选择 */
  74. onSelect(e) {
  75. const {
  76. item, //被选项
  77. index, //列表下标
  78. i //被选项下标
  79. } = e.currentTarget.dataset;
  80. if (this.data.list[index].index == i) {
  81. this.setData({
  82. [`list[${index}].value`]: "",
  83. [`list[${index}].index`]: null
  84. });
  85. } else {
  86. this.setData({
  87. [`list[${index}].value`]: this.data.list[index].selectKey ? item[this.data.list[index].selectKey] : item,
  88. [`list[${index}].index`]: i
  89. });
  90. };
  91. if (this.data.list[index].interrupt) this.triggerEvent("interrupt", {
  92. item,
  93. index,
  94. name: this.data.list[index].selectKey,
  95. list: this.data.list
  96. })
  97. },
  98. onSelectCheckbox(e) {
  99. const {
  100. item, //被选项
  101. index, //列表下标
  102. i //被选项下标
  103. } = e.currentTarget.dataset,
  104. list = this.data.list;
  105. if (list[index].index == "" || list[index].index == null) {
  106. list[index].index = [];
  107. list[index].value = [];
  108. }
  109. let arrIndex = list[index].index.indexOf(i)
  110. if (arrIndex == -1) {
  111. list[index].index.push(i)
  112. list[index].value.push(list[index].selectKey ? item[list[index].selectKey] : item)
  113. } else {
  114. list[index].index.splice(arrIndex, 1)
  115. list[index].value.splice(arrIndex, 1)
  116. };
  117. this.setData({
  118. list
  119. })
  120. if (this.data.list[index].interrupt) this.triggerEvent("interrupt", {
  121. item,
  122. index,
  123. name: this.data.list[index].selectKey,
  124. list
  125. })
  126. },
  127. /* 点击按钮 */
  128. onClick(e) {
  129. const {
  130. name
  131. } = e.target.dataset;
  132. if (name == 'reset') {
  133. this.setData({
  134. list: this.data.list.map(v => {
  135. let value = "",
  136. index = null;
  137. try {
  138. if ((v.default+'').length) {
  139. index = v.default;
  140. value = v.selectKey ? v.list[v.default][v.selectKey] : v.list[v.default]
  141. }
  142. } catch (error) {
  143. }
  144. v.value = value;
  145. v.index = index;
  146. return v;
  147. })
  148. })
  149. this.setData({
  150. startdate: '',
  151. enddate: ''
  152. })
  153. let MultilevelClass = this.selectComponent("#MultilevelClass");
  154. if (MultilevelClass) MultilevelClass.clearChild()
  155. };
  156. let obj = {};
  157. this.data.list.forEach(v => {
  158. if (v.type == 'multilevelClass') {
  159. obj[v.valueKey] = getApp().globalData.temporaryId;
  160. delete(getApp().globalData.temporaryId);
  161. } else if (v.type == 'checkbox') {
  162. obj[v.valueKey] = v.value || [];
  163. } else {
  164. obj[v.valueKey] = v.value;
  165. }
  166. });
  167. if (this.data.dateRange) {
  168. obj.startdate = this.data.startdate;
  169. obj.enddate = this.data.enddate;
  170. };
  171. if (this.data.dateRange1) {
  172. obj.periodstart = this.data.periodstart;
  173. obj.periodend = this.data.periodend;
  174. };
  175. this.triggerEvent("handle", obj);
  176. this.onClose();
  177. },
  178. /* 筛选日期范围 */
  179. changeDate(e) {
  180. const name = e.currentTarget.dataset.name,
  181. value = e.detail.value;
  182. this.setData({
  183. [name]: value
  184. })
  185. },
  186. onClose() {
  187. this.setData({
  188. show: false
  189. })
  190. }
  191. }
  192. })