index.blade.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. @extends('layouts.app')
  2. @section('title')设置@endsection
  3. @section('content')
  4. <div class="container-fluid d-none" id="container">
  5. <div class="card">
  6. <div class="card-body mt-2">
  7. <div class="ml-2">
  8. <div v-for="region in parentMapping[0]" :style="{'margin-left':(2+region.type)+'%'}">
  9. <div>
  10. <span class="fa fa-hand-o-right cursor-pointer" :id="'fa-tree-'+region.id" @click="showItem('tree-'+region.id,$event)" v-if="parentMapping[region.id]"></span>
  11. <span v-else>&nbsp;&nbsp;&nbsp;</span>
  12. &nbsp;&nbsp;<span class="fa fa-circle" :class="region.deleted_at ? 'text-danger' : 'text-success'"></span>&nbsp;
  13. @{{ region.name }}<label class="text-secondary" v-if="region.code">(@{{ region.code }})</label>
  14. <label class="cursor-pointer" @click="addRegion(region.id,region.type)">&nbsp;<span class="fa fa-plus-circle"></span></label>
  15. </div>
  16. <div :id="'tree-'+region.id" class="up">
  17. <div v-for="city in parentMapping[region.id]" :style="{'margin-left':(2+city.type)+'%'}">
  18. <div v-if="city.id">
  19. <span class="fa fa-hand-o-right cursor-pointer" :id="'fa-tree-'+city.id" @click="showItem('tree-'+city.id,$event)" v-if="parentMapping[city.id]"></span>
  20. <span v-else>&nbsp;&nbsp;&nbsp;</span>
  21. &nbsp;&nbsp;<span class="fa fa-circle" :class="city.deleted_at ? 'text-danger' : 'text-success'"></span>&nbsp;
  22. @{{ city.name }}<label class="text-secondary" v-if="city.code">(@{{ city.code }})</label>
  23. <label class="cursor-pointer" @click="addRegion(city.id,city.type)">&nbsp;<span class="fa fa-plus-circle"></span></label>
  24. </div>
  25. <label v-else>
  26. <input @blur="submitRegion(city,region.id)" @keydown.13="submitRegion(city,region.id)" id="tree-edit-0" v-model="city.name"
  27. class="form-control form-control-sm rounded-pill ml-1" type="text" placeholder="添加城市"/>
  28. </label>
  29. <div :id="'tree-'+city.id" class="up">
  30. <div v-for="district in parentMapping[city.id]" :style="{'margin-left':(2+district.type)+'%'}">
  31. <div v-if="district.id">
  32. <span class="fa fa-hand-o-right cursor-pointer" :id="'fa-tree-'+district.id" @click="showItem('tree-'+district.id,$event)" v-if="parentMapping[district.id]"></span>
  33. <span v-else>&nbsp;&nbsp;&nbsp;</span>
  34. &nbsp;&nbsp;<span class="fa fa-circle" :class="district.deleted_at ? 'text-danger' : 'text-success'"></span>&nbsp;
  35. @{{ district.name }}<label class="text-secondary" v-if="district.code">(@{{ district.code }})</label>
  36. <label class="cursor-pointer" @click="addRegion(district.id,district.type)">&nbsp;<span class="fa fa-plus-circle"></span></label>
  37. </div>
  38. <label v-else>
  39. <input @blur="submitRegion(district,city.id)" @keydown.13="submitRegion(district,city.id)" id="tree-edit-0" v-model="district.name"
  40. class="form-control form-control-sm rounded-pill ml-1" type="text" placeholder="添加区/县"/>
  41. </label>
  42. <div :id="'tree-'+district.id" class="up">
  43. <div v-for="town in parentMapping[district.id]" :style="{'margin-left':(2+town.type)+'%'}">
  44. <div v-if="town.id">
  45. <span class="fa fa-hand-o-right cursor-pointer" :id="'fa-tree-'+town.id" @click="showItem('tree-'+town.id,$event)" v-if="parentMapping[town.id]"></span>
  46. <span v-else>&nbsp;&nbsp;&nbsp;</span>
  47. &nbsp;&nbsp;<span class="fa fa-circle" :class="town.deleted_at ? 'text-danger' : 'text-success'"></span>&nbsp;
  48. @{{ town.name }}<label class="text-secondary" v-if="town.code">(@{{ town.code }})</label>
  49. <label class="cursor-pointer" @click="addRegion(town.id,town.type)">&nbsp;<span class="fa fa-plus-circle"></span></label>
  50. </div>
  51. <label v-else>
  52. <input @blur="submitRegion(town,district.id)" @keydown.13="submitRegion(town,district.id)" id="tree-edit-0" v-model="town.name"
  53. class="form-control form-control-sm rounded-pill ml-1" type="text" placeholder="添加乡/镇"/>
  54. </label>
  55. <div :id="'tree-'+town.id" class="up">
  56. <div v-for="street in parentMapping[town.id]" :style="{'margin-left':(2+street.type)+'%'}">
  57. <div v-if="street.id">
  58. <span class="fa fa-circle" :class="street.deleted_at ? 'text-danger' : 'text-success'"></span>&nbsp;
  59. @{{ street.name }}<label class="text-secondary" v-if="street.code">(@{{ street.code }})</label>
  60. </div>
  61. <label v-else>
  62. <input @blur="submitRegion(street,town.id)" @keydown.13="submitRegion(street,town.id)" id="tree-edit-0" v-model="street.name"
  63. class="form-control form-control-sm rounded-pill ml-1" type="text" placeholder="添加村/街"/>
  64. </label>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. @endsection
  79. @section("lastScript")
  80. <script>
  81. new Vue({
  82. el:"#container",
  83. data:{
  84. regions:[
  85. @foreach($regions as $region)
  86. {!! $region !!},
  87. @endforeach
  88. ],
  89. parentMapping:{},
  90. showList:{},
  91. },
  92. mounted(){
  93. let parent = {};
  94. this.regions.forEach(region=>{
  95. let p = region.parent_id ? region.parent_id : 0;
  96. if (parent[p])parent[p].push(region);
  97. else parent[p] = [region];
  98. });
  99. this.parentMapping = parent;
  100. setTimeout(()=>{
  101. $(".up").slideUp();
  102. $("#container").removeClass("d-none");
  103. },0);
  104. },
  105. methods:{
  106. showItem(id,event){
  107. if (this.showList[id]){
  108. this.showList[id] = false;
  109. event.target.className = "fa fa-hand-o-right cursor-pointer";
  110. $("#"+id).slideUp();
  111. }else{
  112. this.showList[id] = true;
  113. event.target.className = "fa fa-hand-o-down cursor-pointer";
  114. $("#"+id).slideDown();
  115. }
  116. },
  117. addRegion(id,type){
  118. let obj = {name:"",code:"",type:Number(type)+1,parent_id:id};
  119. if (this.parentMapping[id])this.parentMapping[id].unshift(obj);
  120. else this.$set(this.parentMapping,id,[obj]);
  121. setTimeout(()=>{
  122. if (!this.showList[id]){
  123. this.showList[id] = true;
  124. document.getElementById("fa-tree-"+id).className = "fa fa-hand-o-down cursor-pointer";
  125. $("#tree-"+id).slideDown();
  126. }
  127. $("#tree-edit-0").focus();
  128. },0);
  129. },
  130. submitRegion(region,parent){
  131. if (region.id)return;
  132. if (!region.name){
  133. this.$delete(this.parentMapping[parent],0);
  134. if (this.parentMapping[parent].length === 0)this.$delete(this.parentMapping,parent);
  135. return;
  136. }
  137. window.tempTip.postBasicRequest("{{url('maintenance/region/store')}}",{name:region.name,parent_id:region.parent_id,type:region.type},res=>{
  138. region.id = res.id;
  139. this.$set(this.parentMapping[parent][0],region);
  140. })
  141. },
  142. },
  143. });
  144. </script>
  145. @stop