You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
6.1 KiB
128 lines
6.1 KiB
@extends("admin.layouts.layout")
|
|
|
|
@section("content")
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<a class="btn btn-primary" href="{{url($urlPrefix.'/create')}}">
|
|
@lang("icons.action_create") @lang('actions.create'){{$modelName}}
|
|
</a>
|
|
</div>
|
|
|
|
<table class="table table-bordered" id="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
{{$modelName}}
|
|
</th>
|
|
<th>用户名</th>
|
|
<th>角色</th>
|
|
<th>项目</th>
|
|
<th>操作</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach ($data as $row)
|
|
<tr data-id="{{$row->id}}">
|
|
<td>
|
|
{{ $row->name }}
|
|
</td>
|
|
<td>{{ $row->username }}</td>
|
|
<td class="role-names">
|
|
{{ $row->roles ? implode(",",array_column($row->roles->toArray(),"name")) : "" }}
|
|
</td>
|
|
<td class="role-names">
|
|
{{ implode(",",$row->projects->pluck("name")->toArray()) }}
|
|
</td>
|
|
<td>
|
|
<a class="btn btn-sm btn-success"
|
|
href="javascript:;" onclick="toggleRoles(this)"><i
|
|
class="mdi mdi-shield-key-outline"></i> 绑定角色</a>
|
|
<a class="btn btn-sm btn-primary"
|
|
href="{{url("{$urlPrefix}/edit?id={$row['id']}")}}">@lang("icons.action_edit") @lang("actions.edit")</a>
|
|
<a class="btn btn-sm btn-danger btn-delete" data-id="{{$row['id']}}"
|
|
href="javascript:;">@lang("icons.action_delete") @lang("actions.delete")</a>
|
|
</td>
|
|
</tr>
|
|
<tr class="roles-box" style="display: none;">
|
|
<td colspan="4">
|
|
<form>
|
|
@csrf
|
|
<input type="hidden" value="{{$row->id}}" name="id">
|
|
<div class="row">
|
|
@foreach($roles as $role)
|
|
<?php
|
|
$checked = in_array($role->id, array_column($row["roles"]->toArray(), "id")) ? true : false;
|
|
?>
|
|
<div class="col-md-3 col-sm-4">
|
|
<div class="custom-control custom-checkbox">
|
|
<input type="checkbox" class="custom-control-input"
|
|
id="role-{{$row->id}}-{{$role->id}}"
|
|
value="{{$role->id}}" name="role_id[]"
|
|
{{ $checked ? "checked" : "" }}>
|
|
<label class="custom-control-label"
|
|
for="role-{{$row->id}}-{{$role->id}}">{{$role->name}}</label>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
<hr>
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
onclick="bindRoles(this)"><i class="mdi mdi-check"></i>
|
|
确认绑定
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
@include("public._pages")
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@include("public._delete")
|
|
@endsection
|
|
|
|
@push("footer")
|
|
<script>
|
|
function toggleRoles(obj) {
|
|
$(obj).closest("tr").next(".roles-box").toggle();
|
|
}
|
|
|
|
function bindRoles(obj) {
|
|
var url = "{{url($urlPrefix."/set-roles")}}";
|
|
var data = $(obj).closest("form").serializeArray();
|
|
$.post(url, data, function (result) {
|
|
if (result.status) {
|
|
alertSuccess(result.msg);
|
|
refreshRoleNames(obj);
|
|
} else {
|
|
alertError(result.msg);
|
|
$(obj).closest("form")[0].reset();
|
|
}
|
|
});
|
|
}
|
|
|
|
function refreshRoleNames(obj) {
|
|
var checked = $(obj).closest("form").find("input:checkbox:checked");
|
|
var id = $(obj).closest("form").find("input[name=id]").val();
|
|
var names = [];
|
|
checked.each(function () {
|
|
names.push($(this).siblings("label").text());
|
|
});
|
|
$("#data-table tbody tr[data-id=" + id + "]").find(".role-names").html(names.join(","));
|
|
}
|
|
|
|
</script>
|
|
@endpush
|