You've already forked jianlizaojia
[Staff]部门
This commit is contained in:
120
plugs/think-plugs-staff/src/controller/Dept.php
Normal file
120
plugs/think-plugs-staff/src/controller/Dept.php
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace jerryyan\staff\controller;
|
||||||
|
|
||||||
|
use jerryyan\staff\model\StaffDept;
|
||||||
|
use jerryyan\staff\model\StaffUser;
|
||||||
|
use think\admin\Controller;
|
||||||
|
use think\admin\helper\QueryHelper;
|
||||||
|
|
||||||
|
class Dept extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 员工部门管理
|
||||||
|
* @menu true
|
||||||
|
* @auth true
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return StaffDept::mQuery()->layTable(function () {
|
||||||
|
$this->title = '员工部门';
|
||||||
|
}, static function (QueryHelper $query) {
|
||||||
|
$query->with('parent.parent')->append(['headman_name']);
|
||||||
|
$query->equal('status')->like('name');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加部门
|
||||||
|
* @auth true
|
||||||
|
* @menu true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
StaffDept::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑部门
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
StaffDept::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _form_filter(array &$data)
|
||||||
|
{
|
||||||
|
if ($this->request->isPost()) {
|
||||||
|
$this->_vali([
|
||||||
|
'name.require' => '部门名称不能为空!',
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
$this->depts = StaffDept::topItems();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门排序
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function sort()
|
||||||
|
{
|
||||||
|
StaffDept::mSave($this->_vali([
|
||||||
|
'sort.require' => '排序参数不能为空!',
|
||||||
|
'sort.number' => '排序参数格式错误!',
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置部门领导人
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function headman()
|
||||||
|
{
|
||||||
|
$data = $this->_vali([
|
||||||
|
'id.require' => '部门不能为空!',
|
||||||
|
]);
|
||||||
|
if ($this->request->isGet()) {
|
||||||
|
$this->title = '设置部门负责人';
|
||||||
|
$this->dept = StaffDept::mk()->where(['id' => $data['id']])->findOrEmpty();
|
||||||
|
if ($this->dept->isEmpty()) $this->error('部门不存在!');
|
||||||
|
$this->users = StaffUser::mk()->where(['status' => 1, 'dept_id' => $this->dept['id']])->select();
|
||||||
|
$this->fetch();
|
||||||
|
} else {
|
||||||
|
StaffDept::mSave($this->_vali([
|
||||||
|
'headman_id.require' => '部门领导人不能为空!',
|
||||||
|
'headman_id.number' => '部门领导人格式错误!',
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用禁用部门
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function state()
|
||||||
|
{
|
||||||
|
StaffDept::mSave($this->_vali([
|
||||||
|
'status.in:0,1' => '状态值范围异常!',
|
||||||
|
'status.require' => '状态值不能为空!',
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除部门
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function del()
|
||||||
|
{
|
||||||
|
StaffDept::mDelete();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -13,7 +13,15 @@ class StaffDept extends Model
|
|||||||
protected $updateTime = false;
|
protected $updateTime = false;
|
||||||
protected $oplogName = '部门';
|
protected $oplogName = '部门';
|
||||||
protected $oplogType = '部门管理';
|
protected $oplogType = '部门管理';
|
||||||
protected $globalScope = ['not_deleted'];
|
protected $globalScope = ['notDeleted'];
|
||||||
|
|
||||||
|
public static function topItems()
|
||||||
|
{
|
||||||
|
return self::where(['pid' => 0])->field("id, name")->select()->unshift([
|
||||||
|
'id' => 0,
|
||||||
|
'name' => '顶级部门',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function scopeDeleted(Query $query): void
|
public function scopeDeleted(Query $query): void
|
||||||
{
|
{
|
||||||
@ -58,4 +66,12 @@ class StaffDept extends Model
|
|||||||
{
|
{
|
||||||
return static::mk()->where(['is_deleted' => 0, 'pid' => 0])->with('children.children')->select();
|
return static::mk()->where(['is_deleted' => 0, 'pid' => 0])->with('children.children')->select();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getHeadmanNameAttr()
|
||||||
|
{
|
||||||
|
if (!$this->headman_id) {
|
||||||
|
return '无';
|
||||||
|
}
|
||||||
|
return $this->headman ? $this->headman['name'] : '无';
|
||||||
|
}
|
||||||
}
|
}
|
29
plugs/think-plugs-staff/src/view/dept/form.html
Normal file
29
plugs/think-plugs-staff/src/view/dept/form.html
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="DeptTable">
|
||||||
|
<div class="layui-card-body padding-left-40">
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">基础信息</b></legend>
|
||||||
|
<label class="layui-form-item relative block">
|
||||||
|
<span class="help-label"><b>名称</b></span>
|
||||||
|
<input maxlength="100" class="layui-input" name="name" value='{$vo.name|default=""}' required vali-name="名称" placeholder="请输入名称">
|
||||||
|
</label>
|
||||||
|
<label class="layui-form-item relative block">
|
||||||
|
<span class="help-label"><b>上级部门</b></span>
|
||||||
|
<select name="pid" lay-search class="layui-select">
|
||||||
|
{foreach $depts as $dept}{if isset($vo.pid) and $dept.id eq $vo.pid}
|
||||||
|
<option selected value="{$dept.id}">{$dept.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$dept.id}">{$dept.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hr-line-dashed"></div>
|
||||||
|
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
|
||||||
|
|
||||||
|
<div class="layui-form-item text-center">
|
||||||
|
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
|
||||||
|
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消编辑吗?')}" data-close>{:lang('取消编辑')}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
26
plugs/think-plugs-staff/src/view/dept/headman.html
Normal file
26
plugs/think-plugs-staff/src/view/dept/headman.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="DeptTable">
|
||||||
|
<div class="layui-card-body padding-left-40">
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">部门:{$dept.name}</b></legend>
|
||||||
|
<label class="layui-form-item relative block">
|
||||||
|
<span class="help-label"><b>新的部门主管</b></span>
|
||||||
|
<select required name="headman_id" lay-search class="layui-select">
|
||||||
|
<option value="">请选择部门主管</option>
|
||||||
|
{foreach $users as $user}{if isset($dept.headman_id) and $dept.headman_id eq $user.id}
|
||||||
|
<option selected value="{$user.id}">{$user.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$user.id}">{$user.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hr-line-dashed"></div>
|
||||||
|
{notempty name='get.id'}<input type='hidden' value='{$get.id}' name='id'>{/notempty}
|
||||||
|
|
||||||
|
<div class="layui-form-item text-center">
|
||||||
|
<button class="layui-btn" type='submit'>{:lang('保存数据')}</button>
|
||||||
|
<button class="layui-btn layui-btn-danger" type='button' data-confirm="{:lang('确定要取消编辑吗?')}" data-close>{:lang('取消编辑')}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
89
plugs/think-plugs-staff/src/view/dept/index.html
Normal file
89
plugs/think-plugs-staff/src/view/dept/index.html
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
{extend name='table'}
|
||||||
|
|
||||||
|
{block name="button"}
|
||||||
|
<!--{if auth("add")}-->
|
||||||
|
<button data-modal='{:url("add")}' data-title="{:lang('添加部门')}" class='layui-btn layui-btn-sm layui-btn-primary'>{:lang('添加部门')}</button>
|
||||||
|
<!--{/if}-->
|
||||||
|
{/block}
|
||||||
|
|
||||||
|
{block name="content"}
|
||||||
|
<div class="think-box-shadow">
|
||||||
|
{include file="dept/index_search"}
|
||||||
|
<table class="layui-hide" id="DeptTable" data-url="{:request()->url()}" data-target-search="form.form-search" lay-filter="DeptTable"></table>
|
||||||
|
</div>
|
||||||
|
<script type="text/html" id="StatusSwitchTpl">
|
||||||
|
<!--{if auth("state")}-->
|
||||||
|
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="{:lang('已激活')}|{:lang('已禁用')}" lay-filter="StatusSwitch" {{-d.status>0?'checked':''}}>
|
||||||
|
<!--{else}-->
|
||||||
|
{{-d.status ? '<b class="color-green">{:lang("已激活")}</b>' : '<b class="color-red">{:lang("已禁用")}</b>'}}
|
||||||
|
<!--{/if}-->
|
||||||
|
</script>
|
||||||
|
<script type="text/html" id="SortInputTpl">
|
||||||
|
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
|
||||||
|
</script>
|
||||||
|
<script type="text/html" id="HeadmanTpl">
|
||||||
|
{{d.headman_name}}
|
||||||
|
<!--{if auth("headman")}-->
|
||||||
|
{{# if(d.headman_id) { }}
|
||||||
|
<a class="layui-btn layui-btn-xs" data-modal="{:url('headman')}?id={{d.id}}" data-title="修改部门负责人">{:lang('修改')}</a>
|
||||||
|
{{# } else { }}
|
||||||
|
<a class="layui-btn layui-btn-xs" data-modal="{:url('headman')}?id={{d.id}}" data-title="设置部门负责人">{:lang('设置')}</a>
|
||||||
|
{{# } }}
|
||||||
|
<!--{/if}-->
|
||||||
|
</script>
|
||||||
|
<script type="text/html" id="ToolbarTpl">
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
<!--{if auth("edit")}-->
|
||||||
|
<a class="layui-btn layui-btn-warm layui-btn-xs" data-modal="{:url('edit')}?id={{d.id}}" data-title="{:lang('编辑员工')}">编辑</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
<!--{if auth("del")}-->
|
||||||
|
<a class="layui-btn layui-btn-danger layui-btn-xs" data-confirm="{:lang('确定要永久删除吗?')}" data-action="{:url('del')}" data-value="id#{{d.id}}">{:lang('删 除')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#DeptTable').layTable({
|
||||||
|
elem: '',
|
||||||
|
height: 'full',
|
||||||
|
sort: {field: 'sort', type: 'desc'},
|
||||||
|
cols: [[
|
||||||
|
{ type: 'checkbox', fixed: 'left' },
|
||||||
|
{ field: 'sort', title: '排序', width: 100, sort: true, templet: '#SortInputTpl' },
|
||||||
|
{ field: 'name', title: '部门名', templet: function (d) {
|
||||||
|
if (d.parent) {
|
||||||
|
if (d.parent.parent) {
|
||||||
|
return '<span class="layui-badge layui-bg-gray">' + d.parent.parent.name + ' / ' + d.parent.name + ' </span>' + d.name;
|
||||||
|
}
|
||||||
|
return '<span class="layui-badge layui-bg-gray">' + d.parent.name + ' / </span>' + d.name;
|
||||||
|
}
|
||||||
|
return d.name;
|
||||||
|
} },
|
||||||
|
{ field: 'headman_name', title: '部门负责人', templet: '#HeadmanTpl'},
|
||||||
|
{ field: 'status', title: '状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl' },
|
||||||
|
{ fixed: "right", title: "操作", width: 200, align: "center", toolbar: "#ToolbarTpl"}
|
||||||
|
]],
|
||||||
|
page: true
|
||||||
|
})
|
||||||
|
layui.use(['form', 'table'], function () {
|
||||||
|
const Table = layui.table;
|
||||||
|
const Form = layui.form;
|
||||||
|
Table.on('tool(DeptTable)', function (obj) {
|
||||||
|
console.log(obj);
|
||||||
|
})
|
||||||
|
|
||||||
|
Form.on('switch(StatusSwitch)', function (obj) {
|
||||||
|
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
|
||||||
|
$.form.load("{:url('state')}", data, 'post', function (ret) {
|
||||||
|
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
|
||||||
|
$('#DeptTable').trigger('reload');
|
||||||
|
}); else {
|
||||||
|
$('#DeptTable').trigger('reload')
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{/block}
|
27
plugs/think-plugs-staff/src/view/dept/index_search.html
Normal file
27
plugs/think-plugs-staff/src/view/dept/index_search.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<fieldset>
|
||||||
|
<legend>{:lang('条件搜索')}</legend>
|
||||||
|
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="post" autocomplete="off">
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">{:lang('部门名')}</label>
|
||||||
|
<label class="layui-input-inline">
|
||||||
|
<input name="name" value="{$get.name|default=''}" placeholder="{:lang('请输入部门名')}" class="layui-input">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">{:lang('启用状态')}</label>
|
||||||
|
<label class="layui-input-inline">
|
||||||
|
<select name="status">
|
||||||
|
<option value="">{:lang('请选择启用状态')}</option>
|
||||||
|
<option value="1">{:lang('已启用')}</option>
|
||||||
|
<option value="0">{:lang('已禁用')}</option>
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<input type="hidden" name="dept_id" value="{$get.dept_id|default=''}">
|
||||||
|
<button class="layui-btn layui-btn-primary"><i class="layui-icon"></i> {:lang('搜 索')}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</fieldset>
|
Reference in New Issue
Block a user