diff --git a/application/admin/controller/workers/Worker.php b/application/admin/controller/workers/Worker.php index 3f59616..849c654 100644 --- a/application/admin/controller/workers/Worker.php +++ b/application/admin/controller/workers/Worker.php @@ -179,16 +179,16 @@ class Worker extends Backend if ($items) { $insert = []; foreach ($items as $item) { + if ($item == '') continue; $insert [] = [ - 'worker_id' => $result, + 'worker_id' => $this->model->id, 'item_id' => $item, 'item_path_id' => $item_map[$item] ?? 0 ]; } - model('WorkerItem')->saveAll($insert); + model('WorkerItem')->insertAll($insert); } } - Db::commit(); } catch (ValidateException | PDOException | Exception $e) { Db::rollback(); @@ -229,10 +229,12 @@ class Worker extends Backend $item_map = model('item')->getAll(); $item_map = array_column($item_map, 'level', 'id'); if ($ids) { - $items = explode(',', $params['rules']); + $items = explode(',', $params['rules'] ?? ''); + if ($items) { $insert = []; foreach ($items as $item) { + if ($item == '') continue; $insert [] = [ 'worker_id' => $ids, 'item_id' => $item, @@ -382,4 +384,50 @@ ORDER BY distance;",[$order->lng,$order->lat]); } + + public function status(){ + + $ids = input()['ids'] ?? []; + $status = input()['status'] ?? 1; + + $res = Db::name('worker')->whereIn('id',$ids)->update([ + 'status' => $status + ]); + + return json([]); + } + + public function del($ids = null) + { + if (false === $this->request->isPost()) { + $this->error(__("Invalid parameters")); + } + $ids = $ids ?: $this->request->post("ids"); + if (empty($ids)) { + $this->error(__('Parameter %s can not be empty', 'ids')); + } + $pk = $this->model->getPk(); + $adminIds = $this->getDataLimitAdminIds(); + if (is_array($adminIds)) { + $this->model->where($this->dataLimitField, 'in', $adminIds); + } + $list = $this->model->where($pk, 'in', $ids)->select(); + + $count = 0; + Db::startTrans(); + try { + foreach ($list as $item) { + $count += $item->delete(); + } + Db::commit(); + } catch (PDOException|Exception $e) { + Db::rollback(); + $this->error($e->getMessage()); + } + if ($count) { + $this->success(); + } + $this->error(__('No rows were deleted')); + } + } diff --git a/application/admin/view/workers/worker/add.html b/application/admin/view/workers/worker/add.html index 13c7265..cc75356 100644 --- a/application/admin/view/workers/worker/add.html +++ b/application/admin/view/workers/worker/add.html @@ -40,7 +40,6 @@ @@ -57,6 +56,44 @@ +
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+ + +
+ +
+ +
+
+ + + +
diff --git a/application/admin/view/workers/worker/edit.html b/application/admin/view/workers/worker/edit.html index b837ae8..a8c1fbe 100644 --- a/application/admin/view/workers/worker/edit.html +++ b/application/admin/view/workers/worker/edit.html @@ -57,7 +57,6 @@
@@ -74,6 +73,42 @@ +
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+ + +
+ +
+ +
+
+ +
diff --git a/application/admin/view/workers/worker/index.html b/application/admin/view/workers/worker/index.html index cfc788f..40df389 100644 --- a/application/admin/view/workers/worker/index.html +++ b/application/admin/view/workers/worker/index.html @@ -21,12 +21,19 @@ {:__('Edit')} {:__('Delete')} + + + + diff --git a/public/assets/js/backend/workers/worker.js b/public/assets/js/backend/workers/worker.js index 98bde9f..fe67b77 100644 --- a/public/assets/js/backend/workers/worker.js +++ b/public/assets/js/backend/workers/worker.js @@ -1,189 +1,286 @@ -define(['jquery', 'bootstrap', 'backend', 'table', 'form','jstree'], +define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function ($, undefined, Backend, Table, Form) { - $.jstree.core.prototype.get_all_checked = function (full) { - var obj = this.get_selected(), i, j; - for (i = 0, j = obj.length; i < j; i++) { - obj = obj.concat(this.get_node(obj[i]).parents); - } - obj = $.grep(obj, function (v, i, a) { - return v != '#'; - }); - obj = obj.filter(function (itm, i, a) { - return i == a.indexOf(itm); - }); - return full ? $.map(obj, $.proxy(function (i) { - return this.get_node(i); - }, this)) : obj; - }; - var Controller = { - index: function () { - // 初始化表格参数配置 - Table.api.init({ - extend: { - index_url: 'workers/worker/index' + location.search, - add_url: 'workers/worker/add', - edit_url: 'workers/worker/edit', - del_url: 'workers/worker/del', - multi_url: 'workers/worker/multi', - import_url: 'workers/worker/import', - table: 'worker', - } - }); - - var table = $("#table"); - - // 初始化表格 - table.bootstrapTable({ - url: $.fn.bootstrapTable.defaults.extend.index_url, - pk: 'id', - sortName: 'id', - fixedColumns: true, - fixedRightNumber: 1, - columns: [ - [ - {checkbox: true}, - {field: 'id', title: __('Id')}, - {field: 'admin.username', title:'创建人'}, - {field: 'name', title: __('Name'), operate: 'LIKE'}, - {field: 'type', title: '师傅归属', searchList: {"1":'自营',"2":'非自营','3':'新师傅'}, - formatter: Table.api.formatter.status,}, - {field: 'tel', title: __('Tel'), operate: 'LIKE'}, - {field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"0":__('Status 0')}, formatter: Table.api.formatter.status}, - //{field: 'area_id', title: __('Area_id')}, - //{field: 'lng', title: __('Lng'), operate:'BETWEEN'}, - //{field: 'lat', title: __('Lat'), operate:'BETWEEN'}, - {field: 'area.short_merge_name', title: __('Area.short_merge_name'), searchable:false}, - {field: 'deposit_amount', title: __('Deposit_amount'), operate:'BETWEEN'}, - {field: 'star', title: __('Star'), operate:'BETWEEN'}, - {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false}, - {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false}, - {field: 'operate', title: __('Operate'), - buttons:[ - { - name: 'edit', - text: "修改", - icon: 'fa fa-pencil', - title: __('Edit'), - extend: 'data-toggle="tooltip" data-container="body"', - classname: 'btn btn-xs btn-info btn-editone', - }, - { - name: 'del', - text: "删除", - icon: 'fa fa-trash', - title: __('Delete'), - extend: 'data-toggle="tooltip"', - classname: 'btn btn-xs btn-danger btn-delone', - }, - ], - table: table, events: Table.api.events.operate, - formatter: Table.api.formatter.operate} - ] - ] - }); - $("#c-city-search").on("cp:updated", function() { - var citypicker = $(this).data("citypicker"); - var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province"); - // table.bootstrapTable('refresh',{query: {area_code: code}}); - $('#area_id').val(code); - }); - $("#search_btn").on("click", function() { - table.bootstrapTable('refresh',{ - url:$.fn.bootstrapTable.defaults.extend.index_url +'&' + getQueryData(), - }); - }); - function getQueryData(){ - return $('#select-form').serialize(); + $.jstree.core.prototype.get_all_checked = function (full) { + var obj = this.get_selected(), i, j; + for (i = 0, j = obj.length; i < j; i++) { + obj = obj.concat(this.get_node(obj[i]).parents); } - - - - $("#reset_btn").on("click", function() { - $("#c-city-search").citypicker('reset'); - $("#area_id").val(''); - $("#citem").val('').selectpicker('refresh'); - $("#keyword").val(''); - table.bootstrapTable('refresh',{ - url:$.fn.bootstrapTable.defaults.extend.index_url +'?' + getQueryData(), - }); + obj = $.grep(obj, function (v, i, a) { + return v != '#'; }); - Form.events.citypicker($("#select-form")); - - - // 为表格绑定事件 - Table.api.bindevent(table); - Form.events.citypicker($("form")); - }, - add: function () { - $("#c-city").on("cp:updated", function() { - var citypicker = $(this).data("citypicker"); - var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province"); - $("#area_id").val(code); + obj = obj.filter(function (itm, i, a) { + return i == a.indexOf(itm); }); - const urlParams = new URLSearchParams(window.location.search); - const type = urlParams.get('type'); - if (type) { - const select = document.getElementById('worker_type'); - if (select) { - select.value = type; - } - } - Controller.api.bindevent(); - }, - edit: function () { - Controller.api.bindevent(); - }, - api: { - bindevent: function () { - Form.api.bindevent($("form[role=form]"),null,null,function () { - if ($("#treeview").length > 0) { - var r = $("#treeview").jstree("get_all_checked"); - $("input[name='row[rules]']").val(r.join(',')); + return full ? $.map(obj, $.proxy(function (i) { + return this.get_node(i); + }, this)) : obj; + }; + var Controller = { + index: function () { + // 初始化表格参数配置 + Table.api.init({ + extend: { + index_url: 'workers/worker/index' + location.search, + add_url: 'workers/worker/add', + edit_url: 'workers/worker/edit', + del_url: 'workers/worker/del', + multi_url: 'workers/worker/multi', + import_url: 'workers/worker/import', + table: 'worker', } - return true; }); - //渲染权限节点树 - //销毁已有的节点树 - $("#treeview").jstree("destroy"); - Controller.api.rendertree(nodeData); - //全选和展开 - $(document).on("click", "#checkall", function () { - $("#treeview").jstree($(this).prop("checked") ? "check_all" : "uncheck_all"); - }); - $(document).on("click", "#expandall", function () { - $("#treeview").jstree($(this).prop("checked") ? "open_all" : "close_all"); - }); - $("select[name='row[pid]']").trigger("change"); - }, - rendertree: function (content) { - $("#treeview") - .on('redraw.jstree', function (e) { - $(".layer-footer").attr("domrefresh", Math.random()); - }) - .jstree({ - "themes": {"stripes": true}, - "checkbox": { - "keep_selected_style": false, - }, - "types": { - "root": { - "icon": "fa fa-folder-open", + + var table = $("#table"); + + // 初始化表格 + table.bootstrapTable({ + url: $.fn.bootstrapTable.defaults.extend.index_url, + pk: 'id', + sortName: 'id', + fixedColumns: true, + fixedRightNumber: 1, + columns: [ + [ + {checkbox: true}, + {field: 'id', title: __('Id')}, + {field: 'admin.username', title: '创建人'}, + {field: 'name', title: __('Name'), operate: 'LIKE'}, + { + field: 'type', title: '师傅归属', searchList: {"1": '自营', "2": '非自营', '3': '新师傅'}, + formatter: Table.api.formatter.status, }, - "menu": { - "icon": "fa fa-folder-open", + {field: 'tel', title: __('Tel'), operate: 'LIKE'}, + { + field: 'status', + title: __('Status'), + searchList: {"1": __('Status 1'), "0": __('Status 0')}, + formatter: Table.api.formatter.status }, - "file": { - "icon": "fa fa-file-o", + //{field: 'area_id', title: __('Area_id')}, + //{field: 'lng', title: __('Lng'), operate:'BETWEEN'}, + //{field: 'lat', title: __('Lat'), operate:'BETWEEN'}, + {field: 'area.short_merge_name', title: __('Area.short_merge_name'), searchable: false}, + {field: 'deposit_amount', title: __('Deposit_amount'), operate: 'BETWEEN'}, + {field: 'star', title: __('Star'), operate: 'BETWEEN'}, + { + field: 'create_time', + title: __('Create_time'), + operate: 'RANGE', + addclass: 'datetimerange', + autocomplete: false + }, + { + field: 'update_time', + title: __('Update_time'), + operate: 'RANGE', + addclass: 'datetimerange', + autocomplete: false + }, + { + field: 'operate', title: __('Operate'), + buttons: [ + { + name: 'edit', + text: "修改", + icon: 'fa fa-pencil', + title: __('Edit'), + extend: 'data-toggle="tooltip" data-container="body"', + classname: 'btn btn-xs btn-info btn-editone', + }, + { + name: 'del', + text: "删除", + icon: 'fa fa-trash', + title: __('Delete'), + extend: 'data-toggle="tooltip"', + classname: 'btn btn-xs btn-danger btn-delone', + }, + ], + table: table, events: Table.api.events.operate, + formatter: Table.api.formatter.operate } - }, - "plugins": ["checkbox", "types"], - "core": { - 'check_callback': true, - "data": content - } + ] + ] + }); + $("#c-city-search").on("cp:updated", function () { + var citypicker = $(this).data("citypicker"); + var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province"); + // table.bootstrapTable('refresh',{query: {area_code: code}}); + $('#area_id').val(code); + }); + $("#search_btn").on("click", function () { + table.bootstrapTable('refresh', { + url: $.fn.bootstrapTable.defaults.extend.index_url + '&' + getQueryData(), }); + }); + + function getQueryData() { + return $('#select-form').serialize(); + } + + + $("#reset_btn").on("click", function () { + $("#c-city-search").citypicker('reset'); + $("#area_id").val(''); + $("#citem").val('').selectpicker('refresh'); + $("#keyword").val(''); + table.bootstrapTable('refresh', { + url: $.fn.bootstrapTable.defaults.extend.index_url + '?' + getQueryData(), + }); + }); + Form.events.citypicker($("#select-form")); + + // 批量修改状态事件 + $(document).on("click", ".btn-change-status-off", function () { + var ids = Table.api.selectedids(table); + if (ids.length === 0) { + Toastr.error("请选择至少一条记录"); + return; + } + layer.confirm('是否全部冻结', function () { + Fast.api.ajax({ + url: 'workers/worker/status', + type: "POST", + contentType: 'application/json', + data: JSON.stringify({ + ids, + status: 0 + }), + success:function (){ + layer.closeAll(); + Toastr.info('操作成功'); + table.bootstrapTable("refresh"); + } + }); + }); + }); // 批量修改状态事件 + $(document).on("click", ".btn-change-status-on", function () { + var ids = Table.api.selectedids(table); + if (ids.length === 0) { + Toastr.error("请选择至少一条记录"); + return; + } + layer.confirm('是否全部激活', function () { + $.ajax({ + url: 'workers/worker/status', + type: "POST", + contentType: 'application/json', + data: JSON.stringify({ + ids, + status: 1 + }), + success:function (){ + layer.closeAll(); + Toastr.info('操作成功'); + table.bootstrapTable("refresh"); + } + }); + }); + }); + $(document).on("click", ".btn-change-type", function () { + var ids = Table.api.selectedids(table); + if (ids.length === 0) { + Toastr.error("请选择至少一条记录"); + return; + } + layer.confirm('批量修改类型', function () { + $.ajax({ + url: 'workers/worker/status', + type: "POST", + contentType: 'application/json', + data: JSON.stringify({ + ids, + status: 1 + }), + success:function (){ + layer.closeAll(); + Toastr.info('操作成功'); + table.bootstrapTable("refresh"); + } + }); + }); + }); + + + // 为表格绑定事件 + Table.api.bindevent(table); + Form.events.citypicker($("form")); + }, + add: function () { + $("#c-city").on("cp:updated", function () { + var citypicker = $(this).data("citypicker"); + var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province"); + $("#area_id").val(code); + }); + const urlParams = new URLSearchParams(window.location.search); + const type = urlParams.get('type'); + if (type) { + const select = document.getElementById('worker_type'); + if (select) { + select.value = type; + } + } + Controller.api.bindevent(); + }, + edit: function () { + $("#c-city").on("cp:updated", function () { + var citypicker = $(this).data("citypicker"); + var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province"); + $("#area_id").val(code); + }); + Controller.api.bindevent(); + }, + api: { + bindevent: function () { + Form.api.bindevent($("form[role=form]"), null, null, function () { + if ($("#treeview").length > 0) { + var r = $("#treeview").jstree("get_all_checked"); + $("input[name='row[rules]']").val(r.join(',')); + } + return true; + }); + //渲染权限节点树 + //销毁已有的节点树 + $("#treeview").jstree("destroy"); + Controller.api.rendertree(nodeData); + //全选和展开 + $(document).on("click", "#checkall", function () { + $("#treeview").jstree($(this).prop("checked") ? "check_all" : "uncheck_all"); + }); + $(document).on("click", "#expandall", function () { + $("#treeview").jstree($(this).prop("checked") ? "open_all" : "close_all"); + }); + $("select[name='row[pid]']").trigger("change"); + }, + rendertree: function (content) { + $("#treeview") + .on('redraw.jstree', function (e) { + $(".layer-footer").attr("domrefresh", Math.random()); + }) + .jstree({ + "themes": {"stripes": true}, + "checkbox": { + "keep_selected_style": false, + }, + "types": { + "root": { + "icon": "fa fa-folder-open", + }, + "menu": { + "icon": "fa fa-folder-open", + }, + "file": { + "icon": "fa fa-file-o", + } + }, + "plugins": ["checkbox", "types"], + "core": { + 'check_callback': true, + "data": content + } + }); + } } - } - }; - return Controller; -}); + }; + return Controller; + });