index.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. dateRange1: {
  40. type: Boolean
  41. }, //是否开启日期范围筛选
  42. dateRange2: {
  43. type: Boolean
  44. }, //是否开启日期范围筛选
  45. dateRange3: {
  46. type: Boolean
  47. }, //是否开启日期范围筛选
  48. dateRangeName: {
  49. type: String,
  50. value: "日期范围"
  51. },
  52. dateRangeName1: {
  53. type: String,
  54. value: "日期范围"
  55. },
  56. dateRangeName2: {
  57. type: String,
  58. value: "日期范围"
  59. },
  60. dateRangeName3: {
  61. type: String,
  62. value: "日期范围"
  63. },
  64. zIndex: {
  65. type: String,
  66. value: 99999,
  67. },
  68. interrupt: {
  69. type: Function
  70. },
  71. isReset: {
  72. type: Boolean,
  73. value: true
  74. },
  75. minus: {
  76. type: [Number, String],
  77. value: 80
  78. }
  79. },
  80. data: {
  81. startdate: "", //开始时间
  82. enddate: "", //结束时间
  83. periodstart: "",
  84. periodend: "",
  85. },
  86. observers: {
  87. "show"(newVal) {
  88. if (newVal) getHeight('.head', this).then(res => this.setData({
  89. listHeight: res - this.data.minus
  90. }));
  91. }
  92. },
  93. lifetimes: {
  94. attached: function () {
  95. getApp().globalData.Language.getLanguagePackage(this)
  96. }
  97. },
  98. methods: {
  99. /* 选择 */
  100. onSelect(e) {
  101. const {
  102. item, //被选项
  103. index, //列表下标
  104. i //被选项下标
  105. } = e.currentTarget.dataset;
  106. if (this.data.list[index].index == i) {
  107. this.setData({
  108. [`list[${index}].value`]: "",
  109. [`list[${index}].index`]: null
  110. });
  111. } else {
  112. this.setData({
  113. [`list[${index}].value`]: this.data.list[index].selectKey ? item[this.data.list[index].selectKey] : item,
  114. [`list[${index}].index`]: i
  115. });
  116. };
  117. if (this.data.list[index].interrupt) this.triggerEvent("interrupt", {
  118. item,
  119. index,
  120. name: this.data.list[index].selectKey,
  121. list: this.data.list
  122. })
  123. },
  124. onSelectCheckbox(e) {
  125. const {
  126. item, //被选项
  127. index, //列表下标
  128. i //被选项下标
  129. } = e.currentTarget.dataset,
  130. list = this.data.list;
  131. if (list[index].index == "" || list[index].index == null) {
  132. list[index].index = [];
  133. list[index].value = [];
  134. }
  135. let arrIndex = list[index].index.indexOf(i)
  136. if (arrIndex == -1) {
  137. list[index].index.push(i)
  138. list[index].value.push(list[index].selectKey ? item[list[index].selectKey] : item)
  139. } else {
  140. list[index].index.splice(arrIndex, 1)
  141. list[index].value.splice(arrIndex, 1)
  142. };
  143. this.setData({
  144. list
  145. })
  146. if (this.data.list[index].interrupt) this.triggerEvent("interrupt", {
  147. item,
  148. index,
  149. name: this.data.list[index].selectKey,
  150. list
  151. })
  152. },
  153. /* 点击按钮 */
  154. onClick(e) {
  155. const {
  156. name
  157. } = e.target.dataset;
  158. if (name == 'reset') {
  159. this.setData({
  160. list: this.data.list.map(v => {
  161. let value = "",
  162. index = null;
  163. try {
  164. if ((v.default+'').length) {
  165. index = v.default;
  166. value = v.selectKey ? v.list[v.default][v.selectKey] : v.list[v.default]
  167. }
  168. } catch (error) {
  169. }
  170. v.value = value;
  171. v.index = index;
  172. return v;
  173. })
  174. })
  175. this.setData({
  176. startdate: '',
  177. enddate: ''
  178. })
  179. let MultilevelClass = this.selectComponent("#MultilevelClass");
  180. if (MultilevelClass) MultilevelClass.clearChild()
  181. };
  182. let obj = {};
  183. try {
  184. this.data.list.forEach(v => {
  185. if (v.type == 'multilevelClass') {
  186. obj[v.valueKey] = getApp().globalData.temporaryId;
  187. delete(getApp().globalData.temporaryId);
  188. } else if (v.type == 'checkbox') {
  189. obj[v.valueKey] = v.value || [];
  190. } else {
  191. obj[v.valueKey] = v.value;
  192. }
  193. });
  194. } catch (error) {
  195. }
  196. if (this.data.dateRange) {
  197. obj.startdate = this.data.startdate;
  198. obj.enddate = this.data.enddate;
  199. };
  200. if (this.data.dateRange1) {
  201. obj.periodstart = this.data.periodstart;
  202. obj.periodend = this.data.periodend;
  203. };
  204. obj.name = name;
  205. this.triggerEvent("handle", obj);
  206. this.onClose();
  207. },
  208. /* 筛选日期范围 */
  209. changeDate(e) {
  210. const name = e.currentTarget.dataset.name,
  211. value = e.detail.value;
  212. this.setData({
  213. [name]: value
  214. })
  215. },
  216. onClose() {
  217. this.setData({
  218. show: false
  219. })
  220. }
  221. }
  222. })