modelSequence.blade.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. @extends('layouts.app')
  2. @section('title')货主定制序列-料箱型号@endsection
  3. @section('content')
  4. <div class="container-fluid d-none" id="container">
  5. <div class="row">
  6. <div class="col-6 card">
  7. <div class="card-header">
  8. <label class="pull-left h5 font-weight-bold">货主列表</label>
  9. <label class="pull-right"><input type="text" class="form-control form-control-sm rounded-pill" placeholder="检索" @keydown.enter="seekOwner()"></label>
  10. </div>
  11. <div class="card-body p-0" style="cursor: pointer">
  12. <ul class="list-group">
  13. <li class="list-group-item" :class="selectedOwner===owner.id ? 'bg-info' : ''" v-for="(owner,i) in owners" v-show="!owner.hide" @click="loadModel(owner)">
  14. @{{ owner.name }}
  15. </li>
  16. </ul>
  17. </div>
  18. </div>
  19. <div class="col-6 card card-body pt-0">
  20. <div class="card">
  21. <div class="card-header">
  22. <div class="pull-left h5 font-weight-bold mr-3">料箱型号</div>
  23. <button class="btn btn-sm btn-outline-info" @click="checkAll()">全选</button>
  24. <button class="pull-right btn border border-2" :class="isSaveSort ? 'btn-success' : 'text-secondary border-secondary'" :disabled="!isSaveSort" @click="saveModel()">保存</button>
  25. </div>
  26. <div class="card-body p-0">
  27. <ul class="list-group" style="cursor: move;">
  28. <li class="list-group-item" v-for="model in sequenceModels" :id="'model-'+model.id" draggable="true"
  29. @drop="drop($event)" @dragover="dragover($event,dragoverId!==model.id)" @dragstart.stop="dragstart(model.id)">
  30. <div class="form-check">
  31. <label class="form-check-label">
  32. <input type="checkbox" name="model" class="form-check-input" @change="isSaveSort=true" v-model="model.checked" :value="model.id">@{{ model.description }}
  33. </label>
  34. </div>
  35. </li>
  36. </ul>
  37. <li id="dragover-container" class="border-dashed-red" v-show="isDragover" @drop="drop($event)" @dragover="dragover($event,false)">
  38. <div class='w-100 text-center text-secondary'>拖拽至此</div>
  39. </li>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. @stop
  46. @section("lastScript")
  47. <script type="text/javascript">
  48. new Vue({
  49. el:"#container",
  50. data:{
  51. owners:[@foreach($owners as $owner)@json($owner),@endforeach],
  52. models:{@foreach($models as $model)"{{$model->id}}":@json($model),@endforeach},
  53. selectedOwner:"",
  54. sequenceModels:[],
  55. dragoverId:"",
  56. isDragover:false,
  57. isSaveSort:false,
  58. checked:false,
  59. },
  60. mounted(){
  61. $("#container").removeClass("d-none");
  62. },
  63. methods:{
  64. checkAll(){
  65. this.sequenceModels.forEach((m,i)=>{
  66. this.$set(this.sequenceModels[i],'checked',!this.checked);
  67. });
  68. this.checked = !this.checked;
  69. },
  70. seekOwner(){
  71. let val = event.target.value;
  72. this.owners.forEach((owner,i)=>{
  73. if (owner.name.indexOf(val)===-1)this.$set(this.owners[i],'hide',true);
  74. else this.$set(this.owners[i],'hide',false);
  75. });
  76. },
  77. loadModel(owner){
  78. if (this.selectedOwner === owner.id)return;
  79. this.selectedOwner = owner.id;
  80. this.isSaveSort = false;
  81. let arr = [];
  82. if (owner.model_sequence)arr = owner.model_sequence.split(",");
  83. let sequenceModels = [];
  84. arr.forEach(id=>{
  85. let model = Object.assign({},this.models[id]);
  86. model.checked = true;
  87. sequenceModels.push(model);
  88. });
  89. for (let key in this.models){
  90. if (!arr.includes(this.models[key].id.toString())){
  91. let model = Object.assign({},this.models[key]);
  92. model.checked = false;
  93. sequenceModels.push(model);
  94. }
  95. }
  96. this.sequenceModels = sequenceModels;
  97. },
  98. drop(e){
  99. e.preventDefault();
  100. e.stopPropagation();
  101. $("#dragover-container").after($("#model-"+this.dragoverId));
  102. this.dragoverId = "";
  103. this.isDragover = false;
  104. this.isSaveSort = true;
  105. },
  106. dragover(e, isAllow = true){
  107. e.preventDefault();
  108. e.stopPropagation();
  109. if (isAllow) e.currentTarget.after(document.getElementById("dragover-container"))
  110. },
  111. dragstart(id){
  112. $("#model-"+id).after($("#dragover-container"));
  113. this.dragoverId = id;
  114. this.isDragover = true;
  115. },
  116. saveModel(){
  117. if (!this.isSaveSort)return;
  118. let element = document.getElementsByName("model");
  119. let val = "";
  120. for (let i=0;i<element.length;i++){
  121. if (element[i].checked===true)val += element[i].value+",";
  122. }
  123. val = val.substring(0,val.length-1);
  124. let index = null;
  125. this.owners.some((owner,i)=>{
  126. if (owner.id===this.selectedOwner){
  127. index = i;
  128. return true;
  129. }
  130. });
  131. this.isSaveSort = false;
  132. if (this.owners[index].model_sequence === val)return;
  133. window.tempTip.postBasicRequest("{{url('maintenance/materialBoxModel/updateModelSequence')}}",{id:this.selectedOwner,sequence:val},()=>{
  134. this.$set(this.owners[index],"model_sequence",val);
  135. return "模型序列已更新";
  136. })
  137. },
  138. },
  139. });
  140. </script>
  141. @stop