ソースを参照

修改角色,权限的多选样式

Zhouzhendong 6 年 前
コミット
bd81b7bf84

+ 4 - 3
app/Http/Controllers/Auth/RegisterController.php

@@ -87,9 +87,10 @@ class RegisterController extends Controller
             $user->roles()->sync($roleIdArr);
         }
 //        $this->guard()->login($user);
-        $carrier_id=$request->input('carrier_id')??'';
-        if ($carrier_id){
-            $user->carriers()->sync($carrier_id);
+        $carrierIds=$request->input('carrier')??'';
+        if ($carrierIds){
+            $carrierIds=explode(',',$carrierIds);
+            $user->carriers()->sync($carrierIds);
         }
         $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),$user['id']);
         if($headTo){return redirect(url($headTo))->with('successTip',"录入用户 {$user->name} 成功");}

+ 4 - 3
app/Http/Controllers/UserController.php

@@ -105,9 +105,10 @@ class UserController extends Controller
         }else{
             $user->roles()->sync([]);
         }
-        $carrier_id=$request->input('carrier_id')??'';
-        if($carrier_id){
-            $user->carriers()->sync($carrier_id);
+        $carrierIds=$request->input('carrier')??'';
+        if($carrierIds){
+            $carrierIds=explode(',',$carrierIds);
+            $user->carriers()->sync($carrierIds);
         }else{
             $user->carriers()->sync([]);
         }

+ 66 - 59
resources/views/maintenance/role/create.blade.php

@@ -28,23 +28,20 @@
                     </div>
                     <div class="form-group row">
                         <label for="authority" class="col-2 col-form-label text-md-right">权限</label>
-
                         <div class="col-8">
-                            <input name="authority" type="hidden" v-model="authoritiesStr" required>
-                            <div class="input-group">
-                                <select id="authorityAddingItem" class="form-control">
-                                    <option :value="authority.id" v-for="authority in authoritiesAll">@{{ authority.name }}</option>
-                                </select>
-                                <span class="input-group-append">
-                                            <span class="input-group-text btn-outline-info" style="cursor: pointer;" @click="addRole">
-                                                添加左边的权限
-                                            </span>
-                                        </span>
+                        <input type="text"  class="form-control tooltipTarget" placeholder="定位权限"
+                               @input="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-2"></label>
+                        <div class="col-8">
+                            <input name="authority" hidden   v-model="authorities" >
+                            <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.8;text-align: center;">
+                                <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
+                                    <li  title="单击添加权限"    v-for="authority in authoritiesAll" :id="authority.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                         @click="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" :id="authority.name"> @{{ authority.name }}  </span></li>
+                                </ul>
                             </div>
-                            <select size="8" class="form-control @error('authority') is-invalid @enderror "
-                                    :class="authoritiesStr?'tooltipTarget':''" title="两次点击移除目标">
-                                <option :value="authority.id" v-for="authority in authorities" @click="clickingRoleOption">@{{ authority.name }}</option>
-                            </select>
                             @error('authority')
                             <span class="invalid-feedback">
                                         <strong>{{ $message }}</strong>
@@ -70,63 +67,73 @@
             data:{
                 authoritiesAll:[
                         @foreach( $authoritiesAll as $authority )
-                    {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',},
+                    {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false},
                     @endforeach
                 ],
-                authorities:[],
-                authoritiesStr:'{{ old('authority') }}'
+                authorities:[{{old('authority')}}],
             },
             mounted:function(){
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
+                if (this.authorities.length>0){
+                    let authoritiesAll=this.authoritiesAll;
+                    let authorities=this.authorities;
+                    for (let i = 0; i < authorities.length; i++) {
+                        authoritiesAll.every(function (authorityAll) {
+                            if (authorityAll.id == authorities[i]) {
+                                authorityAll.style = true;
+                                return false;
+                            }
+                            return true;
+                        });
+                    }
+                }
             },
             methods:{
-                addRole:function () {
-                    let $authorityAddingItem = $('#authorityAddingItem');
-                    let val=$authorityAddingItem.val();
-                    let authorityName = $authorityAddingItem.find("option:selected").text();
-                    let isLackOf=this.authorities.every(function(authority){
-                        return authority.id !== val;
-                    });
-                    if(isLackOf){
-                        this.authorities.push({id:val,name: authorityName})
-                        this.authoritiesCompileToStr()
-                    }else{
-                        tempTip.setDuration(1500);
-                        tempTip.show('已添加'+authorityName)
-                    }
-                },
-                clickingRoleOption:function(e){
-                    let target = $(e.target);
-                    if(typeof target.attr('data-clicked')=='undefined'||target.attr('data-clicked')==='0'){
-                        target.attr('data-clicked',1);
-                        setTimeout(function(){target.attr('data-clicked','0');},1500)
+                selectedAuthority:function (e) {
+                    let authorities=this.authorities;
+                    let authoritiesAll=this.authoritiesAll;
+                    let isAuthorty=true;
+                    if (authorities) {
+                        for (let i = 0; i < authorities.length; i++) {
+                            if (authorities[i] == e.id) {
+                                authorities.splice(i,1);
+                                authoritiesAll.every(function (authorityAll) {
+                                    if (authorityAll.id == e.id) {
+                                        authorityAll.style = false;
+                                        return false;
+                                    }
+                                    return true;
+                                });
+                                isAuthorty= false;
+                                break;
+                            }
+                            isAuthorty= true;
+                        }
                     }
-                    else{
-                        target.attr('data-clicked',parseInt(target.attr('data-clicked'))+1);
-                        this.removeRole(target.val(),target.find("option:selected").text())
+                    if (isAuthorty || !authorities){
+                        authorities.push(e.id);
+                        authoritiesAll.every(function (authorityAll) {
+                            if (authorityAll.id==e.id){
+                                authorityAll.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
                     }
                 },
-                removeRole:function(id,name){
-                    let _this=this;
-                    tempTip.confirm('确定要删除权限' + name + '吗?',function () {
-                        for(let i=0;i<_this.authorities.length;i++){
-                            if(_this.authorities[i].id===id){
-                                _this.authorities.splice(i, 1);
-                                _this.authoritiesCompileToStr();
-                                break;
-                            }
+                seekAuthority:function (e) {
+                    let $val=e.target.value;
+                    let authoritiesAll=this.authoritiesAll;
+                    authoritiesAll.every(function (authorityAll) {
+                        let name=authorityAll.name;
+                        if (name.includes($val)){
+                            location.href="#"+authorityAll.name;
+                            return false;
                         }
+                        return  true;
                     });
+                    $(e.target).focus();
                 },
-                authoritiesCompileToStr:function(){
-                    let ids=this.authorities.map(function(authority){
-                        return authority.id;
-                    });
-                    this.authoritiesStr=ids.join(',');
-                    setTimeout(function(){
-                        $(".tooltipTarget").tooltip({'trigger':'hover'});
-                    },20);
-                }
             },
         });
 

+ 74 - 64
resources/views/maintenance/role/edit.blade.php

@@ -33,26 +33,23 @@
                         </div>
                     </div>
                     <div class="form-group row">
-                        <label for="authority" class="col-md-3 col-form-label text-md-right">权限</label>
-
-                        <div class="col-md-7">
-                            <input name="authority" type="hidden" v-model="authoritiesStr" required>
-                            <div class="input-group">
-                                <select id="authorityAddingItem" class="form-control">
-                                    <option :value="authority.id" v-for="authority in authoritiesAll">@{{ authority.name }}</option>
-                                </select>
-                                <span class="input-group-append">
-                                            <span class="input-group-text btn-outline-info" style="cursor: pointer;" @click="addRole">
-                                                添加左边的权限
-                                            </span>
-                                        </span>
+                        <label for="authority" class="col-2 col-form-label text-md-right">权限</label>
+                        <div class="col-8">
+                            <input type="text"  class="form-control tooltipTarget" placeholder="定位权限"
+                                   @input="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-2"></label>
+                        <div class="col-8">
+                            <input name="authority" hidden   v-model="authorities" >
+                            <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.8;text-align: center;">
+                                <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
+                                    <li  title="单击添加权限"    v-for="authority in authoritiesAll" :id="authority.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                         @click="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" :id="authority.name"> @{{ authority.name }} </span></li>
+                                </ul>
                             </div>
-                            <select size="8" class="form-control @error('authority') is-invalid @enderror "
-                                    :class="authoritiesStr?'tooltipTarget':''" title="两次点击移除目标">
-                                <option :value="authority.id" v-for="authority in authorities" @click="clickingRoleOption">@{{ authority.name }}</option>
-                            </select>
                             @error('authority')
-                            <span class="invalid-feedback" authority="alert">
+                            <span class="invalid-feedback">
                                         <strong>{{ $message }}</strong>
                                     </span>
                             @enderror
@@ -77,68 +74,81 @@
             data:{
                 authoritiesAll:[
                         @foreach( $authoritiesAll as $authority )
-                    {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',},
+                    {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false},
                     @endforeach
                 ],
                 authorities:[
+                    @if(old('authority'))
+                        {{ old('authority') }}
+                    @else
                         @foreach( $authorities as $authority )
-                    {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',},
-                    @endforeach
+                        {{$authority->id}},
+                        @endforeach
+                    @endif
                 ],
-                authoritiesStr:'{{ old('authority') }}'
             },
             mounted:function(){
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
-                this.authoritiesCompileToStr()
+                if (this.authorities.length>0){
+                    let authoritiesAll=this.authoritiesAll;
+                    let authorities=this.authorities;
+                    for (let i = 0; i < authorities.length; i++) {
+                        authoritiesAll.every(function (authorityAll) {
+                            if (authorityAll.id == authorities[i]) {
+                                authorityAll.style = true;
+                                return false;
+                            }
+                            return true;
+                        });
+                    }
+                }
             },
             methods:{
-                addRole:function () {
-                    let $authorityAddingItem = $('#authorityAddingItem');
-                    let val=$authorityAddingItem.val();
-                    let authorityName = $authorityAddingItem.find("option:selected").text();
-                    let isLackOf=this.authorities.every(function(authority){
-                        return authority.id !== val;
-                    });
-                    if(isLackOf){
-                        this.authorities.push({id:val,name: authorityName});
-                        this.authoritiesCompileToStr()
-                    }else{
-                        tempTip.setDuration(1500);
-                        tempTip.show('已添加'+authorityName)
-                    }
-                },
-                clickingRoleOption:function(e){
-                    let target = $(e.target);
-                    if(typeof target.attr('data-clicked')=='undefined'||target.attr('data-clicked')==='0'){
-                        target.attr('data-clicked',1);
-                        setTimeout(function(){target.attr('data-clicked','0');},1500)
+                selectedAuthority:function (e) {
+                    let authorities=this.authorities;
+                    let authoritiesAll=this.authoritiesAll;
+                    let isAuthorty=true;
+                    if (authorities) {
+                        for (let i = 0; i < authorities.length; i++) {
+                            if (authorities[i] == e.id) {
+                                authorities.splice(i,1);
+                                authoritiesAll.every(function (authorityAll) {
+                                    if (authorityAll.id == e.id) {
+                                        authorityAll.style = false;
+                                        return false;
+                                    }
+                                    return true;
+                                });
+                                isAuthorty= false;
+                                break;
+                            }
+                            isAuthorty= true;
+                        }
                     }
-                    else{
-                        target.attr('data-clicked',parseInt(target.attr('data-clicked'))+1);
-                        this.removeRole(target.val(),target.find("option:selected").text())
+                    if (isAuthorty || !authorities){
+                        authorities.push(e.id);
+                        authoritiesAll.every(function (authorityAll) {
+                            if (authorityAll.id==e.id){
+                                authorityAll.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
                     }
                 },
-                removeRole:function(id,name){
-                    let _this=this;
-                    tempTip.confirm('确定要删除权限' + name + '吗?',function () {
-                        for(let i=0;i<_this.authorities.length;i++){
-                            if(_this.authorities[i].id===id){
-                                _this.authorities.splice(i, 1);
-                                _this.authoritiesCompileToStr();
-                                break;
-                            }
+                seekAuthority:function (e) {
+                    let $val=e.target.value;
+                    let authoritiesAll=this.authoritiesAll;
+                    authoritiesAll.every(function (authorityAll) {
+                        let name=authorityAll.name;
+                        if (name.includes($val)){
+                            location.href="#"+authorityAll.name;
+                            return false;
                         }
+                        return  true;
                     });
+                    $(e.target).focus();
                 },
-                authoritiesCompileToStr:function(){
-                    let ids=this.authorities.map(function(authority){
-                        return authority.id;
-                    });
-                    this.authoritiesStr=ids.join(',');
-                    setTimeout(function(){
-                        $(".tooltipTarget").tooltip({'trigger':'hover'});
-                    },20);
-                }
             },
         });
 

+ 137 - 108
resources/views/maintenance/user/create.blade.php

@@ -68,55 +68,39 @@
                                     <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                                 </div>
                             </div>
-
                             <div class="form-group row">
                                 <label for="role" class="col-md-3 col-form-label text-md-right">角色</label>
-
                                 <div class="col-md-7">
-                                    <input name="role" type="hidden" v-model="rolesStr" required>
-                                    <div class="input-group">
-                                        <select id="roleAddingItem" class="form-control">
-                                            <option :value="role.id" v-for="role in rolesAll">@{{ role.name }}</option>
-                                        </select>
-                                        <span class="input-group-append">
-                                            <span class="input-group-text btn-outline-info" style="cursor: pointer;" @click="addRole">
-                                                添加左边的角色
-                                            </span>
-                                        </span>
+                                    <input type="text"  class="form-control tooltipTarget" placeholder="定位角色"
+                                           @input="seekRole($event)" title="输入关键词快速定位"></div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-md-3"></label>
+                                <div class="col-md-7">
+                                    <input name="role" hidden    v-model="roles" >
+                                    <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.8;text-align: center;">
+                                        <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
+                                            <li  title="单击添加权限"    v-for="role in rolesAll" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                                 @click="selectedRole(role)" :class="role.style ? 'active' :''"><span style="cursor: default;" :id="role.name"> @{{ role.name }}  </span></li>
+                                        </ul>
                                     </div>
-                                    <select size="8" class="form-control @error('role') is-invalid @enderror "
-                                            :class="rolesStr?'tooltipTarget':''" title="两次点击移除目标">
-                                        <option :value="role.id" v-for="role in roles" @click="clickingRoleOption">@{{ role.name }}</option>
-                                    </select>
-                                    @error('role')
-                                    <span class="invalid-feedback" role="alert">
-                                        <strong>{{ $message }}</strong>
-                                    </span>
-                                    @enderror
                                 </div>
                             </div>
                             <div class="form-group row">
-                                <label for="role" class="col-md-3 col-form-label text-md-right">可见承运商</label>
-
+                                <label for="carrier" class="col-md-3 col-form-label text-md-right">可见承运商</label>
                                 <div class="col-md-7">
-                                    <div class="input-group">
-                                        <select id="carrierAddingItem" class="form-control">
-                                            <option :value="carrier.id" v-for="carrier in carrierAll">@{{ carrier.name }}</option>
-                                        </select>
-                                        <span class="input-group-append">
-                                            <span class="input-group-text btn-outline-info" style="cursor: pointer;" @click="addCarrier">
-                                                添加左边的承运商
-                                            </span>
-                                        </span>
-                                    </div>
-                                    <select size="8" class="form-control "
-                                            title="两次点击移除目标">
-                                        <option :value="carrier.id" v-for="carrier in carriers" @dblclick="clickingCarrierOption">
-                                            @{{ carrier.name }}
-                                        </option>
-                                    </select>
-                                    <div hidden v-for="carrier in carriers">
-                                        <input hidden name="carrier_id[]" :value="carrier.id">
+                                    <input type="text"  class="form-control tooltipTarget" placeholder="定位承运商"
+                                           @input="seekCarrier($event)" title="输入关键词快速定位"></div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-md-3"></label>
+                                <div class="col-md-7">
+                                    <input name="carrier" hidden   v-model="carriers" >
+                                    <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.8;text-align: center;">
+                                        <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
+                                            <li  title="单击添加权限"    v-for="carrier in carriersAll" :id="carrier.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                                 @click="selectedCarrier(carrier)" :class="carrier.style ? 'active' :''"><span style="cursor: default;" :id="carrier.name"> @{{ carrier.name }}  </span></li>
+                                        </ul>
                                     </div>
                                 </div>
                             </div>
@@ -143,92 +127,137 @@
             el:"#editPanel",
             data:{
                 rolesAll:[
-                        @foreach( $rolesAll as $role )
-                    {id:'{{$role->id}}',name:'{{$role->name}}',},
+                    @foreach( $rolesAll as $role )
+                    {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
                     @endforeach
                 ],
-                roles:[],
-                rolesStr:'{{ old('role') }}',
-                carrierAll:[
+                roles:[{{old('role')}}],
+                carriersAll:[
                     @foreach($carriers as $carrier)
-                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}'},
+                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}',style:false},
                     @endforeach
                 ],
-                carriers:[],
+                carriers:[{{old('carrier')}}],
             },
             mounted:function(){
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
-            },
-            methods:{
-                addRole:function () {
-                    let $roleAddingItem = $('#roleAddingItem');
-                    let val=$roleAddingItem.val();
-                    let roleName = $roleAddingItem.find("option:selected").text();
-                    let isLackOf=this.roles.every(function(role){
-                        return role.id !== val;
-                    });
-                    if(isLackOf){
-                        this.roles.push({id:val,name: roleName})
-                        this.rolesCompileToStr()
-                    }else{
-                        tempTip.setDuration(1500);
-                        tempTip.show('已添加'+roleName)
-                    }
-                },
-                clickingRoleOption:function(e){
-                    let target = $(e.target);
-                    if(typeof target.attr('data-clicked')=='undefined'||target.attr('data-clicked')==='0'){
-                        target.attr('data-clicked',1);
-                        setTimeout(function(){target.attr('data-clicked','0');},1500)
+                if (this.roles.length>0){
+                    let rolesAll=this.rolesAll;
+                    let roles=this.roles;
+                    for (let i = 0; i < roles.length; i++) {
+                        rolesAll.every(function (roleAll) {
+                            if (roleAll.id == roles[i]) {
+                                roleAll.style = true;
+                                return false;
+                            }
+                            return true;
+                        });
                     }
-                    else{
-                        target.attr('data-clicked',parseInt(target.attr('data-clicked'))+1);
-                        this.removeRole(target.val(),target.find("option:selected").text())
+                }
+                if (this.carriers.length>0){
+                    let carriersAll=this.carriersAll;
+                    let carriers=this.carriers;
+                    for (let i = 0; i < carriers.length; i++) {
+                        carriersAll.every(function (carrierAll) {
+                            if (carrierAll.id == carriers[i]) {
+                                carrierAll.style = true;
+                                return false;
+                            }
+                            return true;
+                        });
                     }
-                },
-                removeRole:function(id,name){
-                    let _this=this;
-                    tempTip.confirm('确定要删除角色' + name + '吗?',function () {
-                        for(let i=0;i<_this.roles.length;i++){
-                            if(_this.roles[i].id===id){
-                                _this.roles.splice(i, 1);
-                                _this.rolesCompileToStr();
+                }
+            },
+            methods:{
+                selectedCarrier:function (e) {
+                    let carriers=this.carriers;
+                    let carriersAll=this.carriersAll;
+                    let isCarrier=true;
+                    if (carriers&&carriersAll) {
+                        for (let i = 0; i < carriers.length; i++) {
+                            if (carriers[i] == e.id) {
+                                carriers.splice(i,1);
+                                carriersAll.every(function (carrierAll) {
+                                    if (carrierAll.id == e.id) {
+                                        carrierAll.style = false;
+                                        return false;
+                                    }
+                                    return true;
+                                });
+                                isCarrier= false;
                                 break;
                             }
+                            isCarrier= true;
                         }
-                    });
+                    }
+                    if (isCarrier || !carriers){
+                        carriers.push(e.id);
+                        carriersAll.every(function (carrierAll) {
+                            if (carrierAll.id==e.id){
+                                carrierAll.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
+                    }
                 },
-                rolesCompileToStr:function(){
-                    let ids=this.roles.map(function(role){
-                        return role.id;
+                seekCarrier:function (e) {
+                    let $val=e.target.value;
+                    let carriersAll=this.carriersAll;
+                    carriersAll.every(function (carrierAll) {
+                        let name=carrierAll.name;
+                        if (name.includes($val)){
+                            location.href="#"+carrierAll.name;
+                            return false;
+                        }
+                        return  true;
                     });
-                    this.rolesStr=ids.join(',');
-                    setTimeout(function(){
-                        $(".tooltipTarget").tooltip({'trigger':'hover'});
-                    },20);
+                    $(e.target).focus();
                 },
-                addCarrier:function () {
-                    let $carrierAddingItem = $('#carrierAddingItem');
-                    let val=$carrierAddingItem.val();
-                    let carrierName = $carrierAddingItem.find("option:selected").text();
-                    let isLackOf=this.carriers.every(function(carrier){
-                        return carrier.id !== val;
-                    });
-                    if(isLackOf){
-                        this.carriers.push({id:val,name: carrierName})
-                    }else{
-                        tempTip.setDuration(1500);
-                        tempTip.show('已添加'+carrierName)
+                selectedRole:function (e) {
+                    let roles=this.roles;
+                    let rolesAll=this.rolesAll;
+                    let isRole=true;
+                    if (roles&&rolesAll) {
+                        for (let i = 0; i < roles.length; i++) {
+                            if (roles[i] == e.id) {
+                                roles.splice(i,1);
+                                rolesAll.every(function (roleAll) {
+                                    if (roleAll.id == e.id) {
+                                        roleAll.style = false;
+                                        return false;
+                                    }
+                                    return true;
+                                });
+                                isRole= false;
+                                break;
+                            }
+                            isRole= true;
+                        }
+                    }
+                    if (isRole || !roles){
+                        roles.push(e.id);
+                        rolesAll.every(function (roleAll) {
+                            if (roleAll.id==e.id){
+                                roleAll.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
                     }
                 },
-                clickingCarrierOption:function(e){
-                    let target = $(e.target);
-                    for (let i=0;i<this.carriers.length;i++){
-                        if(this.carriers[i].id===target.val()){
-                            this.carriers.splice(i,1);
-                            break;
+                seekRole:function (e) {
+                    let $val=e.target.value;
+                    let rolesAll=this.rolesAll;
+                    rolesAll.every(function (roleAll) {
+                        let name=roleAll.name;
+                        if (name.includes($val)){
+                            location.href="#"+roleAll.name;
+                            return false;
                         }
-                    }
+                        return  true;
+                    });
+                    $(e.target).focus();
                 },
             },
         });

+ 151 - 113
resources/views/maintenance/user/edit.blade.php

@@ -45,53 +45,38 @@
                         </div>
                     </div>
                     <div class="form-group row">
-                        <label for="role" class="col-2 col-form-label text-md-right">角色</label>
-
-                        <div class="col-8">
-                            <input name="role" type="hidden" v-model="rolesStr" required>
-                            <div class="input-group">
-                                <select id="roleAddingItem" class="form-control">
-                                    <option :value="role.id" v-for="role in rolesAll">@{{ role.name }}</option>
-                                </select>
-                                <span class="input-group-append">
-                                            <span class="input-group-text btn-outline-info" style="cursor: pointer;" @click="addRole">
-                                                添加左边的角色
-                                            </span>
-                                        </span>
+                        <label for="role" class="col-md-3 col-form-label text-md-right">角色</label>
+                        <div class="col-md-7">
+                            <input type="text"  class="form-control tooltipTarget" placeholder="定位角色"
+                                   @input="seekRole($event)" title="输入关键词快速定位"></div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-3"></label>
+                        <div class="col-md-7">
+                            <input name="role" hidden    v-model="roles" >
+                            <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.8;text-align: center;">
+                                <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
+                                    <li  title="单击添加权限"    v-for="role in rolesAll" :id="role.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                         @click="selectedRole(role)" :class="role.style ? 'active' :''"><span style="cursor: default;" :id="role.name"> @{{ role.name }}  </span></li>
+                                </ul>
                             </div>
-                            <select size="8" class="form-control @error('role') is-invalid @enderror "
-                                    :class="rolesStr?'tooltipTarget':''" title="两次点击移除目标">
-                                <option :value="role.id" v-for="role in roles" @click="clickingRoleOption">@{{ role.name }}</option>
-                            </select>
-                            @error('role')
-                            <span class="invalid-feedback" role="alert">
-                                        <strong>{{ $message }}</strong>
-                                    </span>
-                            @enderror
                         </div>
                     </div>
                     <div class="form-group row">
-                        <label for="role" class="col-2 col-form-label text-md-right">可见承运商</label>
-
-                        <div class="col-md-8">
-                            <div class="input-group">
-                                <select id="carrierAddingItem" class="form-control">
-                                    <option :value="carrier.id" v-for="carrier in carrierAll">@{{ carrier.name }}</option>
-                                </select>
-                                <span class="input-group-append">
-                                            <span class="input-group-text btn-outline-info" style="cursor: pointer;" @click="addCarrier">
-                                                添加左边的承运商
-                                            </span>
-                                        </span>
-                            </div>
-                            <select size="8" class="form-control "
-                                    title="两次点击移除目标">
-                                <option :value="carrier.id" v-for="carrier in carriers" @dblclick="clickingCarrierOption">
-                                    @{{ carrier.name }}
-                                </option>
-                            </select>
-                            <div hidden v-for="carrier in carriers">
-                                <input hidden name="carrier_id[]" :value="carrier.id">
+                        <label for="carrier" class="col-md-3 col-form-label text-md-right">可见承运商</label>
+                        <div class="col-md-7">
+                            <input type="text"  class="form-control tooltipTarget" placeholder="定位承运商"
+                                   @input="seekCarrier($event)" title="输入关键词快速定位"></div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-3"></label>
+                        <div class="col-md-7">
+                            <input name="carrier" hidden   v-model="carriers" >
+                            <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.8;text-align: center;">
+                                <ul class="list-group tooltipTarget" style="width: 100%" onselectstart="return false;">
+                                    <li  title="单击添加权限"    v-for="carrier in carriersAll" :id="carrier.name" class="list-group-item list-group-item-action pt-0 pb-0"
+                                         @click="selectedCarrier(carrier)" :class="carrier.style ? 'active' :''"><span style="cursor: default;" :id="carrier.name"> @{{ carrier.name }}  </span></li>
+                                </ul>
                             </div>
                         </div>
                     </div>
@@ -114,100 +99,153 @@
             data:{
                 rolesAll:[
                         @foreach( $rolesAll as $role )
-                    {id:'{{$role->id}}',name:'{{$role->name}}',},
+                    {id:'{{$role->id}}',name:'{{$role->name}}',style:false},
                     @endforeach
                 ],
                 roles:[
+                    @if(old('role'))
+                        {{ old('role') }}
+                    @else
                         @foreach( $roles as $role )
-                    {id:'{{$role->id}}',name:'{{$role->name}}',},
-                    @endforeach
+                        {{$role->id}},
+                        @endforeach
+                    @endif
                 ],
                 rolesStr:'{{ old('role') }}',
-                carrierAll:[
-                        @foreach($carriers as $carrier)
-                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}'},
+                carriersAll:[
+                    @foreach($carriers as $carrier)
+                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}',style:false},
                     @endforeach
                 ],
                 carriers:[
-                    @foreach($carrierUser as $carrier)
-                    {id:'{{$carrier->id}}',name:'{{$carrier->name}}'},
-                    @endforeach
+                    @if(old('carrier'))
+                        {{ old('carrier') }}
+                    @else
+                        @foreach( $carrierUser as $carrier )
+                        {{$carrier->id}},
+                        @endforeach
+                    @endif
                 ],
             },
             mounted:function(){
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
-                this.rolesCompileToStr()
-            },
-            methods:{
-                addRole:function () {
-                    let $roleAddingItem = $('#roleAddingItem');
-                    let val=$roleAddingItem.val();
-                    let roleName = $roleAddingItem.find("option:selected").text();
-                    let isLackOf=this.roles.every(function(role){
-                        return role.id !== val;
-                    });
-                    if(isLackOf){
-                        this.roles.push({id:val,name: roleName});
-                        this.rolesCompileToStr()
-                    }else{
-                        tempTip.setDuration(1500);
-                        tempTip.show('已添加'+roleName)
-                    }
-                },
-                clickingRoleOption:function(e){
-                    let target = $(e.target);
-                    if(typeof target.attr('data-clicked')=='undefined'||target.attr('data-clicked')==='0'){
-                        target.attr('data-clicked',1);
-                        setTimeout(function(){target.attr('data-clicked','0');},1500)
+                if (this.roles.length>0){
+                    let rolesAll=this.rolesAll;
+                    let roles=this.roles;
+                    for (let i = 0; i < roles.length; i++) {
+                        rolesAll.every(function (roleAll) {
+                            if (roleAll.id == roles[i]) {
+                                roleAll.style = true;
+                                return false;
+                            }
+                            return true;
+                        });
                     }
-                    else{
-                        target.attr('data-clicked',parseInt(target.attr('data-clicked'))+1);
-                        this.removeRole(target.val(),target.find("option:selected").text())
+                }
+                if (this.carriers.length>0){
+                    let carriersAll=this.carriersAll;
+                    let carriers=this.carriers;
+                    for (let i = 0; i < carriers.length; i++) {
+                        carriersAll.every(function (carrierAll) {
+                            if (carrierAll.id == carriers[i]) {
+                                carrierAll.style = true;
+                                return false;
+                            }
+                            return true;
+                        });
                     }
-                },
-                removeRole:function(id,name){
-                    let _this=this;
-                    tempTip.confirm('确定要删除角色' + name + '吗?',function () {
-                        for(let i=0;i<_this.roles.length;i++){
-                            if(_this.roles[i].id===id){
-                                _this.roles.splice(i, 1);
-                                _this.rolesCompileToStr();
+                }
+            },
+            methods:{
+                selectedCarrier:function (e) {
+                    let carriers=this.carriers;
+                    let carriersAll=this.carriersAll;
+                    let isCarrier=true;
+                    if (carriers&&carriersAll) {
+                        for (let i = 0; i < carriers.length; i++) {
+                            if (carriers[i] == e.id) {
+                                carriers.splice(i,1);
+                                carriersAll.every(function (carrierAll) {
+                                    if (carrierAll.id == e.id) {
+                                        carrierAll.style = false;
+                                        return false;
+                                    }
+                                    return true;
+                                });
+                                isCarrier= false;
                                 break;
                             }
+                            isCarrier= true;
                         }
-                    });
+                    }
+                    if (isCarrier || !carriers){
+                        carriers.push(e.id);
+                        carriersAll.every(function (carrierAll) {
+                            if (carrierAll.id==e.id){
+                                carrierAll.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
+                    }
                 },
-                rolesCompileToStr:function(){
-                    let ids=this.roles.map(function(role){
-                        return role.id;
+                seekCarrier:function (e) {
+                    let $val=e.target.value;
+                    let carriersAll=this.carriersAll;
+                    carriersAll.every(function (carrierAll) {
+                        let name=carrierAll.name;
+                        if (name.includes($val)){
+                            location.href="#"+carrierAll.name;
+                            return false;
+                        }
+                        return  true;
                     });
-                    this.rolesStr=ids.join(',');
-                    setTimeout(function(){
-                        $(".tooltipTarget").tooltip({'trigger':'hover'});
-                    },20);
+                    $(e.target).focus();
                 },
-                addCarrier:function () {
-                    let $carrierAddingItem = $('#carrierAddingItem');
-                    let val=$carrierAddingItem.val();
-                    let carrierName = $carrierAddingItem.find("option:selected").text();
-                    let isLackOf=this.carriers.every(function(carrier){
-                        return carrier.id !== val;
-                    });
-                    if(isLackOf){
-                        this.carriers.push({id:val,name: carrierName})
-                    }else{
-                        tempTip.setDuration(1500);
-                        tempTip.show('已添加'+carrierName)
+                selectedRole:function (e) {
+                    let roles=this.roles;
+                    let rolesAll=this.rolesAll;
+                    let isRole=true;
+                    if (roles&&rolesAll) {
+                        for (let i = 0; i < roles.length; i++) {
+                            if (roles[i] == e.id) {
+                                roles.splice(i,1);
+                                rolesAll.every(function (roleAll) {
+                                    if (roleAll.id == e.id) {
+                                        roleAll.style = false;
+                                        return false;
+                                    }
+                                    return true;
+                                });
+                                isRole= false;
+                                break;
+                            }
+                            isRole= true;
+                        }
+                    }
+                    if (isRole || !roles){
+                        roles.push(e.id);
+                        rolesAll.every(function (roleAll) {
+                            if (roleAll.id==e.id){
+                                roleAll.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
                     }
                 },
-                clickingCarrierOption:function(e){
-                    let target = $(e.target);
-                    for (let i=0;i<this.carriers.length;i++){
-                        if(this.carriers[i].id===target.val()){
-                            this.carriers.splice(i,1);
-                            break;
+                seekRole:function (e) {
+                    let $val=e.target.value;
+                    let rolesAll=this.rolesAll;
+                    rolesAll.every(function (roleAll) {
+                        let name=roleAll.name;
+                        if (name.includes($val)){
+                            location.href="#"+roleAll.name;
+                            return false;
                         }
-                    }
+                        return  true;
+                    });
+                    $(e.target).focus();
                 },
             },
         });

+ 4 - 4
resources/views/weight/package/statistics.blade.php

@@ -38,7 +38,7 @@
                                         <div style="max-height: 90px; overflow-y: scroll;border: solid 1px #ddd;border-radius:5px;opacity:0.5;text-align: center;transform:scale(0.9)"  v-if="ownersCopy.length>0">
                                             <ul class="list-group tooltipTarget" id="seek" onselectstart="return false;">
                                                 <li  title="单击添加货主"    v-for="ownerCopy in ownersCopy" :id="ownerCopy.name" class="list-group-item list-group-item-action pt-0 pb-0"
-                                                     @click="selectedOwner(ownerCopy)" :class="ownerCopy.style ? 'active' :''"><span style="cursor: default;" :name="ownerCopy.name">@{{ ownerCopy.name }}</span></li>
+                                                     @click="selectedOwner(ownerCopy)" :class="ownerCopy.style ? 'active' :''"><span style="cursor: default;" :id="ownerCopy.name">@{{ ownerCopy.name }}</span></li>
                                             </ul>
                                             <input hidden name="owner_id" :value="selectedOwners">
                                         </div>
@@ -58,7 +58,7 @@
                                             <ul class="list-group tooltipTarget" onselectstart="return false;">
                                                 <li  title="单击添加物流公司"   v-for="logisticCopy in logisticsCopy" class=" list-group-item list-group-item-action pt-0 pb-0"
                                                      @click="selectedLogistic(logisticCopy)" :class="logisticCopy.style ? 'active' :''" >
-                                                    <span style="cursor: default;" :name="logisticCopy.name">@{{ logisticCopy.name }}</span></li>
+                                                    <span style="cursor: default;" :id="logisticCopy.name">@{{ logisticCopy.name }}</span></li>
                                             </ul>
                                             <input hidden name="logistic_id" :value="selectedLogistics">
                                         </div>
@@ -75,14 +75,14 @@
                                                        @input="hourFilter($event)" v-model="inputtingAdd_start" style="transform:scale(0.8);width: 80px"
                                                        @keypress="hourFilter($event)" >
                                             </div>
-                                            <input hidden  name="date_start" :value="filterData.date_start+' '+inputtingAdd_start">
+                                            <input v-if="filterData.date_start" hidden  name="date_start" :value="filterData.date_start+' '+inputtingAdd_start">
                                         </div>
                                         <div class="form-inline pl-5" style="width: 300px">
                                             <input style="transform:scale(0.8);width: 170px"  type="date" v-model="filterData.date_end" class="form-control" >
                                             <input id="hour_input" type="text" class="form-control"  placeholder="00:00"
                                                    @input="hourFilter($event)" v-model="inputtingAdd_end" style="transform:scale(0.8);width:80px"
                                                    @keypress="hourFilter($event)" >
-                                            <input hidden  name="date_end" :value="filterData.date_end+' '+inputtingAdd_end">
+                                            <input v-if="filterData.date_end" hidden  name="date_end" :value="filterData.date_end+' '+inputtingAdd_end">
                                         </div>
                                     </div>
                                     <div class=" align-items-center d-flex pt-2">