You've already forked jianlizaojia
Compare commits
11 Commits
cd203a51c6
...
master
Author | SHA1 | Date | |
---|---|---|---|
6162dfe318 | |||
2265f368dd | |||
d5f6b44801 | |||
1d6dd6c067 | |||
71ad1c981c | |||
ea1f6d1edb | |||
f74e92e0a6 | |||
7357edc7ae | |||
975a31421b | |||
d12236b125 | |||
e48073f84c |
9
.gitmodules
vendored
Normal file
9
.gitmodules
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[submodule "plugs/think-plugs-staff"]
|
||||||
|
path = plugs/think-plugs-staff
|
||||||
|
url = ssh://git@git.jerryyan.net:29022/q792602257/think-plugs-staff.git
|
||||||
|
[submodule "plugs/think-plugs-recorder"]
|
||||||
|
path = plugs/think-plugs-recorder
|
||||||
|
url = ssh://git@git.jerryyan.net:29022/q792602257/think-plugs-recorder.git
|
||||||
|
[submodule "plugs/think-plugs-notice"]
|
||||||
|
path = plugs/think-plugs-notice
|
||||||
|
url = ssh://git@git.jerryyan.net:29022/q792602257/think-plugs-notice.git
|
30
app/xzgl/Service.php
Normal file
30
app/xzgl/Service.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl;
|
||||||
|
|
||||||
|
use think\admin\Plugin;
|
||||||
|
|
||||||
|
class Service extends Plugin
|
||||||
|
{
|
||||||
|
protected $appName = '行政管理';
|
||||||
|
protected $package = 'xzgl';
|
||||||
|
|
||||||
|
public static function menu(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'name' => '行政管理',
|
||||||
|
'subs' => [
|
||||||
|
['name' => '员工档案', 'icon' => 'layui-icon layui-icon-group', 'url' => 'xzgl/user/index'],
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => '证书管理',
|
||||||
|
'subs' => [
|
||||||
|
['name' => '员工证书管理', 'icon' => 'layui-icon layui-icon-auz', 'url' => 'xzgl/staff_cert/index'],
|
||||||
|
['name' => '企业证书管理', 'icon' => 'layui-icon layui-icon-auz', 'url' => 'xzgl/company_cert/index'],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
87
app/xzgl/controller/CompanyCert.php
Normal file
87
app/xzgl/controller/CompanyCert.php
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl\controller;
|
||||||
|
|
||||||
|
use app\xzgl\model\XzglCompanyCert;
|
||||||
|
use think\admin\Controller;
|
||||||
|
use think\admin\helper\QueryHelper;
|
||||||
|
use think\admin\model\SystemBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 企业证书管理
|
||||||
|
*/
|
||||||
|
class CompanyCert extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 企业证书管理
|
||||||
|
* @auth true
|
||||||
|
* @menu true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->title = '企业证书管理';
|
||||||
|
XzglCompanyCert::mQuery()->layTable(function () {
|
||||||
|
$this->levels = SystemBase::items('企业证书等级');
|
||||||
|
}, static function (QueryHelper $query) {
|
||||||
|
$query->like('name')->dateBetween('valid_before')->equal('level');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看企业证书
|
||||||
|
* @auth false
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function view()
|
||||||
|
{
|
||||||
|
XzglCompanyCert::mForm('view');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加企业证书
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
XzglCompanyCert::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑企业证书
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
XzglCompanyCert::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _form_filter(&$vo)
|
||||||
|
{
|
||||||
|
if ($this->request->isPost()) {
|
||||||
|
if (empty($vo['valid_before'])) {
|
||||||
|
unset($vo['valid_before']);
|
||||||
|
}
|
||||||
|
// if (empty($vo['valid_after'])) {
|
||||||
|
// unset($vo['valid_after']);
|
||||||
|
// }
|
||||||
|
if (empty($vo['id'])) {
|
||||||
|
$vo['create_by'] = session('user.id');
|
||||||
|
}
|
||||||
|
$vo['update_by'] = session('user.id');
|
||||||
|
} else {
|
||||||
|
$this->levels = SystemBase::items('企业证书等级');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除企业证书
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function remove()
|
||||||
|
{
|
||||||
|
XzglCompanyCert::mDelete();
|
||||||
|
}
|
||||||
|
}
|
89
app/xzgl/controller/StaffCert.php
Normal file
89
app/xzgl/controller/StaffCert.php
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl\controller;
|
||||||
|
|
||||||
|
use app\xzgl\model\XzglStaff;
|
||||||
|
use app\xzgl\model\XzglStaffCert;
|
||||||
|
use jerryyan\staff\model\StaffUser;
|
||||||
|
use think\admin\Controller;
|
||||||
|
use think\admin\helper\QueryHelper;
|
||||||
|
use think\admin\model\SystemBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 员工证书管理
|
||||||
|
*/
|
||||||
|
class StaffCert extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 员工证书管理
|
||||||
|
* @auth true
|
||||||
|
* @menu true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->title = '员工证书管理';
|
||||||
|
XzglStaffCert::mQuery()->layTable(function () {
|
||||||
|
$this->zclb = SystemBase::items('员工注册类别');
|
||||||
|
$this->zczy = SystemBase::items('员工注册专业');
|
||||||
|
$this->zsjb = SystemBase::items('员工证书级别');
|
||||||
|
}, static function (QueryHelper $query) {
|
||||||
|
$query->with('staff');
|
||||||
|
$query->equal('status,zclb,zczy,zsjb')->dateBetween('create_at,valid_before');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加员工证书
|
||||||
|
* @auth true
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
XzglStaffCert::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑员工证书
|
||||||
|
* @auth true
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
XzglStaffCert::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _form_filter(&$vo)
|
||||||
|
{
|
||||||
|
if ($this->request->isPost()) {
|
||||||
|
$data = $this->_vali([
|
||||||
|
'staff_id.require' => '员工ID不能为空!',
|
||||||
|
// 'zclb.require' => '员工注册类别不能为空!',
|
||||||
|
// 'zczy.require' => '员工注册专业不能为空!',
|
||||||
|
// 'zsjb.require' => '员工证书级别不能为空!',
|
||||||
|
// 'zsxq.require' => '员工证书详情不能为空!',
|
||||||
|
]);
|
||||||
|
if (empty($vo['valid_before'])) {
|
||||||
|
unset($vo['valid_before']);
|
||||||
|
}
|
||||||
|
// if (empty($vo['valid_after'])) {
|
||||||
|
// unset($vo['valid_after']);
|
||||||
|
// }
|
||||||
|
if (empty($vo['id'])) {
|
||||||
|
$vo['create_by'] = session('user.id');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->zclb = SystemBase::items('员工注册类别');
|
||||||
|
$this->zczy = SystemBase::items('员工注册专业');
|
||||||
|
$this->zsjb = SystemBase::items('员工证书级别');
|
||||||
|
$this->staffs = StaffUser::mk()->field("id, name")->select();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除员工证书
|
||||||
|
* @auth true
|
||||||
|
*/
|
||||||
|
public function remove()
|
||||||
|
{
|
||||||
|
XzglStaffCert::mDelete();
|
||||||
|
}
|
||||||
|
}
|
82
app/xzgl/controller/User.php
Normal file
82
app/xzgl/controller/User.php
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl\controller;
|
||||||
|
|
||||||
|
use app\xzgl\model\XzglProfile;
|
||||||
|
use think\admin\Controller;
|
||||||
|
use think\admin\helper\QueryHelper;
|
||||||
|
use think\admin\model\SystemUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户档案管理
|
||||||
|
*/
|
||||||
|
class User extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 用户档案管理
|
||||||
|
* @auth true
|
||||||
|
* @menu true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->title = '用户档案管理';
|
||||||
|
XzglProfile::mQuery()->layTable(function () {
|
||||||
|
|
||||||
|
}, static function (QueryHelper $query) {
|
||||||
|
$query->rightJoin('jl_staff_user', 'jl_staff_user.id = jl_xzgl_profile.id')
|
||||||
|
->field('jl_staff_user.id as staff_id, jl_staff_user.*, jl_xzgl_profile.*')
|
||||||
|
->with('user');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑用户档案
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit()
|
||||||
|
{
|
||||||
|
$data = $this->_vali([
|
||||||
|
'id.require' => '用户ID不能为空',
|
||||||
|
]);
|
||||||
|
$sys_user = SystemUser::mk()->findOrEmpty($data['id']);
|
||||||
|
if ($sys_user->isEmpty()) $this->error('用户不存在!');
|
||||||
|
XzglProfile::mForm('form');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _form_filter(&$data) {
|
||||||
|
if ($this->request->isPost()) {
|
||||||
|
if (empty($data['lz_date'])) {
|
||||||
|
unset($data['lz_date']);
|
||||||
|
}
|
||||||
|
if (empty($data['rz_date'])) {
|
||||||
|
unset($data['rz_date']);
|
||||||
|
}
|
||||||
|
if (empty($data['zz_date'])) {
|
||||||
|
unset($data['zz_date']);
|
||||||
|
}
|
||||||
|
if (empty($data['birthday'])) {
|
||||||
|
unset($data['birthday']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空用户档案
|
||||||
|
* @auth true
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function clear()
|
||||||
|
{
|
||||||
|
$data = $this->_vali([
|
||||||
|
'id.require' => '用户ID不能为空',
|
||||||
|
]);
|
||||||
|
$sys_user = SystemUser::mk()->findOrEmpty($data['id']);
|
||||||
|
if ($sys_user->isEmpty()) $this->error('用户不存在!');
|
||||||
|
if ($this->request->isPost()) {
|
||||||
|
XzglProfile::mk()->where(['id' => $data['id']])->delete();
|
||||||
|
}
|
||||||
|
$this->success('清空成功!');
|
||||||
|
}
|
||||||
|
}
|
37
app/xzgl/model/XzglCompanyCert.php
Normal file
37
app/xzgl/model/XzglCompanyCert.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl\model;
|
||||||
|
|
||||||
|
use think\admin\Model;
|
||||||
|
use think\admin\model\SystemBase;
|
||||||
|
use think\db\Query;
|
||||||
|
|
||||||
|
class XzglCompanyCert extends Model
|
||||||
|
{
|
||||||
|
protected $createTime = 'create_at';
|
||||||
|
protected $updateTime = 'update_at';
|
||||||
|
protected $oplogName = '企业证书';
|
||||||
|
protected $oplogType = '企业证书管理';
|
||||||
|
protected $globalScope = ['notDeleted'];
|
||||||
|
protected $append = ['level_name'];
|
||||||
|
|
||||||
|
public function scopeDeleted(Query $query): void
|
||||||
|
{
|
||||||
|
$query->where('is_deleted', '=', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeNotDeleted(Query $query): void
|
||||||
|
{
|
||||||
|
$query->where('is_deleted', '=', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLevelNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
$levels = SystemBase::items('企业证书等级');
|
||||||
|
if (isset($levels[$data['level']])) {
|
||||||
|
return $levels[$data['level']]['name'];
|
||||||
|
} else {
|
||||||
|
return $data['level'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
app/xzgl/model/XzglProfile.php
Normal file
19
app/xzgl/model/XzglProfile.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl\model;
|
||||||
|
|
||||||
|
use jerryyan\staff\model\StaffUser;
|
||||||
|
use think\admin\Model;
|
||||||
|
use think\model\relation\HasOne;
|
||||||
|
|
||||||
|
class XzglProfile extends Model
|
||||||
|
{
|
||||||
|
protected $createTime = 'create_at';
|
||||||
|
protected $updateTime = 'update_at';
|
||||||
|
protected $oplogName = '人员资料';
|
||||||
|
protected $oplogType = '人员资料管理';
|
||||||
|
public function user(): HasOne
|
||||||
|
{
|
||||||
|
return $this->hasOne(StaffUser::class, 'id', 'id')->with(['dept', 'sys_user']);
|
||||||
|
}
|
||||||
|
}
|
67
app/xzgl/model/XzglStaffCert.php
Normal file
67
app/xzgl/model/XzglStaffCert.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\xzgl\model;
|
||||||
|
|
||||||
|
use jerryyan\staff\model\StaffUser;
|
||||||
|
use think\admin\Model;
|
||||||
|
use think\admin\model\SystemBase;
|
||||||
|
use think\db\Query;
|
||||||
|
|
||||||
|
class XzglStaffCert extends Model
|
||||||
|
{
|
||||||
|
protected $createTime = 'create_at';
|
||||||
|
protected $updateTime = 'update_at';
|
||||||
|
protected $oplogName = '员工证书';
|
||||||
|
protected $oplogType = '员工证书管理';
|
||||||
|
protected $globalScope = ['notDeleted'];
|
||||||
|
protected $append = ['staff_name', 'zclb_name', 'zczy_name', 'zsjb_name'];
|
||||||
|
public function scopeDeleted(Query $query): void
|
||||||
|
{
|
||||||
|
$query->where('is_deleted', '=', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeNotDeleted(Query $query): void
|
||||||
|
{
|
||||||
|
$query->where('is_deleted', '=', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function staff()
|
||||||
|
{
|
||||||
|
return $this->hasOne(StaffUser::class, 'id', 'staff_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStaffNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
return $this->staff ? $this->staff['name'] : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZclbNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
$zclb = SystemBase::items('员工注册类别');
|
||||||
|
if (isset($zclb[$data['zclb']])) {
|
||||||
|
return $zclb[$data['zclb']]['name'];
|
||||||
|
} else {
|
||||||
|
return $data['zclb'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZczyNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
$zczy = SystemBase::items('员工注册专业');
|
||||||
|
if (isset($zczy[$data['zczy']])) {
|
||||||
|
return $zczy[$data['zczy']]['name'];
|
||||||
|
} else {
|
||||||
|
return $data['zczy'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZsjbNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
$zsjb = SystemBase::items('员工证书级别');
|
||||||
|
if (isset($zsjb[$data['zsjb']])) {
|
||||||
|
return $zsjb[$data['zsjb']]['name'];
|
||||||
|
} else {
|
||||||
|
return $data['zsjb'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
63
app/xzgl/view/company_cert/form.html
Normal file
63
app/xzgl/view/company_cert/form.html
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="UserTable">
|
||||||
|
<div class="layui-card-body padding-left-40">
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">基础信息</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">证书名称</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="name" required value='{$vo.name|default=""}' placeholder="请填写证书名称">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">证书等级</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="level" required>
|
||||||
|
<option value="">{:lang('请选择证书等级')}</option>
|
||||||
|
{foreach $levels as $key => $level}{if (isset($vo.level) and $key eq $vo.level)}
|
||||||
|
<option selected value="{$key}">{$level.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$level.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">有效期截至</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input lay-date type="text" class="layui-input" name="valid_before" value='{$vo.valid_before|default=""}' placeholder="请选择有效期截至时间">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">备注</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">备注</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<textarea class="layui-textarea" name="content" value='{$vo.content|default=""}' placeholder="请输入备注">
|
||||||
|
</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</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>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
layui.use(['form', 'laydate'], function () {
|
||||||
|
const Form = layui.form;
|
||||||
|
const Laydate = layui.laydate;
|
||||||
|
$('input[lay-date]').each(function (index, element) {
|
||||||
|
Laydate.render({
|
||||||
|
elem: element,
|
||||||
|
trigger: 'click'
|
||||||
|
});
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
47
app/xzgl/view/company_cert/index.html
Normal file
47
app/xzgl/view/company_cert/index.html
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{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" style="flex: 4">
|
||||||
|
{include file="company_cert/index_search"}
|
||||||
|
<table class="layui-hide" id="CertTable" data-url="{:request()->url()}" data-target-search="form.form-search" lay-filter="CertTable"></table>
|
||||||
|
</div>
|
||||||
|
<script type="text/html" id="ToolbarTpl">
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
<!--{if auth("edit")}-->
|
||||||
|
<a class="layui-btn layui-btn-xs" data-modal="{:url('edit')}?id={{d.id}}" data-title="编辑企业证书">{:lang('编 辑')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
<!--{if auth("remove")}-->
|
||||||
|
<a class="layui-btn layui-btn-danger layui-btn-xs" data-confirm="{:lang('确定要删除该企业证书吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删除证书')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#CertTable').layTable({
|
||||||
|
height: 'full',
|
||||||
|
sort: ['create_at', 'desc'],
|
||||||
|
cols: [[
|
||||||
|
{ field: 'name', title: '企业证书名称', width: 200 },
|
||||||
|
{ field: 'level_name', title: '证书等级' },
|
||||||
|
{ field: 'valid_before', title: '有效期截至', width: 200, sort: true },
|
||||||
|
{ field: 'create_at', title: '创建时间', width: 200, sort: true },
|
||||||
|
{ 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(CertTable)', function (obj) {
|
||||||
|
console.log(obj);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{/block}
|
35
app/xzgl/view/company_cert/index_search.html
Normal file
35
app/xzgl/view/company_cert/index_search.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<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="level">
|
||||||
|
<option value="">{:lang('请选择证书等级')}</option>
|
||||||
|
{foreach $levels as $key => $level}{if ($key eq input('get.type'))}
|
||||||
|
<option selected value="{$key}">{$level.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$level.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">{:lang('有效期截至时间')}</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input data-date-range name="valid_before" value="{$get.valid_before|default=''}" placeholder="{:lang('请选择有效期截至时间')}" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<button class="layui-btn layui-btn-primary"><i class="layui-icon"></i> {:lang('搜 索')}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</fieldset>
|
120
app/xzgl/view/staff_cert/form.html
Normal file
120
app/xzgl/view/staff_cert/form.html
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="UserTable">
|
||||||
|
<div class="layui-card-body padding-left-40">
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">基础信息</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">员工</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="staff_id" lay-search required>
|
||||||
|
<option value="">{:lang('请选择员工')}</option>
|
||||||
|
{foreach $staffs as $staff}{if (isset($vo.staff_id) and $staff.id eq $vo.staff_id)}
|
||||||
|
<option selected value="{$staff.id}">{$staff.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$staff.id}">{$staff.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">证书名称</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="name" required value='{$vo.name|default=""}' placeholder="请填写证书名称">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">注册类别</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="zclb" required>
|
||||||
|
<option value="">{:lang('请选择注册类别')}</option>
|
||||||
|
{foreach $zclb as $key => $item}{if (isset($vo.zclb) and $key eq $vo.zclb)}
|
||||||
|
<option selected value="{$key}">{$item.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$item.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">注册专业</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="zczy" required>
|
||||||
|
<option value="">{:lang('请选择注册专业')}</option>
|
||||||
|
{foreach $zczy as $key => $item}{if (isset($vo.zczy) and $key eq $vo.zczy)}
|
||||||
|
<option selected value="{$key}">{$item.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$item.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">证书编号</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="zsbh" required value='{$vo.zsbh|default=""}' placeholder="请填写证书编号">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">印章编号</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="yzbh" required value='{$vo.yzbh|default=""}' placeholder="请填写印章编号">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">职称证书</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="zczs" required value='{$vo.zczs|default=""}' placeholder="请填写职称证书">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">证书级别</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="zsjb" required>
|
||||||
|
<option value="">{:lang('请选择证书级别')}</option>
|
||||||
|
{foreach $zsjb as $key => $item}{if (isset($vo.zsjb) and $key eq $vo.zsjb)}
|
||||||
|
<option selected value="{$key}">{$item.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$item.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">有效期截至</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input lay-date type="text" class="layui-input" name="valid_before" value='{$vo.valid_before|default=""}' placeholder="请选择有效期截至时间">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">备注</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">备注</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<textarea class="layui-textarea" name="content" value='{$vo.content|default=""}' placeholder="请输入备注">
|
||||||
|
</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</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>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
layui.use(['form', 'laydate'], function () {
|
||||||
|
const Form = layui.form;
|
||||||
|
const Laydate = layui.laydate;
|
||||||
|
$('input[lay-date]').each(function (index, element) {
|
||||||
|
Laydate.render({
|
||||||
|
elem: element,
|
||||||
|
trigger: 'click'
|
||||||
|
});
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
53
app/xzgl/view/staff_cert/index.html
Normal file
53
app/xzgl/view/staff_cert/index.html
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{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" style="flex: 4">
|
||||||
|
{include file="staff_cert/index_search"}
|
||||||
|
<table class="layui-hide" id="CertTable" data-url="{:request()->url()}" data-target-search="form.form-search" lay-filter="CertTable"></table>
|
||||||
|
</div>
|
||||||
|
<script type="text/html" id="ToolbarTpl">
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
<!--{if auth("edit")}-->
|
||||||
|
<a class="layui-btn layui-btn-xs" data-modal="{:url('edit')}?id={{d.id}}" data-title="编辑员工证书">{:lang('编 辑')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
<!--{if auth("remove")}-->
|
||||||
|
<a class="layui-btn layui-btn-danger layui-btn-xs" data-confirm="{:lang('确定要删除该员工证书吗?')}" data-action="{:url('remove')}" data-value="id#{{d.id}}">{:lang('删除证书')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#CertTable').layTable({
|
||||||
|
height: 'full',
|
||||||
|
sort: ['create_at', 'desc'],
|
||||||
|
cols: [[
|
||||||
|
{ field: 'staff_name', title: '员工', width: 160 },
|
||||||
|
{ field: 'name', title: '员工证书名称', width: 200 },
|
||||||
|
{ field: 'zclb_name', title: '注册类别' },
|
||||||
|
{ field: 'zczy_name', title: '注册专业' },
|
||||||
|
{ field: 'zsbh', title: '证书编号' },
|
||||||
|
{ field: 'yzbh', title: '印章编号' },
|
||||||
|
{ field: 'zczs', title: '职称证书' },
|
||||||
|
{ field: 'zsjb_name', title: '证书级别' },
|
||||||
|
{ field: 'valid_before', title: '有效期截至', width: 200, sort: true },
|
||||||
|
{ field: 'create_at', title: '创建时间', width: 200, sort: true },
|
||||||
|
{ 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(CertTable)', function (obj) {
|
||||||
|
console.log(obj);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{/block}
|
61
app/xzgl/view/staff_cert/index_search.html
Normal file
61
app/xzgl/view/staff_cert/index_search.html
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<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="level">
|
||||||
|
<option value="">{:lang('请选择注册类别')}</option>
|
||||||
|
{foreach $zclb as $key => $item}{if ($key eq input('get.zclb'))}
|
||||||
|
<option selected value="{$key}">{$item.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$item.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">{:lang('注册专业')}</label>
|
||||||
|
<label class="layui-input-inline">
|
||||||
|
<select name="level">
|
||||||
|
<option value="">{:lang('请选择注册专业')}</option>
|
||||||
|
{foreach $zczy as $key => $item}{if ($key eq input('get.zczy'))}
|
||||||
|
<option selected value="{$key}">{$item.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$item.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">{:lang('证书级别')}</label>
|
||||||
|
<label class="layui-input-inline">
|
||||||
|
<select name="level">
|
||||||
|
<option value="">{:lang('请选择证书级别')}</option>
|
||||||
|
{foreach $zsjb as $key => $item}{if ($key eq input('get.zsjb'))}
|
||||||
|
<option selected value="{$key}">{$item.name}</option>
|
||||||
|
{else}
|
||||||
|
<option value="{$key}">{$item.name}</option>
|
||||||
|
{/if}{/foreach}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">{:lang('有效期截至时间')}</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input data-date-range name="valid_before" value="{$get.valid_before|default=''}" placeholder="{:lang('请选择有效期截至时间')}" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<button class="layui-btn layui-btn-primary"><i class="layui-icon"></i> {:lang('搜 索')}</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</fieldset>
|
110
app/xzgl/view/user/form.html
Normal file
110
app/xzgl/view/user/form.html
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="UserTable">
|
||||||
|
<div class="layui-card-body padding-left-40">
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">职位信息</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">职位</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input maxlength="100" class="layui-input" name="zw" value='{$vo.zw|default=""}' placeholder="请输入职位名称">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label" for="rz_date">入职时间</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input lay-date type="text" class="layui-input" id="rz_date" name="rz_date" value='{$vo.rz_date|default=""}' placeholder="请选择入职时间">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label" for="zz_date">转正时间</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input lay-date type="text" class="layui-input" id="zz_date" name="zz_date" value='{$vo.zz_date|default=""}' placeholder="请选择转正时间">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label" for="lz_date">离职时间</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input lay-date type="text" class="layui-input" id="lz_date" name="lz_date" value='{$vo.lz_date|default=""}' placeholder="请选择离职时间">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">基础信息</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label" for="birthday">生日</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input lay-date type="text" class="layui-input" id="birthday" name="birthday" value='{$vo.birthday|default=""}' placeholder="请选择生日">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">学历</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="xl" value='{$vo.xl|default=""}' placeholder="请输入学历">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">民族</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="mz" value='{$vo.mz|default=""}' placeholder="请输入民族">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">籍贯</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="jg" value='{$vo.jg|default=""}' placeholder="请输入籍贯">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">婚姻</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="hy" value='{$vo.hy|default=""}' placeholder="请输入婚姻状况">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">银行信息</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">开户行</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="yh_khh" value='{$vo.yh_khh|default=""}' placeholder="请输入开户行">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">卡号</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" class="layui-input" name="yh_no" value='{$vo.yh_no|default=""}' placeholder="请输入银行卡号">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="layui-bg-gray">
|
||||||
|
<legend><b class="layui-badge think-bg-violet">备注</b></legend>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">备注</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<textarea class="layui-textarea" name="bz" value='{$vo.bz|default=""}' placeholder="请输入备注">
|
||||||
|
</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</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>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
layui.use(['form', 'laydate'], function () {
|
||||||
|
const Form = layui.form;
|
||||||
|
const Laydate = layui.laydate;
|
||||||
|
$('input[lay-date]').each(function (index, element) {
|
||||||
|
Laydate.render({
|
||||||
|
elem: element,
|
||||||
|
trigger: 'click'
|
||||||
|
});
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
46
app/xzgl/view/user/index.html
Normal file
46
app/xzgl/view/user/index.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{extend name='table'}
|
||||||
|
|
||||||
|
{block name="button"}
|
||||||
|
{/block}
|
||||||
|
|
||||||
|
{block name="content"}
|
||||||
|
<div class="think-box-shadow" style="flex: 4">
|
||||||
|
{include file="user/index_search"}
|
||||||
|
<table class="layui-hide" id="UserTable" data-url="{:request()->url()}" data-target-search="form.form-search" lay-filter="UserTable"></table>
|
||||||
|
</div>
|
||||||
|
<script type="text/html" id="ToolbarTpl">
|
||||||
|
<div class="layui-btn-container">
|
||||||
|
<!--{if auth("edit")}-->
|
||||||
|
<a class="layui-btn layui-btn-xs" data-modal="{:url('edit')}?id={{d.staff_id}}" data-title="编辑用户档案">{:lang('编 辑')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
<!--{if auth("clear")}-->
|
||||||
|
<a class="layui-btn layui-btn-danger layui-btn-xs" data-confirm="{:lang('确定要清除该员工档案吗?')}" data-action="{:url('clear')}" data-value="id#{{d.staff_id}}">{:lang('清除档案')}</a>
|
||||||
|
<!--{/if}-->
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#UserTable').layTable({
|
||||||
|
height: 'full',
|
||||||
|
sort: ['create_at', 'desc'],
|
||||||
|
cols: [[
|
||||||
|
{ field: 'staff_id', title: '序号', width: 80 },
|
||||||
|
{ field: 'name', title: '名称', width: 200 },
|
||||||
|
{ field: 'phone', title: '手机号' },
|
||||||
|
{ field: 'email', title: '邮箱' },
|
||||||
|
{ field: 'bz', title: '备注' },
|
||||||
|
{ field: 'create_at', title: '档案创建时间', width: 200, sort: true },
|
||||||
|
{ 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(UserTable)', function (obj) {
|
||||||
|
console.log(obj);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{/block}
|
@ -2,25 +2,22 @@
|
|||||||
<legend>{:lang('条件搜索')}</legend>
|
<legend>{:lang('条件搜索')}</legend>
|
||||||
<form class="layui-form layui-form-pane form-search" action="{:request()->url()}" onsubmit="return false" method="post" autocomplete="off">
|
<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">
|
<div class="layui-form-item layui-inline">
|
||||||
<label class="layui-form-label">{:lang('部门名')}</label>
|
<label class="layui-form-label">{:lang('内容')}</label>
|
||||||
<label class="layui-input-inline">
|
<label class="layui-input-inline">
|
||||||
<input name="name" value="{$get.name|default=''}" placeholder="{:lang('请输入部门名')}" class="layui-input">
|
<input name="name" value="{$get.name|default=''}" placeholder="{:lang('内容')}" class="layui-input">
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item layui-inline">
|
<div class="layui-form-item layui-inline">
|
||||||
<label class="layui-form-label">{:lang('启用状态')}</label>
|
<label class="layui-form-label">{:lang('通知类型')}</label>
|
||||||
<label class="layui-input-inline">
|
<label class="layui-input-inline">
|
||||||
<select name="status">
|
<select name="status">
|
||||||
<option value="">{:lang('请选择启用状态')}</option>
|
<option value="">{:lang('请选择通知类型')}</option>
|
||||||
<option value="1">{:lang('已启用')}</option>
|
|
||||||
<option value="0">{:lang('已禁用')}</option>
|
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item layui-inline">
|
<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>
|
<button class="layui-btn layui-btn-primary"><i class="layui-icon"></i> {:lang('搜 索')}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
@ -20,15 +20,30 @@
|
|||||||
"zoujingli/think-install": true
|
"zoujingli/think-install": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"repositories": {
|
"repositories": [
|
||||||
"think-plug-staff": {
|
{
|
||||||
|
"type": "path",
|
||||||
|
"url": "plugs/think-plugs-notice"
|
||||||
|
},
|
||||||
|
{
|
||||||
"type": "path",
|
"type": "path",
|
||||||
"url": "plugs/think-plugs-staff"
|
"url": "plugs/think-plugs-staff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "path",
|
||||||
|
"url": "plugs/think-plugs-recorder"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "path",
|
||||||
|
"url": "plugs/custom-app-plug"
|
||||||
}
|
}
|
||||||
},
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.3",
|
"php": ">=8.3",
|
||||||
"zoujingli/think-plugs-admin": "^1.0",
|
"zoujingli/think-plugs-admin": "^1.0",
|
||||||
"q792602257/think-plugs-staff": "dev-master"
|
"q792602257/custom-app-plug": "dev-master",
|
||||||
|
"q792602257/think-plugs-notice": "dev-master",
|
||||||
|
"q792602257/think-plugs-staff": "dev-master",
|
||||||
|
"q792602257/think-plugs-recorder": "dev-master"
|
||||||
}
|
}
|
||||||
}
|
}
|
26
plugs/custom-app-plug/composer.json
Normal file
26
plugs/custom-app-plug/composer.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "q792602257/custom-app-plug",
|
||||||
|
"description": "ThinkAdmin Plugin: Add Custom Plugs Located in app",
|
||||||
|
"version": "dev-master",
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"license": "WTFPL",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Jerry Yan",
|
||||||
|
"email": "792602257@qq.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extra": {
|
||||||
|
"config": {
|
||||||
|
"type": "module",
|
||||||
|
"name": "app插件",
|
||||||
|
"platforms": ["h5web"],
|
||||||
|
"description": "app目录下的插件定义"
|
||||||
|
},
|
||||||
|
"think": {
|
||||||
|
"services": [
|
||||||
|
"app\\xzgl\\Service"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
plugs/think-plugs-notice
Submodule
1
plugs/think-plugs-notice
Submodule
Submodule plugs/think-plugs-notice added at 87c27c94b9
1
plugs/think-plugs-recorder
Submodule
1
plugs/think-plugs-recorder
Submodule
Submodule plugs/think-plugs-recorder added at 814f29a9bd
1
plugs/think-plugs-staff
Submodule
1
plugs/think-plugs-staff
Submodule
Submodule plugs/think-plugs-staff added at 4b0484bb03
@ -1,39 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "q792602257/think-plugs-staff",
|
|
||||||
"description": "ThinkAdmin Plugin: Staff with Dept Support",
|
|
||||||
"version": "dev-master",
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"license": "WTFPL",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Jerry Yan",
|
|
||||||
"email": "792602257@qq.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"extra": {
|
|
||||||
"config": {
|
|
||||||
"type": "module",
|
|
||||||
"name": "员工及组织架构模块",
|
|
||||||
"platforms": ["h5web"],
|
|
||||||
"description": "员工及组织架构模块"
|
|
||||||
},
|
|
||||||
"plugin": {
|
|
||||||
"copy": {
|
|
||||||
"stc/database": "database/migrations"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"think": {
|
|
||||||
"services": [
|
|
||||||
"jerryyan\\staff\\Service"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"jerryyan\\staff\\": "src"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace jerryyan\staff;
|
|
||||||
|
|
||||||
use think\admin\Plugin;
|
|
||||||
|
|
||||||
class Service extends Plugin
|
|
||||||
{
|
|
||||||
protected $appCode = 'staff';
|
|
||||||
protected $appName = '部门员工';
|
|
||||||
public static function menu(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'name' => '组织架构',
|
|
||||||
'subs' => [
|
|
||||||
['name' => '员工管理', 'icon' => 'layui-icon layui-icon-group', 'url' => 'staff/user/index'],
|
|
||||||
['name' => '部门管理', 'icon' => 'layui-icon layui-icon-cols', 'url' => 'staff/dept/index'],
|
|
||||||
// ['name' => '角色管理', 'icon' => 'layui-icon layui-icon-auz', 'url' => 'staff/role/index'],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,120 +0,0 @@
|
|||||||
<?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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,151 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace jerryyan\staff\controller;
|
|
||||||
|
|
||||||
use jerryyan\staff\model\StaffDept;
|
|
||||||
use jerryyan\staff\model\StaffUser;
|
|
||||||
use think\admin\Controller;
|
|
||||||
use think\admin\helper\QueryHelper;
|
|
||||||
use think\admin\model\SystemAuth;
|
|
||||||
use think\admin\model\SystemUser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门员工管理
|
|
||||||
*/
|
|
||||||
class User extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 部门员工管理
|
|
||||||
* @menu true
|
|
||||||
* @auth true
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
return StaffUser::mQuery()->layTable(function () {
|
|
||||||
$this->title = '部门员工';
|
|
||||||
$this->dept = StaffDept::tree();
|
|
||||||
}, static function (QueryHelper $query) {
|
|
||||||
$query->equal('dept_id,status')->like('name');
|
|
||||||
$query->with('dept')->append(['dept_name']);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加员工
|
|
||||||
* @auth true
|
|
||||||
* @menu true
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function add()
|
|
||||||
{
|
|
||||||
StaffUser::mForm('form');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 编辑员工
|
|
||||||
* @auth true
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function edit()
|
|
||||||
{
|
|
||||||
StaffUser::mForm('form');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function _form_filter(array &$data)
|
|
||||||
{
|
|
||||||
if ($this->request->isPost()) {
|
|
||||||
// 检查资料是否完整
|
|
||||||
$this->_vali([
|
|
||||||
'name.require' => '用户名称不能为空!',
|
|
||||||
'phone.require' => '手机号码不能为空!',
|
|
||||||
'phone.mobile' => '手机号码格式错误!',
|
|
||||||
'email.email' => '邮箱地址格式错误!',
|
|
||||||
'dept_id.require' => '部门名称不能为空!',
|
|
||||||
'authorize.require' => '未配置权限!'
|
|
||||||
]);
|
|
||||||
if (!empty($data['password'])) {
|
|
||||||
if (strlen($data['password']) < 6) {
|
|
||||||
$this->error('密码长度不能少于6位!');
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!empty($data['id'])) {
|
|
||||||
$user = SystemUser::mk()->find($data['id']);
|
|
||||||
$data['authorize'] = str2arr($user['authorize'] ?? '');;
|
|
||||||
} else {
|
|
||||||
$data['authorize'] = [];
|
|
||||||
}
|
|
||||||
$data['dept_id'] = $data['dept_id'] ?? '';
|
|
||||||
$this->auths = SystemAuth::items();
|
|
||||||
$this->depts = StaffDept::items();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function _form_result(bool $state, $data)
|
|
||||||
{
|
|
||||||
if ($state) {
|
|
||||||
$user = [];
|
|
||||||
// 检查账号是否重复
|
|
||||||
$map = ['username' => $data['phone'], 'is_deleted' => 0];
|
|
||||||
$systemUser = SystemUser::mk()->where($map)->findOrEmpty();
|
|
||||||
if ($systemUser->isExists() && $systemUser->id != $data['id']) {
|
|
||||||
$this->error("账号已经存在,请使用其它账号!");
|
|
||||||
}
|
|
||||||
$user['id'] = $data['id'];
|
|
||||||
$user['username'] = $data['phone'];
|
|
||||||
if (!empty($data['password'])) {
|
|
||||||
$user['password'] = md5($data['password']);
|
|
||||||
}
|
|
||||||
$user['nickname'] = $data['name'];
|
|
||||||
$user['contact_mail'] = $data['email'];
|
|
||||||
// 处理上传的权限格式
|
|
||||||
$user['authorize'] = arr2str($data['authorize'] ?? []);
|
|
||||||
SystemUser::mk()->save($user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 启用禁用员工
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function state()
|
|
||||||
{
|
|
||||||
StaffUser::mSave($this->_vali([
|
|
||||||
'status.in:0,1' => '状态值范围异常!',
|
|
||||||
'status.require' => '状态值不能为空!',
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function _state_save_result(bool $state, $data)
|
|
||||||
{
|
|
||||||
if ($state) {
|
|
||||||
$systemUser = SystemUser::mk()->findOrEmpty($this->request->post('id'));
|
|
||||||
if ($systemUser->isExists()) {
|
|
||||||
$systemUser->status = $this->request->post('status');
|
|
||||||
$systemUser->save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除员工
|
|
||||||
* @auth true
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function del()
|
|
||||||
{
|
|
||||||
StaffUser::mDelete();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function _del_delete_result(bool $state)
|
|
||||||
{
|
|
||||||
if ($state) {
|
|
||||||
$systemUser = SystemUser::mk()->findOrEmpty($this->request->post('id'));
|
|
||||||
if ($systemUser->isExists()) {
|
|
||||||
$systemUser->is_deleted = 1;
|
|
||||||
$systemUser->save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,77 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace jerryyan\staff\model;
|
|
||||||
|
|
||||||
use think\admin\Model;
|
|
||||||
use think\db\Query;
|
|
||||||
use think\model\relation\HasMany;
|
|
||||||
use think\model\relation\HasOne;
|
|
||||||
|
|
||||||
class StaffDept extends Model
|
|
||||||
{
|
|
||||||
protected $createTime = 'create_at';
|
|
||||||
protected $updateTime = false;
|
|
||||||
protected $oplogName = '部门';
|
|
||||||
protected $oplogType = '部门管理';
|
|
||||||
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
|
|
||||||
{
|
|
||||||
$query->where(['is_deleted' => 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function scopeNotDeleted(Query $query): void
|
|
||||||
{
|
|
||||||
$query->where(['is_deleted' => 0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function items()
|
|
||||||
{
|
|
||||||
return self::mk()->where(['status' => 1])->select();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function staffs(): HasMany
|
|
||||||
{
|
|
||||||
return $this->hasMany(StaffUser::class, 'dept_id', 'id')->where([
|
|
||||||
'status' => 1, 'is_deleted' => 0,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function headman(): HasOne
|
|
||||||
{
|
|
||||||
return $this->hasOne(StaffUser::class, 'id', 'headman_id')->where([
|
|
||||||
'status' => 1, 'is_deleted' => 0,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function children(): HasMany
|
|
||||||
{
|
|
||||||
return $this->hasMany(StaffDept::class, 'pid', 'id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parent(): HasOne
|
|
||||||
{
|
|
||||||
return $this->hasOne(StaffDept::class, 'id', 'pid');
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function tree()
|
|
||||||
{
|
|
||||||
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'] : '无';
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace jerryyan\staff\model;
|
|
||||||
|
|
||||||
use think\admin\Model;
|
|
||||||
use think\db\Query;
|
|
||||||
use think\model\relation\HasOne;
|
|
||||||
|
|
||||||
class StaffUser extends Model
|
|
||||||
{
|
|
||||||
protected $createTime = 'create_at';
|
|
||||||
protected $updateTime = false;
|
|
||||||
protected $oplogName = '部门员工';
|
|
||||||
protected $oplogType = '部门员工管理';
|
|
||||||
protected $globalScope = ['notDeleted'];
|
|
||||||
|
|
||||||
public function scopeDeleted(Query $query): void
|
|
||||||
{
|
|
||||||
$query->where('is_deleted', '=', 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function scopeNotDeleted(Query $query): void
|
|
||||||
{
|
|
||||||
$query->where('is_deleted', '=', 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dept(): HasOne
|
|
||||||
{
|
|
||||||
return $this->hasOne(StaffDept::class, 'id', 'dept_id')->where([
|
|
||||||
'status' => 1, 'is_deleted' => 0,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getDeptNameAttr($value, $data)
|
|
||||||
{
|
|
||||||
return $this->dept ? $this->dept['name'] : '';
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
<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>
|
|
@ -1,26 +0,0 @@
|
|||||||
<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>
|
|
@ -1,89 +0,0 @@
|
|||||||
{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}
|
|
@ -1,91 +0,0 @@
|
|||||||
<form action="{:sysuri()}" method="post" data-auto="true" class="layui-form layui-card" data-table-id="UserTable">
|
|
||||||
<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>
|
|
||||||
<label class="think-radio">
|
|
||||||
{if (0==$vo.gender)}
|
|
||||||
<input type="radio" name="gender" value="0" checked lay-ignore>
|
|
||||||
{else}
|
|
||||||
<input type="radio" name="gender" value="0" lay-ignore>
|
|
||||||
{/if}
|
|
||||||
男
|
|
||||||
</label>
|
|
||||||
<label class="think-radio">
|
|
||||||
{if (1==$vo.gender)}
|
|
||||||
<input type="radio" name="gender" value="1" checked lay-ignore>
|
|
||||||
{else}
|
|
||||||
<input type="radio" name="gender" value="1" lay-ignore>
|
|
||||||
{/if}
|
|
||||||
女
|
|
||||||
</label>
|
|
||||||
</label>
|
|
||||||
<label class="layui-form-item relative block">
|
|
||||||
<span class="help-label"><b>手机号</b>(登录名)</span>
|
|
||||||
<input maxlength="100" class="layui-input" name="phone" value='{$vo.phone|default=""}' required vali-name="手机号" placeholder="请输入手机号">
|
|
||||||
</label>
|
|
||||||
<label class="layui-form-item relative block">
|
|
||||||
<span class="help-label"><b>登录密码</b></span>
|
|
||||||
{notempty name='vo.id'}
|
|
||||||
<input maxlength="100" class="layui-input" name="password" placeholder="不填写则不修改">
|
|
||||||
{else}
|
|
||||||
<input maxlength="100" class="layui-input" name="password" required vali-name="登录密码" placeholder="请输入登录密码">
|
|
||||||
{/notempty}
|
|
||||||
</label>
|
|
||||||
<label class="layui-form-item relative block">
|
|
||||||
<span class="help-label"><b>邮箱</b></span>
|
|
||||||
<input maxlength="100" class="layui-input" name="email" value='{$vo.email|default=""}' placeholder="请输入邮箱">
|
|
||||||
</label>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<fieldset class="layui-bg-gray">
|
|
||||||
<legend><b class="layui-badge think-bg-violet">部门权限</b></legend>
|
|
||||||
{if !empty($depts)}
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<div class="help-label"><b>部门</b></div>
|
|
||||||
<div class="layui-textarea help-checks">
|
|
||||||
{foreach $depts as $dept}
|
|
||||||
<label class="think-radio">
|
|
||||||
{if ($dept.id==$vo.dept_id)}
|
|
||||||
<input type="radio" name="dept_id" value="{$dept.id}" checked lay-ignore>
|
|
||||||
{else}
|
|
||||||
<input type="radio" name="dept_id" value="{$dept.id}" lay-ignore>
|
|
||||||
{/if}
|
|
||||||
{$dept.name}
|
|
||||||
</label>
|
|
||||||
{/foreach}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
{if !empty($auths)}
|
|
||||||
<div class="layui-form-item">
|
|
||||||
<div class="help-label"><b>访问权限</b></div>
|
|
||||||
<div class="layui-textarea help-checks">
|
|
||||||
{foreach $auths as $authorize}
|
|
||||||
<label class="think-checkbox">
|
|
||||||
{if in_array($authorize.id, $vo.authorize)}
|
|
||||||
<input type="checkbox" checked name="authorize[]" value="{$authorize.id}" lay-ignore>{$authorize.title}
|
|
||||||
{else}
|
|
||||||
<input type="checkbox" name="authorize[]" value="{$authorize.id}" lay-ignore>{$authorize.title}
|
|
||||||
{/if}
|
|
||||||
</label>
|
|
||||||
{/foreach}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</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>
|
|
@ -1,131 +0,0 @@
|
|||||||
{extend name='table'}
|
|
||||||
|
|
||||||
{block name="button"}
|
|
||||||
<!--{if auth("admin/user/index")}-->
|
|
||||||
<button data-open='{:url("admin/user/index")}' class='layui-btn layui-btn-sm layui-btn-danger'>{:lang('可登录用户管理')}</button>
|
|
||||||
<!--{/if}-->
|
|
||||||
<!--{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 style="display: flex; flex-direction: row; background: white; gap: 20px">
|
|
||||||
<div class="think-box-shadow" style="flex: 1">
|
|
||||||
<!-- 部门管理 -->
|
|
||||||
<table class="layui-hide" id="DeptTreeTable" lay-filter="DeptTreeTable"></table>
|
|
||||||
</div>
|
|
||||||
<div class="think-box-shadow" style="flex: 4">
|
|
||||||
{include file="user/index_search"}
|
|
||||||
<table class="layui-hide" id="UserTable" data-url="{:request()->url()}" data-target-search="form.form-search" lay-filter="UserTable"></table>
|
|
||||||
</div>
|
|
||||||
</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="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>
|
|
||||||
const deptJson = JSON.parse('{:json_encode($dept)}');
|
|
||||||
</script>
|
|
||||||
<script>
|
|
||||||
$(function () {
|
|
||||||
$('#UserTable').layTable({
|
|
||||||
elem: '',
|
|
||||||
height: 'full',
|
|
||||||
cols: [[
|
|
||||||
{ type: 'checkbox', fixed: 'left' },
|
|
||||||
{ field: 'dept_name', title: '所属部门' },
|
|
||||||
{ field: 'name', title: '用户名' },
|
|
||||||
{ field: 'gender', title: '性别', templet: function (d) {
|
|
||||||
return d.gender === 0 ? '男' : d.gender === 1 ? '女' : '';
|
|
||||||
} },
|
|
||||||
{ field: 'phone', title: '手机号' },
|
|
||||||
{ field: 'email', title: '邮箱' },
|
|
||||||
{ field: '', title: '部门负责人', templet: function (d) {
|
|
||||||
if (d.dept) {
|
|
||||||
if (d.dept.headman_id === d.id) {
|
|
||||||
return '是'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return '否';
|
|
||||||
} },
|
|
||||||
{field: 'status', title: '状态', align: 'center', minWidth: 110, templet: '#StatusSwitchTpl'},
|
|
||||||
{ fixed: "right", title: "操作", width: 200, align: "center", toolbar: "#ToolbarTpl"}
|
|
||||||
]],
|
|
||||||
page: true
|
|
||||||
})
|
|
||||||
layui.use(['treeTable', 'form', 'table'], function () {
|
|
||||||
const TreeTable = layui.treeTable;
|
|
||||||
const Table = layui.table;
|
|
||||||
const Form = layui.form;
|
|
||||||
TreeTable.render({
|
|
||||||
elem: '#DeptTreeTable',
|
|
||||||
height: 'full',
|
|
||||||
data: deptJson,
|
|
||||||
tree: {
|
|
||||||
customName: {},
|
|
||||||
data: {
|
|
||||||
isSimpleData: false,
|
|
||||||
},
|
|
||||||
view: {
|
|
||||||
iconClose: 'layui-icon layui-icon-folder',
|
|
||||||
iconOpen: 'layui-icon layui-icon-folder-open',
|
|
||||||
iconLeaf: 'layui-icon layui-icon-file',
|
|
||||||
dblClickExpand: false,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
cols: [[
|
|
||||||
{ field: 'name', title: '部门名称' },
|
|
||||||
]],
|
|
||||||
page: false,
|
|
||||||
})
|
|
||||||
TreeTable.on('rowDouble(DeptTreeTable)', function (obj) {
|
|
||||||
console.log(obj)
|
|
||||||
const data = obj.data;
|
|
||||||
$('input[name="dept_id"]').val(data.id)
|
|
||||||
$('form.form-search').trigger('submit');
|
|
||||||
const nodes = TreeTable.getNodesByFilter('DeptTreeTable', function (item) {
|
|
||||||
return item.LAY_CHECKED === true
|
|
||||||
})
|
|
||||||
nodes.forEach(node => {
|
|
||||||
TreeTable.updateNode('DeptTreeTable', node.dataIndex, {
|
|
||||||
LAY_CHECKED: false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
console.log(nodes)
|
|
||||||
TreeTable.updateNode('DeptTreeTable', obj.dataIndex, {
|
|
||||||
LAY_CHECKED: true
|
|
||||||
})
|
|
||||||
})
|
|
||||||
Table.on('tool(UserTable)', 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 () {
|
|
||||||
$('#UserTable').trigger('reload');
|
|
||||||
}); else {
|
|
||||||
$('#UserTable').trigger('reload')
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}, false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
{/block}
|
|
@ -1,27 +0,0 @@
|
|||||||
<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>
|
|
@ -1,89 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
|
|
||||||
use jerryyan\staff\Service;
|
|
||||||
use think\admin\extend\PhinxExtend;
|
|
||||||
use think\migration\Migrator;
|
|
||||||
|
|
||||||
@set_time_limit(0);
|
|
||||||
@ini_set('memory_limit', -1);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 系统模块数据
|
|
||||||
*/
|
|
||||||
class InstallStaffDb extends Migrator
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取脚本名称
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return 'StaffPlugin';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建数据库
|
|
||||||
*/
|
|
||||||
public function change()
|
|
||||||
{
|
|
||||||
$this->_create_staff_dept();
|
|
||||||
$this->_create_staff_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建数据对象
|
|
||||||
* @class StaffDept
|
|
||||||
* @table staff_dept
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private function _create_staff_dept()
|
|
||||||
{
|
|
||||||
// 创建数据表对象
|
|
||||||
$table = $this->table('staff_dept', [
|
|
||||||
'engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => '部门员工',
|
|
||||||
]);
|
|
||||||
// 创建或更新数据表
|
|
||||||
PhinxExtend::upgrade($table, [
|
|
||||||
['name', 'string', ['limit' => 255, 'default' => NULL, 'null' => false, 'comment' => '部门名称']],
|
|
||||||
['pid', 'integer', ['limit' => 11, 'default' => 0, 'null' => false, 'comment' => '上级部门ID']],
|
|
||||||
['headman_id', 'integer', ['default' => NULL, 'null' => true, 'comment' => '领导人ID']],
|
|
||||||
['sort', 'integer', ['limit' => 9, 'default' => 100, 'null' => false, 'comment' => '排序权重']],
|
|
||||||
['status', 'integer', ['limit' => 11, 'default' => 1, 'null' => false, 'comment' => '状态(0禁用,1启用)']],
|
|
||||||
['is_deleted', 'integer', ['limit' => 11, 'default' => 0, 'null' => false, 'comment' => '删除(1删除,0未删)']],
|
|
||||||
['create_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP', 'null' => true, 'comment' => '创建时间']],
|
|
||||||
], [
|
|
||||||
|
|
||||||
], false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建数据对象
|
|
||||||
* @class StaffUser
|
|
||||||
* @table staff_user
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private function _create_staff_user()
|
|
||||||
{
|
|
||||||
// 创建数据表对象
|
|
||||||
$table = $this->table('staff_user', [
|
|
||||||
'engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => '部门员工',
|
|
||||||
]);
|
|
||||||
// 创建或更新数据表
|
|
||||||
PhinxExtend::upgrade($table, [
|
|
||||||
['name', 'string', ['limit' => 255, 'default' => NULL, 'null' => false, 'comment' => '员工名称']],
|
|
||||||
['gender', 'tinyinteger', ['limit' => 4, 'default' => 0, 'null' => true, 'comment' => '性别(0男,1女)']],
|
|
||||||
['phone', 'string', ['limit' => 255, 'default' => NULL, 'null' => false, 'comment' => '手机号']],
|
|
||||||
['email', 'string', ['limit' => 255, 'default' => NULL, 'null' => true, 'comment' => '电子邮箱']],
|
|
||||||
['dept_id', 'integer', ['limit' => 11, 'default' => 0, 'null' => true, 'comment' => '所属部门']],
|
|
||||||
['status', 'integer', ['default' => '1', 'null' => false, 'comment' => '状态(0禁用,1启用)']],
|
|
||||||
['is_deleted', 'integer', ['default' => '0', 'null' => false, 'comment' => '删除(1删除,0未删)']],
|
|
||||||
['create_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP', 'null' => true, 'comment' => '创建时间']],
|
|
||||||
], [
|
|
||||||
|
|
||||||
], false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
|
|
||||||
use jerryyan\staff\Service;
|
|
||||||
use think\admin\extend\PhinxExtend;
|
|
||||||
use think\migration\Migrator;
|
|
||||||
|
|
||||||
@set_time_limit(0);
|
|
||||||
@ini_set('memory_limit', -1);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 系统模块数据
|
|
||||||
*/
|
|
||||||
class InstallStaffMenu extends Migrator
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取脚本名称
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return 'StaffPlugin';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建数据库
|
|
||||||
*/
|
|
||||||
public function change()
|
|
||||||
{
|
|
||||||
$this->insertMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化系统菜单
|
|
||||||
* @return void
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
private function insertMenu()
|
|
||||||
{
|
|
||||||
|
|
||||||
// 初始化菜单数据
|
|
||||||
PhinxExtend::write2menu([
|
|
||||||
[
|
|
||||||
'name' => '组织架构',
|
|
||||||
'sort' => '101',
|
|
||||||
'subs' => Service::menu(),
|
|
||||||
],
|
|
||||||
], [
|
|
||||||
'url|node' => 'staff/user/index'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user