area.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'shopro/area/index' + location.search,
  8. add_url: 'shopro/area/add',
  9. edit_url: 'shopro/area/edit',
  10. del_url: 'shopro/area/del',
  11. multi_url: 'shopro/area/multi',
  12. table: 'shopro_area',
  13. }
  14. });
  15. var table = $("#table");
  16. // 初始化表格
  17. table.bootstrapTable({
  18. url: $.fn.bootstrapTable.defaults.extend.index_url,
  19. pk: 'id',
  20. sortName: 'id',
  21. columns: [
  22. [{
  23. checkbox: true
  24. },
  25. {
  26. field: 'id',
  27. title: __('Id')
  28. },
  29. {
  30. field: 'name',
  31. title: __('Name')
  32. },
  33. {
  34. field: 'pid',
  35. title: __('Pid')
  36. },
  37. {
  38. field: 'level',
  39. title: __('Level')
  40. },
  41. {
  42. field: 'operate',
  43. title: __('Operate'),
  44. table: table,
  45. events: Table.api.events.operate,
  46. formatter: Table.api.formatter.operate
  47. }
  48. ]
  49. ]
  50. });
  51. // 为表格绑定事件
  52. Table.api.bindevent(table);
  53. },
  54. add: function () {
  55. Controller.api.bindevent();
  56. },
  57. edit: function () {
  58. Controller.api.bindevent();
  59. },
  60. select: function () {
  61. function urlParmas(par) {
  62. let value = ""
  63. window.location.search.replace("?", '').split("&").forEach(i => {
  64. if (i.split('=')[0] == par) {
  65. value = JSON.parse(decodeURI(i.split('=')[1]))
  66. }
  67. })
  68. return value
  69. }
  70. var areaSelect = new Vue({
  71. el: "#areaSelect",
  72. data() {
  73. return {
  74. pcaData: Config.areaData,
  75. data: Config.areaData,
  76. selectedId: [],
  77. selectedProvince: urlParmas('parmas').province_ids ? urlParmas('parmas').province_ids.split(',') : [],
  78. selectedCity: urlParmas('parmas').city_ids ? urlParmas('parmas').city_ids.split(',') : [],
  79. selectedArea: urlParmas('parmas').area_ids ? urlParmas('parmas').area_ids.split(',') : [],
  80. selectedName: urlParmas('parmas').name ? urlParmas('parmas').name.split(',') : [],
  81. defaultProps: {
  82. children: 'children',
  83. label: 'label'
  84. },
  85. filterText: '',
  86. checked: false,
  87. };
  88. },
  89. mounted() {
  90. this.selectedId = this.selectedId.concat([], this.selectedProvince, this.selectedCity, this.selectedArea)
  91. },
  92. methods: {
  93. selceted(data) {
  94. let realy = this.getSimpleCheckedNodes(this.$refs.tree.store);
  95. let arrId = [],
  96. arrName = [],
  97. arr1 = [],
  98. arr2 = [],
  99. arr3 = []
  100. realy.forEach(i => {
  101. if (i.level == 1) {
  102. arr1.push(i.id)
  103. }
  104. if (i.level == 2) {
  105. arr2.push(i.id)
  106. }
  107. if (i.level == 3) {
  108. arr3.push(i.id)
  109. }
  110. arrId.push(i.id);
  111. arrName.push(i.label)
  112. })
  113. this.selectedId = arrId;
  114. this.selectedProvince = arr1;
  115. this.selectedCity = arr2;
  116. this.selectedArea = arr3;
  117. this.selectedName = arrName;
  118. },
  119. getSimpleCheckedNodes(store) {
  120. const checkedNodes = [];
  121. const traverse = function (node) {
  122. const childNodes = node.root ? node.root.childNodes : node.childNodes;
  123. childNodes.forEach(child => {
  124. if (child.checked) {
  125. checkedNodes.push(child.data);
  126. }
  127. if (child.indeterminate) {
  128. traverse(child);
  129. }
  130. });
  131. };
  132. traverse(store)
  133. return checkedNodes;
  134. },
  135. filterNode(value, data) {
  136. if (!value) return true;
  137. return data.label.indexOf(value) !== -1;
  138. },
  139. define() {
  140. let data = {
  141. province: this.selectedProvince,
  142. city: this.selectedCity,
  143. area: this.selectedArea,
  144. name: this.selectedName
  145. }
  146. Fast.api.close({
  147. data: data
  148. })
  149. },
  150. },
  151. watch: {
  152. filterText(val) {
  153. this.$refs.tree.filter(val);
  154. },
  155. checked(val) {
  156. if (val) {
  157. this.selectedId = [];
  158. this.selectedName = [];
  159. this.selectedProvince = [];
  160. this.selectedCity = [];
  161. this.selectedArea = [];
  162. this.pcaData.forEach(i => {
  163. this.selectedId.push(i.id);
  164. this.selectedName.push(i.label);
  165. this.selectedProvince.push(i.id)
  166. });
  167. this.$refs.tree.setCheckedNodes(this.selectedId)
  168. } else {
  169. this.selectedId = [];
  170. this.selectedName = [];
  171. this.selectedProvince = [];
  172. this.selectedCity = [];
  173. this.selectedArea = [];
  174. this.$refs.tree.setCheckedNodes(this.selectedId)
  175. }
  176. },
  177. },
  178. })
  179. },
  180. api: {
  181. bindevent: function () {
  182. Form.api.bindevent($("form[role=form]"));
  183. }
  184. }
  185. };
  186. return Controller;
  187. });