|
|
@@ -4,29 +4,31 @@
|
|
|
@section('content')
|
|
|
<div class="container-fluid" id="container" @drop="drop($event)" @dragover="dragover($event, false)">
|
|
|
@include("maintenance.menu._modal")
|
|
|
- <div class="card">
|
|
|
+ <div class="card" id="content">
|
|
|
<div class="card-body">
|
|
|
@can("计量单位-录入")<button class="btn btn-outline-info mb-1 mr-3" @click="openModal()"><span class="fa fa-plus"></span> 新 增</button>@endcan
|
|
|
@can("计量单位-录入")<button class="btn border border-2 mb-1 mr-3" :class="isSaveSort ? 'btn-success' : 'text-secondary'" :disabled="!isSaveSort" @click="sort()"> 保 存 </button>@endcan
|
|
|
- <div class="row text-nowrap" style="cursor: move;">
|
|
|
- <ul class="list-group col-9 offset-1">
|
|
|
+ <div class="row text-nowrap">
|
|
|
+ <ul class="list-group col-9 offset-1" style="cursor: move;">
|
|
|
<li class="list-group-item" v-for="menu in menus" draggable="true" :id="'menu-'+menu.id"
|
|
|
:data-order="menu.sequence" :data-id="menu.id" :data-parent="menu.parent_id" :data-level="menu.level"
|
|
|
@drop="drop($event)" @dragover="dragover($event)" @dragstart.stop="dragstart(menu.id)">
|
|
|
- <span v-if="menu.font" :class="menu.font" :style="menu.font_style"></span>@{{ menu.name }}
|
|
|
- <div class="row">
|
|
|
+ <i v-if="menu.font" :class="menu.font" :style="menu.font_style"></i> @{{ menu.name }}
|
|
|
+ <span class="fa fa-close pull-right text-danger" style="cursor: pointer"></span>
|
|
|
+ <span class="fa fa-edit pull-right text-primary mr-2" style="cursor: pointer"></span>
|
|
|
+ <div class="row" v-if="menu.child.length>0">
|
|
|
<ul class="list-group col-9 offset-1">
|
|
|
<li class="list-group-item" v-for="menu2 in menu.child" draggable="true" :id="'menu-'+menu2.id"
|
|
|
:data-order="menu2.sequence" :data-id="menu2.id" :data-parent="menu2.parent_id" :data-level="menu2.level"
|
|
|
@drop="drop($event)" @dragover="dragover($event,dragoverId!=menu.id)" @dragstart.stop="dragstart(menu2.id)">
|
|
|
@{{ menu2.name }}
|
|
|
- <div class="row" style="margin-left: 50px">
|
|
|
+ <div class="row" v-if="menu2.child.length>0">
|
|
|
<ul class="list-group col-9 offset-1">
|
|
|
<li class="list-group-item" v-for="menu3 in menu2.child" draggable="true" :id="'menu-'+menu3.id"
|
|
|
:data-order="menu3.sequence" :data-id="menu3.id" :data-parent="menu3.parent_id" :data-level="menu3.level"
|
|
|
@drop="drop($event)" @dragover="dragover($event,dragoverId!=menu2.id && dragoverId!=menu.id)" @dragstart.stop="dragstart(menu3.id)">
|
|
|
@{{ menu3.name }}
|
|
|
- <div class="row" style="margin-left: 50px">
|
|
|
+ <div class="row" v-if="menu3.child.length>0">
|
|
|
<ul class="list-group col-9 offset-1">
|
|
|
<li class="list-group-item" v-for="menu4 in menu3.child" draggable="true" :id="'menu-'+menu4.id"
|
|
|
:data-order="menu4.sequence" :data-id="menu4.id" :data-parent="menu4.parent_id" :data-level="menu4.level"
|
|
|
@@ -63,23 +65,56 @@
|
|
|
dragoverId:"",
|
|
|
isDragover : false,
|
|
|
isSaveSort : false,
|
|
|
+ menuList:[],
|
|
|
+ icons:[],
|
|
|
},
|
|
|
mounted(){
|
|
|
let menus = [@foreach($menus as $menu)@json($menu),@endforeach];
|
|
|
let menuMap = {};
|
|
|
menus.forEach(menu=>{
|
|
|
menu["child"] = [];
|
|
|
- menuMap[menu.id] = menu;
|
|
|
+ menuMap["_"+menu.id] = menu;
|
|
|
});
|
|
|
menus.forEach(menu=>{
|
|
|
if (menu.parent_id){
|
|
|
- menuMap[menu.parent_id].child.push(menu);
|
|
|
- delete menuMap[menu.id];
|
|
|
+ menuMap["_"+menu.parent_id].child.push(menu);
|
|
|
+ delete menuMap["_"+menu.id];
|
|
|
}
|
|
|
});
|
|
|
this.menus = menuMap;
|
|
|
+ this._formatSelected();
|
|
|
},
|
|
|
methods:{
|
|
|
+ _formatSelected(){
|
|
|
+ new Promise(()=>{
|
|
|
+ this.menuList = this._mergeArray(this.menus);
|
|
|
+ this._getIcons()
|
|
|
+ });
|
|
|
+ },
|
|
|
+ _getIcons(){
|
|
|
+ let url = "{{url('')}}"+"/js/utilities/icons.json";
|
|
|
+ let request = new XMLHttpRequest();
|
|
|
+ request.open("get", url);
|
|
|
+ request.send(null);
|
|
|
+ request.onload = function () {
|
|
|
+ if (request.status == 200) {
|
|
|
+ this.icons = JSON.parse(request.responseText);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ _mergeArray(obj,arr=[]){
|
|
|
+ for (let key in obj){
|
|
|
+ let name = "";
|
|
|
+ for (let i=1;i<obj[key]["level"];i++){
|
|
|
+ name += " ";
|
|
|
+ }
|
|
|
+ if (obj[key]['level']!==1)name += "└─";
|
|
|
+ name += obj[key]["name"];
|
|
|
+ arr.push({name:name,id:obj[key]["id"],level:obj[key]["level"]});
|
|
|
+ if (obj[key].child)arr = this._mergeArray(obj[key].child,arr);
|
|
|
+ }
|
|
|
+ return arr;
|
|
|
+ },
|
|
|
openModal(unit = null){
|
|
|
if (unit) this.unit={id:unit.id,name:unit.name};
|
|
|
else this.tag={id:"",name:""};
|
|
|
@@ -124,12 +159,13 @@
|
|
|
e.preventDefault();
|
|
|
e.stopPropagation();
|
|
|
$("#dragover-container").after($("#menu-"+this.dragoverId));
|
|
|
+ this.handleDrag(this.dragoverId);
|
|
|
this.dragoverId = "";
|
|
|
this.isDragover = false;
|
|
|
this.isSaveSort = true;
|
|
|
},
|
|
|
handleDrag(id){
|
|
|
- return new Promise((resolve, reject)=>{
|
|
|
+ return new Promise(()=>{
|
|
|
let params = {};
|
|
|
let dom = document.getElementById("menu-"+id);
|
|
|
let oldParent = dom.getAttribute("data-parent");
|
|
|
@@ -143,7 +179,7 @@
|
|
|
params.id = id;
|
|
|
params.parent_id = newParent;
|
|
|
let oldLevel = dom.getAttribute("data-level");
|
|
|
- let newLevel = parent ? parent.getAttribute("data-level") : 1;
|
|
|
+ let newLevel = parent ? Number(parent.getAttribute("data-level"))+1 : 1;
|
|
|
let diff = oldLevel-newLevel;
|
|
|
if (diff!=0){
|
|
|
dom.setAttribute("data-level",newLevel);
|
|
|
@@ -166,16 +202,18 @@
|
|
|
});
|
|
|
},
|
|
|
sort(){
|
|
|
- let nodes = document.getElementsByTagName("LI");
|
|
|
+ let nodes = document.getElementById("content").getElementsByTagName("LI");
|
|
|
let update = [["id","sequence"]];
|
|
|
+ let index = 1;
|
|
|
for (let i=0;i<nodes.length;i++){
|
|
|
- let oldOrder = nodes[i].getAttribute("data-order");
|
|
|
- let newOrder = i+1;
|
|
|
let id = nodes[i].getAttribute("data-id");
|
|
|
- if (id && oldOrder != newOrder){
|
|
|
- nodes[i].setAttribute("data-order",newOrder);
|
|
|
- update.push({id:id,sequence:newOrder});
|
|
|
+ if (!id)continue;
|
|
|
+ let oldOrder = nodes[i].getAttribute("data-order");
|
|
|
+ if (oldOrder != index){
|
|
|
+ nodes[i].setAttribute("data-order",index);
|
|
|
+ update.push({id:id,sequence:index});
|
|
|
}
|
|
|
+ index++;
|
|
|
}
|
|
|
if (update.length > 1){
|
|
|
let url = "{{url('maintenance/menu/sort')}}";
|