vue-search-block.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. var category_list = [];
  2. var project_list = [];
  3. var type_list = [];
  4. $.ajax({
  5. url: "./script/php/get_category_list.php",
  6. type: "GET",
  7. async: false,
  8. contentType: "application/json",
  9. dataType: "json"
  10. }).done(function(data) {
  11. category_list = data;
  12. }).error(function(error) {
  13. console.log(error);
  14. });
  15. $.ajax({
  16. url: "./script/php/get_project_list.php",
  17. data: {
  18. category_id: get_object_value_to_list(category_list, 'category_id'),
  19. },
  20. type: "GET",
  21. async: false,
  22. contentType: "application/json",
  23. dataType: "json"
  24. }).done(function(data) {
  25. project_list = data;
  26. }).error(function(error) {
  27. console.log(error);
  28. });
  29. $.ajax({
  30. url: "./script/php/get_type_list.php",
  31. type: "GET",
  32. async: false,
  33. contentType: "application/json",
  34. dataType: "json"
  35. }).done(function(data) {
  36. type_list = data;
  37. }).error(function(error) {
  38. console.log(error);
  39. });
  40. const vm = Vue.createApp({});
  41. vm.component('search-block', {
  42. data() {
  43. return {
  44. category_list: category_list,
  45. project_list: project_list,
  46. type_list: type_list
  47. }
  48. },
  49. template: `<section class="panel">
  50. <div class="panel-body">
  51. <div class="filter_for_project">
  52. <div class="ui-group">
  53. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="category">
  54. <li style="padding: 10px 15px;">
  55. <label>工程類別:</label>
  56. </li>
  57. <li class="active">
  58. <a class="button" data-filter="">any</a>
  59. </li>
  60. <filter-button v-for="item in category_list" v-bind:object="item.category_name"></filter-button>
  61. </ul>
  62. </div>
  63. </div>
  64. <div class="filter_for_search">
  65. <div class="ui-group">
  66. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="project">
  67. <li style="padding: 10px 15px;">
  68. <label>專案類別:</label>
  69. </li>
  70. <li class="active">
  71. <a class="button" data-filter="">any</a>
  72. </li>
  73. <filter-project-button v-for="item in project_list" v-bind:category_id="item.category_id" v-bind:object="item.project_name"></filter-project-button>
  74. </ul>
  75. </div>
  76. <div class="ui-group">
  77. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="type">
  78. <li style="padding: 10px 15px;">
  79. <label>文件類別:</label>
  80. </li>
  81. <li class="active">
  82. <a class="button" data-filter="">any</a>
  83. </li>
  84. <filter-button v-for="item in type_list" v-bind:object="item.type_name"></filter-button>
  85. </ul>
  86. </div>
  87. </div>
  88. </div>
  89. </section>`
  90. });
  91. vm.component('filter-button', {
  92. template: `<li><a class="button" v-bind:data-filter="addDot">{{object}}</a></li>`,
  93. props: {
  94. object: String,
  95. },
  96. computed: {
  97. addDot() {
  98. return "." + this.object;
  99. }
  100. },
  101. });
  102. vm.component('filter-project-button', {
  103. template: `<li><a class="button" v-bind:data-filter="addDot">{{object}}</a></li>`,
  104. props: ["category_id", "object"],
  105. methods: {
  106. addClass(class_name) {
  107. return class_name + " " + this.category_id;
  108. }
  109. },
  110. computed: {
  111. addDot() {
  112. return "." + this.object;
  113. }
  114. },
  115. });
  116. // var $isotope_project = $('.filter_for_search').isotope({
  117. // itemSelector: '.project'
  118. // });
  119. // var filters = {};
  120. // $('.filter_for_project').on( 'click', '.button', function() {
  121. // var $this = $(this);
  122. // // get group key
  123. // var $buttonGroup = $this.parents('.button-group');
  124. // var filterGroup = $buttonGroup.attr('data-filter-group');
  125. // // set filter for group
  126. // filters[ filterGroup ] = $this.attr('data-filter');
  127. // // combine filters
  128. // var filterValue = concatValues( filters );
  129. // // set filter for Isotope
  130. // $isotope_project.isotope({ filter: filterValue });
  131. // });
  132. // function concatValues( obj ) {
  133. // var value = '';
  134. // for ( var prop in obj ) {
  135. // value += obj[ prop ];
  136. // }
  137. // return value;
  138. // }
  139. function get_object_value_to_list(obj, key) {
  140. value_list = [];
  141. for(i=0; i<obj.length; i++){
  142. value_list.push(obj[i][key]);
  143. }
  144. return value_list
  145. }