????
Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/views/quantri/ |
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/views/quantri/nguoidung.eta |
<% layout('../layouts/userLayout.eta') %> <div class="content"> <div class="page-inner"> <div class="page-header"> <h4 class="page-title">Quản lý người dùng</h4> <ul class="breadcrumbs"> <li class="nav-home"><a href="/"><i class="flaticon-home"></i></a></li> <li class="separator"><i class="flaticon-right-arrow"></i></li> <li class="nav-item"><a href="/main">Giao diện chính</a></li> <li class="separator"><i class="flaticon-right-arrow"></i></li> <li class="nav-item"><a href="#">Người dùng</a></li> </ul> </div> <div class="row"> <div class="col-lg-8 col-md-6"> <div class="card"> <div class="card-body table-responsive"> <table id="staffTable" role="table" class="table table-bordered table-striped" style="width:100%"> <thead role="rowgroup"> <tr role="row"> <th style="max-width: 50px">Ảnh</th> <th>Họ tên</th> <th>Nam/Nữ</th> <!-- <th>Địa chỉ</th> --> <th>Số CMND hoặc hộ chiếu</th> <th>Email</th> <th>Điện thoại</th> </tr> </thead> </table> </div> </div> </div> <div class="col-lg-4 col-md-6"> <div class="card"> <div class="card-header bg-primary"> <div class="card-title text-white">Thông tin tài khoản</div> </div> <div class="card-body"> <form id="user-form" action="" method="POST"> <div id="notify-div" class="mb-2"></div> <div class="d-flex justify-content-end mr-3"> <input type="hidden" name="id" data-bind="value: user.UUID"> <div class="btn-group"> <button type="submit" class="btn btn-sm btn-primary" data-bind="html:saveBtnLabel"></button> <button id="del-btn" type="button" class="btn btn-sm btn-danger" data-bind="visible:user.UUID, events:{click:delUser}"> <span class="btn-label"><i class="fas fa-user-times"></i></span> Xóa </button> <button type="button" class="btn btn-sm btn-success" data-bind="visible: user.UUID, events:{click:reset}"> <span class="btn-label"><i class="fas fa-user-plus"></i></span> Tạo mới </button> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Tên đăng nhập</label> <div class="col-sm-8"> <div class="input-group"> <input name="username" title="Tên đăng nhập không được để trống" data-bind="value:user.Username" class="form-control" placeholder="Nhập tên đăng nhập..." type="text" required> <div class="input-group-append"> <span class="input-group-text"><i class="fa fa-user"></i></span> </div> </div> <span data-for='username' class='k-invalid-msg'></span> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Mật khẩu</label> <div class="col-sm-8"> <div class="input-group"> <input id="new-pass" name="newpassword" type="password" title="Mật khẩu không được để trống" placeholder="Nhập mật khẩu..." class="form-control" data-bind="value: user.NewPass, notRequired:user.UUID"> <div class="input-group-append"> <span class="input-group-text show-pass"><i class="fas fa-eye-slash"></i></span> </div> </div> <span data-for='newpassword' class='k-invalid-msg'></span> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Nhập lại mật khẩu</label> <div class="col-sm-8"> <div class="input-group"> <input name="confpassword" type="password" placeholder="Nhập lai mật khẩu..." class="form-control" data-bind="value: user.ConfPass"> <div class="input-group-append"> <span class="input-group-text show-pass"><i class="fas fa-eye-slash"></i></span> </div> </div> <span data-for='confpassword' class='k-invalid-msg'></span> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Quyền tài khoản</label> <div class="col-sm-8"> <select name="role" title="Không được để trống" placeholder="Chọn quyền tài khoản..." data-role="dropdownlist" data-value-primitive="true" data-text-field="Name" data-value-field="Id" data-bind="source: roles, value: user.Role" class="form-control" required></select> <span data-for='role' class='k-invalid-msg'></span> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Họ tên</label> <div class="col-sm-8"> <div class="input-group"> <input name="fullname" type="text" title="Họ tên không được để trống" placeholder="Nhập họ tên..." class="form-control" data-bind="value: user.FullName" required> <div class="input-group-append"> <span class="input-group-text"><i class="fa fa-user"></i></span> </div> </div> <span data-for='fullname' class='k-invalid-msg'></span> </div> </div> <div class="form-check form-inline"> <label class="placeholder col-sm-4">Giới tính</label> <div class="col-sm-8"> <label class="custom-control custom-radio custom-control-inline"> <input name="gender" class="custom-control-input" type="radio" value="true" data-bind="checked: user.Gender"> <span class="custom-control-label">Nam</span> </label> <label class="custom-control custom-radio custom-control-inline"> <input name="gender" class="custom-control-input" type="radio" value="false" data-bind="checked: user.Gender"> <span class="custom-control-label">Nữ</span> </label> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Số CMND, hộ chiếu</label> <div class="col-sm-8"> <div class="input-group"> <input name="idnumber" type="text" placeholder="Nhập số thẻ căn cước, CMND hoặc hộ chiếu..." class="form-control" data-bind="value: user.IdNumber"> <div class="input-group-append"> <span class="input-group-text"><i class="fas fa-id-card"></i> </div> </div> <span data-for='idnumber' class='k-invalid-msg'></span> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Email</label> <div class="col-sm-8"> <div class="input-group"> <input name="email" type="email" title="Không đúng cú pháp địa chỉ email" class="form-control" data-bind="value: user.Email" placeholder="Nhập địa chỉ email..."> <div class="input-group-append"> <span class="input-group-text"><i class="fa fa-envelope"></i> </div> </div> <span data-for='email' class='k-invalid-msg'></span> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Địa chỉ</label> <div class="col-sm-8"> <div class="input-group"> <input name="address" type="text" data-bind="value: user.Address" class="form-control" placeholder="Nhập địa chỉ..."> <div class="input-group-append"> <span class="input-group-text"><i class="fa fa-home"></i> </div> </div> </div> </div> <div class="form-group form-inline"> <label class="placeholder col-sm-4">Số điện thoại</label> <div class="col-sm-8"> <div class="input-group"> <input name="phone" type="text" title="Chỉ được nhập số hoặc dấu chấm từ 10 đến 12 ký tự" data-bind="value: user.Telephone" class="form-control" placeholder="Nhập số điện thoại..."> <div class="input-group-append"> <span class="input-group-text"><i class="fas fa-phone"></i> </div> </div> <span data-for='phone' class='k-invalid-msg'></span> </div> </div> </form> </div> </div> </div> </div> </div> </div> <script type="text/javascript"> $(function () { $(".show-pass").on("click", function (e) { showPassword(this); }); kendo.data.binders.notRequired = kendo.data.Binder.extend({ refresh: function () { var required = !this.bindings.notRequired.get(); if (required) { this.element.setAttribute("required", "required"); } else { this.element.removeAttribute("required"); } } }); var userValidator = $('#user-form').kendoValidator({ rules: { confPass: function (input) { var result = true; if (input.is('[name=confpassword]')) { result = input.val() === $('#new-pass').val() } return result; } }, messages: { confPass: 'Mật khẩu xác thực không trùng khớp' } }).data('kendoValidator'); //DataTables var userTable = $("#staffTable").DataTable({ ajax: { type: "GET", url: "/quantri/nguoidung/json" }, responsive: false, ordering: false, select: { style: 'single' }, rowId: 'UUID', language: { url: "/js/plugin/datatables/Vietnamese.json" }, columns: [ { data: "UUID", render: function (data, type, row) { return `<img class="rounded img-rounded" src="/avatar?id=${data}" width="auto" height="50px" alt="Hình đại diện">` }, orderable: false }, { data: "FullName" }, { data: "Gender", render: function (data, type, row) { return data ? "Nam" : "Nữ"; } }, // { data: "Address" }, { data: "IdNumber" }, { data: "Email" }, { data: "Telephone" } ], order: [[2, 'asc']] }); // view model var userVM = kendo.observable({ user: { Role: 3, Gender: true }, roles: new kendo.data.DataSource({ transport: { read: { url: "/quantri/quyentaikhoan/json", dataType: "json" } }, schema: { data: 'data' } }), reset: function (e) { this.set('user', { Role: 3, Gender: true }); if (userTable.rows({ selected: true }).count()) userTable.rows().deselect(); userValidator.hideMessages(); }, saveBtnLabel: function (e) { return this.get('user.UUID') ? '<span class="btn-label"><i class="fas fa-save"></i></span> Lưu' : '<span class="btn-label"><i class="fas fa-save"></i></span> Lưu mới' }, delUser: function (e) { var userId = this.get('user.UUID'); $.ajax({ url: '', method: 'DELETE', data: { id: userId }, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, success: function (data, text, jqXHR) { $('<div/>').kendoNotification({ appendTo: '#notify-div' }).data('kendoNotification').info('Đã xóa tài khoản thành công'); userTable.ajax.reload(null, false); userVM.reset(); }, error: function (jqXHR, textStatus, err) { $('<div/>').kendoNotification({ appendTo: '#notify-div' }).data('kendoNotification').error(jqXHR.responseText); } }) } }); kendo.bind($("#user-form"), userVM); userTable.on('select', function (e, dt, type, idxs) { var data = dt.row(idxs[0]).data(); userVM.set('user', data); userValidator.hideMessages() }); userTable.on('deselect', function (e, dt, type, idxs) { userVM.reset(); }); // Lưu thông tin người dùng $('#user-form').on('submit', function (e) { e.preventDefault(); e.stopPropagation(); if (userValidator.validate()) { $.ajax({ url: '', method: userVM.get('user.UUID') ? 'PUT' : 'POST', data: $('#user-form').serialize(), headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, success: function (data, text, jqXHR) { $('<div/>').kendoNotification({ appendTo: '#notify-div' }).data('kendoNotification').success('Lưu thông tin người dùng thành công'); userTable.ajax.reload(null, false); if (!userVM.get('user.UUID')) userVM.reset(); }, error: function (jqXHR, textStatus, err) { $('<div/>').kendoNotification({ appendTo: '#notify-div' }).data('kendoNotification').error(jqXHR.responseText); } }) } }); }) </script>