index.js 6.2 KB

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