first commit

This commit is contained in:
2026-07-23 09:40:36 +08:00
commit 090abf48fa
989 changed files with 145728 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
use think\facade\Db;
+82
View File
@@ -0,0 +1,82 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\api\BaseController;
use app\user\model\Department as DepartmentModel;
use think\facade\Db;
class Api extends BaseController
{
//删除档案记录相关
public function del_profiles()
{
$id = get_params("id");
if (Db::name('AdminProfiles')->where('id', $id)->update(['delete_time'=>time()]) !== false) {
return to_assign(0, "删除成功");
} else {
return to_assign(1, "删除失败");
}
}
//一键调部门
public function change_check()
{
$id = get_params("id");
$data['id'] = $id;
$data['connect_time'] = time();
$data['status'] = 2;
$detail = Db::name('DepartmentChange')->where('id', $id)->find();
if (Db::name('DepartmentChange')->update($data) !== false) {
Db::name('Admin')->where('id', $detail['uid'])->update(['did' => $detail['to_did']]);
Db::name('DepartmentAdmin')->where(['admin_id'=>$detail['uid'],'department_id'=>$detail['to_did']])->delete();
$info = Db::name('Admin')->where('id', $detail['uid'])->find();
$model = new DepartmentModel();
$auth_dids = $model->get_auth_departments($info);
$son_dids = $model->get_son_departments($info);
Db::name('Admin')->where('id',$detail['uid'])->update(['auth_dids'=>$auth_dids,'son_dids'=>$son_dids]);
return to_assign(0, "操作成功");
} else {
return to_assign(1, "操作失败");
}
}
//一键交接资料
public function leave_check()
{
$id = get_params("id");
$data['id'] = $id;
$data['connect_time'] = time();
$data['status'] = 2;
$detail = Db::name('PersonalQuit')->where('id', $id)->find();
$uid = $detail['uid'];
$connect_uid = $detail['connect_id'];
if (Db::name('PersonalQuit')->update($data) !== false) {
//项目负责人
Db::name('Project')->where([['director_uid','=',$uid],['status','<',3]])->update(['director_uid' => $connect_uid]);
//任务负责人
Db::name('ProjectTask')->where([['director_uid','=',$uid],['status','<',3]])->update(['director_uid' => $connect_uid]);
//客户所属人
$did = Db::name('Admin')->where('id', $connect_uid)->value('did');
Db::name('Customer')->where([['belong_uid','=',$uid]])->update(['belong_uid' => $connect_uid,'belong_did'=>$did]);
//合同
Db::name('Contract')->where([['admin_id','=',$uid],['check_status','<',3]])->update(['admin_id' => $connect_uid]);
Db::name('Admin')->where('id', $uid)->update(['status' => 2]);
add_log('hand', $id);
return to_assign(0, "交接成功");
} else {
return to_assign(1, "交接失败");
}
}
}
+93
View File
@@ -0,0 +1,93 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\validate\BasicUserCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Basic extends BaseController
{
public function datalist()
{
if (request()->isAjax()) {
$param = get_params();
$where=[];
if (!empty($param['types'])) {
$where[] = ['types', '=', $param['types']];
}
$list = Db::name('BasicUser')->where($where)->order('create_time asc')->select();
return to_assign(0, '', $list);
} else {
return view();
}
}
//新建编辑
public function add()
{
if (request()->isAjax()) {
$param = get_params();
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(BasicUserCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
$res = Db::name('BasicUser')->strict(false)->field('title,types,id,update_time')->update($param);
if ($res) {
add_log('edit', $param['id'], $param);
}
return to_assign();
} else {
try {
validate(BasicUserCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
$insertId = Db::name('BasicUser')->strict(false)->field('title,types,id,create_time')->insertGetId($param);
if ($insertId) {
add_log('add', $insertId, $param);
}
return to_assign();
}
}
}
//设置
public function set()
{
$param = get_params();
$res = Db::name('BasicUser')->strict(false)->field('id,status')->update($param);
if ($res) {
if($param['status'] == 0){
add_log('disable', $param['id'], $param);
}
else if($param['status'] == 1){
add_log('recovery', $param['id'], $param);
}
return to_assign();
}
else{
return to_assign(0, '操作失败');
}
}
}
+122
View File
@@ -0,0 +1,122 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Blacklist as BlacklistModel;
use app\user\validate\BlacklistValidate;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Blacklist extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new BlacklistModel();
}
/**
* 数据列表
*/
public function datalist()
{
$param = get_params();
if (request()->isAjax()) {
$where=[];
$whereOr=[];
$where[]=['delete_time','=',0];
if (!empty($param['keywords'])) {
$where[] = ['id|title', 'like', '%' . $param['keywords'] . '%'];
}
$list = $this->model->datalist($param,$where,$whereOr);
return table_assign(0, '', $list);
}
else{
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(BlacklistValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->edit($param);
} else {
try {
validate(BlacklistValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['admin_id'] = $this->uid;
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id>0) {
$detail = $this->model->getById($id);
View::assign('detail', $detail);
}
return view();
}
}
/**
* 查看
*/
public function view($id)
{
$detail = $this->model->getById($id);
if (!empty($detail)) {
View::assign('detail', $detail);
return view();
}
else{
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
}
}
/**
* 删除
*/
public function del()
{
if (request()->isDelete()) {
$param = get_params();
$id = isset($param['id']) ? $param['id'] : 0;
$this->model->delById($id);
} else {
return to_assign(1, "错误的请求");
}
}
}
+136
View File
@@ -0,0 +1,136 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Care as CareModel;
use app\user\validate\CareValidate;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Care extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new CareModel();
}
/**
* 数据列表
*/
public function datalist()
{
if (request()->isAjax()) {
$param = get_params();
$where=[];
$where[]=['delete_time','=',0];
if (!empty($param['keywords'])) {
$where[] = ['id|thing|remark', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['status'])) {
$where[] = ['status', '=', $param['status']];
}
if (!empty($param['care_cate'])) {
$where[] = ['care_cate', '=', $param['care_cate']];
}
if (!empty($param['uid'])) {
$where[] = ['uid', '=', $param['uid']];
}
if (!empty($param['diff_time'])) {
$diff_time =explode('~', $param['diff_time']);
$where[] = ['care_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1]))]];
}
$list = $this->model->datalist($where, $param);
return table_assign(0, '', $list);
}
else{
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$param['care_time'] = isset($param['care_time']) ? strtotime($param['care_time']) : 0;
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(CareValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->edit($param);
} else {
try {
validate(CareValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['admin_id'] = $this->uid;
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id>0) {
$detail = $this->model->getById($id);
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
View::assign('detail', $detail);
}
View::assign('id', $id);
return view();
}
}
/**
* 查看
*/
public function view($id)
{
$detail = $this->model->getById($id);
if (!empty($detail)) {
$detail['cate'] = Db::name('CareCate')->where('id',$detail['care_cate'])->value('title');
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
$detail['admin_name'] = Db::name('Admin')->where('id',$detail['admin_id'])->value('name');
View::assign('detail', $detail);
return view();
}
else{
throw new \think\exception\HttpException(404, '找不到页面');
}
}
/**
* 删除
*/
public function del()
{
$param = get_params();
$id = isset($param['id']) ? $param['id'] : 0;
$this->model->delById($id);
}
}
+105
View File
@@ -0,0 +1,105 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\CareCate as CareCateModel;
use app\user\validate\CareCateValidate;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Carecate extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new CareCateModel();
}
/**
* 数据列表
*/
public function datalist()
{
if (request()->isAjax()) {
$list = $this->model->select();
return to_assign(0, '', $list);
}
else{
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(CareCateValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->edit($param);
} else {
try {
validate(CareCateValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id>0) {
$detail = $this->model->getCateById($id);
}
return view();
}
}
/**
* 设置
*/
public function set()
{
$param = get_params();
$res = $this->model->strict(false)->field('id,status')->update($param);
if ($res) {
if($param['status'] == 0){
add_log('disable', $param['id'], $param);
}
else if($param['status'] == 1){
add_log('recovery', $param['id'], $param);
}
return to_assign();
}
else{
return to_assign(0, '操作失败');
}
}
}
+116
View File
@@ -0,0 +1,116 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Department as DepartmentModel;
use app\user\validate\DepartmentCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Department extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$list = Db::name('Department')->order('sort desc,id asc')->select()->toArray();
foreach ($list as $key => &$v) {
$admin_array = Db::name('Admin')->where([['id','in',$v['leader_ids']]])->column('name');
$v['leader'] = split_array_field($admin_array);
}
$res = generateTree($list);
return to_assign(0, '', $res);
} else {
return view();
}
}
//添加部门
public function add()
{
$param = get_params();
if (request()->isAjax()) {
if ($param['id'] > 0) {
try {
validate(DepartmentCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['update_time'] = time();
$department_array = get_department_son($param['id']);
if (in_array($param['pid'], $department_array)) {
return to_assign(1, '上级部门不能是该部门本身或其下属部门');
} else {
Db::name('Department')->strict(false)->field(true)->update($param);
$model = new DepartmentModel();
$model->update_auth_dids_son_dids();
add_log('edit', $param['id'], $param);
return to_assign();
}
} else {
try {
validate(DepartmentCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$did = Db::name('Department')->strict(false)->field(true)->insertGetId($param);
$model = new DepartmentModel();
$model->update_auth_dids_son_dids();
add_log('add', $did, $param);
return to_assign();
}
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$pid = isset($param['pid']) ? $param['pid'] : 0;
$department = set_recursion(get_department());
if ($id > 0) {
$detail = Db::name('Department')->where(['id' => $id])->find();
//获取子部门
$department_array = get_department_son($id);
$users = get_department_employee($id);
View::assign('users', $users);
View::assign('detail', $detail);
}
View::assign('department', $department);
View::assign('pid', $pid);
View::assign('id', $id);
return view();
}
}
//删除
public function delete()
{
$id = get_params("id");
$count = Db::name('Department')->where([['pid', '=', $id], ['status', '>=', 0]])->count();
if ($count > 0) {
return to_assign(1, "该部门下还有子部门,无法删除");
}
$users = Db::name('Admin')->where([['did', '=', $id], ['status', '>=', 0]])->count();
if ($users > 0) {
return to_assign(1, "该部门下还有员工,无法删除");
}
if (Db::name('Department')->delete($id) !== false) {
add_log('delete', $id);
return to_assign(0, "删除部门成功");
} else {
return to_assign(1, "删除失败");
}
}
}
+349
View File
@@ -0,0 +1,349 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Admin as AdminList;
use think\facade\Db;
use think\facade\View;
class Files extends BaseController
{
public function datalist()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
$whereOr = array();
if (!empty($param['keywords'])) {
$where[] = ['a.id|a.username|a.name|a.nickname|a.mobile|a.desc', 'like', '%' . $param['keywords'] . '%'];
}
if (isset($param['status']) && $param['status']!='') {
$where[] = ['a.status', '=', $param['status']];
}
else{
$where[] = ['a.status', '=', 1];
}
if (!empty($param['political'])) {
$where[] = ['a.political', '=', $param['political']];
}
if (!empty($param['position_name'])) {
$where[] = ['a.position_name', '=', $param['position_name']];
}
if (!empty($param['position_rank'])) {
$where[] = ['a.position_rank', '=', $param['position_rank']];
}
if (!empty($param['did'])) {
$admin_array = Db::name('DepartmentAdmin')->where('department_id',$param['did'])->column('admin_id');
$map1=[
['a.id','in',$admin_array],
];
$map2=[
['a.did', '=', $param['did']],
];
$whereOr =[$map1,$map2];
}
$where[] = ['a.id', '>', 1];
$list = AdminList::alias('a')
->with('departments')
->field('a.*,p.title as position,d.title as department')
->join('Department d', 'd.id = a.did','left')
->join('Position p', 'p.id = a.position_id','left')
->where($where)
->where(function ($query) use($whereOr) {
if (!empty($whereOr)){
$query->whereOr($whereOr);
}
})
->paginate(intval($this->pageSize))
->order('a.id desc')
->each(function ($item, $key) {
//遍历次要部门数据
$departments = $item->departments->toArray();
if(empty($departments)){
$item['departments'] = '-';
}
else{
$item['departments'] = split_array_field($departments,'title');
}
if($item['political']==1){
$item['political_str'] = '中共党员';
}
else if($item['political']==2){
$item['political_str'] = '团员';
}
else{
$item['political_str'] = '-';
}
$item['entry_time'] = to_date($item['entry_time'],'Y-m-d');
$item['birthday_str'] = to_date($item['birthday'],'Y-m-d');
$item['last_login_time'] = to_date('Y-m-d H:i', $item->last_login_time);
$item['last_login_ip'] = empty($item['last_login_ip']) ? '-' : $item['last_login_ip'];
return $item;
});
return table_assign(0, '', $list);
} else {
return view();
}
}
//添加
public function add()
{
$param = get_params();
$id = isset($param['id'])?$param['id']:0;
if (request()->isAjax()) {
if($id == 1){
return to_assign(1, '超级管理员信息不支持编辑');
}
$res = Db::name('Admin')->where(['id' => $id])->strict(false)->field(true)->update($param);
if($res!==false){
//教育经历
$edu_start_time = isset($param['edu_start_time']) ? $param['edu_start_time'] : '';
$edu_end_time = isset($param['edu_end_time']) ? $param['edu_end_time'] : '';
$edu_title = isset($param['edu_title']) ? $param['edu_title'] : '';
$edu_speciality = isset($param['edu_speciality']) ? $param['edu_speciality'] : '';
$edu_education = isset($param['edu_education']) ? $param['edu_education'] : '';
$edu_remark = isset($param['edu_remark']) ? $param['edu_remark'] : '';
$edu_id = isset($param['edu_id']) ? $param['edu_id'] : 0;
if ($edu_start_time) {
foreach ($edu_start_time as $key => $value) {
if (!$value && $value !=' ') {
continue;
}
$data = [];
$data['start_time'] = $value;
$data['end_time'] = $edu_end_time[$key];
$data['title'] = $edu_title[$key];
$data['speciality'] = $edu_speciality[$key];
$data['education'] = $edu_education[$key];
$data['remark'] = $edu_remark[$key];
$data['admin_id'] = $id;
$data['types'] = 1;
if($edu_id[$key]>0){
$data['id'] = $edu_id[$key];
$data['update_time'] = time();
Db::name('AdminProfiles')->strict(false)->field(true)->update($data);
}
else{
$data['create_uid'] = $this->uid;
$data['create_time'] = time();
$data['update_time'] = time();
$eid = Db::name('AdminProfiles')->strict(false)->field(true)->insertGetId($data);
}
}
}
//工作经历
$work_start_time = isset($param['work_start_time']) ? $param['work_start_time'] : '';
$work_end_time = isset($param['work_end_time']) ? $param['work_end_time'] : '';
$work_title = isset($param['work_title']) ? $param['work_title'] : '';
$work_position = isset($param['work_position']) ? $param['work_position'] : '';
$work_remark = isset($param['work_remark']) ? $param['work_remark'] : '';
$work_id = isset($param['work_id']) ? $param['work_id'] : 0;
if ($work_start_time) {
foreach ($work_start_time as $key => $value) {
if (!$value && $value !=' ') {
continue;
}
$data = [];
$data['start_time'] = $value;
$data['end_time'] = $work_end_time[$key];
$data['title'] = $work_title[$key];
$data['position'] = $work_position[$key];
$data['remark'] = $work_remark[$key];
$data['admin_id'] = $id;
$data['types'] = 2;
if($work_id[$key]>0){
$data['id'] = $work_id[$key];
$data['update_time'] = time();
Db::name('AdminProfiles')->strict(false)->field(true)->update($data);
}
else{
$data['create_uid'] = $this->uid;
$data['create_time'] = time();
$data['update_time'] = time();
$eid = Db::name('AdminProfiles')->strict(false)->field(true)->insertGetId($data);
}
}
}
//相关证书
$certificate_start_time = isset($param['certificate_start_time']) ? $param['certificate_start_time'] : '';
$certificate_title = isset($param['certificate_title']) ? $param['certificate_title'] : '';
$certificate_authority = isset($param['certificate_authority']) ? $param['certificate_authority'] : '';
$certificate_remark = isset($param['certificate_remark']) ? $param['certificate_remark'] : '';
$certificate_id = isset($param['certificate_id']) ? $param['certificate_id'] : 0;
if ($certificate_start_time) {
foreach ($certificate_start_time as $key => $value) {
if (!$value && $value !=' ') {
continue;
}
$data = [];
$data['start_time'] = $value;
$data['title'] = $certificate_title[$key];
$data['authority'] = $certificate_authority[$key];
$data['remark'] = $certificate_remark[$key];
$data['admin_id'] = $id;
$data['types'] = 3;
if($certificate_id[$key]>0){
$data['id'] = $certificate_id[$key];
$data['update_time'] = time();
Db::name('AdminProfiles')->strict(false)->field(true)->update($data);
}
else{
$data['create_uid'] = $this->uid;
$data['create_time'] = time();
$data['update_time'] = time();
$eid = Db::name('AdminProfiles')->strict(false)->field(true)->insertGetId($data);
}
}
}
//计算机技能
$skills_title = isset($param['skills_title']) ? $param['skills_title'] : '';
$skills_know = isset($param['skills_know']) ? $param['skills_know'] : '';
$skills_remark = isset($param['skills_remark']) ? $param['skills_remark'] : '';
$skills_id = isset($param['skills_id']) ? $param['skills_id'] : 0;
if ($skills_title) {
foreach ($skills_title as $key => $value) {
if (!$value && $value !=' ') {
continue;
}
$data = [];
$data['title'] = $skills_title[$key];
$data['know'] = $skills_know[$key];
$data['remark'] = $skills_remark[$key];
$data['admin_id'] = $id;
$data['types'] = 4;
if($skills_id[$key]>0){
$data['id'] = $skills_id[$key];
$data['update_time'] = time();
Db::name('AdminProfiles')->strict(false)->field(true)->update($data);
}
else{
$data['create_uid'] = $this->uid;
$data['create_time'] = time();
$data['update_time'] = time();
$eid = Db::name('AdminProfiles')->strict(false)->field(true)->insertGetId($data);
}
}
}
//语言能力
$language_title = isset($param['language_title']) ? $param['language_title'] : '';
$language_know = isset($param['language_know']) ? $param['language_know'] : '';
$language_remark = isset($param['language_remark']) ? $param['language_remark'] : '';
$language_id = isset($param['language_id']) ? $param['language_id'] : 0;
if ($language_title) {
foreach ($language_title as $key => $value) {
if (!$value && $value !=' ') {
continue;
}
$data = [];
$data['title'] = $language_title[$key];
$data['know'] = $language_know[$key];
$data['remark'] = $language_remark[$key];
$data['admin_id'] = $id;
$data['types'] = 5;
if($language_id[$key]>0){
$data['id'] = $language_id[$key];
$data['update_time'] = time();
Db::name('AdminProfiles')->strict(false)->field(true)->update($data);
}
else{
$data['create_uid'] = $this->uid;
$data['create_time'] = time();
$data['update_time'] = time();
$eid = Db::name('AdminProfiles')->strict(false)->field(true)->insertGetId($data);
}
}
}
add_log('edit', $id, $param);
return to_assign();
}
else{
return to_assign(1, '提交失败');
}
} else {
$detail = get_admin($id);
$detail['pname'] = Db::name('Admin')->where('id',$detail['pid'])->value('name');
$detail['position'] = Db::name('Position')->where('id',$detail['position_id'])->value('title');
$detail['department'] = Db::name('Department')->where('id',$detail['did'])->value('title');
$department_ids = Db::name('DepartmentAdmin')->where('admin_id',$id)->column('department_id');
$department_names = Db::name('Department')->whereIn('id',$department_ids)->column('title');
$detail['department_names'] = implode(',',$department_names);
if($detail['file_ids'] !=''){
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
$detail['file_array'] = $file_array;
}
$edu = Db::name('AdminProfiles')->where(['types'=>1,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$work = Db::name('AdminProfiles')->where(['types'=>2,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$certificate = Db::name('AdminProfiles')->where(['types'=>3,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$skills = Db::name('AdminProfiles')->where(['types'=>4,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$language = Db::name('AdminProfiles')->where(['types'=>5,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
View::assign('edu', $edu);
View::assign('work', $work);
View::assign('skills', $skills);
View::assign('certificate', $certificate);
View::assign('language', $language);
View::assign('detail', $detail);
View::assign('id', $id);
return view();
}
}
//查看
public function view()
{
$param = get_params();
$id = isset($param['id'])?$param['id']:0;
$detail = get_admin($id);
$detail['pname'] = Db::name('Admin')->where('id',$detail['pid'])->value('name');
$detail['position'] = Db::name('Position')->where('id',$detail['position_id'])->value('title');
$detail['department'] = Db::name('Department')->where('id',$detail['did'])->value('title');
$department_ids = Db::name('DepartmentAdmin')->where('admin_id',$id)->column('department_id');
$department_names = Db::name('Department')->whereIn('id',$department_ids)->column('title');
$detail['department_names'] = implode(',',$department_names);
if($detail['file_ids'] !=''){
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
$detail['file_array'] = $file_array;
}
$edu = Db::name('AdminProfiles')->where(['types'=>1,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$work = Db::name('AdminProfiles')->where(['types'=>2,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$certificate = Db::name('AdminProfiles')->where(['types'=>3,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$skills = Db::name('AdminProfiles')->where(['types'=>4,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
$language = Db::name('AdminProfiles')->where(['types'=>5,'admin_id'=>$id,'delete_time'=>0])->select()->toArray();
View::assign('edu', $edu);
View::assign('work', $work);
View::assign('skills', $skills);
View::assign('certificate', $certificate);
View::assign('language', $language);
View::assign('detail', $detail);
View::assign('id', $id);
return view();
}
}
+290
View File
@@ -0,0 +1,290 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\LaborContract as LaborContractModel;
use app\user\validate\LaborContractValidate;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Laborcontract extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new LaborContractModel();
}
/**
* 数据列表
*/
public function datalist()
{
if (request()->isAjax()) {
$param = get_params();
$where=[];
$where[]=['delete_time','=',0];
if (!empty($param['status'])) {
$where[] = ['status', '=', $param['status']];
}
if (!empty($param['types'])) {
$where[] = ['types', '=', $param['types']];
}
if (!empty($param['cate'])) {
$where[] = ['cate', '=', $param['cate']];
}
if (!empty($param['properties'])) {
$where[] = ['properties', '=', $param['properties']];
}
if (!empty($param['uid'])) {
$where[] = ['uid', '=', $param['uid']];
}
if (!empty($param['diff_time'])) {
$diff_time =explode('~', $param['diff_time']);
$where[] = ['sign_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1]))]];
}
$list = $this->model->datalist($where, $param);
return table_assign(0, '', $list);
}
else{
$this->model::where([['end_time','<',time()],['status','=',1]])->update(['status'=>2]);
View::assign('cate', $this->model::$laborcontract_cate);
View::assign('types', $this->model::$laborcontract_types);
View::assign('properties', $this->model::$laborcontract_properties);
View::assign('status', $this->model::$laborcontract_status);
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$param['sign_time'] = isset($param['sign_time']) ? strtotime($param['sign_time']) : 0;
$param['start_time'] = isset($param['start_time']) ? strtotime($param['start_time']) : 0;
$param['end_time'] = isset($param['end_time']) ? strtotime($param['end_time']) : 0;
$param['trial_end_time'] = isset($param['trial_end_time']) ? strtotime($param['trial_end_time']) : 0;
if($param['end_time']<=$param['start_time']){
return to_assign(1,'合同失效时间需要大于开始时间');
}
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(LaborContractValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
if($param['end_time']<time() && $param['status']==1){
$param['status'] = 2;
}
if($param['end_time']>time() && $param['status']==2){
$param['status'] = 1;
}
$this->model->edit($param);
} else {
try {
validate(LaborContractValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
if($param['end_time']<time()){
$param['status'] = 2;
}
$param['admin_id'] = $this->uid;
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
$cate_id = isset($param['cate_id']) ? $param['cate_id'] : 0;
View::assign('properties', $this->model::$laborcontract_properties);
if ($id>0) {
$detail = $this->model->getById($id);
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
if($detail['file_ids'] !=''){
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
$detail['file_array'] = $file_array;
}
View::assign('detail', $detail);
return view('edit');
}
$cate_title='';
if($cate_id>0){
$cate_title = $this->model::$laborcontract_cate[$cate_id-1]['title'];
}
View::assign('id', $id);
View::assign('cate_id', $cate_id);
View::assign('cate_title', $cate_title);
return view();
}
}
/**
* 续签合同
*/
public function add_renewal()
{
$param = get_params();
if (request()->isAjax()) {
$param['sign_time'] = isset($param['sign_time']) ? strtotime($param['sign_time']) : 0;
$param['start_time'] = isset($param['start_time']) ? strtotime($param['start_time']) : 0;
$param['end_time'] = isset($param['end_time']) ? strtotime($param['end_time']) : 0;
$param['trial_end_time'] = isset($param['trial_end_time']) ? strtotime($param['trial_end_time']) : 0;
if($param['end_time']<=$param['start_time']){
return to_assign(1,'合同失效时间需要大于开始时间');
}
if($param['end_time']<time()){
$param['status'] = 3;
}
try {
validate(LaborContractValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['admin_id'] = $this->uid;
$this->model->add($param);
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if($id>0){
$detail = $this->model->getById($id);
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
View::assign('detail', $detail);
}
View::assign('properties', $this->model::$laborcontract_properties);
return view();
}
}
/**
* 变更合同
*/
public function add_change()
{
$param = get_params();
if (request()->isAjax()) {
$param['sign_time'] = isset($param['sign_time']) ? strtotime($param['sign_time']) : 0;
$param['start_time'] = isset($param['start_time']) ? strtotime($param['start_time']) : 0;
$param['end_time'] = isset($param['end_time']) ? strtotime($param['end_time']) : 0;
$param['trial_end_time'] = isset($param['trial_end_time']) ? strtotime($param['trial_end_time']) : 0;
if($param['end_time']<=$param['start_time']){
return to_assign(1,'合同失效时间需要大于开始时间');
}
if($param['end_time']<time()){
$param['status'] = 3;
}
try {
validate(LaborContractValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['admin_id'] = $this->uid;
$this->model->add($param);
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if($id>0){
$detail = $this->model->getById($id);
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
View::assign('detail', $detail);
}
View::assign('properties', $this->model::$laborcontract_properties);
return view();
}
}
/**
* 查看
*/
public function view($id)
{
$detail = $this->model->getById($id);
if (!empty($detail)) {
$detail['cate_str'] = $this->model::$laborcontract_cate[$detail['cate']-1]['title'];
$detail['types_str'] = $this->model::$laborcontract_types[$detail['types']];
$detail['properties_str'] = $this->model::$laborcontract_properties[$detail['properties']];
$detail['status_str'] = $this->model::$laborcontract_status[$detail['status']];
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
$detail['admin_name'] = Db::name('Admin')->where('id',$detail['admin_id'])->value('name');
if($detail['file_ids'] !=''){
$file_array = Db::name('File')->where('id','in',$detail['file_ids'])->select();
$detail['file_array'] = $file_array;
}
if($detail['renewal_pid'] > 0){
$detail['renewal_ptitle'] = Db::name('LaborContract')->where('id',$detail['renewal_pid'])->value('title');
}
if($detail['change_pid'] > 0){
$detail['change_ptitle'] = Db::name('LaborContract')->where('id',$detail['change_pid'])->value('title');
}
View::assign('detail', $detail);
View::assign('renewal', Db::name('LaborContract')->where(['renewal_pid'=>$id,'delete_time'=>0])->find());
View::assign('change', Db::name('LaborContract')->where(['change_pid'=>$id,'delete_time'=>0])->find());
return view();
}
else{
throw new \think\exception\HttpException(404, '找不到页面');
}
}
/**
* 删除
*/
public function del()
{
$param = get_params();
$id = isset($param['id']) ? $param['id'] : 0;
if (request()->isDelete()) {
$this->model->delById($id);
} else {
return to_assign(1, "错误的请求");
}
}
/**
* 解除、恢复
*/
public function set()
{
if (request()->isAjax()) {
$param = get_params();
$renewal = Db::name('LaborContract')->where(['renewal_pid'=> $param['id'],'delete_time'=>0])->count();
$change = Db::name('LaborContract')->where(['change_pid'=> $param['id'],'delete_time'=>0])->count();
if($renewal>0 || $change>0){
return to_assign(1, "已续签或者已变更的合同不支持该操作");
}
$this->model::where('id', $param['id'])->strict(false)->field(true)->update(['status'=> $param['status']]);
if($param['status']==3){
add_log('secure',$param['id'], $param);
}
else{
add_log('recovery', $param['id'], $param);
}
return to_assign();
} else {
return to_assign(1, "错误的请求");
}
}
}
+287
View File
@@ -0,0 +1,287 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\DepartmentChange as DepartmentChange;
use app\user\model\PersonalQuit as PersonalQuit;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Personal extends BaseController
{
//调部门列表
public function change()
{
if (request()->isAjax()) {
$param = get_params();
$tab = isset($param['tab']) ? $param['tab'] : 0;
$uid = $this->uid;
$where=[];
$whereOr=[];
$where[]=['delete_time','=',0];
if($tab == 0){
//全部
$auth = isAuth($uid,'office_admin','conf_1');
if($auth == 0){
$whereOr[] = ['admin_id', '=', $uid];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
$dids_a = get_leader_departments($uid);
$dids_b = get_role_departments($uid);
$dids = array_merge($dids_a, $dids_b);
if(!empty($dids)){
$whereOr[] = ['did','in',$dids];
}
}
}
if($tab == 1){
//我创建的
$where[] = ['admin_id', '=', $this->uid];
}
if($tab == 2){
//待我审核的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
}
if($tab == 3){
//我已审核的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
}
if($tab == 4){
//抄送给我的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
}
if (isset($param['check_status']) && $param['check_status'] != "") {
$where[] = ['check_status', '=', $param['check_status']];
}
if (!empty($param['did'])) {
$where[] = ['did', '=',$param['did']];
}
//按时间检索
if (!empty($param['move_time'])) {
$move_time =explode('~', $param['move_time']);
$where[] = ['move_time', 'between', [strtotime(urldecode($move_time[0])),strtotime(urldecode($move_time[1]))]];
}
$model = new DepartmentChange();
$list = $model->datalist($param,$where,$whereOr);
return table_assign(0, '', $list);
} else {
return view();
}
}
//新增&编辑调部门
public function change_add()
{
$param = get_params();
if (request()->isAjax()) {
$param['move_time'] = isset($param['move_time']) ? strtotime($param['move_time']) : 0;
$model = new DepartmentChange();
if ($param['id'] > 0) {
$model->edit($param);
} else {
$uid = $param['uid'];
$map = [];
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',leader_ids)")];
$count = Db::name('Department')->where($map)->count();
if($count>0){
return to_assign(1,'请先撤销该员工的部门负责人头衔再申请');
}
$has = Db::name('DepartmentChange')->where(['uid'=>$param['uid'],'status'=>1,'delete_time'=>0])->count();
if($has>0){
return to_assign(1, "该员工有调动记录未完成,不能重复申请");
}
$param['admin_id'] = $this->uid;
$model->add($param);
}
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$department = set_recursion(get_department());
if ($id > 0) {
$model = new DepartmentChange();
$detail = $model->getById($id);
View::assign('detail', $detail);
}
View::assign('department', $department);
View::assign('id', $id);
if(is_mobile()){
return view('qiye@/approve/add_change');
}
return view();
}
}
//查看调部门申请
public function change_view()
{
$param = get_params();
$model = new DepartmentChange();
$detail = $model->getById($param['id']);
View::assign('detail', $detail);
if(is_mobile()){
return view('qiye@/approve/view_change');
}
return view();
}
//删除调部门申请
public function change_delete()
{
$param = get_params();
$id = $param['id'];
if (request()->isDelete()) {
$model = new DepartmentChange();
$model->delById($id);
} else {
return to_assign(1, "错误的请求");
}
}
//离职
public function leave()
{
$param = get_params();
if (request()->isAjax()) {
$tab = isset($param['tab']) ? $param['tab'] : 0;
$uid = $this->uid;
$where=[];
$whereOr=[];
$where[]=['delete_time','=',0];
if($tab == 0){
//全部
$auth = isAuth($uid,'office_admin','conf_1');
if($auth == 0){
$whereOr[] = ['admin_id', '=', $this->uid];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
$dids_a = get_leader_departments($uid);
$dids_b = get_role_departments($uid);
$dids = array_merge($dids_a, $dids_b);
if(!empty($dids)){
$whereOr[] = ['did','in',$dids];
}
}
}
if($tab == 1){
//我创建的
$where[] = ['admin_id', '=', $uid];
}
if($tab == 2){
//待我审核的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
}
if($tab == 3){
//我已审核的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
}
if($tab == 4){
//抄送给我的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
}
if (isset($param['check_status']) && $param['check_status'] != "") {
$where[] = ['check_status', '=', $param['check_status']];
}
if (!empty($param['did'])) {
$where[] = ['did', '=',$param['did']];
}
//按时间检索
if (!empty($param['quit_time'])) {
$quit_time =explode('~', $param['quit_time']);
$where[] = ['quit_time', 'between', [strtotime(urldecode($quit_time[0])),strtotime(urldecode($quit_time[1]))]];
}
$model = new PersonalQuit();
$list = $model->datalist($param,$where,$whereOr);
return table_assign(0, '', $list);
}
else{
return view();
}
}
//添加离职申请
public function leave_add()
{
$param = get_params();
if (request()->isAjax()) {
$param['quit_time'] = isset($param['quit_time']) ? strtotime($param['quit_time']) : 0;
$model = new PersonalQuit();
if ($param['id'] > 0) {
$has = Db::name('PersonalQuit')->where([['uid','=',$param['uid']],['delete_time','=',0],['id','<>',$param['id']]])->count();
if($has>0){
return to_assign(1, "该员工已申请有离职记录,不能重复申请");
}
$detail = $model->edit($param);
} else {
$has = Db::name('PersonalQuit')->where(['uid'=>$param['uid'],'delete_time'=>0])->count();
if($has>0){
return to_assign(1, "该员工已申请有离职记录,不能重复申请");
}
$param['admin_id'] = $this->uid;
$detail = $model->add($param);
}
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$uid = isset($param['uid']) ? $param['uid'] : 0;
$detail=[];
if($uid>0){
$admin = get_admin($uid);
$detail['name'] = $admin['name'];
$detail['did'] = $admin['did'];
$detail['department'] = $admin['department'];
}
if ($id>0) {
$model = new PersonalQuit();
$detail = $model->getById($id);
}
View::assign('id', $id);
View::assign('detail', $detail);
if(is_mobile()){
return view('qiye@/approve/add_leave');
}
return view();
}
}
//查看离职申请
public function leave_view()
{
$param = get_params();
$model = new PersonalQuit();
$detail = $model->getById($param['id']);
View::assign('detail', $detail);
if(is_mobile()){
return view('qiye@/approve/view_leave');
}
return view();
}
//删除离职申请
public function leave_delete()
{
$param = get_params();
$id = $param['id'];
if (request()->isDelete()) {
$model = new PersonalQuit();
$model->delById($id);
} else {
return to_assign(1, "错误的请求");
}
}
}
+186
View File
@@ -0,0 +1,186 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\validate\PositionCheck;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Position extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$list = Db::name('Position')->where('status', '>=', 0)->order('create_time asc')->select()->toArray();
foreach ($list as &$val) {
$groupId = Db::name('PositionGroup')->where(['pid' => $val['id']])->column('group_id');
$groupName = Db::name('AdminGroup')->where('id', 'in', $groupId)->column('title');
$val['groupName'] = implode(',', $groupName);
}
$res['data'] = $list;
return table_assign(0, '', $res);
} else {
return view();
}
}
//添加&编辑
public function add()
{
$param = get_params();
if (request()->isAjax()) {
if (!empty($param['id']) && $param['id'] > 0) {
if($param['id']==1){
return to_assign(1, '超级管理员不能编辑');
}
try {
validate(PositionCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
// 启动事务
Db::startTrans();
try {
Db::name('Position')->where(['id' => $param['id']])->strict(false)->field(true)->update($param);
Db::name('PositionGroup')->where(['pid' => $param['id']])->delete();
foreach ($param['group_id'] as $k => $v) {
$data[$k] = [
'pid' => $param['id'],
'group_id' => $v,
'create_time' => time(),
];
}
Db::name('PositionGroup')->strict(false)->field(true)->insertAll($data);
add_log('edit', $param['id'], $param);
//清除菜单\权限缓存
clear_cache('adminMenu');
clear_cache('adminRules');
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return to_assign(1, '提交失败:' . $e->getMessage());
}
} else {
try {
validate(PositionCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
// 启动事务
Db::startTrans();
try {
$uid = Db::name('Position')->strict(false)->field(true)->insertGetId($param);
foreach ($param['group_id'] as $k => $v) {
$data[$k] = [
'pid' => $uid,
'group_id' => $v,
'create_time' => time(),
];
}
Db::name('PositionGroup')->strict(false)->field(true)->insertAll($data);
add_log('add', $uid, $param);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return to_assign(1, '提交失败:' . $e->getMessage());
}
}
return to_assign();
}
else{
$id = isset($param['id']) ? $param['id'] : 0;
$group = Db::name('AdminGroup')->order('create_time asc')->select()->toArray();
if ($id > 0) {
$detail = Db::name('Position')->where(['id' => $id])->find();
$detail['group_id'] = Db::name('PositionGroup')->where(['pid' => $id])->column('group_id');
foreach ($group as &$val) {
if (in_array($val['id'], $detail['group_id'])) {
$val['checked'] = 1;
} else {
$val['checked'] = 0;
}
}
View::assign('detail', $detail);
}
View::assign('group', $group);
View::assign('id', $id);
return view();
}
}
//查看
public function view()
{
$id = get_params('id');
$group = Db::name('AdminGroup')->order('create_time asc')->select()->toArray();
$detail = Db::name('Position')->where(['id' => $id])->find();
$detail['group_id'] = Db::name('PositionGroup')->where(['pid' => $id])->column('group_id');
foreach ($group as &$val) {
if (in_array($val['id'], $detail['group_id'])) {
$val['checked'] = 1;
} else {
$val['checked'] = 0;
}
}
$rule = Db::name('AdminRule')->order('sort asc,id asc')->select()->toArray();
$user_groups = Db::name('PositionGroup')
->alias('a')
->join("AdminGroup g", "a.group_id=g.id", 'LEFT')
->where("a.pid='{$id}' and g.status='1'")
->select()
->toArray();
$groups = $user_groups ?: [];
$rules = [];
foreach ($groups as $g) {
$rules = array_merge($rules, explode(',', trim($g['rules'], ',')));
}
$rules = array_unique($rules);
$role_rule = create_tree_list(0, $rule, $rules);
View::assign('role_rule', $role_rule);
View::assign('detail', $detail);
View::assign('group', $group);
add_log('view', $id);
return view();
}
//删除
public function delete()
{
$id = get_params("id");
if ($id == 1) {
return to_assign(0, "超级岗位,不能删除");
}
$data['status'] = '-1';
$data['id'] = $id;
$data['update_time'] = time();
if (Db::name('Position')->update($data) !== false) {
add_log('delete', $id);
return to_assign(0, "删除岗位成功");
} else {
return to_assign(1, "删除失败");
}
}
}
+141
View File
@@ -0,0 +1,141 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Rewards as RewardsModel;
use app\user\validate\RewardsValidate;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Rewards extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new RewardsModel();
}
/**
* 数据列表
*/
public function datalist()
{
if (request()->isAjax()) {
$param = get_params();
$where=[];
$where[]=['delete_time','=',0];
if (!empty($param['keywords'])) {
$where[] = ['id|thing|remark', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['status'])) {
$where[] = ['status', '=', $param['status']];
}
if (!empty($param['types'])) {
$where[] = ['types', '=', $param['types']];
}
if (!empty($param['rewards_cate'])) {
$where[] = ['rewards_cate', '=', $param['rewards_cate']];
}
if (!empty($param['uid'])) {
$where[] = ['uid', '=', $param['uid']];
}
if (!empty($param['diff_time'])) {
$diff_time =explode('~', $param['diff_time']);
$where[] = ['rewards_time', 'between', [strtotime(urldecode($diff_time[0])),strtotime(urldecode($diff_time[1]))]];
}
$list = $this->model->datalist($where, $param);
return table_assign(0, '', $list);
}
else{
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$param['rewards_time'] = isset($param['rewards_time']) ? strtotime($param['rewards_time']) : 0;
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(RewardsValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->edit($param);
} else {
try {
validate(RewardsValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['admin_id'] = $this->uid;
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id>0) {
$detail = $this->model->getById($id);
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
$detail['rewards_time'] = to_date($detail['rewards_time'],'Y-m-d');
View::assign('detail', $detail);
}
View::assign('id', $id);
return view();
}
}
/**
* 查看
*/
public function view($id)
{
$detail = $this->model->getById($id);
if (!empty($detail)) {
$detail['cate'] = Db::name('RewardsCate')->where('id',$detail['rewards_cate'])->value('title');
$detail['user_name'] = Db::name('Admin')->where('id',$detail['uid'])->value('name');
$detail['admin_name'] = Db::name('Admin')->where('id',$detail['admin_id'])->value('name');
$detail['rewards_time'] = to_date($detail['rewards_time'],'Y-m-d');
View::assign('detail', $detail);
return view();
}
else{
throw new \think\exception\HttpException(404, '找不到页面');
}
}
/**
* 删除
*/
public function del()
{
$param = get_params();
$id = isset($param['id']) ? $param['id'] : 0;
$this->model->delById($id);
}
}
+105
View File
@@ -0,0 +1,105 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\RewardsCate as RewardsCateModel;
use app\user\validate\RewardsCateValidate;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Rewardscate extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new RewardsCateModel();
}
/**
* 数据列表
*/
public function datalist()
{
if (request()->isAjax()) {
$list = $this->model->select();
return to_assign(0, '', $list);
}
else{
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(RewardsCateValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->edit($param);
} else {
try {
validate(RewardsCateValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id>0) {
$detail = $this->model->getCateById($id);
}
return view();
}
}
/**
* 设置
*/
public function set()
{
$param = get_params();
$res = $this->model->strict(false)->field('id,status')->update($param);
if ($res) {
if($param['status'] == 0){
add_log('disable', $param['id'], $param);
}
else if($param['status'] == 1){
add_log('recovery', $param['id'], $param);
}
return to_assign();
}
else{
return to_assign(0, '操作失败');
}
}
}
+263
View File
@@ -0,0 +1,263 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Talent as TalentModel;
use app\user\validate\TalentValidate;
use think\exception\ValidateException;
use Overtrue\Pinyin\Pinyin;
use think\facade\Db;
use think\facade\View;
class Talent extends BaseController
{
/**
* 构造函数
*/
protected $model;
public function __construct()
{
parent::__construct(); // 调用父类构造函数
$this->model = new TalentModel();
}
/**
* 数据列表
*/
public function datalist()
{
$param = get_params();
if (request()->isAjax()) {
$param = get_params();
$tab = isset($param['tab']) ? $param['tab'] : 0;
$uid = $this->uid;
$where = array();
$whereOr = array();
$where[]=['delete_time','=',0];
if($tab == 0){
//全部
$auth = isAuth($uid,'office_admin','conf_1');
if($auth == 0){
$whereOr[] = ['admin_id', '=', $this->uid];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
$whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
$dids_a = get_leader_departments($uid);
$dids_b = get_role_departments($uid);
$dids = array_merge($dids_a, $dids_b);
if(!empty($dids)){
$whereOr[] = ['did','in',$dids];
}
}
}
if($tab == 1){
//我创建的
$where[] = ['admin_id', '=', $this->uid];
}
if($tab == 2){
//待我审核的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_uids)")];
}
if($tab == 3){
//我已审核的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_history_uids)")];
}
if($tab == 4){
//抄送给我的
$where[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',check_copy_uids)")];
}
if (isset($param['check_status']) && $param['check_status'] != "") {
$where[] = ['check_status', '=', $param['check_status']];
}
if (!empty($param['keywords'])) {
$where[] = ['name|mobile', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['did'])) {
$where[] = ['to_did', '=',$param['did']];
}
//按时间检索
if (!empty($param['entry_time'])) {
$entry_time =explode('~', $param['entry_time']);
$where[] = ['entry_time', 'between', [strtotime(urldecode($entry_time[0])),strtotime(urldecode($entry_time[1]))]];
}
$list = $this->model->datalist($param,$where,$whereOr);
return table_assign(0, '', $list);
}
else{
View::assign('is_auth', isAuth($this->uid,'office_admin','conf_1'));
return view();
}
}
/**
* 添加/编辑
*/
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$param['entry_time'] = empty($param['entry_time']) ? '0':strtotime($param['entry_time']);
$count_a=0;
$count_b=0;
if(!empty($param['idcard'])){
$count_a = Db::name('Blacklist')->where([['idcard','=',$param['idcard']],['delete_time','=',0]])->count();
}
if(!empty($param['mobile'])){
$count_b = Db::name('Blacklist')->where([['mobile','=',$param['mobile']],['delete_time','=',0]])->count();
}
if($count_a>0 || $count_b>0){
return to_assign(1, '该员工的信息已被列入黑名单,不支持申请');
}
$count_c = Db::name('Admin')->where([['mobile','=',$param['mobile']],['status','in',['0,1']],['delete_time','=',0]])->count();
$count_d = Db::name('Admin')->where([['email','=',$param['email']],['status','in',['0,1']],['delete_time','=',0]])->count();
if($count_c>0){
return to_assign(1, '该手机号已被其他员工占用,不支持申请');
}
if($count_d>0){
return to_assign(1, '该邮箱已被其他员工占用,不支持申请');
}
if (!empty($param['id']) && $param['id'] > 0) {
try {
validate(IndexValidate::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$this->model->edit($param);
} else {
try {
validate(IndexValidate::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['admin_id'] = $this->uid;
$param['did'] = $this->did;
$this->model->add($param);
}
}else{
$id = isset($param['id']) ? $param['id'] : 0;
if ($id>0) {
$detail = $this->model->getById($id);
View::assign('detail', $detail);
}
$position = Db::name('Position')->where([['status', '>=', 0]])->order('create_time asc')->select();
View::assign('position', $position);
View::assign('id', $id);
if(is_mobile()){
return view('qiye@/approve/add_talent');
}
return view();
}
}
/**
* 查看
*/
public function view($id)
{
$detail = $this->model->getById($id);
if (!empty($detail)) {
$detail['department'] = Db::name('Department')->where('id', '=', $detail['to_did'])->value('title');
$detail['position'] = Db::name('Position')->where('id', '=', $detail['position_id'])->value('title');
View::assign('detail', $detail);
if(is_mobile()){
return view('qiye@/approve/view_talent');
}
return view();
}
else{
return view(EEEOR_REPORTING,['code'=>404,'warning'=>'找不到页面']);
}
}
/**
* 删除
*/
public function del()
{
$id = get_params("id");
if (request()->isDelete()) {
$this->model->delById($id);
} else {
return to_assign(1, "错误的请求");
}
}
/**
* 转为正式员工
*/
public function set()
{
$param = get_params();
if (request()->isAjax()) {
$param['update_time'] = time();
$param['entry_time'] = strtotime($param['entry_time']);
Db::name('Talent')->strict(false)->field(true)->update($param);
$detail = Db::name('Talent')->where('id', $param['id'])->find();
$count_a = Db::name('Admin')->where([['status', 'in', [0,1]],['mobile','=',$detail['mobile']],['delete_time','=',0]])->count();
if($count_a>0){
return to_assign(1, "同样的手机号码已经存在,请检查一下是否被离职或者禁用员工占用");
}
$detail['nickname'] = $detail['name'];
$char = $detail['name'];
$username = Pinyin::name($char,'none')->join('');
$detail['username'] = $this->create_name($username,0);
$detail['did'] = $detail['to_did'];
$detail['salt'] = set_salt(20);
$detail['reg_pwd'] = $param['reg_pwd'];
$detail['thumb'] = get_file($detail['thumb']);
$detail['pwd'] = set_password($detail['reg_pwd'], $detail['salt']);
$detail['talent_id'] = $detail['id'];
unset($detail['id']);
$uid = Db::name('Admin')->strict(false)->field(true)->insertGetId($detail);
if($uid!==false){
Db::name('Talent')->where('id',$param ['id'])->update(['status'=>2]);
add_log('add', $uid, $param);
return to_assign();
}
else {
return to_assign(1, "操作失败");
}
}
else{
$position = Db::name('Position')->where([['status', '>=', 0]])->order('create_time asc')->select();
$detail = $this->model->getById($param['id']);
View::assign('position', $position);
//初始化密码
View::assign('reg_pwd', set_salt(6));
View::assign('detail', $detail);
if(is_mobile()){
return view('qiye@/approve/set_talent');
}
return view();
}
}
//生成登录名
public function create_name($name,$id=0,$total=0,$old='')
{
$count = Db::name('Admin')->where([['username','=',$name],['id','<>',$id]])->count();
if($total==0){
$old = $name;
}
$total++;
if($count>0){
$newname = $old.$total;
$name = $this->create_name($newname,$id,$total,$old);
}
return $name;
}
}
+392
View File
@@ -0,0 +1,392 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
declare (strict_types = 1);
namespace app\user\controller;
use app\base\BaseController;
use app\user\model\Admin as AdminList;
use app\user\model\Department as DepartmentModel;
use app\user\validate\AdminCheck;
use avatars\MDAvatars;
use Overtrue\Pinyin\Pinyin;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class User extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
$whereOr = array();
if (!empty($param['keywords'])) {
$where[] = ['a.id|a.username|a.name|a.nickname|a.mobile|a.desc', 'like', '%' . $param['keywords'] . '%'];
}
if (isset($param['status']) && $param['status']!='') {
$where[] = ['a.status', '=', $param['status']];
}
else{
$where[] = ['a.status', '=', 1];
}
if (!empty($param['type'])) {
$where[] = ['a.type', '=', $param['type']];
}
if (!empty($param['did'])) {
$admin_array = Db::name('DepartmentAdmin')->where('department_id',$param['did'])->column('admin_id');
$map1=[
['a.id','in',$admin_array],
];
$map2=[
['a.did', '=', $param['did']],
];
$whereOr =[$map1,$map2];
}
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$admin = AdminList::alias('a')
->with('departments')
->field('a.*,p.title as position,d.title as department')
->join('Department d', 'd.id = a.did','left')
->join('Position p', 'p.id = a.position_id','left')
->where($where)
->where(function ($query) use($whereOr) {
if (!empty($whereOr)){
$query->whereOr($whereOr);
}
})
->paginate(['list_rows'=> $rows])
->order('a.id desc')
->each(function ($item, $key) {
//遍历次要部门数据
$departments = $item['departments']->toArray();
if(empty($departments)){
$item['departments'] = '-';
}
else{
$item['departments'] = split_array_field($departments,'title');
}
$item['entry_time'] = to_date($item['entry_time'],'Y-m-d');
$item['last_login_time'] = to_date($item['last_login_time'],'Y-m-d H:i');
$item['last_login_ip'] = empty($item['last_login_ip']) ? '-' : $item['last_login_ip'];
});
return table_assign(0, '', $admin);
} else {
return view();
}
}
//生成登录名
public function create_name($name,$id=0,$total=0,$old='')
{
$count = Db::name('Admin')->where([['username','=',$name],['id','<>',$id]])->count();
if($total==0){
$old = $name;
}
$total++;
if($count>0){
$newname = $old.$total;
$name = $this->create_name($newname,$id,$total,$old);
}
return $name;
}
//添加
public function add()
{
$param = get_params();
if (request()->isAjax()) {
$id = isset($param['id'])?$param['id']:0;
$param['entry_time'] = strtotime($param['entry_time']);
$param['nickname'] = $param['name'];
if ($id > 0) {
if($id == 1){
return to_assign(1, '超级管理员信息不支持编辑');
}
try {
validate(AdminCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$detail = get_admin($param['id']);
$department_ids = Db::name('DepartmentAdmin')->where('admin_id',$param['id'])->column('department_id');
$detail['department_ids'] = implode(',',$department_ids);
// 启动事务
Db::startTrans();
try {
Db::name('Admin')->where(['id' => $id])->strict(false)->field(true)->update($param);
if($detail['department_ids'] != $param['department_ids']){
Db::name('DepartmentAdmin')->where('admin_id',$id)->whereIn('department_id', $detail['department_ids'])->delete();
if(!empty($param['department_ids'])){
$dids = explode(',',$param['department_ids']);
foreach ($dids as $did) {
Db::name('DepartmentAdmin')->insert(['admin_id'=>$param['id'],'department_id'=>$did,'create_time' => time()]);
}
}
}
if(empty($param['thumb'])){
$char = mb_substr($param['name'], 0, 1, 'utf-8');
Db::name('Admin')->where('id', $id)->update(['thumb' => $this->to_avatars($char)]);
}
$info = Db::name('Admin')->where('id', $id)->find();
$model = new DepartmentModel();
$auth_dids = $model->get_auth_departments($info);
$son_dids = $model->get_son_departments($info);
Db::name('Admin')->where('id',$id)->update(['auth_dids'=>$auth_dids,'son_dids'=>$son_dids]);
add_log('edit', $id, $param);
//清除菜单\权限缓存
clear_cache('adminMenu');
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return to_assign(1, '提交失败:' . $e->getMessage());
}
} else {
$username = Pinyin::name($param['name'],'none')->join('');
$param['username'] = $this->create_name($username,$id);
try {
validate(AdminCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return to_assign(1, $e->getError());
}
$param['create_time'] = time();
$param['salt'] = set_salt(20);
$param['pwd'] = set_password($param['reg_pwd'], $param['salt']);
// 启动事务
Db::startTrans();
try {
$uid = Db::name('Admin')->strict(false)->field(true)->insertGetId($param);
if(!empty($param['department_ids'])){
$dids = explode(',',$param['department_ids']);
foreach ($dids as $did) {
Db::name('DepartmentAdmin')->insert(['admin_id'=>$uid,'department_id'=>$did,'create_time' => time()]);
}
}
if(empty($param['thumb'])){
$char = mb_substr($param['name'], 0, 1, 'utf-8');
Db::name('Admin')->where('id', $uid)->update(['thumb' => $this->to_avatars($char)]);
}
$info = Db::name('Admin')->where('id', $uid)->find();
$model = new DepartmentModel();
$auth_dids = $model->get_auth_departments($info);
$son_dids = $model->get_son_departments($info);
Db::name('Admin')->where('id',$uid)->update(['auth_dids'=>$auth_dids,'son_dids'=>$son_dids]);
add_log('add', $uid, $param);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return to_assign(1, '提交失败:' . $e->getMessage());
}
}
return to_assign();
} else {
$id = isset($param['id']) ? $param['id'] : 0;
$department = set_recursion(get_department());
$position = Db::name('Position')->where('status', '>=', 0)->order('create_time asc')->select();
if ($id > 0) {
$detail = get_admin($id);
$detail['pname'] = Db::name('Admin')->where('id',$detail['pid'])->value('name');
$department_ids = Db::name('DepartmentAdmin')->where('admin_id',$param['id'])->column('department_id');
$detail['department_ids'] = implode(',',$department_ids);
View::assign('detail', $detail);
} else {
//初始化密码
$reg_pwd = set_salt(6);
View::assign('reg_pwd', $reg_pwd);
}
View::assign('department', $department);
View::assign('position', $position);
View::assign('id', $id);
return view();
}
}
//生成头像
public function to_avatars($char)
{
$defaultData = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'S', 'Y', 'Z',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾',
'一', '二', '三', '四', '五', '六', '七', '八', '九', '十');
if (isset($char)) {
$Char = $char;
} else {
$Char = $defaultData[mt_rand(0, count($defaultData) - 1)];
}
$OutputSize = min(512, empty($_GET['size']) ? 36 : intval($_GET['size']));
$Avatar = new MDAvatars($Char, 256, 1);
$avatar_name = '/avatars/avatar_256_' . set_salt(10) . time() . '.png';
$path = get_config('filesystem.disks.public.url') . $avatar_name;
$res = $Avatar->Save('.' . $path, 256);
$Avatar->Free();
return $path;
}
//查看
public function view()
{
$id = get_params('id');
$detail = get_admin($id);
$department_ids = Db::name('DepartmentAdmin')->where('admin_id',$id)->column('department_id');
$department_names = Db::name('Department')->whereIn('id',$department_ids)->column('title');
$detail['department_names'] = implode(',',$department_names);
$detail['pname'] = Db::name('Admin')->where('id',$detail['pid'])->value('name');
//查询所有菜单和权限节点
$menu = Db::name('AdminRule')->where(['menu' => 1])->order('sort asc,id asc')->select()->toArray();
$rule = Db::name('AdminRule')->order('sort asc,id asc')->select()->toArray();
//查询用户拥有的菜单和节点
$user_groups = Db::name('PositionGroup')
->alias('a')
->join("AdminGroup g", "a.group_id=g.id", 'LEFT')
->where([['a.pid', '=', $detail["position_id"]], ['g.status', '=', 1]])
->select()
->toArray();
$groups = $user_groups ?: [];
$rules = [];
foreach ($groups as $g) {
$rules = array_merge($rules, explode(',', trim($g['rules'], ',')));
}
$rules = array_unique($rules);
//数据嵌套
$role_rule = create_tree_list(0, $rule, $rules);
View::assign('role_rule', $role_rule);
View::assign('detail', $detail);
add_log('view', get_params('id'));
return view();
}
//禁用,恢复
public function set()
{
$type = get_params("type");
$ids = get_params("ids");
$idArray = explode(',', $ids);
$list = [];
foreach ($idArray as $key => $val) {
if ($val == 1) {
continue;
}
$list[] = [
'status' => $type,
'id' => $val,
'update_time' => time(),
];
}
foreach ($list as $key => $v) {
if (Db::name('Admin')->update($v) !== false) {
if ($type == 0) {
add_log('disable', $v['id']);
} else if ($type == 1) {
add_log('recovery', $v['id']);
}
}
}
return to_assign(0, '操作成功');
}
//重置密码
public function reset_psw()
{
$id = get_params("id");
if($id == 1){
return to_assign(1, '该账号是超级管理员,不允许重置');
}
$new_pwd = set_salt(6);
$salt = set_salt(20);
$data = [
'reg_pwd' => $new_pwd,
'salt' => $salt,
'pwd' => set_password($new_pwd, $salt),
'id' => $id,
'update_time' => time(),
];
if (Db::name('Admin')->update($data) !== false) {
add_log('reset', $id);
return to_assign(0, '操作成功');
} else {
return to_assign(1, '操作失败');
}
}
//删除员工
public function del()
{
$id = get_params("id");
if($id == 1){
return to_assign(1, '该账号是超级管理员,不允许删除');
}
$data = [
'id' => $id,
'delete_time' => time(),
];
if (Db::name('Admin')->update($data) !== false) {
add_log('delete', $id);
return to_assign(0, '操作成功');
} else {
return to_assign(1, '操作失败');
}
}
//管理员操作日志
public function log()
{
if (request()->isAjax()) {
$param = get_params();
$where = array();
if (!empty($param['keywords'])) {
$where[] = ['name|rule_menu|param_id', 'like', '%' . $param['keywords'] . '%'];
}
if (!empty($param['title_cate'])) {
$where['title'] = $param['title_cate'];
}
if (!empty($param['rule_menu'])) {
$where['rule_menu'] = $param['rule_menu'];
}
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$content = DB::name('AdminLog')
->field("id,uid,name,action,title,content,rule_menu,ip,param_id,param,FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s') create_time")
->order('create_time desc')
->where($where)
->paginate(['list_rows'=> $rows]);
$content->toArray();
foreach ($content as $k => $v) {
$data = $v;
$param_array = json_decode($v['param'], true);
$param_value = '';
foreach ($param_array as $key => $value) {
if (is_array($value)) {
$value = implode(',', $value);
}
$param_value .= $key . ':' . $value . '&nbsp;&nbsp;|&nbsp;&nbsp;';
}
$data['param'] = $param_value;
$content->offsetSet($k, $data);
}
return table_assign(0, '', $content);
} else {
return view();
}
}
}
+5
View File
@@ -0,0 +1,5 @@
<?php
// 这是系统自动生成的event定义文件
return [
];
+9
View File
@@ -0,0 +1,9 @@
<?php
// 这是系统自动生成的middleware定义文件
return [
//开启session中间件
//'think\middleware\SessionInit',
//验证勾股OA是否完成安装
\app\home\middleware\Install::class,
];
+27
View File
@@ -0,0 +1,27 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\Model;
class Admin extends Model
{
public function position()
{
return $this->hasOne(Position::class);
}
// 定义与部门的多对多关联关系
public function departments()
{
return $this->belongsToMany(Department::class, 'department_admin');
}
}
+120
View File
@@ -0,0 +1,120 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
use think\facade\Db;
class Blacklist extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($param=[],$where=[],$whereOr=[])
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->where(function ($query) use($whereOr) {
if (!empty($whereOr)){
$query->whereOr($whereOr);
}
})
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item['admin_name'] = Db::name('Admin')->where('id',$item['admin_id'])->value('name');
$item['create_time'] = to_date($item['create_time']);
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+119
View File
@@ -0,0 +1,119 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
use think\facade\Db;
class Care extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($where, $param)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item->cate = Db::name('CareCate')->where('id',$item->care_cate)->value('title');
$item->user_name = Db::name('Admin')->where('id',$item->uid)->value('name');
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
$item->care_time = to_date($item->care_time,'Y-m-d');
$item->create_time = to_date($item->create_time,'Y-m-d H:i:s');
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['aid'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign();
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
$info['care_time'] = to_date($info['care_time'],'Y-m-d');
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+78
View File
@@ -0,0 +1,78 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
class CareCate extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function getList($where, $param)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)->order($order)->paginate(['list_rows'=> $rows]);
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['aid'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign();
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = slef::where('id', $id)->find();
return $info;
}
}
+191
View File
@@ -0,0 +1,191 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\Model;
use think\facade\Db;
class Department extends Model
{
// 定义与员工的多对多关联关系
public function admins()
{
return $this->belongsToMany(Admin::class, 'department_admin');
}
public function update_auth_dids_son_dids(){
$admin = Db::name('Admin')->field('id,did,auth_did')->select()->toArray();
foreach ($admin as $key => $val) {
$auth_dids = $this->get_auth_departments($val);
$son_dids = $this->get_son_departments($val);
Db::name('Admin')->where('id',$val['id'])->update(['auth_dids'=>$auth_dids,'son_dids'=>$son_dids]);
}
}
/*获取某员工所能看的部门数据(dids)
*传入某员工uid,输出部门数组,如:'1,2,3'。
*超级管理员默认返回全部部门数据
*/
public function get_auth_departments($admin)
{
$str='';
$uid = $admin['id'];
$did = $admin['did'];
$auth_did = $admin['auth_did'];
$dids = Db::name('Department')->where('status',1)->column('id');
$departments = Db::name('Department')->where('status',1)->select()->toArray();
//次要部门did
$secondary_dids = Db::name('DepartmentAdmin')->where('admin_id',$uid)->column('department_id');
//全部可见部门
$all_dids = array_merge($secondary_dids,[$did]);
//超级管理员||所有部门数据权限
if($uid==1 || $auth_did==10){
$str = implode(',',$dids);
}
//仅自己关联的数据
if($auth_did==0){
$str='';
}
//所属主部门的数据
if($auth_did==1){
$str=$did;
}
//所属次部门的数据
if($auth_did==2){
$str = implode(',',$secondary_dids);
}
//仅所属主次部门数据
if($auth_did==3){
$str = implode(',',$all_dids);
}
//所属主部门及其子部门数据
if($auth_did==4){
//获取子部门
$department_list = get_data_node($departments, $did);
$department_array = array_column($department_list, 'id');
//包括自己部门在内
$department_array[] = $did;
$str = implode(',',$department_array);
}
//所属次部门及其子部门数据
if($auth_did==5){
//获取子部门
$list_array = [];
foreach ($secondary_dids as $key => $value) {
$department_list = get_data_node($departments, $value);
$department_array = array_column($department_list, 'id');
//包括自己部门在内
$department_array[] = $value;
$list_array = array_merge($list_array,$department_array);
}
$new_array = array_unique($list_array);
$str = implode(',',$new_array);
}
//所属主次部门及其子部门数据
if($auth_did==6){
//获取子部门
$list_array = [];
foreach ($all_dids as $key => $value) {
$department_list = get_data_node($departments, $value);
$department_array = array_column($department_list, 'id');
//包括自己部门在内
$department_array[] = $value;
$list_array = array_merge($list_array,$department_array);
}
$new_array = array_unique($list_array);
$str = implode(',',$new_array);
}
//所属主部门所在顶级部门及其子部门数据
if($auth_did==7){
//获取顶级部门
$top_did = get_department_top($did);
$new_array = get_department_son($top_did,1);
$str = implode(',',$new_array);
}
//所属次部门所在顶级部门及其子部门数据
if($auth_did==8){
//获取顶级部门
$top_dids =[];
foreach ($secondary_dids as $key => $value) {
array_push($top_dids, get_department_top($value));
}
$list_array = [];
foreach ($top_dids as $key => $value) {
$list_array = array_merge($list_array,get_department_son($value,1));
}
$new_array = array_unique($list_array);
$str = implode(',',$new_array);
}
//所属主次部门所在顶级部门及其子部门数据
if($auth_did==9){
//获取顶级部门
$top_dids =[];
foreach ($all_dids as $key => $value) {
array_push($top_dids, get_department_top($value));
}
$list_array = [];
foreach ($top_dids as $key => $value) {
$list_array = array_merge($list_array,get_department_son($value,1));
}
$new_array = array_unique($list_array);
$str = implode(',',$new_array);
}
return $str;
}
/*获取某负责人所负责的部门的数据集(ids),传入某员工uid,输出部门字符串,如:1,2,3,
*逻辑:先判断传入的uid是否是负责人,如果是负责人再读取对应的部门数据。
*超级管理员默认返回全部部门数据
*/
public function get_son_departments($admin)
{
$str='';
$uid = $admin['id'];
$dids = Db::name('Department')->where('status',1)->column('id');
$departments = Db::name('Department')->where('status',1)->select()->toArray();
if($uid==1){
$str = implode(',',$dids);
}
else{
$map = [];
$map[] = ['status','=',1];
$map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',leader_ids)")];
$leader_dids = Db::name('Department')->where($map)->column('id');
//判断是否是部门负责人
if(!empty($leader_dids)){
//获取子部门
$list_array = [];
foreach ($leader_dids as $key => $value) {
$department_list = get_data_node($departments, $value);
$department_array = array_column($department_list, 'id');
//包括自己部门在内
$department_array[] = $value;
$list_array = array_merge($list_array,$department_array);
}
$str = implode(',',$list_array);
}
}
return $str;
}
}
+155
View File
@@ -0,0 +1,155 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\Model;
use think\facade\Db;
class DepartmentChange extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($param,$where,$whereOr)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->where(function ($query) use($whereOr) {
if (!empty($whereOr)){
$query->whereOr($whereOr);
}
})
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item['check_status_str'] = check_status_name($item['check_status']);
$item['check_user'] = '-';
if($item['check_status']==1 && !empty($item['check_uids'])){
$check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
$item['check_user'] = implode(',',$check_user);
}
$item['name'] = Db::name('Admin')->where('id','=',$item['uid'])->value('name');
$item['create_time'] = to_date($item['create_time']);
$item['admin_name'] = Db::name('Admin')->where('id','=',$item['admin_id'])->value('name');
$item['from_department'] = Db::name('Department')->where(['id' => $item['from_did']])->value('title');
$item['to_department'] = Db::name('Department')->where(['id' => $item['to_did']])->value('title');
$item['move_time'] = to_date($item['move_time'],'Y-m-d');
$status_str = '未执行';
$connect_time_str = '-';
if($item['status'] == 2){
$status_str = '已执行';
$connect_time_str = to_date($item['connect_time'],'Y-m-d');
}
$item['status_str'] = $status_str;
$item['connect_time_str'] = $connect_time_str;
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=> $param['id']]);
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
$info['name'] = Db::name('Admin')->where('id','=',$info['uid'])->value('name');
$info['admin_name'] = Db::name('Admin')->where('id','=',$info['admin_id'])->value('name');
$info['from_department'] = Db::name('Department')->where(['id' => $info['from_did']])->value('title');
$info['to_department'] = Db::name('Department')->where(['id' => $info['to_did']])->value('title');
$info['move_time'] = to_date($info['move_time'],'Y-m-d');
$status_str = '未执行';
$connect_time_str = '-';
if($info['status'] == 2){
$status_str = '已执行';
$connect_time_str = to_date($info['connect_time'],'Y-m-d');
}
$info['status_str'] = $status_str;
$info['connect_time_str'] = $connect_time_str;
if(!empty($info['file_ids'])){
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
$info['file_array'] = $file_array;
}
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\Model;
class IndustryCate extends Model
{
}
+156
View File
@@ -0,0 +1,156 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
use think\facade\Db;
class LaborContract extends Model
{
//合同类别
public static $laborcontract_cate = array(
array('id' => 1, 'title' => '劳动合同'),
array('id' => 2, 'title' => '劳务合同'),
array('id' => 3, 'title' => '实习协议'),
array('id' => 4, 'title' => '保密协议')
);
//合同类型
public static $laborcontract_types = ['','新签合同','续签合同','变更合同'];
//合同属性
public static $laborcontract_properties = ['','初级职称','中级职称','高级职称'];
//合同状态
public static $laborcontract_status = ['','正常','已到期','已解除'];
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($where, $param)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item->cate_str = self::$laborcontract_cate[$item->cate-1]['title'];
$item->types_str = self::$laborcontract_types[$item->types];
$item->properties_str = self::$laborcontract_properties[$item->properties];
$item->status_str = self::$laborcontract_status[$item->status];
$item->enterprise = Db::name('Enterprise')->where('id',$item->enterprise_id)->value('title');
$item->user_name = Db::name('Admin')->where('id',$item->uid)->value('name');
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
$item->sign_time = date('Y-m-d',$item->sign_time);
$item->start_time = date('Y-m-d',$item->start_time);
$item->end_time = date('Y-m-d',$item->end_time);
$item->diff_time = $item->start_time.' 至 '.$item->end_time;
$item->renewal = Db::name('LaborContract')->where(['renewal_pid'=>$item->id,'delete_time'=>0])->count();
$item->change = Db::name('LaborContract')->where(['change_pid'=>$item->id,'delete_time'=>0])->count();
$item->create_time = to_date($item->create_time,'Y-m-d H:i:s');
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['aid'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign();
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
$info['cate_str'] = self::$laborcontract_cate[$info['cate']-1]['title'];
$info['types_str'] = self::$laborcontract_types[$info['types']];
$info['properties_str'] = self::$laborcontract_properties[$info['properties']];
$info['status_str'] = self::$laborcontract_status[$info['status']];
$info['enterprise'] = Db::name('Enterprise')->where('id',$info['enterprise_id'])->value('title');
$info['user_name'] = Db::name('Admin')->where('id',$info['uid'])->value('name');
$info['sign_time'] = date('Y-m-d',$info['sign_time']);
$info['start_time'] = date('Y-m-d',$info['start_time']);
$info['end_time'] = date('Y-m-d',$info['end_time']);
if($info['trial_end_time']>0){
$info['trial_end_time'] = date('Y-m-d',$info['trial_end_time']);
}
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+160
View File
@@ -0,0 +1,160 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
use think\facade\Db;
class PersonalQuit extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($param,$where,$whereOr)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->where(function ($query) use($whereOr) {
if (!empty($whereOr)){
$query->whereOr($whereOr);
}
})
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item['check_status_str'] = check_status_name($item['check_status']);
$item['check_user'] = '-';
if($item['check_status']==1 && !empty($item['check_uids'])){
$check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
$item['check_user'] = implode(',',$check_user);
}
$userinfo = Db::name('Admin')->where('id','=',$item->uid)->find();
$item->name = $userinfo['name'];
$item->department = Db::name('Department')->where('id',$userinfo['did'])->value('title');
$item->position = Db::name('Position')->where('id',$userinfo['position_id'])->value('title');
$item->admin_name = Db::name('Admin')->where('id','=',$item->admin_id)->value('name');
$item->lead_admin_name = Db::name('Admin')->where('id','=',$item->lead_admin_id)->value('name');
$item->connect_name = Db::name('admin')->where(['id' => $item->connect_id])->value('name');
$item->quit_time = date('Y-m-d',$item->quit_time);
$item->create_time = to_date($item->create_time);
$connect_time_str = '-';
if($item->status == 2){
$connect_time_str = to_date($item->connect_time,'Y-m-d');
}
$item->connect_time_str = $connect_time_str;
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=> $param['id']]);
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
$userinfo = Db::name('Admin')->where('id',$info['uid'])->find();
$info['name'] = $userinfo['name'];
$info['department'] = Db::name('Department')->where('id',$userinfo['did'])->value('title');
$info['position'] = Db::name('Position')->where('id',$userinfo['position_id'])->value('title');
$info['admin_name'] = Db::name('Admin')->where('id','=',$info['admin_id'])->value('name');
$info['lead_admin_name'] = Db::name('Admin')->where('id','=',$info['lead_admin_id'])->value('name');
$connect_uids_name = Db::name('Admin')->where([['id','in', $info['connect_uids']]])->column('name');
$info['connect_names'] = implode(',', $connect_uids_name);
$info['quit_time'] = date('Y-m-d', $info['quit_time']);
$info['connect_name'] = Db::name('admin')->where(['id' => $info['connect_id']])->value('name');
$status_str = '未交接';
$connect_time_str = '-';
if($info['status'] == 2){
$status_str = '已交接离职';
$connect_time_str = to_date($info['connect_time'],'Y-m-d');
}
$info['status_str'] = $status_str;
$info['connect_time_str'] = $connect_time_str;
if(!empty($info['file_ids'])){
$file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
$info['file_array'] = $file_array;
}
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+118
View File
@@ -0,0 +1,118 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
use think\facade\Db;
class Rewards extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($where, $param)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item->cate = Db::name('RewardsCate')->where('id',$item->rewards_cate)->value('title');
$item->user_name = Db::name('Admin')->where('id',$item->uid)->value('name');
$item->admin_name = Db::name('Admin')->where('id',$item->admin_id)->value('name');
$item->rewards_time = to_date($item->rewards_time,'Y-m-d');
$item->create_time = to_date($item->create_time,'Y-m-d H:i:s');
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['aid'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign();
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+79
View File
@@ -0,0 +1,79 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
class RewardsCate extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function getList($where, $param)
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = $this->where($where)->order($order)->paginate(['list_rows'=> $rows]);
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = $this->strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['aid'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
$this->where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign();
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = $this->where('id', $id)->find();
return $info;
}
}
+205
View File
@@ -0,0 +1,205 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\model;
use think\model;
use think\facade\Db;
class Talent extends Model
{
/**
* 获取分页列表
* @param $where
* @param $param
*/
public function datalist($param=[],$where=[],$whereOr=[])
{
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$order = empty($param['order']) ? 'id desc' : $param['order'];
try {
$list = self::where($where)
->where(function ($query) use($whereOr) {
if (!empty($whereOr)){
$query->whereOr($whereOr);
}
})
->order($order)
->paginate(['list_rows'=> $rows])
->each(function ($item, $key){
$item['admin_name'] = Db::name('Admin')->where('id',$item['admin_id'])->value('name');
$item['check_status_str'] = check_status_name($item['check_status']);
if($item['check_status']==1 && !empty($item['check_uids'])){
$check_users = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
$item['check_users'] = implode(',',$check_users);
}
else{
$item['check_users']='-';
}
if(!empty($item['check_copy_uids'])){
$check_copy_users = Db::name('Admin')->where('id','in',$item['check_copy_uids'])->column('name');
$item['check_copy_users'] = implode(',',$check_copy_users);
}
else{
$item['check_copy_users']='-';
}
if($item['entry_time']>0){
$item['entry_time'] = date('Y-m-d',$item['entry_time']);
}
else{
$item['entry_time'] = '-';
}
if($item['position_id']>0){
$item['position']= Db::name('Position')->where('id',$item['position_id'])->value('title');
}
if($item['to_did']>0){
$item['department']= Db::name('Department')->where('id',$item['to_did'])->value('title');
}
if($item['political']==1){
$item['political'] = '中共党员';
}
else if($item['political']==2){
$item['political'] = '团员';
}
else{
$item['political'] = '其他';
}
$item['create_time'] = to_date($item['create_time']);
$item['thumb'] = get_file($item['thumb']);
});
return $list;
} catch(\Exception $e) {
return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
}
}
/**
* 添加数据
* @param $param
*/
public function add($param)
{
$insertId = 0;
try {
$param['create_time'] = time();
$insertId = self::strict(false)->field(true)->insertGetId($param);
add_log('add', $insertId, $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=>$insertId]);
}
/**
* 编辑信息
* @param $param
*/
public function edit($param)
{
try {
$param['update_time'] = time();
self::where('id', $param['id'])->strict(false)->field(true)->update($param);
add_log('edit', $param['id'], $param);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
return to_assign(0,'操作成功',['return_id'=>$param['id']]);
}
/**
* 根据id获取信息
* @param $id
*/
public function getById($id)
{
$info = self::find($id);
if($info['entry_time']>0){
$info['entry_time'] = date('Y-m-d',$info['entry_time']);
}
else{
$info['entry_time'] = '';
}
if($info['position_id']>0){
$info['position']= Db::name('Position')->where('id',$info['position_id'])->value('title');
}
else{
$info['position'] = '';
}
if($info['pid']>0){
$info['pname']= Db::name('Admin')->where('id',$info['pid'])->value('name');
}
else{
$info['pname'] = '';
}
if($info['position_name']>0){
$info['position_name_str']= Db::name('BasicUser')->where('id',$info['position_name'])->value('title');
}
else{
$info['position_name_str']='';
}
if($info['position_rank']>0){
$info['position_rank_str']= Db::name('BasicUser')->where('id',$info['position_rank'])->value('title');
}
else{
$info['position_rank_str']='';
}
if($info['to_did']>0){
$info['department']= Db::name('Department')->where('id',$info['to_did'])->value('title');
}
else{
$info['department']='';
}
if(!empty($info['to_dids'])){
$departments= Db::name('Department')->where('id','in',$info['to_dids'])->column('title');
$info['departments']= implode(',' ,$departments);
}
if(!empty($info['admin_id'])){
$info['admin_name'] = Db::name('Admin')->where([['id','=',$info['admin_id']]])->value('name');
}
if($info['thumb'] !=''){
$thumb_array = Db::name('File')->where('id','in',$info['thumb'])->select();
$info['thumb_array'] = $thumb_array;
}
$info['create_time'] = to_date($info['create_time']);
return $info;
}
/**
* 删除信息
* @param $id
* @param $type
* @return array
*/
public function delById($id,$type=0)
{
if($type==0){
//逻辑删除
try {
$param['delete_time'] = time();
self::where('id', $id)->update(['delete_time'=>time()]);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
else{
//物理删除
try {
self::destroy($id);
add_log('delete', $id);
} catch(\Exception $e) {
return to_assign(1, '操作失败,原因:'.$e->getMessage());
}
}
return to_assign();
}
}
+84
View File
@@ -0,0 +1,84 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\facade\Db;
use think\Validate;
class AdminCheck extends Validate
{
protected $regex = [ 'checkUser' => '/^[A-Za-z]{1}[A-Za-z0-9_-]{3,19}$/'];
// 自定义验证规则
protected function checkUnique($value, $rule, $data)
{
[$table, $field, $id] = explode(',', $rule);
$idField = $id ?: 'id';
$idValue = $data[$idField] ?? null;
$map = [
[$field, '=', $value],
];
if (!is_null($idValue)) {
$map[] = [$idField, '<>', $idValue];
}
$map[] = ['status', 'in', [0,1]];
$map[] = ['delete_time', '=', 0];
return !Db::name($table)->where($map)->count();
}
protected $rule = [
'name' => 'require|chs',
'username' => 'require|regex:checkUser',
'mobile' => 'require|mobile|checkUnique:Admin,mobile,id',
'email' => 'require|email|checkUnique:Admin,email,id',
'reg_pwd' => 'require|min:6',
'did' => 'require',
'position_id' => 'require',
'type' => 'require',
'entry_time' => 'require',
'id' => 'require',
'pwd' => 'require|min:6|confirm',
'old_pwd' => 'require|different:pwd',
];
protected $message = [
'name.require' => '员工姓名不能为空',
'name.chs' => '员工姓名只能是汉字',
'username.require' => '登录账号不能为空',
'username.regex' => '登录账号必须是以字母开头,只能包含字母数字下划线和减号,4到20位',
'mobile.require' => '手机不能为空',
'mobile.mobile' => '手机格式错误',
'mobile.checkUnique' => '同样的手机号码已经存在,请检查一下是否被离职或者禁用员工占用',
'email.require' => '邮箱不能为空',
'email.email' => '邮箱格式错误',
'email.checkUnique' => '同样的邮箱已经存在,请检查一下是否被离职或者禁用员工占用',
'reg_pwd.require' => '密码不能为空',
'reg_pwd.min' => '密码至少要6个字符',
'did.require' => '请选择所在部门',
'position_id.require' => '请选择职位',
'type.require' => '请选择员工类型',
'entry_time.require' => '请选择入职时间',
'id.require' => '缺少更新条件',
'pwd.require' => '密码不能为空',
'pwd.min' => '密码至少要6个字符',
'pwd.confirm' => '两次密码不一致',
'old_pwd.require' => '请提供旧密码',
'old_pwd.different' => '新密码不能和旧密码一样',
];
protected $scene = [
'add' => ['name', 'username', 'mobile','email','reg_pwd', 'did', 'position_id', 'type', 'entry_time'],
'edit' => ['name', 'mobile','email', 'did', 'position_id', 'entry_time', 'id'],
'editPwd' => ['old_pwd', 'pwd'],
];
}
+34
View File
@@ -0,0 +1,34 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
class BasicUserCheck extends Validate
{
protected $rule = [
'title' => 'require',
'id' => 'require',
];
protected $message = [
'title.require' => '名称不能为空',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['id', 'title'],
];
}
+53
View File
@@ -0,0 +1,53 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class BlacklistValidate extends Validate
{
// 自定义验证规则
protected function checkOne($value,$rule,$data=[])
{
$id = isset($data['id'])?$data['id']:0;
$count_a = Db::name('Blacklist')->where([['idcard','=',$data['idcard']],['id','<>',$id],['delete_time','=',0]])->count();
$count_b = Db::name('Blacklist')->where([['mobile','=',$data['mobile']],['id','<>',$id],['delete_time','=',0]])->count();
if($count_a>0 || $count_b>0){
return false;
}
else{
return true;
}
}
protected $rule = [
'name' => 'require',
'mobile' => 'require|checkOne',
'idcard' => 'checkOne',
'id' => 'require',
];
protected $message = [
'name.require' => '姓名不能为空',
'mobile.require' => '手机号码不能为空',
'mobile.checkOne' => '同样的手机号码已经存在',
'idcard.checkOne' => '同样的身份证号码已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['name','idcard'],
'edit' => ['name','idcard', 'id'],
];
}
+42
View File
@@ -0,0 +1,42 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class CareCateValidate extends Validate
{
// 自定义验证规则
protected function checkOne($value,$rule,$data=[])
{
$count = Db::name('CareCate')->where([['title','=',$data['title']],['id','<>',$data['id']]])->count();
return $count == 0 ? true : false;
}
protected $rule = [
'title' => 'require|checkOne',
'id' => 'require',
];
protected $message = [
'title.require' => '名称不能为空',
'title.checkOne' => '同样的名称已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['title', 'id'],
];
}
+34
View File
@@ -0,0 +1,34 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class CareValidate extends Validate
{
protected $rule = [
'uid' => 'require',
'id' => 'require',
];
protected $message = [
'title.require' => '员工不能为空',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['uid'],
'edit' => ['uid', 'id'],
];
}
+34
View File
@@ -0,0 +1,34 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
class DepartmentCheck extends Validate
{
protected $rule = [
'title' => 'require',
'id' => 'require',
];
protected $message = [
'title.require' => '部门名称不能为空',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['id', 'title'],
];
}
@@ -0,0 +1,44 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class LaborContractValidate extends Validate
{
// 自定义验证规则
protected function checkOne($value,$rule,$data=[])
{
$count = Db::name('LaborContract')->where([['code','=',$data['code']],['id','<>',$data['id']],['delete_time','=',0]])->count();
return $count == 0 ? true : false;
}
protected $rule = [
'code' => 'require|checkOne',
'title' => 'require',
'id' => 'require',
];
protected $message = [
'code.require' => '合同编码不能为空',
'code.checkOne' => '同样的合同编码已经存在',
'title' => '合同名称不能为空',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['code','title'],
'edit' => ['code','title', 'id'],
];
}
+55
View File
@@ -0,0 +1,55 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\facade\Db;
use think\Validate;
class PositionCheck extends Validate
{
// 自定义验证规则
protected function checkUnique($value, $rule, $data)
{
[$table, $field, $id] = explode(',', $rule);
$idField = $id ?: 'id';
$idValue = $data[$idField] ?? null;
$map = [
[$field, '=', $value],
];
if (!is_null($idValue)) {
$map[] = [$idField, '<>', $idValue];
}
$map[] = ['status', '=', 1];
return !Db::name($table)->where($map)->count();
}
protected $rule = [
'title' => 'require|checkUnique:Position,title,id',
'work_price' => 'require|number',
'group_id' => 'require',
'id' => 'require'
];
protected $message = [
'title.require' => '岗位名称不能为空',
'title.checkUnique' => '同样的岗位名称已经存在',
'work_price.require' => '岗位工时单价不能为空',
'work_price.number' => '岗位工时单价只能是整数',
'group_id.require' => '至少要选择一个角色权限',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title', 'work_price', 'group_id'],
'edit' => ['title', 'work_price', 'group_id', 'id'],
];
}
+42
View File
@@ -0,0 +1,42 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class RewardsCateValidate extends Validate
{
// 自定义验证规则
protected function checkOne($value,$rule,$data=[])
{
$count = Db::name('RewardsCate')->where([['title','=',$data['title']],['id','<>',$data['id']]])->count();
return $count == 0 ? true : false;
}
protected $rule = [
'title' => 'require|checkOne',
'id' => 'require',
];
protected $message = [
'title.require' => '名称不能为空',
'title.checkOne' => '同样的名称已经存在',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['title'],
'edit' => ['title', 'id'],
];
}
+34
View File
@@ -0,0 +1,34 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class RewardsValidate extends Validate
{
protected $rule = [
'uid' => 'require',
'id' => 'require',
];
protected $message = [
'title.require' => '员工不能为空',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['uid'],
'edit' => ['uid', 'id'],
];
}
+55
View File
@@ -0,0 +1,55 @@
<?php
/**
+-----------------------------------------------------------------------------------------------
* GouGuOPEN [ 左手研发,右手开源,未来可期!]
+-----------------------------------------------------------------------------------------------
* @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
+-----------------------------------------------------------------------------------------------
* @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
+-----------------------------------------------------------------------------------------------
* @Author 勾股工作室 <hdm58@qq.com>
+-----------------------------------------------------------------------------------------------
*/
namespace app\user\validate;
use think\Validate;
use think\facade\Db;
class Talent extends Validate
{
// 自定义验证规则
protected function checkUnique($value, $rule, $data)
{
[$table, $field, $id] = explode(',', $rule);
$idField = $id ?: 'id';
$idValue = $data[$idField] ?? null;
$map = [
[$field, '=', $value],
];
if (!is_null($idValue)) {
$map[] = [$idField, '<>', $idValue];
}
$map[] = ['status', '=', 1];
return !Db::name($table)->where($map)->count();
}
protected $rule = [
'name' => 'require|chs',
'mobile' => 'require|mobile|checkUnique:Admin,mobile,id',
'id' => 'require',
];
protected $message = [
'name.require' => '员工姓名不能为空',
'name.chs' => '员工姓名只能是汉字',
'mobile.require' => '手机不能为空',
'mobile.mobile' => '手机号码格式错误',
'mobile.checkUnique' => '同样的手机号码已经存在入职员工内,请与人事核对后再申请',
'id.require' => '缺少更新条件',
];
protected $scene = [
'add' => ['name', 'mobile'],
'edit' => ['name', 'mobile','id'],
];
}
+138
View File
@@ -0,0 +1,138 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-3">
<div class="layui-card">
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
<ul class="layui-tab-title" style="border-bottom:none;">
<li class="layui-this" data-index="1">职务</li>
<li data-index="2">职级</li>
</ul>
<div class="layui-tab-content" style="padding:0">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
</div>
</div>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm add-new" type="button">+ 新增内容</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool, element = layui.element,form = layui.form;
var data_type=1;
element.on('tab(tab)', function(data){
data_type = data.index+1;
layui.pageTable.reload({where:{types:data_type},page:{curr:1}});
return false;
});
layui.pageTable = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,title:'基础数据列表'
,url: "/user/basic/datalist"
,where:{types:data_type}
,page: false
,cellMinWidth: 80
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '名称'}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span class="green">正常</span>';
var html2='<span class="yellow">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:100,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(test)',function (obj) {
if(obj.event === 'edit'){
addExpense(obj.data.id,obj.data.title);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该数据吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/basic/set", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该数据吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/basic/set", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
layer.close(index);
});
}
});
$('body').on('click','.add-new',function(){
addExpense(0,'');
});
function addExpense(id,val){
var title = '新增内容';
if(id>0){
title = '编辑内容';
}
layer.prompt({
title: title,
value: val,
yes: function(index, layero) {
// 获取文本框输入的值
var value = layero.find(".layui-layer-input").val();
if (value) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/basic/add", {id: id,types:data_type,title: value}, callback);
layer.close(index);
} else {
layer.msg('请填写内容');
}
}
})
}
}
</script>
{/block}
<!-- /脚本 -->
+51
View File
@@ -0,0 +1,51 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">黑名单</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">姓名<font>*</font></td>
<td><input type="text" name="name" class="layui-input" placeholder="请输入姓名" lay-verify="required" lay-reqText="请输入姓名" value="{$detail.name|default=''}"></td>
<td class="layui-td-gray-2">手机号码<font>*</font></td>
<td><input type="text" name="mobile" placeholder="请输入手机号码" class="layui-input" lay-verify="required|phone" lay-reqText="请输入手机号码" value="{$detail.mobile|default=''}"></td>
<td class="layui-td-gray-2">身份证号码</td>
<td><input type="text" name="idcard" placeholder="请输入身份证号码" class="layui-input" lay-verify="identity" value="{$detail.idcard|default=''}"></td>
</tr>
<tr>
<td class="layui-td-gray">备注说明</td>
<td colspan="5"><textarea name="remark" placeholder="请输入备注说明" class="layui-textarea">{$detail.remark|default=''}</textarea></td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool'];
function gouguInit() {
var form = layui.form, tool = layui.tool;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/blacklist/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+89
View File
@@ -0,0 +1,89 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
<div class="layui-input-inline" style="width:300px">
<input type="text" name="keywords" placeholder="关键字" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:150px">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="table_blacklist" lay-filter="table_blacklist"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-group">
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/user/blacklist/add">+ 添加黑名单</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','tablePlus'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool;
layui.pageTable = table.render({
elem: "#table_blacklist"
,title: '黑名单列表'
,toolbar: "#toolbarDemo"
,url: "/user/blacklist/datalist"
,page: true
,limit: 20
,cellMinWidth: 80
,height: 'full-112'
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'name',title: '姓名',width:90}
,{field:'mobile',title: '手机号码',width:120}
,{field:'idcard',title: '身份证号码',width:200}
,{field:'remark',title: '备注信息'}
,{field:'admin_name',title: '创建人',width:90,align:'center'}
,{field:'create_time', title: '创建时间',width:150,align:'center'}
,{width:100,fixed:'right',title: '操作', align:'center',ignoreExport:true,templet: function(d){
var html='';
var btn1='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn2='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
html = '<div class="layui-btn-group">'+btn1+btn2+'</div>';
return html;
}}
]]
});
table.on('tool(table_blacklist)',function (obj) {
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = obj.data;
if (obj.event === 'view') {
tool.side("/user/blacklist/view?id="+data.id);
return;
}
if (obj.event === 'edit') {
tool.side("/user/blacklist/add?id="+data.id);
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
tool.delete("/user/blacklist/del", { id: data.id }, callback);
layer.close(index);
});
return;
}
});
}
</script>
{/block}
<!-- /脚本 -->
+109
View File
@@ -0,0 +1,109 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">关怀信息</h3>
<table class="layui-table layui-table-form">
{eq name="$id" value="0"}
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td>
<input type="text" name="uname" lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择员工姓名" class="layui-input picker-admin" readonly value="">
<input type="hidden" name="uid" value="0">
</td>
<td class="layui-td-gray">关怀项目<font>*</font></td>
<td>
<select name="care_cate" lay-verify="required" lay-reqText="请选择关怀项目">
<option value="">请选择</option>
{volist name=":get_base_data('care_cate')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">当前状态</td>
<td>
<input type="radio" name="status" lay-filter="checktype" value="1" title="待执行" checked>
<input type="radio" name="status" lay-filter="checktype" value="2" title="已执行" >
</td>
</tr>
{else/}
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td>
<input type="text" name="uname" lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择员工姓名" class="layui-input picker-admin" readonly value="{$detail.user_name|default=''}">
<input type="hidden" name="uid" value="{$detail.uid|default=0}">
</td>
<td class="layui-td-gray">关怀项目<font>*</font></td>
<td>
<select name="care_cate" lay-verify="required" lay-reqText="请选择关怀项目">
<option value="">请选择</option>
{volist name=":get_base_data('care_cate')" id="vo"}
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.care_cate"} selected{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">当前状态</td>
<td>
<input type="radio" name="status" value="1" title="待执行" {eq name="$detail.status" value="1"} checked{/eq}>
<input type="radio" name="status" value="2" title="已执行" {eq name="$detail.status" value="2"} checked{/eq}>
</td>
</tr>
{/eq}
<tr>
<td class="layui-td-gray-2">关怀金额(元)<font>*</font></td>
<td>
<input type="text" name="cost" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善金额,仅为数字" class="layui-input" value="{$detail.cost|default=''}">
</td>
<td class="layui-td-gray">关怀日期<font>*</font></td>
<td>
<input type="text" name="care_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择关怀日期" class="layui-input tool-time" value="{$detail.care_time|default=''}">
</td>
<td class="layui-td-gray">关怀假日</td>
<td>
<input type="text" name="vacation" lay-verify="number" autocomplete="off" placeholder="" lay-reqText="请完善关怀假日,仅为数字" class="layui-input" value="{$detail.vacation|default=''}">
</td>
</tr>
<tr>
<td class="layui-td-gray">关怀物品</td>
<td colspan="5">
<input type="text" name="thing" autocomplete="off" placeholder="请输入关怀物品,可空" class="layui-input" value="{$detail.thing|default=''}">
</td>
</tr>
<tr>
<td class="layui-td-gray">关怀描述</td>
<td colspan="5">
<textarea name="remark" placeholder="请输入关怀描述,可空" class="layui-textarea">{$detail.remark|default=''}</textarea>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="{$id|default=0}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool','oaPicker'];
function gouguInit() {
var form = layui.form, tool = layui.tool;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/user/care/add", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+133
View File
@@ -0,0 +1,133 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
<div class="layui-input-inline" style="width:100px">
<select name="status">
<option value="">关怀状态</option>
<option value="1">待执行</option>
<option value="2">已执行</option>
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="care_cate">
<option value="">关怀项目</option>
{volist name=":get_base_data('care_cate')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:80px">
<input type="text" name="uname" placeholder="关怀员工" class="layui-input picker-admin" value="" readonly>
<input type="text" name="uid" value="" style="display:none;">
</div>
<div class="layui-input-inline" style="width:292px;">
<input type="text" class="layui-input" id="diff_time" placeholder="关怀日期" readonly name="diff_time">
</div>
<div class="layui-input-inline" style="width:188px">
<input type="text" name="keywords" placeholder="关键字" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:150px;">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="table_care" lay-filter="table_care"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="add" type="button">+ 添加关怀管理</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaPicker','tablePlus','laydatePlus'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus;
var diff_time = new laydatePlus({'target':'diff_time'});
layui.pageTable = table.render({
elem: "#table_care"
, toolbar: "#toolbarDemo"
,url: "/user/care/datalist"
,page: true
,limit: 20
,cellMinWidth: 80
,height: 'full-114'
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'status',title: '状态',width:90, align:'center',templet: function(d){
var html='';
if(d.status==1){
return '<span class="green">『待执行』</span>';
}
if(d.status==2){
return '<span class="red">『已执行』</span>';
}
else{
return '-';
}
}}
,{field:'user_name',title: '员工',width:90, align:'center'}
,{field:'cate',title: '关怀项目',width:100, align:'center'}
,{field:'care_time',title: '关怀日期',width:90, align:'center'}
,{field:'cost',title: '金额(元)',width:90, align:'right'}
,{field:'vacation',title: '关怀假日',width:90, align:'center'}
,{field:'thing',title: '物品'}
,{field:'admin_name',title: '创建人',width:90,align:'center'}
,{field:'create_time', title: '创建时间',width:150,align:'center'}
,{width:120,fixed:'right',title: '操作', align:'center',templet: function(d){
var html='';
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详细</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
html = '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
return html;
}}
]]
});
//表头工具栏事件
table.on('toolbar(table_care)', function(obj){
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = checkStatus.data;
if (obj.event === 'add') {
tool.side("/user/care/add");
return;
}
});
table.on('tool(table_care)',function (obj) {
let data=obj.data
if (obj.event === 'view') {
tool.side("/user/care/view?id="+data.id);
return;
}
if (obj.event === 'edit') {
tool.side("/user/care/add?id="+data.id);
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
tool.delete("/user/care/del", { id: data.id }, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+53
View File
@@ -0,0 +1,53 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">奖罚信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.user_name|default=''}</td>
<td class="layui-td-gray">关怀类型</td>
<td>
{eq name="$detail.types" value="1"}<span class="green">奖励</span>{/eq}
{eq name="$detail.types" value="2"}<span class="red">惩罚</span>{/eq}
</td>
<td class="layui-td-gray">当前状态</td>
<td>
{eq name="$detail.status" value="1"}<span class="green">『待执行』</span>{/eq}
{eq name="$detail.status" value="2"}<span class="red">『已执行』</span>{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray">关怀项目</td>
<td>{$detail.cate}</td>
<td class="layui-td-gray-2">关怀金额(元)</td>
<td>{$detail.cost}</td>
<td class="layui-td-gray">关怀日期</td>
<td>{$detail.care_time}</td>
</tr>
<tr>
<td class="layui-td-gray">关怀物品</td>
<td colspan="5">{$detail.thing}</td>
</tr>
<tr>
<td class="layui-td-gray">奖罚描述</td>
<td colspan="5">{$detail.remark|default=''}</td>
</tr>
</table>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool'];
function gouguInit() {
var tool = layui.tool;
}
</script>
{/block}
<!-- /脚本 -->
+48
View File
@@ -0,0 +1,48 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">关怀项目</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">关怀项目名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入关怀项目名称" lay-reqText="请输入关怀项目名称"class="layui-input" value="{$detail.title|default=''}">
</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
</td>
</tr>
</table>
<div class="pt-3">
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool'];
function gouguInit() {
var form = layui.form, tool = layui.tool;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/user/carecate/add", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+124
View File
@@ -0,0 +1,124 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<table class="layui-hide" id="table_care_cate" lay-filter="table_care_cate"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加关怀项目</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool;
layui.pageTable = table.render({
elem: "#table_care_cate"
,toolbar: '#toolbarDemo'
,url: "/user/carecate/datalist"
,page: false
,limit: 999
,cellMinWidth: 80
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '名称'}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span class="green">正常</span>';
var html2='<span class="yellow">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:100,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(table_care_cate)',function (obj) {
if(obj.event === 'edit'){
add_cate(obj.data.id,obj.data.title);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该关怀项目吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/carecate/set", {id:obj.data.id,status: 0}, callback);
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该关怀项目吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/carecate/set", {id:obj.data.id,status:1}, callback);
layer.close(index);
});
}
});
$('body').on('click','.add-new',function(){
add_cate(0,'');
});
function add_cate(id,val){
var title = '新增关怀项目';
if(id>0){
title = '编辑关怀项目';
}
layer.prompt({
title: title,
value: val,
yes: function(index, layero) {
// 获取文本框输入的值
var value = layero.find(".layui-layer-input").val();
if (value) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/carecate/add", {id: id,title: value}, callback);
layer.close(index);
} else {
layer.msg('请填写关怀项目名称');
}
}
})
}
}
</script>
{/block}
<!-- /脚本 -->
+105
View File
@@ -0,0 +1,105 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-3">部门架构</h3>
{eq name="$id" value="0"}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">部门名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入部门名称" lay-reqText="请输入部门名称" class="layui-input">
</td>
<td class="layui-td-gray">上级部门<font>*</font></td>
<td>
<select name="pid" lay-verify="required" lay-reqText="请选择上级部门">
<option value="0">作为顶级部门</option>
{volist name="department" id="v"}
<option value="{$v.id}" {eq name="$pid" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">排序<font>*</font></td>
<td>
<input type="text" name="sort" lay-verify="required|number" value="0" autocomplete="off" placeholder="请输入排序" lay-reqText="请输入排序" class="layui-input">
</td>
<td class="layui-td-gray-2">部门联系电话</td>
<td>
<input type="text" name="phone" placeholder="请输入部门联系电话,可空" autocomplete="off" class="layui-input">
</td>
</tr>
</table>
{else/}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">部门名称<font>*</font></td>
<td>
<input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入部门名称" lay-reqText="请输入部门名称" class="layui-input">
</td>
<td class="layui-td-gray">上级部门<font>*</font></td>
<td>
<select name="pid" lay-verify="required" lay-reqText="请选择上级部门">
<option value="0">作为顶级部门</option>
{volist name="department" id="v"}
<option value="{$v.id}" {eq name="$detail.pid" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">排序<font>*</font></td>
<td>
<input type="text" name="sort" lay-verify="required|number" value="{$detail.sort}" autocomplete="off" placeholder="请输入排序" lay-reqText="请输入排序" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">部门负责人</td>
<td colspan="3">
<select id="leader_ids" name="leader_ids" xm-selected="{$detail.leader_ids|default=''}" xm-select="select1" xm-select-skin="default"></select>
</td>
<td class="layui-td-gray-2">部门联系电话</td>
<td>
<input type="text" name="phone" value="{$detail.phone}" placeholder="请输入部门联系电话,可空" autocomplete="off" class="layui-input">
</td>
</tr>
</table>
{/eq}
<div class="pt-4">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const did = {$id};
const moduleInit = ['tool','formSelects'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects=layui.formSelects;
if(did>0){
//选择部门人员
var selected = $('#leader_ids').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_employee_select?did='+did,
keyword: selected
});
}
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/user/department/add", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+84
View File
@@ -0,0 +1,84 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<div class="gg-form-bar border-t border-x" style="padding-bottom:12px;">
<button class="layui-btn layui-btn-sm add-menu">+ 添加部门</button>
</div>
<div>
<table class="layui-hide" id="treeTable" lay-filter="treeTable"></table>
</div>
</div>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var treeTable = layui.treeTable, tool = layui.tool;
layui.pageTable = treeTable.render({
elem: '#treeTable'
,id: 'treeTable'
,url: "/user/department/index"
,tree: { // treeTable 特定属性集
customName: {name:'title'},
data: {},
view: {showIcon:false},
async: {},
callback: {}
}
,done:function(){
treeTable.expandAll('treeTable', true); // 关闭全部节点
}
, cols: [[
{ field: 'id', width: 80, title: 'ID号', align: 'center' }
, { field: 'pid', title: '上级部门ID',width: 90, align: 'center'}
, { field: 'title', title: '部门名称'}
, { field: 'sort', title: '排序',width: 60, align: 'center'}
, { field: 'leader', title: '部门负责人',width: 200}
, { field: 'phone', title: '部门电话',width: 136,}
, { width:168, title: '操作', align: 'center', templet: function (d) {
var html = '<span class="layui-btn-group"><button class="layui-btn layui-btn-xs" lay-event="add">添加下级部门</button><button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button></span>';
return html;
}
}
]]
, page: false
});
//表头工具栏事件
$('body').on('click','.add-menu', function(){
tool.side("/user/department/add");
return;
});
//操作按钮
treeTable.on('tool(treeTable)', function (obj) {
if (obj.event === 'add') {
tool.side("/user/department/add?pid="+obj.data.id);
return;
}
if (obj.event === 'edit') {
tool.side("/user/department/add?id="+obj.data.id);
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
tool.delete("/user/department/delete", { id: obj.data.id }, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+531
View File
@@ -0,0 +1,531 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.tr-none td{padding:20px 0; color:#999;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-2">编辑员工档案</h3>
<table class="layui-table layui-table-form">
<tr>
<td colspan="8"><strong>基本信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.name}</td>
<td class="layui-td-gray-2">员工性别</td>
<td>
{eq name="$detail.sex" value="1"}男{/eq}
{eq name="$detail.sex" value="2"}女{/eq}
</td>
<td rowspan="6" class="layui-td-gray-2">头像</td>
<td rowspan="6" valign="top" style="width: 180px;">
<div class="layui-upload" style="width: 180px;">
<div class="layui-upload-list" id="uploadThumb" style="width: 100%; height:180px; overflow: hidden;">
<img src="{$detail.thumb}" height="180" style="max-width: 100%;" />
<input type="hidden" name="thumb" value="{$detail.thumb}">
</div>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;" id="uploadImg">更换头像</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">出生日期</td>
<td><input type="text" name="birthday" value="{$detail.birthday}" readonly autocomplete="off" placeholder="请选择" class="layui-input tool-time"></td>
<td class="layui-td-gray">身份证号码</td>
<td><input type="text" name="idcard" value="{$detail.idcard}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">政治面貌</td>
<td>
<select name="political">
<option value="0" {eq name="$detail.political" value="0"} selected{/eq}></option>
<option value="1" {eq name="$detail.political" value="1"} selected{/eq}>中共党员</option>
<option value="2" {eq name="$detail.political" value="2"} selected{/eq}>团员</option>
</select>
</td>
<td class="layui-td-gray">婚姻状况</td>
<td>
<input type="radio" name="marital_status" value="1" title="未婚" {eq name="$detail.marital_status" value="1"} checked{/eq}>
<input type="radio" name="marital_status" value="2" title="已婚" {eq name="$detail.marital_status" value="2"} checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray">民族</td>
<td><input type="text" name="nation" value="{$detail.nation}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">籍贯</td>
<td><input type="text" name="native_place" value="{$detail.native_place}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">户口性质</td>
<td>
<input type="radio" name="resident_type" value="1" title="农村户口" {eq name="$detail.resident_type" value="1"} checked{/eq}>
<input type="radio" name="resident_type" value="2" title="城镇户口" {eq name="$detail.resident_type" value="2"} checked{/eq}>
</td>
<td class="layui-td-gray">户口所在地</td>
<td><input type="text" name="resident_place" value="{$detail.resident_place}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">毕业院校</td>
<td><input type="text" name="graduate_school" value="{$detail.graduate_school}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">毕业日期</td>
<td><input type="text" name="graduate_day" value="{$detail.graduate_day}" readonly autocomplete="off" placeholder="请选择" class="layui-input tool-time"></td>
</tr>
<tr>
<td class="layui-td-gray">最高学位</td>
<td><input type="text" name="education" value="{$detail.education}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">专业</td>
<td><input type="text" name="speciality" value="{$detail.speciality}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">参加工作时间</td>
<td><input type="text" name="work_date" value="{$detail.work_date}" readonly autocomplete="off" placeholder="请输入" class="layui-input tool-time"></td>
</tr>
<tr>
<td class="layui-td-gray">家庭住址</td>
<td><input type="text" name="home_address" value="{$detail.home_address}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">手机号码</td>
<td>{$detail.mobile}</td>
<td class="layui-td-gray">电子邮箱</td>
<td>{$detail.email}</td>
</tr>
<tr>
<td class="layui-td-gray">现住地址</td>
<td><input type="text" name="current_address" value="{$detail.current_address}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">紧急联系人</td>
<td><input type="text" name="contact" value="{$detail.contact}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">紧急联系电话</td>
<td><input type="text" name="contact_mobile" value="{$detail.contact_mobile}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">员工简介</td>
<td colspan="7">
<textarea name="desc" placeholder="请输入员工简介" class="layui-textarea">{$detail.desc|default=''}</textarea>
</td>
</tr>
<tr>
<td colspan="8"><strong>入职信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">所在部门</td>
<td>{$detail.department}</td>
<td class="layui-td-gray">上级主管</td>
<td>{$detail.pname|default='无'}</td>
<td class="layui-td-gray">岗位</td>
<td>{$detail.position}</td>
</tr>
<tr>
<td class="layui-td-gray">入职日期</td>
<td>{$detail.entry_time|date='Y-m-d'}</td>
<td class="layui-td-gray">职务</td>
<td>
<select name="position_name" lay-verify="required" lay-reqText="请选择职务">
<option value="0">请选择</option>
{volist name=":get_base_type_data('basic_user',1)" id="v"}
<option value="{$v.id}" {eq name="$detail.position_name" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职级</td>
<td>
<select name="position_rank" lay-verify="required" lay-reqText="请选择职级">
<option value="0">请选择</option>
{volist name=":get_base_type_data('basic_user',2)" id="v"}
<option value="{$v.id}" {eq name="$detail.position_rank" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">员工类型</td>
<td>
{eq name="$detail.type" value="3"}实习{/eq}
{eq name="$detail.type" value="2"}试用{/eq}
{eq name="$detail.type" value="1"}正式{/eq}
</td>
<td class="layui-td-gray">员工工号</td>
<td><input type="text" name="job_number" value="{$detail.job_number}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">社保卡号</td>
<td><input type="text" name="social_account" value="{$detail.social_account}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray-2">工资卡开户行</td>
<td><input type="text" name="bank_info" value="{$detail.bank_info}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">工资卡帐号</td>
<td><input type="text" name="bank_account" value="{$detail.bank_account}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">公积金号</td>
<td><input type="text" name="provident_account" value="{$detail.provident_account}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td colspan="8"><strong>教育经历</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="edu">+ 教育经历</button></td>
</tr>
<tr>
<td colspan="8">
<table id="edu_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="150">开始时间</th>
<th width="150">结束时间</th>
<th width="200">就读院校</th>
<th width="150">学习专业</th>
<th width="100">所获学历</th>
<th>备注说明</th>
<th width="60">操作</th>
</tr>
{empty name="$edu"}
<tr class="tr-none">
<td colspan="7">暂无数据</td>
</tr>
{else/}
{volist name="$edu" id="v"}
<tr class="edu_interfix">
<td><input type="text" name="edu_start_time[]" value="{$v.start_time}" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善开始时间"></td>
<td><input type="text" name="edu_end_time[]" value="{$v.end_time}" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善结束时间"></td>
<td><input type="text" name="edu_title[]" value="{$v.title}" class="layui-input" lay-verify="required" lay-reqText="请完善就读院校"></td>
<td><input type="text" name="edu_speciality[]" value="{$v.speciality}" class="layui-input" lay-verify="required" lay-reqText="请完善学习专业"></td>
<td><input type="text" name="edu_education[]" value="{$v.education}" class="layui-input" lay-verify="required" lay-reqText="请完善所获学历"></td>
<td><input type="text" name="edu_remark[]" class="layui-input" value="{$v.remark}"></td>
<td><input type="hidden" name="edu_id[]" class="layui-input" value="{$v.id}"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="{$v.id}" data-type="edu" lay-event="del">删除</a></td>
</tr>
{/volist}
{/empty}
</table>
</td>
</tr>
<tr>
<td colspan="8"><strong>工作经历</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="work">+ 工作经历</button></td>
</tr>
<tr>
<td colspan="8">
<table id="work_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="150">开始时间</th>
<th width="150">结束时间</th>
<th width="200">公司名称</th>
<th width="100">职位</th>
<th>备注说明</th>
<th width="60">操作</th>
</tr>
{empty name="$work"}
<tr class="tr-none">
<td colspan="6">暂无数据</td>
</tr>
{else/}
{volist name="$work" id="v"}
<tr class="work_interfix">
<td><input type="text" name="work_start_time[]" value="{$v.start_time}" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善开始时间"></td>
<td><input type="text" name="work_end_time[]" value="{$v.end_time}" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善结束时间"></td>
<td><input type="text" name="work_title[]" value="{$v.title}" class="layui-input" lay-verify="required" lay-reqText="请完善公司名称"></td>
<td><input type="text" name="work_position[]" value="{$v.position}" class="layui-input" lay-verify="required" lay-reqText="请完善职位"></td>
<td><input type="text" name="work_remark[]" class="layui-input" value="{$v.remark}"></td>
<td><input type="hidden" name="work_id[]" class="layui-input" value="{$v.id}"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="{$v.id}" data-type="work" lay-event="del">删除</a></td>
</tr>
{/volist}
{/empty}
</table>
</td>
</tr>
<tr>
<td colspan="8"><strong>相关证书</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="certificate">+ 相关证书</button></td>
</tr>
<tr>
<td colspan="8">
<table id="certificate_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="150">证书名称</th>
<th width="150">获得时间</th>
<th width="200">颁发机构</th>
<th>备注说明</th>
<th width="60">操作</th>
</tr>
{empty name="$certificate"}
<tr class="tr-none">
<td colspan="5">暂无数据</td>
</tr>
{else/}
{volist name="$certificate" id="v"}
<tr class="certificate_interfix">
<td><input type="text" name="certificate_title[]" value="{$v.title}" class="layui-input" lay-verify="required" lay-reqText="请完善证书名称"></td>
<td><input type="text" name="certificate_start_time[]" value="{$v.start_time}" class="layui-input tool-time" lay-verify="required" lay-reqText="请完善获得时间"></td>
<td><input type="text" name="certificate_authority[]" value="{$v.authority}" class="layui-input" lay-verify="required" lay-reqText="请完善颁发机构"></td>
<td><input type="text" name="certificate_remark[]" class="layui-input" value="{$v.remark}"></td>
<td><input type="hidden" name="certificate_id[]" class="layui-input" value="{$v.id}"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="{$v.id}" data-type="certificate" lay-event="del">删除</a></td>
</tr>
{/volist}
{/empty}
</table>
</td>
</tr>
<tr>
<td colspan="8"><strong>计算机技能</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="skills">+ 计算机技能</button></td>
</tr>
<tr>
<td colspan="8">
<table id="skills_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="200">技能名称</th>
<th width="150">熟悉程度</th>
<th>备注说明</th>
<th width="60">操作</th>
</tr>
{empty name="$skills"}
<tr class="tr-none">
<td colspan="4">暂无数据</td>
</tr>
{else/}
{volist name="$skills" id="v"}
<tr class="skills_interfix">
<td><input type="text" name="skills_title[]" value="{$v.title}" class="layui-input" lay-verify="required" lay-reqText="请完善技能名称"></td>
<td>
<select name="skills_know[]" lay-verify="required" lay-reqText="请选择熟悉程度">
<option value="">请选择</option>
<option value="1" {eq name="$v.know" value="1"} selected{/eq}>熟练</option>
<option value="2" {eq name="$v.know" value="2"} selected{/eq}>良好</option>
<option value="3" {eq name="$v.know" value="3"} selected{/eq}>一般</option>
<option value="4" {eq name="$v.know" value="4"} selected{/eq}>较差</option>
</select>
</td>
<td><input type="text" name="skills_remark[]" class="layui-input" value="{$v.remark}"></td>
<td><input type="hidden" name="skills_id[]" class="layui-input" value="{$v.id}"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="{$v.id}" data-type="skills" lay-event="del">删除</a></td>
</tr>
{/volist}
{/empty}
</table>
</td>
</tr>
<tr>
<td colspan="8"><strong>语言能力</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="language">+ 语言能力</button></td>
</tr>
<tr>
<td colspan="8">
<table id="language_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="200">语言名称</th>
<th width="150">熟悉程度</th>
<th>备注说明</th>
<th width="60">操作</th>
</tr>
{empty name="$language"}
<tr class="tr-none">
<td colspan="4">暂无数据</td>
</tr>
{else/}
{volist name="$language" id="v"}
<tr class="language_interfix">
<td><input type="text" name="language_title[]" value="{$v.title}" class="layui-input" lay-verify="required" lay-reqText="请完善技能名称"></td>
<td>
<select name="language_know[]" lay-verify="required" lay-reqText="请选择熟悉程度">
<option value="">请选择</option>
<option value="1" {eq name="$v.know" value="1"} selected{/eq}>熟练</option>
<option value="2" {eq name="$v.know" value="2"} selected{/eq}>良好</option>
<option value="3" {eq name="$v.know" value="3"} selected{/eq}>一般</option>
<option value="4" {eq name="$v.know" value="4"} selected{/eq}>较差</option>
</select>
</td>
<td><input type="text" name="language_remark[]" class="layui-input" value="{$v.remark}"></td>
<td><input type="hidden" name="language_id[]" class="layui-input" value="{$v.id}"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="{$v.id}" data-type="language" lay-event="del">删除</a></td>
</tr>
{/volist}
{/empty}
</table>
</td>
</tr>
<tr>
<td colspan="8"><strong>档案相关附件</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="upload" id="uploadBtn">+ 上传附件</button></td>
</tr>
<tr>
<td colspan="8">
<div class="layui-row" id="uploadBox">
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids}">
{notempty name="$detail.file_ids"}
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4" id="uploadImg{$vo.id}">{:file_card($vo)}</div>
{/volist}
{/notempty}
</div>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" value="{$detail.id}" name="id">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
<div style="display:none;">
<table>
<tbody id="edu_html">
<tr class="edu_interfix">
<td><input type="text" name="edu_start_time[]" value="" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善开始时间"></td>
<td><input type="text" name="edu_end_time[]" value="" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善结束时间"></td>
<td><input type="text" name="edu_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善就读院校"></td>
<td><input type="text" name="edu_speciality[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善学习专业"></td>
<td><input type="text" name="edu_education[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善所获学历"></td>
<td><input type="text" name="edu_remark[]" class="layui-input" value=""></td>
<td><input type="hidden" name="edu_id[]" class="layui-input" value="0"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" data-type="edu" lay-event="del">删除</a></td>
</tr>
</tbody>
</table>
</div>
<div style="display:none;">
<table>
<tbody id="work_html">
<tr class="work_interfix">
<td><input type="text" name="work_start_time[]" value="" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善开始时间"></td>
<td><input type="text" name="work_end_time[]" value="" class="layui-input tool-time" readonly lay-verify="required" lay-reqText="请完善结束时间"></td>
<td><input type="text" name="work_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善公司名称"></td>
<td><input type="text" name="work_position[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善职位"></td>
<td><input type="text" name="work_remark[]" class="layui-input" value=""></td>
<td><input type="hidden" name="work_id[]" class="layui-input" value="0"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" data-type="work" lay-event="del">删除</a></td>
</tr>
</tbody>
</table>
</div>
<div style="display:none;">
<table>
<tbody id="certificate_html">
<tr class="certificate_interfix">
<td><input type="text" name="certificate_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善证书名称"></td>
<td><input type="text" name="certificate_start_time[]" value="" class="layui-input tool-time" lay-verify="required" lay-reqText="请完善获得时间"></td>
<td><input type="text" name="certificate_authority[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善颁发机构"></td>
<td><input type="text" name="certificate_remark[]" class="layui-input" value=""></td>
<td><input type="hidden" name="certificate_id[]" class="layui-input" value="0"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" data-type="certificate" lay-event="del">删除</a></td>
</tr>
</tbody>
</table>
</div>
<div style="display:none;">
<table>
<tbody id="skills_html">
<tr class="skills_interfix">
<td><input type="text" name="skills_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善技能名称"></td>
<td>
<select name="skills_know[]" lay-verify="required" lay-reqText="请选择熟悉程度">
<option value="">请选择</option>
<option value="1">熟练</option>
<option value="2">良好</option>
<option value="3">一般</option>
<option value="4">较差</option>
</select>
</td>
<td><input type="text" name="skills_remark[]" class="layui-input" value=""></td>
<td><input type="hidden" name="skills_id[]" class="layui-input" value="0"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" data-type="skills" lay-event="del">删除</a></td>
</tr>
</tbody>
</table>
</div>
<div style="display:none;">
<table>
<tbody id="language_html">
<tr class="language_interfix">
<td><input type="text" name="language_title[]" value="" class="layui-input" lay-verify="required" lay-reqText="请完善语言名称"></td>
<td>
<select name="language_know[]" lay-verify="required" lay-reqText="请选择熟悉程度">
<option value="">请选择</option>
<option value="1">熟练</option>
<option value="2">良好</option>
<option value="3">一般</option>
<option value="4">较差</option>
</select>
</td>
<td><input type="text" name="language_remark[]" class="layui-input" value=""></td>
<td><input type="hidden" name="language_id[]" class="layui-input" value="0"><a class="layui-btn layui-btn-danger layui-btn-xs" data-id="0" data-type="language" lay-event="del">删除</a></td>
</tr>
</tbody>
</table>
</div>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','uploadPlus'];
function gouguInit() {
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus;
//头像上传
var photoUpload = new uploadPlus({
'use':'single',
'target':'uploadImg',
'callback':function(res){
layer.msg(res.msg);
if (res.code == 0) {
//上传成功
$('#uploadThumb input').attr('value', res.data.filepath);
$('#uploadThumb img').attr('src', res.data.filepath);
}
}
});
//相关附件上传
var attachment = new uploadPlus();
//添加表格
$('.add-tr').on('click',function(){
let type = $(this).data('type');
let html = $('#'+type+'_html').html();
let timestamp = Date.now();
let $html = $(html);
let elem = $html.find('.diff_time').addClass('time_'+timestamp);
$('#'+type+'_table').append($html).find('.tr-none').remove();
form.render();
});
$('body').on('click', '[lay-event="del"]', function() {
var that=$(this);
let type = $(this).data('type');
var _id = that.data('id');
if(_id>0){
layer.confirm('确定删除该数据?', {
icon: 3,
title: '提示'
}, function(index) {
$.ajax({
url: "/user/api/del_profiles",
type:'post',
data: {id: _id},
success: function(res) {
layer.msg(res.msg);
if (res.code == 0) {
that.parents("."+type+"_interfix").remove();
if($('#'+type+'_table').find('tr').length<2){
$('#'+type+'_table').append('<tr class="tr-none"><td colspan="7">暂无数据</td></tr>');
return false;
}
}
}
})
layer.close(index);
});
}
else{
that.parents("."+type+"_interfix").remove();
if($('#'+type+'_table').find('tr').length<2){
$('#'+type+'_table').append('<tr class="tr-none"><td colspan="7">暂无数据</td></tr>');
return false;
}
}
});
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/user/files/add", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+198
View File
@@ -0,0 +1,198 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.tree-left{width:200px; float:left; height:calc(100vh - 79px); overflow-y: auto; border:1px solid #eeeeee; border-right:0; background-color:#fbfbfb; padding:12px 12px 12px 5px;}
.tree-left::-webkit-scrollbar {width: 0;}
.tree-left h3{font-size:16px; height:30px; padding-left:10px; font-weight:800}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<div class="tree-left">
<h3>企业组织架构</h3>
<div id="depament"></div>
</div>
<div class="body-table" style="margin-left:200px; overflow:hidden;">
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
<div class="layui-input-inline" style="width:124px">
<select name="status" lay-filter="status">
<option value="1" selected>正常状态</option>
<option value="2">离职状态</option>
<option value="0">禁止登录</option>
</select>
</div>
<div class="layui-input-inline" style="width:124px">
<select name="political" lay-filter="political">
<option value="">选择政治面貌</option>
<option value="1">中共党员</option>
<option value="2">团员</option>
<option value="0"></option>
</select>
</div>
<div class="layui-input-inline" style="width:136px">
<select name="position_name" lay-filter="position_name">
<option value="">选择员工职务</option>
{volist name=":get_base_type_data('basic_user',1)" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:136px">
<select name="position_rank" lay-filter="position_rank">
<option value="">选择员工职级</option>
{volist name=":get_base_type_data('basic_user',2)" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:360px">
<input type="text" name="keywords" placeholder="关键字,如:ID号/姓名/登录账号/手机号码/电子邮箱" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:150px;">
<input type="text" name="did" style="display:none;" value="0" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">重置</button>
</div>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
</div>
<script type="text/html" id="thumb">
<img src="{{d.thumb}}" width="30" height="30" />
</script>
<script type="text/html" id="toolbara">
<h3>员工档案</h3>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','tablePlus'];
function gouguInit() {
var table = layui.tablePlus,tool = layui.tool,tree = layui.tree,form = layui.form;
$.ajax({
url: "/api/index/get_department_tree",
type:'get',
success:function(res){
//仅节点左侧图标控制收缩
tree.render({
elem: '#depament',
data: res.trees,
onlyIconControl: true, //是否仅允许节点左侧图标控制展开收缩
click: function(obj){
//layer.msg(JSON.stringify(obj.data));
$('#depament').find('.layui-tree-main').removeClass('on');
$(obj.elem).find('.layui-tree-main').eq(0).addClass('on');
$('[name="did"]').val(obj.data.id);
layui.form.render('select');
$('[lay-filter="table-search"]').click();
}
});
}
});
form.on('select(status)', function(data){
$('[lay-filter="table-search"]').click();
});
form.on('select(political)', function(data){
$('[lay-filter="table-search"]').click();
});
form.on('select(position_name)', function(data){
$('[lay-filter="table-search"]').click();
});
form.on('select(position_rank)', function(data){
$('[lay-filter="table-search"]').click();
});
layui.pageTable = table.render({
elem: '#test',
title: '员工档案',
toolbar: '#toolbara',
defaultToolbar: [],
searchreset:function(){
$('#depament').find('.layui-tree-main').removeClass('on');
},
is_excel:true,
url: "/user/files/datalist", //数据接口
height: 'full-114',
size:'lg',
cols: [
[
{field: 'id',title: 'ID号',align: 'center',fixed:'left',width: 80},
{field: 'type',title: '员工类型',align: 'center',width: 80,templet: function (d) {
var html = '';
if(d.type == 1){
html = '<span style="color:#16b777">正式员工</span>'
}
if(d.type == 2){
html = '<span style="color:#01AAED">试用员工</span>'
}
if(d.type == 3){
html = '<span style="color:#ffb800">实 习 生</span>'
}
return html;
}
},
{field: 'name',title: '员工姓名',width: 130,templet:function(d){
return '<div><div style="float:left; width:36px; height:36px; margin-right:5px;"><img src="'+d.thumb+'" style="width:100%; height:100%; vertical-align:top;object-fit: cover; border-radius:3px;" /></div><span>'+d.name+'</span></div>';
}
},
{field: 'mobile',title: '手机号码',align: 'center',width: 110},
{field: 'email',title: '电子邮箱',width: 200},
{field: 'sex',title: '性别',align: 'center',width: 50,templet: function (d) {
var html = '';
if(d.sex == 1){
html = '男'
}
else if(d.sex == 2){
html = '女'
}
return html;
}
},
{field: 'department',title: '所在主部门',width: 100},
{field: 'departments',title: '所在次部门',width: 160},
{field: 'position',title: '岗位职称',align: 'center',width: 100},
{field: 'entry_time',title: '入职日期',align: 'center',width: 100},
{field: 'job_number',title: '工号',align: 'center',width: 120},
{field: 'birthday_str',title: '出生日期',align: 'center',width: 100},
{field: 'nation',title: '民族',align: 'center',minWidth: 60},
{field: 'native_place',title: '籍贯',align: 'center',minWidth: 90},
{field: 'political_str',title: '政治面貌',align: 'center',minWidth: 80},
{field: 'right',fixed:'right',title: '操作',width:110,align: 'center',ignoreExport:true,templet: function (d) {
var html = '';
var btn1 = '<span class="layui-btn layui-btn-xs layui-btn-normal" lay-event="view">详情</span>';
var btn2 = '<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
var btn3 = '<span class="layui-btn layui-bg-orange layui-btn-xs" lay-event="del">删除员工</span>';
html = '<div class="layui-btn-group">'+btn1+btn2+'</div>';
if(d.status==2){
html = '<div class="layui-btn-group">'+btn1+btn3+'</div>';
}
return html;
}
}
]
]
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
if (obj.event === 'view') {
tool.side('/user/files/view?id='+data.id);
return;
}
if(obj.event === 'edit'){
tool.side('/user/files/add?id='+data.id);
}
});
}
</script>
{/block}
<!-- /脚本 -->
+321
View File
@@ -0,0 +1,321 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.tr-none td{padding:20px 0; color:#999;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-2">{$detail.name}员工档案详情</h3>
<table class="layui-table layui-table-form">
<tr>
<td colspan="8"><strong>基本信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.name}</td>
<td class="layui-td-gray-2">员工性别</td>
<td>
{eq name="$detail.sex" value="1"}男{/eq}
{eq name="$detail.sex" value="2"}女{/eq}
</td>
<td rowspan="6" class="layui-td-gray-2">头像</td>
<td rowspan="6" valign="top" style="width: 180px;">
<div class="layui-upload" style="width: 180px;">
<img src="{$detail.thumb}" style="max-width: 100%;" />
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">出生日期</td>
<td>{$detail.birthday}</td>
<td class="layui-td-gray">身份证号码</td>
<td>{$detail.idcard}</td>
</tr>
<tr>
<td class="layui-td-gray">政治面貌</td>
<td>
{eq name="$detail.political" value="0"}无{/eq}
{eq name="$detail.political" value="1"}中共党员{/eq}
{eq name="$detail.political" value="2"}团员{/eq}
</td>
<td class="layui-td-gray">婚姻状况</td>
<td>
{eq name="$detail.marital_status" value="1"}未婚{/eq}
{eq name="$detail.marital_status" value="2"}已婚{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray">民族</td>
<td>{$detail.nation}</td>
<td class="layui-td-gray">籍贯</td>
<td>{$detail.native_place}</td>
</tr>
<tr>
<td class="layui-td-gray">户口性质</td>
<td>
{eq name="$detail.resident_type" value="1"}农村户口{/eq}
{eq name="$detail.resident_type" value="2"}城镇户口{/eq}
</td>
<td class="layui-td-gray">户口所在地</td>
<td>{$detail.resident_place}</td>
</tr>
<tr>
<td class="layui-td-gray">毕业院校</td>
<td>{$detail.graduate_school}</td>
<td class="layui-td-gray">毕业日期</td>
<td>{$detail.graduate_day}</td>
</tr>
<tr>
<td class="layui-td-gray">最高学位</td>
<td>{$detail.education}</td>
<td class="layui-td-gray">专业</td>
<td>{$detail.speciality}</td>
<td class="layui-td-gray">参加工作时间</td>
<td>{$detail.work_date}</td>
</tr>
<tr>
<td class="layui-td-gray">家庭住址</td>
<td>{$detail.home_address}</td>
<td class="layui-td-gray">手机号码</td>
<td>{$detail.mobile}</td>
<td class="layui-td-gray">电子邮箱</td>
<td>{$detail.email}</td>
</tr>
<tr>
<td class="layui-td-gray">现住地址</td>
<td>{$detail.current_address}</td>
<td class="layui-td-gray">紧急联系人</td>
<td>{$detail.contact}</td>
<td class="layui-td-gray">紧急联系电话</td>
<td>{$detail.contact_mobile}</td>
</tr>
<tr>
<td class="layui-td-gray">员工简介</td>
<td colspan="7">
{$detail.desc|default=''}
</td>
</tr>
<tr>
<td colspan="8"><strong>入职信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">所在部门</td>
<td>{$detail.department}</td>
<td class="layui-td-gray">上级主管</td>
<td>{$detail.pname|default='无'}</td>
<td class="layui-td-gray">岗位</td>
<td>{$detail.position}</td>
</tr>
<tr>
<td class="layui-td-gray">入职日期</td>
<td>{$detail.entry_time|date='Y-m-d'}</td>
<td class="layui-td-gray">职务</td>
<td>
{volist name=":get_base_type_data('basic_user',1)" id="v"}
{eq name="$detail.position_name" value="$v.id"}{$v.title}{/eq}
{/volist}
</td>
<td class="layui-td-gray">职级</td>
<td>
{volist name=":get_base_type_data('basic_user',2)" id="v"}
{eq name="$detail.position_rank" value="$v.id"}{$v.title}{/eq}
{/volist}
</td>
</tr>
<tr>
<td class="layui-td-gray">员工类型</td>
<td>
{eq name="$detail.type" value="3"}实习{/eq}
{eq name="$detail.type" value="2"}试用{/eq}
{eq name="$detail.type" value="1"}正式{/eq}
{eq name="$detail.is_staff" value="1"}企业员工{/eq}
{eq name="$detail.is_staff" value="2"}劳动派遣{/eq}
{eq name="$detail.is_staff" value="3"}兼职人员{/eq}
</td>
<td class="layui-td-gray">员工工号</td>
<td>{$detail.job_number}</td>
<td class="layui-td-gray">社保号</td>
<td>{$detail.social_account}</td>
</tr>
<tr>
<td class="layui-td-gray-2">工资卡开户行</td>
<td>{$detail.bank_info}</td>
<td class="layui-td-gray">工资卡帐号</td>
<td>{$detail.bank_account}</td>
<td class="layui-td-gray">公积金号</td>
<td>{$detail.provident_account}</td>
</tr>
{notempty name="$edu"}
<tr>
<td colspan="8"><strong>教育经历</strong></td>
</tr>
<tr>
<td colspan="8">
<table id="edu_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="150">开始时间</th>
<th width="150">结束时间</th>
<th width="200">就读院校</th>
<th width="150">学习专业</th>
<th width="100">所获学历</th>
<th>备注说明</th>
</tr>
{volist name="$edu" id="v"}
<tr class="edu_interfix">
<td>{$v.start_time}</td>
<td>{$v.end_time}</td>
<td>{$v.title}</td>
<td>{$v.speciality}</td>
<td>{$v.education}</td>
<td style="text-align:left;">{$v.remark}</td>
</tr>
{/volist}
</table>
</td>
</tr>
{/notempty}
{notempty name="$work"}
<tr>
<td colspan="8"><strong>工作经历</strong></td>
</tr>
<tr>
<td colspan="8">
<table id="work_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="150">开始时间</th>
<th width="150">结束时间</th>
<th width="200">公司名称</th>
<th width="100">职位</th>
<th>备注说明</th>
</tr>
{volist name="$work" id="v"}
<tr class="work_interfix">
<td>{$v.start_time}</td>
<td>{$v.end_time}</td>
<td>{$v.title}</td>
<td>{$v.position}</td>
<td style="text-align:left;">{$v.remark}</td>
</tr>
{/volist}
</table>
</td>
</tr>
{/notempty}
{notempty name="$certificate"}
<tr>
<td colspan="8"><strong>相关证书</strong></td>
</tr>
<tr>
<td colspan="8">
<table id="certificate_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="150">证书名称</th>
<th width="150">获得时间</th>
<th width="200">颁发机构</th>
<th>备注说明</th>
</tr>
{volist name="$certificate" id="v"}
<tr class="certificate_interfix">
<td>{$v.title}</td>
<td>{$v.start_time}</td>
<td>{$v.authority}</td>
<td style="text-align:left;">{$v.remark}</td>
</tr>
{/volist}
</table>
</td>
</tr>
{/notempty}
{notempty name="$certificate"}
<tr>
<td colspan="8"><strong>计算机技能</strong></td>
</tr>
<tr>
<td colspan="8">
<table id="skills_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="200">技能名称</th>
<th width="150">熟悉程度</th>
<th>备注说明</th>
</tr>
{volist name="$skills" id="v"}
<tr class="skills_interfix">
<td>{$v.title}</td>
<td>
{eq name="$v.know" value="1"}熟练{/eq}
{eq name="$v.know" value="2"}良好{/eq}
{eq name="$v.know" value="3"}一般{/eq}
{eq name="$v.know" value="4"}较差{/eq}
</td>
<td style="text-align:left;">{$v.remark}</td>
</tr>
{/volist}
</table>
</td>
</tr>
{/notempty}
{notempty name="$language"}
<tr>
<td colspan="8"><strong>语言能力</strong></td>
</tr>
<tr>
<td colspan="8">
<table id="language_table" class="layui-table layui-table-min" style="margin:0">
<tr>
<th width="200">语言名称</th>
<th width="150">熟悉程度</th>
<th>备注说明</th>
</tr>
{volist name="$language" id="v"}
<tr class="skills_interfix">
<td>{$v.title}</td>
<td>
{eq name="$v.know" value="1"}熟练{/eq}
{eq name="$v.know" value="2"}良好{/eq}
{eq name="$v.know" value="3"}一般{/eq}
{eq name="$v.know" value="4"}较差{/eq}
</td>
<td style="text-align:left;">{$v.remark}</td>
</tr>
{/volist}
</table>
</td>
</tr>
{/notempty}
{notempty name="$detail.file_ids"}
<tr>
<td colspan="8"><strong>档案相关附件</strong></td>
</tr>
<tr>
<td colspan="8">
<div class="layui-row">
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
{/volist}
</div>
</td>
</tr>
{/notempty}
</table>
<div class="pt-4">
<a class="layui-btn" href="/api/export/pdf?types=files&id={$detail.id}" target="_blank">导出PDF档案</a>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
}
</script>
{/block}
<!-- /脚本 -->
+146
View File
@@ -0,0 +1,146 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">新增员工合同</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">合同类别</td>
<td>{$cate_title}</td>
<td class="layui-td-gray">合同类型</td>
<td>新签合同</td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td>
<input type="text" name="uname" lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择员工姓名" class="layui-input picker-admin" readonly value="">
<input type="hidden" name="uid" value="0">
</td>
<td class="layui-td-gray">签约主体公司<font>*</font></td>
<td>
<select name="enterprise_id" lay-verify="required" lay-reqText="请选择签约主体公司">
<option value="">请选择</option>
{volist name=":get_base_data('Enterprise')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">合同名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请完善合同名称" lay-reqText="请完善合同名称" class="layui-input" value="">
</td>
<td class="layui-td-gray">合同编码<font>*</font></td>
<td>
<input type="text" name="code" lay-verify="required" autocomplete="off" placeholder="请完善合同编码" lay-reqText="请完善合同编码" class="layui-input" value="">
</td>
</tr>
<tr>
<td class="layui-td-gray">签订日期<font>*</font></td>
<td>
<input type="text" name="sign_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择签约日期" class="layui-input tool-time" value="">
</td>
<td class="layui-td-gray">合同属性<font>*</font></td>
<td>
<select name="properties" lay-verify="required" lay-reqText="请选择合同属性">
<option value="">请选择</option>
{volist name="$properties" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}">{$vo}</option>
{/gt}
{/volist}
</select>
</td>
</tr>
</tr>
<tr>
<td class="layui-td-gray-2">合同生效时间<font>*</font></td>
<td>
<input type="text" name="start_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择生效时间" class="layui-input tool-time" value="">
</td>
<td class="layui-td-gray-2">合同失效时间<font>*</font></td>
<td>
<input type="text" name="end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择失效时间" class="layui-input tool-time" value="">
</td>
</tr>
{eq name="$cate_id" value="1"}
<tr>
<td class="layui-td-gray-2">员工试用月数<font>*</font></td>
<td>
<input type="text" name="trial_months" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用月数,仅为数字" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">试用结束时间<font>*</font></td>
<td>
<input type="text" name="trial_end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择试用结束时间" class="layui-input tool-time" value="">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">试用工资(元)<font>*</font></td>
<td>
<input type="text" name="trial_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用工资,仅为数字" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">转正工资(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="">
</td>
</tr>
{/eq}
{in name="$cate_id" value="2,3"}
<tr>
<td class="layui-td-gray-2">工资费用(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="">
</td>
</tr>
{/in}
<tr>
<td class="layui-td-gray">备注说明</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入备注说明,可空" class="layui-textarea"></textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray"><strong>相关附件</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="upload" id="uploadBtn">+ 上传附件</button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input type="hidden" data-type="file" name="file_ids" value="">
</div>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="0"/>
<input type="hidden" name="cate" value="{$cate_id|default=1}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool','oaPicker','uploadPlus'];
function gouguInit() {
var form = layui.form, tool = layui.tool,uploadPlus=layui.uploadPlus;
//相关附件上传
var attachment = new uploadPlus();
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/laborcontract/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+150
View File
@@ -0,0 +1,150 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">变更员工合同</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">合同类别</td>
<td>{$detail.cate_str}</td>
<td class="layui-td-gray">合同类型</td>
<td>变更合同</td>
</tr>
<tr>
<td class="layui-td-gray">续签协议</td>
<td colspan="3">{$detail.title}</td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.user_name|default=''}</td>
<td class="layui-td-gray">签约主体公司</td>
<td>
<select name="enterprise_id" lay-verify="required" lay-reqText="请选择签约主体公司">
<option value="">请选择</option>
{volist name=":get_base_data('Enterprise')" id="vo"}
<option value="{$vo.id}" {eq name="$detail.enterprise_id" value="$vo.id"} selected{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">合同名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请完善合同名称" lay-reqText="请完善合同名称" class="layui-input" value="">
</td>
<td class="layui-td-gray">合同编码<font>*</font></td>
<td>
<input type="text" name="code" lay-verify="required" autocomplete="off" placeholder="请完善合同编码" lay-reqText="请完善合同编码" class="layui-input" value="">
</td>
</tr>
<tr>
<td class="layui-td-gray">签订日期<font>*</font></td>
<td>
<input type="text" name="sign_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择签约日期" class="layui-input tool-time" value="">
</td>
<td class="layui-td-gray">合同属性<font>*</font></td>
<td>
<select name="properties" lay-verify="required" lay-reqText="请选择合同属性">
<option value="">请选择</option>
{volist name="$properties" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}" {eq name="$detail.properties" value="$key"} selected{/eq}>{$vo}</option>
{/gt}
{/volist}
</select>
</td>
</tr>
</tr>
<tr>
<td class="layui-td-gray-2">合同生效时间<font>*</font></td>
<td>
<input type="text" name="start_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择生效时间" class="layui-input tool-time" value="">
</td>
<td class="layui-td-gray-2">合同失效时间<font>*</font></td>
<td>
<input type="text" name="end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择失效时间" class="layui-input tool-time" value="">
</td>
</tr>
{eq name="$detail.cate" value="1"}
<tr>
<td class="layui-td-gray-2">员工试用月数<font>*</font></td>
<td>
<input type="text" name="trial_months" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用月数,仅为数字" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">试用结束时间<font>*</font></td>
<td>
<input type="text" name="trial_end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择试用结束时间" class="layui-input tool-time" value="">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">试用工资(元)<font>*</font></td>
<td>
<input type="text" name="trial_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用工资,仅为数字" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">转正工资(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="">
</td>
</tr>
{/eq}
{in name="$detail.cate" value="2,3"}
<tr>
<td class="layui-td-gray-2">工资费用(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="">
</td>
</tr>
{/in}
<tr>
<td class="layui-td-gray">备注说明</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入备注说明,可空" class="layui-textarea"></textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray"><strong>相关附件</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="upload" id="uploadBtn">+ 上传附件</button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input type="hidden" data-type="file" name="file_ids" value="">
</div>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="0"/>
<input type="hidden" name="change_pid" value="{$detail.id}"/>
<input type="hidden" name="cate" value="{$detail.cate}"/>
<input type="hidden" name="types" value="3">
<input type="hidden" name="uid" value="{$detail.uid|default=0}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool','oaPicker','uploadPlus'];
function gouguInit() {
var form = layui.form, tool = layui.tool,uploadPlus=layui.uploadPlus;
//相关附件上传
var attachment = new uploadPlus();
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/laborcontract/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
@@ -0,0 +1,144 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">续签员工合同</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">合同类别</td>
<td>{$detail.cate_str}</td>
<td class="layui-td-gray">合同类型</td>
<td>续签合同</td>
</tr>
<tr>
<td class="layui-td-gray">续签协议</td>
<td colspan="3">{$detail.title}</td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.user_name|default=''}</td>
<td class="layui-td-gray">签约主体公司</td>
<td>{$detail.enterprise|default=''}</td>
</tr>
<tr>
<td class="layui-td-gray">合同名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请完善合同名称" lay-reqText="请完善合同名称" class="layui-input" value="">
</td>
<td class="layui-td-gray">合同编码<font>*</font></td>
<td>
<input type="text" name="code" lay-verify="required" autocomplete="off" placeholder="请完善合同编码" lay-reqText="请完善合同编码" class="layui-input" value="">
</td>
</tr>
<tr>
<td class="layui-td-gray">签订日期<font>*</font></td>
<td>
<input type="text" name="sign_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择签约日期" class="layui-input tool-time" value="">
</td>
<td class="layui-td-gray">合同属性<font>*</font></td>
<td>
<select name="properties" lay-verify="required" lay-reqText="请选择合同属性">
<option value="">请选择</option>
{volist name="$properties" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}">{$vo}</option>
{/gt}
{/volist}
</select>
</td>
</tr>
</tr>
<tr>
<td class="layui-td-gray-2">合同生效时间<font>*</font></td>
<td>
<input type="text" name="start_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择生效时间" class="layui-input tool-time" value="">
</td>
<td class="layui-td-gray-2">合同失效时间<font>*</font></td>
<td>
<input type="text" name="end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择失效时间" class="layui-input tool-time" value="">
</td>
</tr>
{eq name="$detail.cate" value="1"}
<tr>
<td class="layui-td-gray-2">员工试用月数<font>*</font></td>
<td>
<input type="text" name="trial_months" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用月数,仅为数字" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">试用结束时间<font>*</font></td>
<td>
<input type="text" name="trial_end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择试用结束时间" class="layui-input tool-time" value="">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">试用工资(元)<font>*</font></td>
<td>
<input type="text" name="trial_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用工资,仅为数字" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">转正工资(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="">
</td>
</tr>
{/eq}
{in name="$detail.cate" value="2,3"}
<tr>
<td class="layui-td-gray-2">工资费用(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="">
</td>
</tr>
{/in}
<tr>
<td class="layui-td-gray">备注说明</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入备注说明,可空" class="layui-textarea"></textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray"><strong>相关附件</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="upload" id="uploadBtn">+ 上传附件</button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input type="hidden" data-type="file" name="file_ids" value="">
</div>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="0"/>
<input type="hidden" name="renewal_pid" value="{$detail.id}"/>
<input type="hidden" name="cate" value="{$detail.cate}"/>
<input type="hidden" name="types" value="2">
<input type="hidden" name="uid" value="{$detail.uid|default=0}">
<input type="hidden" name="enterprise_id" value="{$detail.enterprise_id|default=0}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool','oaPicker','uploadPlus'];
function gouguInit() {
var form = layui.form, tool = layui.tool,uploadPlus=layui.uploadPlus;
//相关附件上传
var attachment = new uploadPlus();
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/laborcontract/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+193
View File
@@ -0,0 +1,193 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
<div class="layui-input-inline" style="width:100px">
<select name="status">
<option value="">合同状态</option>
{volist name="$status" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}">{$vo}</option>
{/gt}
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="cate">
<option value="">合同类别</option>
{volist name="$cate" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="types">
<option value="">合同类型</option>
{volist name="$types" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}">{$vo}</option>
{/gt}
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="properties">
<option value="">合同属性</option>
{volist name="$properties" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}">{$vo}</option>
{/gt}
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:80px">
<input type="text" name="uname" placeholder="签订员工" class="layui-input picker-admin" value="" readonly>
<input type="text" name="uid" value="" style="display:none;">
</div>
<div class="layui-input-inline" style="width:292px;">
<input type="text" class="layui-input" id="diff_time" placeholder="签订日期" readonly name="diff_time">
</div>
<div class="layui-input-inline" style="width:150px;">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="table_laborcontract" lay-filter="table_laborcontract"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="add">
<span>+ 添加合同</span>
<i class="layui-icon layui-icon-down layui-font-12"></i>
</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const contract_cate = {:json_encode($cate,JSON_UNESCAPED_UNICODE)};
const moduleInit = ['tool','oaPicker','tablePlus','laydatePlus'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus,dropdown = layui.dropdown;
var diff_time = new laydatePlus({'target':'diff_time'});
layui.pageTable = table.render({
elem: "#table_laborcontract"
, toolbar: "#toolbarDemo"
,url: "/user/laborcontract/datalist"
,page: true
,limit: 20
,cellMinWidth: 80
,height: 'full-114'
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'status',title: '合同状态',width:90, align:'center',templet: function(d){
if(d.status==1){
return '<span class="green">『'+d.status_str+'』</span>';
}
else if(d.status==2){
return '<span class="yellow">『'+d.status_str+'』</span>';
}
else if(d.status==3){
return '<span class="red">『'+d.status_str+'』</span>';
}
else{
return '-';
}
}}
,{field:'user_name',title: '员工',width:90, align:'center'}
,{field:'title',title: '合同名称',minWidth:240}
,{field:'cate_str',title: '合同类型',width:90, align:'center'}
,{field:'types_str',title: '合同属性',width:90, align:'center'}
,{field:'enterprise',title: '签约主体公司',width:200}
,{field:'sign_time',title: '签订日期',width:90, align:'center'}
,{field:'diff_time',title: '合同有效期间',width:200, align:'center'}
,{field:'renewal',title: '续签状态',width:80, align:'center',templet: function(d){
if(d.renewal>0){
return '<span class="red">已续签</span>';
}
else{
return '<span class="green">未续签</span>';
}
}}
,{field:'change',title: '变更状态',width:80, align:'center',templet: function(d){
if(d.change>0){
return '<span class="red">已变更</span>';
}
else{
return '<span class="green">未变更</span>';
}
}}
,{field:'admin_name',title: '创建人',width:90,align:'center'}
,{field:'create_time', title: '创建时间',width:150,align:'center'}
,{width:120,fixed:'right',title: '操作', align:'center',templet: function(d){
var html='';
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详细</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
html = '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
return html;
}}
]]
});
//表头工具栏事件
table.on('toolbar(table_laborcontract)', function(obj){
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = checkStatus.data;
var that = this;
if (obj.event === 'add'){
dropdown.render({
elem: that,
show: true, // 外部事件触发即显示
data: contract_cate,
click: function(obj){
tool.side("/user/laborcontract/add?cate_id="+obj.id);
}
});
return;
}
});
table.on('tool(table_laborcontract)',function (obj) {
let data=obj.data
if (obj.event === 'view') {
tool.side("/user/laborcontract/view?id="+data.id);
return;
}
if (obj.event === 'edit') {
if(data.renewal>0 || data.change>0){
layer.msg('已续签或者已变更的合同不支持编辑,如需[编辑]请先删除续签或者变更的合同');
return false;
}
tool.side("/user/laborcontract/add?id="+data.id);
return;
}
if (obj.event === 'del') {
if(data.renewal>0 || data.change>0){
layer.msg('已续签或者已变更的合同不支持删除,如需[删除]请先删除续签或者变更的合同');
return false;
}
layer.confirm('确定要删除该员工合同吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.delete("/user/laborcontract/del", { id: data.id }, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+152
View File
@@ -0,0 +1,152 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">编辑员工合同</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">合同类别</td>
<td>{$detail.cate_str}</td>
<td class="layui-td-gray">合同类型</td>
<td>新签合同</td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td>
<input type="text" name="uname" lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择员工姓名" class="layui-input picker-admin" readonly value="{$detail.user_name|default=''}">
<input type="hidden" name="uid" value="{$detail.uid|default=0}">
</td>
<td class="layui-td-gray">签约主体公司<font>*</font></td>
<td>
<select name="enterprise_id" lay-verify="required" lay-reqText="请选择签约主体公司">
<option value="">请选择</option>
{volist name=":get_base_data('Enterprise')" id="vo"}
<option value="{$vo.id}" {eq name="$detail.enterprise_id" value="$vo.id"} selected{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">合同名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请完善合同名称" lay-reqText="请完善合同名称" class="layui-input" value="{$detail.title|default=''}">
</td>
<td class="layui-td-gray">合同编码<font>*</font></td>
<td>
<input type="text" name="code" lay-verify="required" autocomplete="off" placeholder="请完善合同编码" lay-reqText="请完善合同编码" class="layui-input" value="{$detail.code|default=''}">
</td>
</tr>
<tr>
<td class="layui-td-gray">签订日期<font>*</font></td>
<td>
<input type="text" name="sign_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择签约日期" class="layui-input tool-time" value="{$detail.sign_time|default=''}">
</td>
<td class="layui-td-gray">合同属性<font>*</font></td>
<td>
<select name="properties" lay-verify="required" lay-reqText="请选择合同属性">
<option value="">请选择</option>
{volist name="$properties" id="vo"}
{gt name="$key" value="0"}
<option value="{$key}" {eq name="$detail.properties" value="$key"} selected{/eq}>{$vo}</option>
{/gt}
{/volist}
</select>
</td>
</tr>
</tr>
<tr>
<td class="layui-td-gray-2">合同生效时间<font>*</font></td>
<td>
<input type="text" name="start_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择生效时间" class="layui-input tool-time" value="{$detail.start_time|default=''}">
</td>
<td class="layui-td-gray-2">合同失效时间<font>*</font></td>
<td>
<input type="text" name="end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择失效时间" class="layui-input tool-time" value="{$detail.end_time|default=''}">
</td>
</tr>
{eq name="$detail.cate" value="1"}
<tr>
<td class="layui-td-gray-2">员工试用月数<font>*</font></td>
<td>
<input type="text" name="trial_months" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用月数,仅为数字" class="layui-input" value="{$detail.trial_months|default=''}">
</td>
<td class="layui-td-gray-2">试用结束时间<font>*</font></td>
<td>
<input type="text" name="trial_end_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择试用结束时间" class="layui-input tool-time" value="{$detail.trial_end_time|default=''}">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">试用工资(元)<font>*</font></td>
<td>
<input type="text" name="trial_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善试用工资,仅为数字" class="layui-input" value="{$detail.trial_salary|default=''}">
</td>
<td class="layui-td-gray-2">转正工资(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="{$detail.worker_salary|default=''}">
</td>
</tr>
{/eq}
{in name="$detail.cate" value="2,3"}
<tr>
<td class="layui-td-gray-2">工资费用(元)<font>*</font></td>
<td>
<input type="text" name="worker_salary" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善转正工资,仅为数字" class="layui-input" value="{$detail.worker_salary|default=''}">
</td>
</tr>
{/in}
<tr>
<td class="layui-td-gray">备注说明</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入备注说明,可空" class="layui-textarea">{$detail.remark|default=''}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray"><strong>相关附件</strong> <button class="layui-btn layui-btn-xs add-tr" type="button" data-type="upload" id="uploadBtn">+ 上传附件</button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids|default=''}">
{notempty name="$detail.file_ids"}
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
{/volist}
{/notempty}
</div>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
<input type="hidden" name="cate" value="{$detail.cate|default=1}"/>
<input type="hidden" name="status" value="{$detail.status|default=1}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool','oaPicker','uploadPlus'];
function gouguInit() {
var form = layui.form, tool = layui.tool,uploadPlus=layui.uploadPlus;
//相关附件上传
var attachment = new uploadPlus();
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/laborcontract/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+150
View File
@@ -0,0 +1,150 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">员工合同详细信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">合同类别</td>
<td>{$detail.cate_str}</td>
<td class="layui-td-gray">合同类型</td>
<td>{$detail.types_str}</td>
</tr>
{gt name="$detail.renewal_pid" value="0"}
<tr>
<td class="layui-td-gray">续签母协议</td>
<td colspan="3"><a class="blue" href="/user/laborcontract/view?id={$detail.renewal_pid}">{$detail.renewal_ptitle}</a></td>
</tr>
{/gt}
{gt name="$detail.change_pid" value="0"}
<tr>
<td class="layui-td-gray">变更母协议</td>
<td colspan="3"><a class="blue" href="/user/laborcontract/view?id={$detail.change_pid}">{$detail.change_ptitle}</a></td>
</tr>
{/gt}
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.user_name}</td>
<td class="layui-td-gray">签约主体公司</td>
<td>{$detail.enterprise}</td>
</tr>
<tr>
<td class="layui-td-gray">合同名称</td>
<td>{$detail.title}</td>
<td class="layui-td-gray">合同编码</td>
<td>{$detail.code}</td>
</tr>
<tr>
<td class="layui-td-gray">签订日期</td>
<td>{$detail.sign_time}</td>
<td class="layui-td-gray">合同属性</td>
<td>{$detail.properties_str}</td>
</tr>
</tr>
<tr>
<td class="layui-td-gray-2">合同生效时间</td>
<td>{$detail.start_time}</td>
<td class="layui-td-gray-2">合同失效时间</td>
<td>{$detail.end_time}</td>
</tr>
{eq name="$detail.cate" value="1"}
<tr>
<td class="layui-td-gray-2">员工试用月数</td>
<td>{$detail.trial_months}</td>
<td class="layui-td-gray-2">试用结束时间</td>
<td>{$detail.trial_end_time}</td>
</tr>
<tr>
<td class="layui-td-gray-2">试用工资(元)</td>
<td>{$detail.trial_salary}</td>
<td class="layui-td-gray-2">转正工资(元)</td>
<td>{$detail.worker_salary}</td>
</tr>
{/eq}
{in name="$detail.cate" value="2,3"}
<tr>
<td class="layui-td-gray-2">工资费用(元)</td>
<td>{$detail.worker_salary}</td>
</tr>
{/in}
<tr>
<td class="layui-td-gray">备注说明</td>
<td colspan="3">{$detail.remark|default=''}</td>
</tr>
{notempty name="$detail.file_ids"}
<tr>
<td class="layui-td-gray"><strong>相关附件</strong></td>
<td colspan="3">
<div class="layui-row">
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo,'view')}</div>
{/volist}
</div>
</td>
</tr>
{/notempty}
<tr>
<td class="layui-td-gray">合同状态</td>
{eq name="$detail.status" value="1"}
<td colspan="3"><span class="green">正常</span><span class="layui-btn layui-bg-red layui-btn-xs set-status" data-status="3">解除合同</span></td>
{/eq}
{eq name="$detail.status" value="2"}
<td colspan="3"><span class="yellow">已到期</span></td>
{/eq}
{eq name="$detail.status" value="3"}
<td colspan="3"><span class="red">已解除</span><span class="layui-btn layui-bg-blue layui-btn-xs set-status" data-status="1">恢复合同</span></td>
{/eq}
</tr>
<tr>
<td class="layui-td-gray">续签状态</td>
{empty name="$renewal"}
<td colspan="3"><span class="green">未续签</span>{eq name="$detail.status" value="1"}<a class="layui-btn layui-btn-xs" href="/user/laborcontract/add_renewal?id={$detail.id}">新增续签合同</a>{/eq}</td>
{else/}
<td colspan="3"><span class="red">已续签</span>,续签日期:{$renewal.create_time|date="Y-m-d"}。<a class="layui-btn layui-bg-blue layui-btn-xs" href="/user/laborcontract/view?id={$renewal.id}">续签合同详情</a></td>
{/empty}
</tr>
<tr>
<td class="layui-td-gray">变更状态</td>
{empty name="$change"}
<td colspan="3"><span class="green">未变更</span>{eq name="$detail.status" value="1"}<a class="layui-btn layui-btn-xs" href="/user/laborcontract/add_change?id={$detail.id}">新增变更合同</a>{/eq}</td>
{else/}
<td colspan="3"><span class="red">已变更</span>,续签日期:{$change.create_time|date="Y-m-d"}。<a class="layui-btn layui-bg-blue layui-btn-xs" href="/user/laborcontract/view?id={$change.id}">变更合同详情</a></td>
{/empty}
</tr>
</table>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const id = {$detail.id};
var moduleInit = ['tool'];
function gouguInit() {
var tool = layui.tool;
$('body').on('click','.set-status',function(){
let status = $(this).data('status');
let tips='确定要解除该合同吗?';
if(status==1){
tips='确定要恢复该合同吗?';
}
layer.confirm(tips, { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
if(parent.layui.pageTable){
parent.layui.pageTable.reload();
}
location.reload();
}
}
tool.post("/user/laborcontract/set", {id:id,status:status}, callback);
layer.close(index);
});
})
}
</script>
{/block}
<!-- /脚本 -->
+177
View File
@@ -0,0 +1,177 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
<ul class="layui-tab-title">
<li class="layui-this">全部</li>
<li>我申请的</li>
<li>待我审批</li>
<li>我已审批</li>
<li>抄送我的</li>
</ul>
</div>
</div>
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
<div class="layui-input-inline search-item" style="width:150px;">
<select name="check_status">
<option value="">选择审批状态</option>
{volist name=":get_check_status()" id="vo"}
<option value="{$key}">{$vo}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:175px;">
<input type="text" class="layui-input" id="move_time" placeholder="选择调动日期" readonly name="move_time">
</div>
<div class="layui-input-inline" style="width:150px">
<input type="hidden" name="tab" value="0"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="add">+ 添加人事调动申请</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','tablePlus','laydatePlus','oaPicker'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool,form = layui.form,element = layui.element,laydatePlus = layui.laydatePlus;
//日期范围
var move_time = new laydatePlus({'target':'move_time'});
//tab切换
element.on('tab(tab)', function(data){
$('[name="tab"]').val(data.index);
$("#barsearchform")[0].reset();
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
return false;
});
layui.pageTable = table.render({
elem: '#test'
, toolbar: '#toolbarDemo'
,defaultToolbar: false
, url: "/user/personal/change"
, page: true //开启分页
, limit: 20
, height: 'full-154'
, cols: [[
{ field: 'id', width: 80, title: '序号', align: 'center' }
,{field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
return html;
}
}
, { field: 'name', width: 80, title: '员工姓名', align: 'center'}
, { field: 'from_department', width: 150, title: '调出部门','style':'color:#FF5722'}
, { field: 'to_department', width: 150, title: '调入部门','style':'color:#1e9fff'}
, { field: 'status', width: 80,title: '执行状态', align: 'center',
templet: function (d) {
if(d.status==1){
return '<span class="green">未执行</span>';
}
else{
return '<span class="red">已执行</span>';
}
}
}
, { field: 'move_time', title: '调动日期',width: 100, align: 'center'}
, { field: 'remark', title: '调动原因'}
, {field: 'admin_name',title: '申请人',align: 'center',width: 80}
, {field: 'create_time',title: '申请时间',align: 'center',width: 150}
, {field: 'check_user',title: '当前审核人'}
, {
field: 'right',
fixed: 'right',
title: '操作',
width: 130,
align: 'center',
templet:function(d){
var html='<div class="layui-btn-group">';
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
let btn4='<button class="layui-btn layui-bg-orange layui-btn-xs" lay-event="set">执行</button>';
html+=btn1;
if((d.check_status==0 || d.check_status==4) && d.admin_id==login_admin){
html+=btn2+btn3;
}
if(d.check_status==2 && d.status==1){
html+=btn4;
}
html+='</div>';
return html;
}
}
]]
});
//监听行工具事件
table.on('tool(test)', function(obj){
var data = obj.data;
if(obj.event === 'edit'){
tool.side('/user/personal/change_add?id='+data.id);
return;
}
if(obj.event === 'view'){
tool.side('/user/personal/change_view?id='+data.id);
return;
}
if (obj.event === 'set') {
layer.confirm('确定要执行部门调动吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.delete("/user/api/change_check", { id: data.id }, callback);
layer.close(index);
});
}
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.delete("/user/personal/change_delete", { id: data.id }, callback);
layer.close(index);
});
}
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
tool.side("/user/personal/change_add");
return;
}
});
//监听搜索提交
form.on('submit(webform)', function(data){
if(data.field.keywords) {
layui.pageTable.reload({where:{keywords:data.field.keywords},page:{curr:1}});
}
else{
location.reload();
}
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+174
View File
@@ -0,0 +1,174 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">人事调动</h3>
{if condition="$id eq 0"}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray-2">调动员工<font>*</font></td>
<td>
<input type="text" name="name" placeholder="请选择需要调动的员工" lay-reqText="请选择需要调动的员工" lay-verify="required" autocomplete="off" class="layui-input" readonly>
<input type="hidden" name="uid" value="0">
<input type="hidden" name="from_did" value="0">
</td>
<td class="layui-td-gray">调出部门<font>*</font></td>
<td>
<input type="text" name="from_department" lay-verify="required" autocomplete="off" placeholder="请选择调出部门" lay-reqText="请选择调出部门" class="layui-input" readonly>
</td>
</tr>
<tr>
<td class="layui-td-gray">调动日期<font>*</font></td>
<td><input type="text" name="move_time" lay-verify="required" autocomplete="off" placeholder="请选择调动日期" lay-reqText="请选择调动日期" readonly class="layui-input tool-time"></td>
<td class="layui-td-gray">调入部门<font>*</font></td>
<td>
<input type="text" name="to_department" lay-verify="required" autocomplete="off" placeholder="请选择调入部门" lay-reqText="请选择调入部门" class="layui-input picker-oa" data-types="department" readonly>
<input type="hidden" name="to_did" value="0">
</td>
</tr>
<tr>
<td class="layui-td-gray">调动原因<font>*</font></td>
<td colspan="3">
<textarea name="remark" placeholder="请输入调动原因" class="layui-textarea" lay-verify="required" lay-reqText="请输入调动原因"></textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray">附件 <button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input data-type="file" type="hidden" name="file_ids" value="">
</div>
</td>
</tr>
</table>
{else/}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray-2">调动员工</td>
<td>{$detail.name}</td>
<td class="layui-td-gray">调出部门</td>
<td>{$detail.from_department}</td>
</tr>
<tr>
<td class="layui-td-gray">调动日期<font>*</font></td>
<td><input type="text" name="move_time" value="{$detail.move_time|default=''}" lay-verify="required" autocomplete="off" placeholder="请选择调动日期" lay-reqText="请选择调动日期" readonly class="layui-input tool-time"></td>
<td class="layui-td-gray">调入部门<font>*</font></td>
<td>
<input type="text" name="to_department" lay-verify="required" autocomplete="off" placeholder="请选择调入部门" lay-reqText="请选择调入部门" class="layui-input picker-oa" data-types="department" readonly value="{$detail.to_department}">
<input type="hidden" name="to_did" value="0" value="{$detail.to_did}">
</td>
</tr>
<tr>
<td class="layui-td-gray">调动原因<font>*</font></td>
<td colspan="3">
<textarea name="remark" placeholder="请输入调动原因" class="layui-textarea" lay-verify="required" lay-reqText="请输入调动原因">{$detail.remark|default=''}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray">附件 <button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input data-type="file" type="hidden" name="file_ids" value="{$detail.file_ids|default=''}">
{notempty name="$detail.file_ids"}
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4">{:file_card($vo)}</div>
{/volist}
{/notempty}
</div>
</td>
</tr>
</table>
{/if}
<div id="checkBox" data-status="{$detail.check_status|default=0}" data-id="{$detail.id|default=0}" data-checkflowid="{$detail.check_flow_id|default=0}" class="pt-3"></div>
<div class="pt-4">
<input type="hidden" name="id" value="{$id}" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaPicker','oaCheck','uploadPlus'];
function gouguInit() {
var form = layui.form,tool=layui.tool,oaCheck=layui.oaCheck,oaPicker=layui.oaPicker,uploadPlus=layui.uploadPlus;
oaCheck.init({
check_name:'department_change',
check_btn:0
});
var fileUp = new uploadPlus();
$('body').on('click','[name="from_department"]',function(){
var val=$(this).val();
if(val==''){
layer.msg('请先选择需要调动的员工');
}
});
//选择员工弹窗
$('body').on('click','[name="name"]',function () {
let that = $(this);
let ids=that.next().val()+'',names = that.val()+'';
oaPicker.employeeInit({
ids:ids,
names:names,
type:1,//1是单选,2是多选
callback:function(data){
//这里是选择后的回调方法,可以根据具体需求自定义写哦
let select_id=[],select_name=[],select_did=[],select_department=[];
for(var a=0; a<data.length;a++){
select_id.push(data[a].id);
select_name.push(data[a].name);
select_did.push(data[a].did);
select_department.push(data[a].department);
}
that.val(select_name.join(','));
that.next().val(select_id.join(','));
$('[name="uid"]').val(select_id.join(','));
$('[name="name"]').val(select_name.join(','));
$('[name="from_did"]').val(select_did.join(','));
$('[name="from_department"]').val(select_department.join(','));
}
});
});
//监听提交
form.on('submit(webform)', function (data) {
if(data.field.uid==0 || data.field.from_did==0){
layer.msg('请选择要调用的员工');
return false;
}
if(data.field.to_did==''){
layer.msg('请选择要调入的部门');
return false;
}
if(data.field.to_did==data.field.from_did){
layer.msg('要调入的部门和调出的部门不能是同一个部门');
return false;
}
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
let checkCallback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
data.field.check_name = 'department_change';
data.field.action_id = e.data.return_id;
oaCheck.submit(data.field,checkCallback);
}
}
let clickbtn = $(this);
tool.post("/user/personal/change_add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+60
View File
@@ -0,0 +1,60 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">人事调动</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">调动员工</td>
<td>{$detail.name}</td>
<td class="layui-td-gray">调出部门</td>
<td>{$detail.from_department}</td>
</tr>
<tr>
<td class="layui-td-gray">调动日期</td>
<td>{$detail.move_time}</td>
<td class="layui-td-gray-2">调入部门</td>
<td>{$detail.to_department}</td>
</tr>
<tr>
<td class="layui-td-gray">调动原因</td>
<td colspan="3">{$detail.remark}</td>
</tr>
<tr>
<td class="layui-td-gray">执行状态</td>
<td>{$detail.status_str}</td>
<td class="layui-td-gray-2">执行时间</td>
<td>{$detail.connect_time_str}</td>
</tr>
{notempty name="$detail.file_ids"}
<tr>
<td class="layui-td-gray">相关附件</td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4">{:file_card($vo,'view')}</div>
{/volist}
</div>
</td>
</tr>
{/notempty}
</table>
<div id="checkBox" data-status="{$detail.check_status|default=0}" data-id="{$detail.id|default=0}" data-checkflowid="{$detail.check_flow_id|default=0}" class="pt-3"></div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaCheck'];
function gouguInit() {
var form = layui.form,tool=layui.tool,oaCheck=layui.oaCheck;
oaCheck.init({
check_name:'department_change',
check_btn:0
});
}
</script>
{/block}
<!-- /脚本 -->
+175
View File
@@ -0,0 +1,175 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
<ul class="layui-tab-title">
<li class="layui-this">全部</li>
<li>我申请的</li>
<li>待我审批</li>
<li>我已审批</li>
<li>抄送我的</li>
</ul>
</div>
</div>
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
<div class="layui-input-inline search-item" style="width:150px;">
<select name="check_status">
<option value="">选择审批状态</option>
{volist name=":get_check_status()" id="vo"}
<option value="{$key}">{$vo}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input type="text" class="layui-input picker-oa" data-types="department" placeholder="选择离职部门" readonly>
<input type="text" name="did" style="display:none;">
</div>
<div class="layui-input-inline" style="width:175px;">
<input type="text" class="layui-input" id="quit_time" placeholder="选择离职日期" readonly name="quit_time">
</div>
<div class="layui-input-inline" style="width:150px">
<input type="hidden" name="tab" value="0"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div>
<button class="layui-btn layui-btn-sm" lay-event="add">+ 添加离职申请</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','tablePlus','laydatePlus','oaPicker'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool,form = layui.form,element = layui.element,laydatePlus = layui.laydatePlus;
//日期范围
var quit_time = new laydatePlus({'target':'quit_time'});
//tab切换
element.on('tab(tab)', function(data){
$('[name="tab"]').val(data.index);
$("#barsearchform")[0].reset();
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
return false;
});
layui.pageTable = table.render({
elem: '#test'
, toolbar: '#toolbarDemo'
,defaultToolbar: false
, url: "/user/personal/leave"
, page: true //开启分页
, limit: 20
, height: 'full-154'
, cols: [[
{ field: 'id', width: 80, title: '序号', align: 'center' }
,{field:'check_status',title: '审批状态',width:110, align:'center',templet: function(d){
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
return html;
}
}
, { field: 'name', width: 80, title: '离职员工', align: 'center','style':'color:#FF5722'}
, { field: 'position', width: 100, title: '职位', align: 'center'}
, { field: 'department', width: 120, title: '所在部门', align: 'center'}
, { field: 'lead_admin_name', width: 80, title: '上级领导', align: 'center'}
, { field: 'quit_time', width: 100,title: '离职日期', align: 'center'}
, { field: 'status', width: 80,title: '交接状态', align: 'center',
templet: function (d) {
if(d.status==1){
return '<span class="green">未交接</span>';
}
else{
return '<span class="red">已交接</span>';
}
}
}
, { field: 'connect_name', width: 90, title: '资料接受人', align: 'center'}
, { field: 'connect_time_str', width: 90, title: '交接日期', align: 'center'}
, { field: 'remark', title: '离职原因'}
, {field: 'admin_name',title: '申请人',align: 'center',width: 80}
, {field: 'create_time',title: '申请时间',align: 'center',width: 150}
, {field: 'check_user',title: '当前审核人'}
, {
field: 'right',
fixed: 'right',
title: '操作',
width: 130,
align: 'center',
templet:function(d){
var html='<div class="layui-btn-group">';
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
let btn4='<button class="layui-btn layui-bg-orange layui-btn-xs" lay-event="set">资料交接</button>';
html+=btn1;
if((d.check_status==0 || d.check_status==4) && d.admin_id==login_admin){
html+=btn2+btn3;
}
if(d.check_status==2 && d.status==1){
html+=btn4;
}
html+='</div>';
return html;
}
}
]]
});
//监听行工具事件
table.on('tool(test)', function(obj){
var data = obj.data;
if(obj.event === 'edit'){
tool.side('/user/personal/leave_add?id='+data.id);
return;
}
if(obj.event === 'view'){
tool.side('/user/personal/leave_view?id='+data.id);
return;
}
if (obj.event === 'set') {
layer.confirm('确定要把【'+data.name+'】相关的项目、合同、客户等资料交接给【'+data.connect_name+'】吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.delete("/user/api/leave_check", { id: data.id }, callback);
layer.close(index);
});
}
if (obj.event === 'del') {
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.delete("/user/personal/leave_delete", { id: data.id }, callback);
layer.close(index);
});
}
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = checkStatus.data;
if (obj.event === 'add') {
tool.side("/user/personal/leave_add");
return;
}
});
}
</script>
{/block}
<!-- /脚本 -->
+197
View File
@@ -0,0 +1,197 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">离职申请</h3>
{if condition="$id eq 0"}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">离职员工<font>*</font></td>
<td>
<input type="text" name="name" placeholder="请选择离职员工" lay-reqText="请选择离职员工" lay-verify="required" autocomplete="off" class="layui-input picker" readonly>
<input type="hidden" name="uid" value="0" autocomplete="off">
<input type="hidden" name="did" value="0" autocomplete="off">
</td>
<td class="layui-td-gray">所在部门</td>
<td><input type="text" name="department" autocomplete="off" class="layui-input" readonly></td>
</tr>
<tr>
<td class="layui-td-gray">离职日期<font>*</font></td>
<td><input type="text" name="quit_time" lay-verify="required" autocomplete="off" placeholder="请选择离职日期" lay-reqText="请选择离职日期" readonly class="layui-input tool-time"></td>
<td class="layui-td-gray-2">上级领导<font>*</font></td>
<td>
<input type="text" name="lead_admin_name" autocomplete="off" lay-verify="required" placeholder="请选择上级领导" lay-reqText="请选择上级领导" readonly class="layui-input picker-admin">
<input type="hidden" name="lead_admin_id" autocomplete="off" value="0">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">资料接受人<font>*</font></td>
<td>
<input type="text" name="connect_name" autocomplete="off" lay-verify="required" placeholder="请选择资料接受人" lay-reqText="请选择资料接受人" readonly class="layui-input picker-admin">
<input type="hidden" name="connect_id" class="layui-input">
</td>
<td class="layui-td-gray-2">参与交接人员<font>*</font></td>
<td>
<input type="text" name="connect_names" autocomplete="off" lay-verify="required" placeholder="请选择参与交接人员" lay-reqText="请选择参与交接人员" readonly class="layui-input picker-admin" data-type="2">
<input type="hidden" name="connect_uids" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray">离职原因<font>*</font></td>
<td colspan="3">
<textarea name="remark" lay-verify="required" placeholder="请输入离职原因" lay-reqText="请输入离职原因" class="layui-textarea"></textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray">附件 <button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input data-type="file" type="hidden" name="file_ids" value="">
</div>
</td>
</tr>
</table>
{else/}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">离职员工</td>
<td>{$detail.name}</td>
<td class="layui-td-gray">所在部门</td>
<td>
{$detail.department}
<input type="hidden" name="uid" value="{$detail.uid}" autocomplete="off">
<input type="hidden" name="did" value="{$detail.did}" autocomplete="off">
</td>
</tr>
<tr>
<td class="layui-td-gray">离职日期<font>*</font></td>
<td><input type="text" name="quit_time" value="{$detail.quit_time}" lay-verify="required" autocomplete="off" placeholder="请选择离职日期" lay-reqText="请选择离职日期" readonly class="layui-input tool-time">
</td>
<td class="layui-td-gray-2">上级领导<font>*</font></td>
<td>
<input type="text" name="lead_admin_name" autocomplete="off" value="{$detail.lead_admin_name}" lay-verify="required" placeholder="请选择上级领导" lay-reqText="请选择上级领导" readonly class="layui-input picker-admin">
<input type="hidden" name="lead_admin_id" autocomplete="off" value="{$detail.lead_admin_id}">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">资料接受人<font>*</font></td>
<td>
<input type="text" name="connect_name" autocomplete="off" lay-verify="required" placeholder="请选择资料接受人" lay-reqText="请选择资料接受人" readonly class="layui-input picker-admin" value="{$detail.connect_name}">
<input type="hidden" name="connect_id" class="layui-input" value="{$detail.connect_id}">
</td>
<td class="layui-td-gray-2">参与交接人员<font>*</font></td>
<td>
<input type="text" name="connect_names" autocomplete="off" lay-verify="required" placeholder="请选择参与交接人员" lay-reqText="请选择参与交接人员" readonly class="layui-input picker-admin" data-type="2" value="{$detail.connect_names}">
<input type="hidden" name="connect_uids" class="layui-input" value="{$detail.connect_uids}">
</td>
</tr>
<tr>
<td class="layui-td-gray">离职原因<font>*</font></td>
<td colspan="3">
<textarea name="remark" lay-verify="required" placeholder="请输入离职原因" lay-reqText="请输入离职原因" class="layui-textarea">{$detail.remark}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray">附件 <button type="button" class="layui-btn layui-btn-xs" id="uploadBtn"><i class="layui-icon"></i></button></td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
<input data-type="file" type="hidden" name="file_ids" value="{$detail.file_ids|default=''}">
{notempty name="$detail.file_ids"}
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4">{:file_card($vo)}</div>
{/volist}
{/notempty}
</div>
</td>
</tr>
</table>
{/if}
<div id="checkBox" data-status="{$detail.check_status|default=0}" data-id="{$detail.id|default=0}" data-checkflowid="{$detail.check_flow_id|default=0}" class="pt-3"></div>
<div class="pt-4">
<input type="hidden" name="id" value="{$id}" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','uploadPlus','oaCheck','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus,oaCheck=layui.oaCheck,oaPicker=layui.oaPicker;
oaCheck.init({
check_name:'personal_quit',
check_btn:0
});
var fileUp = new uploadPlus();
$('body').on('click','[name="department"]',function(){
var val=$(this).val();
if(val==''){
layer.msg('请选择离职员工');
}
});
//选择员工弹窗
$('body').on('click','.picker',function () {
let that = $(this);
let ids=that.next().val()+'',names = that.val()+'';
oaPicker.employeeInit({
ids:ids,
names:names,
type:1,//1是单选,2是多选
callback:function(data){
//这里是选择后的回调方法,可以根据具体需求自定义写哦
let select_id=[],select_name=[],select_did=[],select_department=[];
for(var a=0; a<data.length;a++){
select_id.push(data[a].id);
select_name.push(data[a].name);
select_did.push(data[a].did);
select_department.push(data[a].department);
}
that.val(select_name.join(','));
that.next().val(select_id.join(','));
$('[name="uid"]').val(select_id.join(','));
$('[name="name"]').val(select_name.join(','));
$('[name="did"]').val(select_did.join(','));
$('[name="department"]').val(select_department.join(','));
}
});
});
//监听提交
form.on('submit(webform)', function (data) {
if(data.field.uid==data.field.lead_admin_id){
layer.msg('离职员工和上级领导不能是同一个人');
return false;
}
if(data.field.uid==data.field.connect_id){
layer.msg('离职员工和资料接受人不能是同一个人');
return false;
}
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
let checkCallback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
data.field.check_name = 'personal_quit';
data.field.action_id = e.data.return_id;
oaCheck.submit(data.field,checkCallback);
}
}
let clickbtn = $(this);
tool.post("/user/personal/leave_add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+66
View File
@@ -0,0 +1,66 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">离职申请</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">离职员工</td>
<td>{$detail.name} 「{$detail.position}」</td>
<td class="layui-td-gray">所在部门</td>
<td>{$detail.department}</td>
</tr>
<tr>
<td class="layui-td-gray">离职日期</td>
<td>{$detail.quit_time}</td>
<td class="layui-td-gray-2">上级领导</td>
<td>{$detail.lead_admin_name}</td>
</tr>
<tr>
<td class="layui-td-gray-2">资料接受人</td>
<td>{$detail.connect_name}</td>
<td class="layui-td-gray-2">参与交接人员</td>
<td>{$detail.connect_names}</td>
</tr>
<tr>
<td class="layui-td-gray">离职原因</td>
<td colspan="3">{$detail.remark}</td>
</tr>
<tr>
<td class="layui-td-gray">交接状态</td>
<td>{$detail.status_str}</td>
<td class="layui-td-gray-2">交接时间</td>
<td>{$detail.connect_time_str}</td>
</tr>
{notempty name="$detail.file_ids"}
<tr>
<td class="layui-td-gray">相关附件</td>
<td colspan="3">
<div class="layui-row" id="uploadBox">
{volist name="$detail.file_array" id="vo"}
<div class="layui-col-md4">{:file_card($vo)}</div>
{/volist}
</div>
</td>
</tr>
{/notempty}
</table>
<div id="checkBox" data-status="{$detail.check_status|default=0}" data-id="{$detail.id|default=0}" data-checkflowid="{$detail.check_flow_id|default=0}" class="pt-3"></div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaCheck'];
function gouguInit() {
var form = layui.form,tool=layui.tool,oaCheck=layui.oaCheck;
oaCheck.init({
check_name:'personal_quit',
check_btn:0
});
}
</script>
{/block}
<!-- /脚本 -->
+106
View File
@@ -0,0 +1,106 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-3">岗位职称</h3>
{if condition="$id eq 0"}
<table class="layui-table">
<tr>
<td class="layui-td-gray">岗位名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入岗位名称" lay-reqText="请输入岗位名称" class="layui-input">
</td>
<td class="layui-td-gray-3">岗位工时单价(元)<font>*</font></td>
<td>
<input type="text" name="work_price" lay-verify="required|number" placeholder="请输入岗位工时单价" lay-reqText="请输入岗位工时单价" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray">状态<font>*</font></td>
<td colspan="3">
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="0" title="禁用">
</td>
</tr>
<tr>
<td class="layui-td-gray">权限角色<font>*</font></td>
<td colspan="3">
{volist name="$group" id="v"}
<input type="checkbox" name="group_id[]" title="{$v.title}" value="{$v.id}" lay-skin="primary">
{/volist}
</td>
</tr>
<tr>
<td class="layui-td-gray">岗位备注</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入岗位备注" class="layui-textarea"></textarea>
</td>
</tr>
</table>
{else/}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">岗位名称<font>*</font></td>
<td>
<input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入岗位名称" lay-reqText="请输入岗位名称" class="layui-input">
</td>
<td class="layui-td-gray-3">岗位工时单价(元)<font>*</font></td>
<td>
<input type="text" name="work_price" value="{$detail.work_price}" lay-verify="required|number" placeholder="请输入岗位工时单价" lay-reqText="请输入岗位工时单价" autocomplete="off" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray">状态<font>*</font></td>
<td colspan="3">
<input type="radio" name="status" value="1" title="正常" {eq name="$detail.status" value="1"}checked{/eq}>
<input type="radio" name="status" value="0" title="禁止" {eq name="$detail.status" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray">权限角色<font>*</font></td>
<td colspan="3">
{volist name="$group" id="v"}
<input type="checkbox" name="group_id[]" title="{$v.title}" value="{$v.id}" {eq name="$v.checked" value="1" }checked{/eq} lay-skin="primary">
{/volist}
</td>
</tr>
<tr>
<td class="layui-td-gray">岗位备注</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入岗位备注" class="layui-textarea">{$detail.remark}</textarea>
</td>
</tr>
</table>
{/if}
<div class="pt-4">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var form = layui.form,tool=layui.tool;
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/position/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+117
View File
@@ -0,0 +1,117 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="status">
<i class="layui-icon {{# if(d.status == 1){ }}green layui-icon-ok{{# } else { }}yellow layui-icon-close{{# } }}"></i>
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="add">+ 添加岗位</button>
</div>
</script>
<script type="text/html" id="barDemo">
<div class="layui-btn-group"><button class="layui-btn layui-btn-xs layui-btn-normal" lay-event="view">详情</button><button class="layui-btn layui-btn-xs" lay-event="edit"></button><button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"></button></div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool;
layui.pageTable = table.render({
elem: '#test',
title: '岗位列表',
toolbar: '#toolbarDemo',
defaultToolbar: false,
url: "/user/position/index", //数据接口
page: false, //开启分页
cols: [
[
{
field: 'id',
title: 'ID号',
align: 'center',
width: 80
}, {
field: 'title',
title: '岗位名称',
align: 'center',
width: 120
},{
field: 'groupName',
title: '权限角色'
},{
field: 'remark',
title: '备注'
},{
field: 'work_price',
title: '岗位工时单价(元)',
align: 'center',
width: 132
}, {
field: 'status',
title: '状态',
toolbar: '#status',
align: 'center',
width: 60
}, {
field: 'right',
title: '操作',
toolbar: '#barDemo',
width: 120,
align: 'center'
}
]
]
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
if (obj.event === 'add') {
tool.side("/user/position/add");
return;
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
if(obj.event === 'view'){
tool.side('/user/position/view?id='+data.id);
return;
}
if(obj.event === 'edit'){
tool.side('/user/position/add?id='+data.id);
return;
}
if (obj.event === 'del') {
if (data.id == 1) {
layer.msg('超级岗位不能删除');
return;
}
layer.confirm('您确定要删除该岗位', {
icon: 3,
title: '提示'
}, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
tool.delete("/user/position/delete", { id: obj.data.id }, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+79
View File
@@ -0,0 +1,79 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.left-note{font-weight:800; vertical-align:top; padding-top:28px!important; text-align:center}
.left-note .layui-checkbox-disabled span {color: #808080!important;}
.layui-form-checked.layui-checkbox-disabled i{background-color:#ababab!important;color: #ffffff!important;border-color:#ababab!important;}
.layui-form-checked.layui-checkbox-disabled[lay-skin=primary] i{background-color:#ababab!important;}
.right-note .layui-checkbox-disabled span {color: #808080!important;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-3">岗位信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">岗位名称</td>
<td>
{$detail.title}
</td>
<td class="layui-td-gray-2">岗位工时单价</td>
<td>
{$detail.work_price}
</td>
<td class="layui-td-gray">状态</td>
<td>
{eq name="$detail.status" value="1" }正常{/eq}
{eq name="$detail.status" value="0" }禁止登录{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray">用户角色</td>
<td colspan="5">
{volist name="$group" id="v"}
{eq name="$v.checked" value="1" }{$v.title},{/eq}
{/volist}
</td>
</tr>
<tr>
<td class="layui-td-gray">岗位备注</td>
<td colspan="5">
{$detail.remark}
</td>
</tr>
</table>
<h3 class="py-3">岗位权限</h3>
<table class="layui-table layui-table-form">
{volist name="role_rule" id="vo"}
<tr>
<td class="left-note">
<input type="checkbox" disabled value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
{notempty name="vo.children"}
<td class="right-note">
<div style="padding:0 0 0 10px;">
{volist name="vo.children" key="k" id="voo"}
<div class="checkbox16" style="padding:10px 0;">
<input type="checkbox" disabled lay-filter="rule" name="rule[]" value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:0 0 3px; {if condition='$k != count($vo.children)'}margin-bottom:3px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" disabled data-rule="{$voo.id}" name="rule[]" value="{$vooo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
</div>
{/volist}
</div>
{/notempty}
{/volist}
</div>
</td>
{/notempty}
</tr>
{/volist}
</table>
</form>
{/block}
<!-- /主体 -->
+111
View File
@@ -0,0 +1,111 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">奖罚信息</h3>
<table class="layui-table layui-table-form">
{eq name="$id" value="0"}
<tr>
<td class="layui-td-gray">奖惩项目<font>*</font></td>
<td>
<select name="rewards_cate" lay-verify="required" lay-reqText="请选择奖惩项目">
<option value="">请选择</option>
{volist name=":get_base_data('rewards_cate')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">奖惩类型</td>
<td>
<input type="radio" name="types" lay-filter="checktype" value="1" title="奖励" checked>
<input type="radio" name="types" lay-filter="checktype" value="2" title="惩罚" >
</td>
<td class="layui-td-gray">当前状态</td>
<td>
<input type="radio" name="status" lay-filter="checktype" value="1" title="待执行" checked>
<input type="radio" name="status" lay-filter="checktype" value="2" title="已执行" >
</td>
</tr>
{else/}
<tr>
<td class="layui-td-gray">奖惩项目<font>*</font></td>
<td>
<select name="rewards_cate" lay-verify="required" lay-reqText="请选择奖惩项目">
<option value="">请选择</option>
{volist name=":get_base_data('rewards_cate')" id="vo"}
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.rewards_cate"} selected{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">奖惩类型</td>
<td>
<input type="radio" name="types" value="1" title="奖励" {eq name="$detail.types" value="1"} checked{/eq}>
<input type="radio" name="types" value="2" title="惩罚" {eq name="$detail.types" value="2"} checked{/eq}>
</td>
<td class="layui-td-gray">当前状态</td>
<td>
<input type="radio" name="status" value="1" title="待执行" {eq name="$detail.status" value="1"} checked{/eq}>
<input type="radio" name="status" value="2" title="已执行" {eq name="$detail.status" value="2"} checked{/eq}>
</td>
</tr>
{/eq}
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td>
<input type="text" name="uname" lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择员工姓名" class="layui-input picker-admin" readonly value="{$detail.user_name|default=''}">
<input type="hidden" name="uid" value="{$detail.uid|default=0}">
</td>
<td class="layui-td-gray-2">奖惩金额(元)<font>*</font></td>
<td>
<input type="text" name="cost" lay-verify="required|number" autocomplete="off" placeholder="请选择" lay-reqText="请完善金额,仅为数字" class="layui-input" value="{$detail.cost|default=''}">
</td>
<td class="layui-td-gray">奖惩日期<font>*</font></td>
<td>
<input type="text" name="rewards_time" readonly lay-verify="required" autocomplete="off" placeholder="请选择" lay-reqText="请选择奖惩日期" class="layui-input tool-time" value="{$detail.rewards_time|default=''}">
</td>
</tr>
<tr>
<td class="layui-td-gray">奖惩物品</td>
<td colspan="5">
<input type="text" name="thing" autocomplete="off" placeholder="请输入奖惩物品,可空" class="layui-input" value="{$detail.thing|default=''}">
</td>
</tr>
<tr>
<td class="layui-td-gray">奖罚描述</td>
<td colspan="5">
<textarea name="remark" placeholder="请输入奖罚描述,可空" class="layui-textarea">{$detail.remark|default=''}</textarea>
</td>
</tr>
</table>
<div class="pt-4">
<input type="hidden" name="id" value="{$id|default=0}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool','oaPicker'];
function gouguInit() {
var form = layui.form, tool = layui.tool;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/rewards/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+151
View File
@@ -0,0 +1,151 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
<div class="layui-input-inline" style="width:100px">
<select name="status">
<option value="">奖惩状态</option>
<option value="1">待执行</option>
<option value="2">已执行</option>
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="types">
<option value="">奖惩类型</option>
<option value="1">奖励</option>
<option value="2">惩罚</option>
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="rewards_cate">
<option value="">奖惩项目</option>
{volist name=":get_base_data('rewards_cate')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:80px">
<input type="text" name="uname" placeholder="奖惩员工" class="layui-input picker-admin" value="" readonly>
<input type="text" name="uid" value="" style="display:none;">
</div>
<div class="layui-input-inline" style="width:292px;">
<input type="text" class="layui-input" id="diff_time" placeholder="奖惩日期" readonly name="diff_time">
</div>
<div class="layui-input-inline" style="width:188px">
<input type="text" name="keywords" placeholder="关键字" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:150px;">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="table_rewards" lay-filter="table_rewards"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="add" type="button">+ 添加奖罚管理</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaPicker','tablePlus','laydatePlus'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool, laydatePlus = layui.laydatePlus;
var diff_time = new laydatePlus({'target':'diff_time'});
layui.pageTable = table.render({
elem: "#table_rewards"
, toolbar: "#toolbarDemo"
,url: "/user/rewards/datalist"
,page: true
,limit: 20
,cellMinWidth: 80
,height: 'full-114'
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'status',title: '状态',width:90, align:'center',templet: function(d){
var html='';
if(d.status==1){
return '<span class="green">『待执行』</span>';
}
if(d.status==2){
return '<span class="red">『已执行』</span>';
}
else{
return '-';
}
}}
,{field:'user_name',title: '员工',width:90, align:'center'}
,{field:'types',title: '奖惩类型',width:90, align:'center',templet: function(d){
var html='';
if(d.types==1){
return '<span class="green">奖励</span>';
}
if(d.types==2){
return '<span class="red">罚款</span>';
}
else{
return '-';
}
}}
,{field:'cate',title: '奖惩项目',width:100, align:'center'}
,{field:'rewards_time',title: '奖惩日期',width:90, align:'center'}
,{field:'cost',title: '金额(元)',width:90, align:'right'}
,{field:'thing',title: '物品'}
,{field:'admin_name',title: '创建人',width:90,align:'center'}
,{field:'create_time', title: '创建时间',width:150,align:'center'}
,{width:120,fixed:'right',title: '操作', align:'center',templet: function(d){
var html='';
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详细</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
html = '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
return html;
}}
]]
});
//表头工具栏事件
table.on('toolbar(table_rewards)', function(obj){
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = checkStatus.data;
if (obj.event === 'add') {
tool.side("/user/rewards/add");
return;
}
});
table.on('tool(table_rewards)',function (obj) {
let data=obj.data
if (obj.event === 'view') {
tool.side("/user/rewards/view?id="+data.id);
return;
}
if (obj.event === 'edit') {
tool.side("/user/rewards/add?id="+data.id);
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
tool.delete("/user/rewards/del", { id: data.id }, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+53
View File
@@ -0,0 +1,53 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">奖罚信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.user_name|default=''}</td>
<td class="layui-td-gray">奖惩类型</td>
<td>
{eq name="$detail.types" value="1"}<span class="green">奖励</span>{/eq}
{eq name="$detail.types" value="2"}<span class="red">惩罚</span>{/eq}
</td>
<td class="layui-td-gray">当前状态</td>
<td>
{eq name="$detail.status" value="1"}<span class="green">『待执行』</span>{/eq}
{eq name="$detail.status" value="2"}<span class="red">『已执行』</span>{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray">奖惩项目</td>
<td>{$detail.cate}</td>
<td class="layui-td-gray-2">奖惩金额(元)</td>
<td>{$detail.cost}</td>
<td class="layui-td-gray">奖惩日期</td>
<td>{$detail.rewards_time}</td>
</tr>
<tr>
<td class="layui-td-gray">奖惩物品</td>
<td colspan="5">{$detail.thing}</td>
</tr>
<tr>
<td class="layui-td-gray">奖罚描述</td>
<td colspan="5">{$detail.remark|default=''}</td>
</tr>
</table>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool'];
function gouguInit() {
var tool = layui.tool;
}
</script>
{/block}
<!-- /脚本 -->
+49
View File
@@ -0,0 +1,49 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-3">奖惩项目</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">奖惩项目名称<font>*</font></td>
<td>
<input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入奖惩项目名称" lay-reqText="请输入奖惩项目名称"class="layui-input" value="{$detail.title|default=''}">
</td>
<td class="layui-td-gray">排序</td>
<td>
<input type="text" name="sort" placeholder="请输入排序,数字" autocomplete="off" class="layui-input" value="{$detail.sort|default=''}">
</td>
</tr>
</table>
<div class="pt-3">
<input type="hidden" name="id" value="{$detail.id|default=0}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
var moduleInit = ['tool'];
function gouguInit() {
var form = layui.form, tool = layui.tool;
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/rewardscate/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+124
View File
@@ -0,0 +1,124 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<table class="layui-hide" id="table_rewards_cate" lay-filter="table_rewards_cate"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm add-new" type="button">+ 添加奖惩项目</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool;
layui.pageTable = table.render({
elem: "#table_rewards_cate"
,toolbar: '#toolbarDemo'
,url: "/user/rewardscate/datalist"
,page: false
,limit: 999
,cellMinWidth: 80
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '名称'}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span class="green">正常</span>';
var html2='<span class="yellow">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:100,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(table_rewards_cate)',function (obj) {
if(obj.event === 'edit'){
add_cate(obj.data.id,obj.data.title);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该奖惩项目吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/rewardscate/set", {id:obj.data.id,status: 0}, callback);
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该奖惩项目吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/rewardscate/set", {id:obj.data.id,status:1}, callback);
layer.close(index);
});
}
});
$('body').on('click','.add-new',function(){
add_cate(0,'');
});
function add_cate(id,val){
var title = '新增奖惩项目';
if(id>0){
title = '编辑奖惩项目';
}
layer.prompt({
title: title,
value: val,
yes: function(index, layero) {
// 获取文本框输入的值
var value = layero.find(".layui-layer-input").val();
if (value) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/rewardscate/add", {id: id,title: value}, callback);
layer.close(index);
} else {
layer.msg('请填写奖惩项目名称');
}
}
})
}
}
</script>
{/block}
<!-- /脚本 -->
+291
View File
@@ -0,0 +1,291 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">入职申请</h3>
<table class="layui-table layui-table-form">
<tr>
<td colspan="6"><strong>基本信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray-2">员工姓名<font>*</font></td>
<td><input type="text" name="name" value="{$detail.name|default=''}" placeholder="请输入" lay-verify="required" lay-reqText="请输入姓名" class="layui-input"></td>
<td class="layui-td-gray-2">性别<font>*</font></td>
<td>
{empty name="$detail"}
<input type="radio" name="sex" value="1" title="男">
<input type="radio" name="sex" value="2" title="女">
{else/}
<input type="radio" name="sex" value="1" title="男" {eq name="$detail.sex" value="1"} checked{/eq}>
<input type="radio" name="sex" value="2" title="女" {eq name="$detail.sex" value="2"} checked{/eq}>
{/empty}
</td>
<td rowspan="4" class="layui-td-gray-2">头像照片<font>*</font></td>
<td rowspan="4" valign="top" style="width: 180px;">
<div class="layui-upload" style="width: 180px;">
<div class="layui-upload-list" id="uploadThumb" style="width: 100%; height:150px; overflow: hidden;">
{empty name="$detail"}
<img src="" height="180" style="max-width: 100%;" />
{else/}
<img src="{:get_file($detail.thumb)}" height="150" style="max-width: 100%;" />
{/empty}
<input type="hidden" name="thumb" value="{$detail.thumb|default=''}" lay-verify="required" lay-reqText="请上传头像照片">
</div>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;" id="uploadImg">上传头像照片</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">手机号码<font>*</font></td>
<td><input type="text" name="mobile" value="{$detail.mobile|default=''}" lay-verify="required|phone" lay-reqText="请输入正确的手机号码" placeholder="可使用手机号码登录" class="layui-input"></td>
<td class="layui-td-gray">电子邮箱</td>
<td><input type="text" name="email" value="{$detail.email|default=''}" lay-verify="email" placeholder="请输入电子邮箱" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">出生日期</td>
<td><input type="text" name="birthday" value="{$detail.birthday|default=''}" readonly autocomplete="off" placeholder="请选择" class="layui-input tool-time"></td>
<td class="layui-td-gray">身份证号码</td>
<td><input type="text" name="idcard" value="{$detail.idcard|default=''}" autocomplete="off" lay-verify="identity" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">民族</td>
<td><input type="text" name="nation" value="{$detail.nation|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">籍贯</td>
<td><input type="text" name="native_place" value="{$detail.native_place|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
{empty name="$detail"}
<tr>
<td class="layui-td-gray">政治面貌</td>
<td>
<select name="political">
<option value="0"></option>
<option value="1">中共党员</option>
<option value="2">团员</option>
</select>
</td>
<td class="layui-td-gray">婚姻状况</td>
<td>
<input type="radio" name="marital_status" value="1" title="未婚" checked>
<input type="radio" name="marital_status" value="2" title="已婚">
</td>
<td class="layui-td-gray">参加工作时间</td>
<td><input type="text" name="work_date" value="{$detail.work_date|default=''}" readonly autocomplete="off" placeholder="请输入" class="layui-input tool-time"></td>
</tr>
{else/}
<tr>
<td class="layui-td-gray">政治面貌</td>
<td>
<select name="political">
<option value="0" {eq name="$detail.political" value="0"} selected{/eq}></option>
<option value="1" {eq name="$detail.political" value="1"} selected{/eq}>中共党员</option>
<option value="2" {eq name="$detail.political" value="2"} selected{/eq}>团员</option>
</select>
</td>
<td class="layui-td-gray">婚姻状况</td>
<td>
<input type="radio" name="marital_status" value="1" title="未婚" {eq name="$detail.marital_status" value="1"} checked{/eq}>
<input type="radio" name="marital_status" value="2" title="已婚" {eq name="$detail.marital_status" value="2"} checked{/eq}>
</td>
<td class="layui-td-gray">参加工作时间</td>
<td><input type="text" name="work_date" value="{$detail.work_date|default=''}" readonly autocomplete="off" placeholder="请输入" class="layui-input tool-time"></td>
</tr>
{/empty}
<tr>
{empty name="$detail"}
<td class="layui-td-gray">户口性质</td>
<td>
<input type="radio" name="resident_type" value="1" title="农村户口">
<input type="radio" name="resident_type" value="2" title="城镇户口">
</td>
{else/}
<td class="layui-td-gray">户口性质</td>
<td>
<input type="radio" name="resident_type" value="1" title="农村户口" {eq name="$detail.resident_type" value="1"} checked{/eq}>
<input type="radio" name="resident_type" value="2" title="城镇户口" {eq name="$detail.resident_type" value="2"} checked{/eq}>
</td>
{/empty}
<td class="layui-td-gray">户口所在地</td>
<td colspan="3"><input type="text" name="resident_place" value="{$detail.resident_place|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">家庭住址</td>
<td colspan="3"><input type="text" name="home_address" value="{$detail.home_address|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">紧急联系人</td>
<td><input type="text" name="contact" value="{$detail.contact|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">现住地址</td>
<td colspan="3"><input type="text" name="current_address" value="{$detail.current_address|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">紧急联系电话</td>
<td><input type="text" name="contact_mobile" value="{$detail.contact_mobile|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">个人简介</td>
<td colspan="5">
<textarea name="desc" placeholder="请输入个人简介" class="layui-textarea">{$detail.desc|default=''}</textarea>
</td>
</tr>
<tr>
<td colspan="6"><strong>教育信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">毕业院校</td>
<td colspan="3"><input type="text" name="graduate_school" value="{$detail.graduate_school|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">毕业日期</td>
<td><input type="text" name="graduate_day" value="{$detail.graduate_day|default=''}" readonly autocomplete="off" placeholder="请选择" class="layui-input tool-time"></td>
</tr>
<tr>
<td class="layui-td-gray">专业</td>
<td colspan="3"><input type="text" name="speciality" value="{$detail.speciality|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
<td class="layui-td-gray">最高学位</td>
<td><input type="text" name="education" value="{$detail.education|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td colspan="6"><strong>入职信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">入职部门<font>*</font></td>
<td><select id="to_did" name="to_did" xm-selected="{$detail.to_did|default=''}" xm-select="select1" xm-select-skin="default" xm-select-radio="true" lay-verify="required" lay-reqText="请选择入职部门"></select></td>
<td class="layui-td-gray">上级主管</td>
<td>
<input type="text" name="pname" readonly placeholder="请选择" class="layui-input picker-admin" value="{$detail.pname|default=''}">
<input type="hidden" name="pid" value="{$detail.pid|default=''}">
</td>
<td class="layui-td-gray">入职时间<font>*</font></td>
<td><input type="text" name="entry_time" value="{$detail.entry_time|default=''}" readonly placeholder="请选择" class="layui-input tool-time"></td>
</tr>
{empty name="$detail"}
<tr>
<td class="layui-td-gray">岗位职称<font>*</font></td>
<td>
<select name="position_id" lay-verify="required" lay-reqText="请选择岗位职称">
<option value="">请选择岗位职称</option>
{volist name="$position" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职务<font>*</font></td>
<td>
<select name="position_name" lay-verify="required" lay-reqText="请选择职务">
<option value="">请选择职务</option>
{volist name=":get_base_type_data('basic_user',1)" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职级<font>*</font></td>
<td>
<select name="position_rank" lay-verify="required" lay-reqText="请选择职级">
<option value="">请选择职级</option>
{volist name=":get_base_type_data('basic_user',2)" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</td>
</tr>
{else/}
<tr>
<td class="layui-td-gray">岗位职称<font>*</font></td>
<td>
<select name="position_id" lay-verify="required" lay-reqText="请选择岗位职称">
<option value="">请选择岗位职称</option>
{volist name="$position" id="v"}
<option value="{$v.id}" {eq name="$v.id" value="$detail.position_id"}selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职务<font>*</font></td>
<td>
<select name="position_name" lay-verify="required" lay-reqText="请选择职务">
<option value="">请选择职务</option>
{volist name=":get_base_type_data('basic_user',1)" id="v"}
<option value="{$v.id}" {eq name="$detail.position_name" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职级<font>*</font></td>
<td>
<select name="position_rank" lay-verify="required" lay-reqText="请选择职级">
<option value="">请选择职级</option>
{volist name=":get_base_type_data('basic_user',2)" id="v"}
<option value="{$v.id}" {eq name="$detail.position_rank" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
</tr>
{/empty}
</table>
<div id="checkBox" data-status="{$detail.check_status|default=0}" data-id="{$detail.id|default=0}" data-checkflowid="{$detail.check_flow_id|default=0}" class="pt-3"></div>
<div class="pt-4">
<input type="hidden" value="{$detail.id|default=0}" name="id">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','uploadPlus','oaPicker','formSelects','oaCheck'];
function gouguInit() {
var form = layui.form,tool=layui.tool,uploadPlus=layui.uploadPlus,formSelects=layui.formSelects,oaCheck=layui.oaCheck;
//选择所属部门
var selected_a = $('#to_did').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_department_select',
keyword: selected_a
});
//头像上传
var photoUpload = new uploadPlus({
'use':'single',
'target':'uploadImg',
'callback':function(res){
layer.msg(res.msg);
if (res.code == 0) {
//上传成功
$('#uploadThumb input').attr('value', res.data.id);
$('#uploadThumb img').attr('src', res.data.filepath);
}
}
});
oaCheck.init({
check_name:'talent',
check_btn:0
});
//监听提交
form.on('submit(webform)', function(data){
if(!data.field.sex){
layer.msg('请选择入职人员性别');
return false;
}
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
let checkCallback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
data.field.check_name = 'talent';
data.field.action_id = e.data.return_id;
oaCheck.submit(data.field,checkCallback);
}
}
let clickbtn = $(this);
tool.post("/user/talent/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+221
View File
@@ -0,0 +1,221 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.dropdpwn-demo .layui-btn+.layui-btn{margin-left:3px;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<div class="layui-card border-x border-t" style="margin-bottom:0; box-shadow:0 0 0 0 rgb(5 32 96 / 0%)">
<div class="body-table layui-tab layui-tab-brief" lay-filter="tab">
<ul class="layui-tab-title">
<li class="layui-this">全部</li>
<li>我申请的</li>
<li>待我审批</li>
<li>我已审批</li>
<li>抄送我的</li>
</ul>
</div>
</div>
<form class="layui-form gg-form-bar border-x tab-0" id="barsearchform">
<div class="layui-input-inline search-item" style="width:120px;">
<select name="check_status">
<option value="">选择审批状态</option>
{volist name=":get_check_status()" id="vo"}
<option value="{$key}">{$vo}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input type="text" class="layui-input picker-oa" data-types="department" placeholder="选择入职部门" readonly>
<input type="text" name="did" style="display:none;">
</div>
<div class="layui-input-inline" style="width:175px;">
<input type="text" class="layui-input" id="entry_time" placeholder="选择入职日期" readonly name="entry_time">
</div>
<div class="layui-input-inline" style="width:240px">
<input type="text" name="keywords" placeholder="关键字,姓名/手机号码" class="layui-input" />
</div>
<div class="layui-input-inline" style="width:150px">
<input type="hidden" name="tab" value="0"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">清空</button>
</div>
</form>
<table class="layui-hide" id="table_talent" lay-filter="table_talent"></table>
</div>
<script type="text/html" id="thumb">
<img src="{{d.thumb}}" width="30" height="30" />
</script>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-group">
<button class="layui-btn layui-btn-sm tool-add" type="button" data-href="/user/talent/add">+ 添加入职申请</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const is_auth = {$is_auth};
const moduleInit = ['tool','tablePlus','laydatePlus','oaPicker'];
function gouguInit() {
var table = layui.tablePlus, tool = layui.tool,form = layui.form,element = layui.element,laydatePlus = layui.laydatePlus;
//日期范围
var entry_time = new laydatePlus({'target':'entry_time'});
//tab切换
element.on('tab(tab)', function(data){
$('[name="tab"]').val(data.index);
$("#barsearchform")[0].reset();
layui.pageTable.reload({where:{tab:data.index},page:{curr:1}});
return false;
});
layui.pageTable = table.render({
elem: "#table_talent"
,title: '入职申请列表'
,toolbar: "#toolbarDemo"
,url: "/user/talent/datalist"
,page: true
,limit: 20
,cellMinWidth: 60
,height: 'full-154'
,cols: [[
{
field: 'id',
title: 'ID号',
align: 'center',
fixed:'left',
width: 80
},{field:'check_status',title: '审核状态',width:110, align:'center',templet: function(d){
var html = '<span class="check-status-color-'+d.check_status+'">『'+d.check_status_str+'』</span>';
return html;
}
},{
field: 'name',
title: '姓名',
width: 150
},{
field: 'thumb',
title: '照片头像',
toolbar: '#thumb',
align: 'center',
width: 80
},{
field: 'sex',
title: '性别',
align: 'center',
width: 50,
templet: function (d) {
var html = '未知';
if(d.sex == 1){
html = '男'
}
else if(d.sex == 2){
html = '女'
}
return html;
}
},{
field: 'mobile',
title: '手机号码',
align: 'center',
width: 110
},{
field: 'department',
title: '入职部门',
align: 'center',
width: 100
},{
field: 'position',
title: '入职岗位',
align: 'center',
width: 100
},{
field:'admin_name',
title: '申请人',
width:90,
align:'center'
},{
field:'create_time',
title: '申请时间',
width:150,
align:'center'
},{
field:'check_users',
title: '当前审批人'
},{
field: 'status',
title: '入职状态',
align: 'center',
width: 80,
templet: function (d) {
var html = '';
if(d.status == 1){
html = '<span class="red">未入职</span>'
}
else if(d.status == 2){
html = '<span class="green">已入职</span>'
}
return html;
}
},{
field: 'entry_time',
title: '入职日期',
align: 'center',
width: 90
},{width:168,fixed:'right',title: '操作', align:'center',ignoreExport:true,templet: function(d){
var html='';
var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详细</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
var btn3='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>';
var btn4='<a class="layui-btn layui-btn-xs" lay-event="user">转入职</a>';
var html = '<div class="layui-btn-group">'+btn1+'</div>';
if((d.check_status==0 || d.check_status==4) && d.admin_id == login_admin){
html = '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
}
if(d.check_status==2 && d.status==1 && (d.admin_id == login_admin || is_auth==1)){
html = '<div class="layui-btn-group">'+btn1+btn4+'</div>';
}
return html;
}}
]]
});
table.on('tool(table_talent)',function (obj) {
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = obj.data;
if (obj.event === 'view') {
tool.side("/user/talent/view?id="+data.id);
return;
}
if (obj.event === 'edit') {
tool.side("/user/talent/add?id="+data.id);
return;
}
if (obj.event === 'user') {
tool.side("/user/talent/set?id="+data.id);
return;
}
if (obj.event === 'del') {
layer.confirm('确定要删除该记录吗?', { icon: 3, title: '提示' }, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
obj.del();
}
}
tool.delete("/user/talent/del", { id: data.id }, callback);
layer.close(index);
});
return;
}
});
}
</script>
{/block}
<!-- /脚本 -->
+207
View File
@@ -0,0 +1,207 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-3">转入职</h3>
<table class="layui-table layui-table-form">
<tr>
<td colspan="6"><strong>基本信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.name|default=''}</td>
<td class="layui-td-gray-2">性别</td>
<td>
{eq name="$detail.sex" value="1"}男{/eq}
{eq name="$detail.sex" value="2"}女{/eq}
</td>
<td rowspan="4" class="layui-td-gray-2">照片头像</td>
<td rowspan="4" valign="top" style="width: 180px;">
<div class="layui-upload" style="width: 180px;">
<div class="layui-upload-list" id="uploadThumb" style="width: 100%; height:150px; overflow: hidden;">
<img src="{:get_file($detail.thumb)}" height="150" style="max-width: 100%;" />
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">手机号码<font>*</font></td>
<td><input type="text" name="mobile" value="{$detail.mobile|default=''}" lay-verify="required|phone" lay-reqText="请输入正确的手机号码" placeholder="可使用手机号码登录" class="layui-input"></td>
<td class="layui-td-gray">电子邮箱</td>
<td><input type="text" name="email" value="{$detail.email|default=''}" lay-verify="email" placeholder="请输入电子邮箱" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">出生日期</td>
<td>{$detail.birthday|default='-'}</td>
<td class="layui-td-gray">身份证号码</td>
<td>{$detail.idcard|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">民族</td>
<td>{$detail.nation|default='-'}</td>
<td class="layui-td-gray">籍贯</td>
<td>{$detail.native_place|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">政治面貌</td>
<td>
{eq name="$detail.political" value="0"}无{/eq}
{eq name="$detail.political" value="1"}中共党员{/eq}
{eq name="$detail.political" value="2"}共青团员{/eq}
</td>
<td class="layui-td-gray">婚姻状况</td>
<td>
{eq name="$detail.marital_status" value="1"}未婚{/eq}
{eq name="$detail.marital_status" value="2"}已婚{/eq}
</td>
<td class="layui-td-gray">参加工作时间</td>
<td>{$detail.work_date|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">户口性质</td>
<td>
{eq name="$detail.resident_type" value="1"}农村户口{/eq}
{eq name="$detail.resident_type" value="2"}城镇户口{/eq}
</td>
<td class="layui-td-gray">户口所在地</td>
<td colspan="3">{$detail.resident_place|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">家庭住址</td>
<td colspan="3">{$detail.home_address|default='-'}</td>
<td class="layui-td-gray">紧急联系人</td>
<td>{$detail.contact|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">现住地址</td>
<td colspan="3">{$detail.current_address|default='-'}</td>
<td class="layui-td-gray">紧急联系电话</td>
<td>{$detail.contact_mobile|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">个人简介</td>
<td colspan="5">{$detail.desc|default='-'}</td>
</tr>
<tr>
<td colspan="6"><strong>教育信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">毕业院校</td>
<td colspan="3">{$detail.graduate_school|default='-'}</td>
<td class="layui-td-gray">毕业日期</td>
<td>{$detail.graduate_day|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">专业</td>
<td colspan="3">{$detail.speciality|default='-'}</td>
<td class="layui-td-gray">最高学位</td>
<td>{$detail.education|default='-'}</td>
</tr>
<tr>
<td colspan="6"><strong>入职信息</strong></td>
</tr>
<tr>
<tr>
<td class="layui-td-gray">入职部门<font>*</font></td>
<td><select id="to_did" name="to_did" xm-selected="{$detail.to_did|default=''}" xm-select="select1" xm-select-skin="default" xm-select-radio="true" lay-verify="required" lay-reqText="请选择入职部门"></select></td>
<td class="layui-td-gray">上级主管</td>
<td>
<input type="text" name="pname" readonly placeholder="请选择" class="layui-input picker-admin" value="{$detail.pname|default=''}">
<input type="hidden" name="pid" value="{$detail.pid|default=''}">
</td>
<td class="layui-td-gray">入职时间<font>*</font></td>
<td><input type="text" name="entry_time" value="{$detail.entry_time|default=''}" readonly placeholder="请选择" class="layui-input tool-time"></td>
</tr>
<td class="layui-td-gray">岗位职称<font>*</font></td>
<td>
<select name="position_id" lay-verify="required" lay-reqText="请选择岗位职称">
<option value="">请选择岗位职称</option>
{volist name="$position" id="v"}
<option value="{$v.id}" {eq name="$v.id" value="$detail.position_id"}selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职务<font>*</font></td>
<td>
<select name="position_name" lay-verify="required" lay-reqText="请选择职务">
<option value="">请选择职务</option>
{volist name=":get_base_type_data('basic_user',1)" id="v"}
<option value="{$v.id}" {eq name="$detail.position_name" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">职级<font>*</font></td>
<td>
<select name="position_rank" lay-verify="required" lay-reqText="请选择职级">
<option value="">请选择职级</option>
{volist name=":get_base_type_data('basic_user',2)" id="v"}
<option value="{$v.id}" {eq name="$detail.position_rank" value="$v.id"} selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">员工类型<font>*</font></td>
<td>
<input type="radio" name="type" value="1" title="正式">
<input type="radio" name="type" value="2" title="试用" checked>
<input type="radio" name="type" value="3" title="实习">
</td>
<td class="layui-td-gray">身份类型<font>*</font></td>
<td>
<input type="radio" name="is_staff" value="1" title="企业员工" checked>
<input type="radio" name="is_staff" value="2" title="劳动派遣">
<input type="radio" name="is_staff" value="3" title="兼职人员">
</td>
<td class="layui-td-gray">工号</td>
<td><input type="text" name="job_number" value="{$detail.job_number|default=''}" autocomplete="off" placeholder="请输入" class="layui-input"></td>
</tr>
<tr>
<td class="layui-td-gray">入职评语</td>
<td colspan="5">
<textarea name="remark" placeholder="请输入职评语" class="layui-textarea">{$detail.remark|default=''}</textarea>
</td>
</tr>
</table>
{eq name="$detail.status" value="1"}
<div class="pt-4">
<input type="hidden" value="{$detail.id|default=0}" name="id">
<input type="hidden" value="{$detail.to_did|default=0}" name="to_did">
<input type="hidden" name="reg_pwd" value="{$reg_pwd}" lay-verify="required">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
{/eq}
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','formSelects','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects=layui.formSelects;
//选择所属部门
var selected_a = $('#to_did').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_department_select',
keyword: selected_a
});
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
//tool.sideClose(1000);
parent.location.reload();
}
}
tool.post("/user/talent/set", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+139
View File
@@ -0,0 +1,139 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">入职审批信息{eq name="$detail.status" value="2"}<span class="blue">『已入职』</span>{/eq}</h3>
<table class="layui-table layui-table-form">
<tr>
<td colspan="6"><strong>基本信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>{$detail.name|default=''}</td>
<td class="layui-td-gray-2">性别</td>
<td>
{eq name="$detail.sex" value="1"}男{/eq}
{eq name="$detail.sex" value="2"}女{/eq}
</td>
<td rowspan="4" class="layui-td-gray-2">照片头像</td>
<td rowspan="4" valign="top" style="width: 180px;">
<div class="layui-upload" style="width: 180px;">
<div class="layui-upload-list" id="uploadThumb" style="width: 100%; height:150px; overflow: hidden;">
<img src="{:get_file($detail.thumb)}" height="150" style="max-width: 100%;" />
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">手机号码</td>
<td>{$detail.mobile|default=''}</td>
<td class="layui-td-gray">电子邮箱</td>
<td>{$detail.email|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">出生日期</td>
<td>{$detail.birthday|default='-'}</td>
<td class="layui-td-gray">身份证号码</td>
<td>{$detail.idcard|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">民族</td>
<td>{$detail.nation|default='-'}</td>
<td class="layui-td-gray">籍贯</td>
<td>{$detail.native_place|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">政治面貌</td>
<td>
{eq name="$detail.political" value="0"}无{/eq}
{eq name="$detail.political" value="1"}中共党员{/eq}
{eq name="$detail.political" value="2"}共青团员{/eq}
</td>
<td class="layui-td-gray">婚姻状况</td>
<td>
{eq name="$detail.marital_status" value="1"}未婚{/eq}
{eq name="$detail.marital_status" value="2"}已婚{/eq}
</td>
<td class="layui-td-gray">参加工作时间</td>
<td>{$detail.work_date|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">户口性质</td>
<td>
{eq name="$detail.resident_type" value="1"}农村户口{/eq}
{eq name="$detail.resident_type" value="2"}城镇户口{/eq}
</td>
<td class="layui-td-gray">户口所在地</td>
<td colspan="3">{$detail.resident_place|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">家庭住址</td>
<td colspan="3">{$detail.home_address|default='-'}</td>
<td class="layui-td-gray">紧急联系人</td>
<td>{$detail.contact|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">现住地址</td>
<td colspan="3">{$detail.current_address|default='-'}</td>
<td class="layui-td-gray">紧急联系电话</td>
<td>{$detail.contact_mobile|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">个人简介</td>
<td colspan="5">{$detail.desc|default='-'}</td>
</tr>
<tr>
<td colspan="6"><strong>教育信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">毕业院校</td>
<td colspan="3">{$detail.graduate_school|default='-'}</td>
<td class="layui-td-gray">毕业日期</td>
<td>{$detail.graduate_day|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">专业</td>
<td colspan="3">{$detail.speciality|default='-'}</td>
<td class="layui-td-gray">最高学位</td>
<td>{$detail.education|default='-'}</td>
</tr>
<tr>
<td colspan="6"><strong>入职信息</strong></td>
</tr>
<tr>
<td class="layui-td-gray">入职部门</td>
<td>{$detail.department|default='-'}</td>
<td class="layui-td-gray">上级主管</td>
<td>{$detail.pname|default='-'}</td>
<td class="layui-td-gray">入职时间</td>
<td>{$detail.entry_time|default='-'}</td>
</tr>
<tr>
<td class="layui-td-gray">岗位职称</td>
<td>{$detail.position|default='-'}</td>
<td class="layui-td-gray">职务</td>
<td>{$detail.position_name_str|default='-'}</td>
<td class="layui-td-gray">职级</td>
<td>{$detail.position_rank_str|default='-'}</td>
</tr>
</table>
<div id="checkBox" data-status="{$detail.check_status}" data-id="{$detail.id}" data-checkflowid="{$detail.check_flow_id}" class="pt-3"></div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaCheck'];
const id = {$detail.id};
function gouguInit() {
var form = layui.form,tool=layui.tool,oaCheck=layui.oaCheck;
oaCheck.init({
check_name:'talent',
check_reversed:null
});
}
</script>
{/block}
<!-- /脚本 -->
+289
View File
@@ -0,0 +1,289 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
{if condition="$id eq 0"}
<h3 class="pb-2">添加员工信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td><input type="text" name="name" lay-verify="required" placeholder="请输入员工姓名" lay-reqText="请输入员工姓名" class="layui-input"></td>
<td class="layui-td-gray">员工性别<font>*</font></td>
<td>
<input type="radio" name="sex" value="1" title="男">
<input type="radio" name="sex" value="2" title="女">
</td>
<td class="layui-td-gray">初始密码</td>
<td>
{$reg_pwd}
<input type="hidden" name="reg_pwd" value="{$reg_pwd}" lay-verify="required">
</td>
</tr>
<tr>
<td class="layui-td-gray">手机号码<font>*</font></td>
<td><input type="text" name="mobile" lay-verify="required|phone" lay-reqText="请输入正确的手机号码" placeholder="可使用手机号码登录" class="layui-input"></td>
<td class="layui-td-gray">电子邮箱<font>*</font></td>
<td><input type="text" name="email" lay-verify="required|email" lay-reqText="请输入正确的电子邮箱" placeholder="请输入电子邮箱" class="layui-input"></td>
<td rowspan="3" class="layui-td-gray">照片头像<br /><span style="font-size: 12px;">(如若不上传<br />系统将自动生成)</span></td>
<td rowspan="3" valign="top" style="width: 120px;">
<div class="layui-upload" style="width: 120px;">
<div class="layui-upload-list" id="uploadBox" style="width: 100%; height:120px; overflow: hidden;">
<img src="/static/home/images/nonepic600x600.jpg" height="120" style="max-width: 100%; width: 100%;" />
<input type="hidden" name="thumb" value="">
</div>
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" style="width: 100%;" id="uploadBtn">上传照片头像</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">主部门<font>*</font></td>
<td><select id="did" name="did" xm-selected="" xm-select="select2" xm-select-skin="default" xm-select-radio="true"></select></td>
<td class="layui-td-gray">次要部门</td>
<td><select id="department_ids" name="department_ids" xm-selected="" xm-select="select1" xm-select-skin="default"></select></td>
</tr>
<tr>
<td class="layui-td-gray">岗位职称<font>*</font></td>
<td>
<select name="position_id" lay-verify="required" lay-reqText="请选择岗位职称">
<option value="">请选择岗位职称</option>
{volist name="position" id="v"}
<option value="{$v.id}">{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">上级主管</td>
<td>
<input type="text" name="pname" readonly placeholder="请选择" class="layui-input picker-admin">
<input type="hidden" name="pid" value="0">
</td>
</tr>
<tr>
<td class="layui-td-gray">入职日期<font>*</font></td>
<td>
<input type="text" name="entry_time" readonly lay-verify="required" placeholder="请选择入职日期" lay-reqText="请选择入职日期" class="layui-input tool-time">
</td>
<td class="layui-td-gray">身份类型<font>*</font></td>
<td>
<input type="radio" name="is_staff" value="1" title="企业员工">
<input type="radio" name="is_staff" value="2" title="劳动派遣">
<input type="radio" name="is_staff" value="3" title="兼职人员">
</td>
<td class="layui-td-gray-2">隐藏联系方式</td>
<td>
<input type="radio" name="is_hide" value="0" title="否" checked>
<input type="radio" name="is_hide" value="1" title="是">
</td>
</tr>
<tr>
<td class="layui-td-gray">员工类型<font>*</font></td>
<td colspan="5">
<input type="radio" name="type" value="1" title="正式">
<input type="radio" name="type" value="2" title="试用">
<input type="radio" name="type" value="3" title="实习">
</td>
</tr>
<tr>
<td class="layui-td-gray">数据权限<font>*</font></td>
<td colspan="5">
<input type="radio" name="auth_did" value="0" title="仅自己关联的数据" checked>
<input type="radio" name="auth_did" value="1" title="所属主部门的数据">
<input type="radio" name="auth_did" value="2" title="所属次部门的数据">
<input type="radio" name="auth_did" value="3" title="所属主次部门的数据">
<input type="radio" name="auth_did" value="4" title="所属主部门及其子部门数据">
<input type="radio" name="auth_did" value="5" title="所属次部门及其子部门数据">
<input type="radio" name="auth_did" value="6" title="所属主次部门及其子部门数据">
<input type="radio" name="auth_did" value="7" title="所属主部门所在顶级部门及其子部门数据">
<input type="radio" name="auth_did" value="8" title="所属次部门所在顶级部门及其子部门数据">
<input type="radio" name="auth_did" value="9" title="所属主次部门所在顶级部门及其子部门数据">
<input type="radio" name="auth_did" value="10" title="所有部门数据">
</td>
</tr>
</table>
{else/}
<h3 class="pb-3">编辑员工信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">员工姓名<font>*</font></td>
<td>
<input type="text" name="name" value="{$detail.name}" lay-verify="required" placeholder="请输入员工姓名" lay-reqText="请输入员工姓名" class="layui-input">
</td>
<td class="layui-td-gray">登录账号</td>
<td>
{$detail.username}
</td>
<td class="layui-td-gray">初始密码</td>
<td>
{empty name="$detail.reg_pwd"}
密码已重置
{else/}
{$detail.reg_pwd}
{/empty}
</td>
</tr>
<tr>
<td class="layui-td-gray">手机号码<font>*</font></td>
<td>
<input type="text" name="mobile" value="{$detail.mobile}" lay-verify="required|phone" lay-reqText="请输入正确的手机号码" placeholder="可使用手机号码登录" class="layui-input">
</td>
<td class="layui-td-gray">电子邮箱<font>*</font></td>
<td>
<input type="text" name="email" value="{$detail.email}" lay-verify="required|email" lay-reqText="请输入正确的电子邮箱" placeholder="请输入电子邮箱" class="layui-input">
</td>
<td rowspan="4" class="layui-td-gray">头像<br /><span style="font-size: 12px;">(如若不上传<br />系统将自动生成)</span></td>
<td rowspan="4" valign="top" style="width: 160px;">
<div class="layui-upload" style="width: 160px;">
<div class="layui-upload-list" id="uploadBox" style="width: 100%; height:150px; overflow: hidden;">
<img src="{$detail.thumb}" height="150" style="max-width: 100%;" />
<input type="hidden" name="thumb" value="{$detail.thumb}">
</div>
<button type="button" class="layui-btn layui-btn-normal" style="width: 100%;" id="uploadBtn">上传头像</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">员工性别<font>*</font></td>
<td>
<input type="radio" name="sex" value="1" title="男" {eq name="$detail.sex" value="1"}checked{/eq}>
<input type="radio" name="sex" value="2" title="女" {eq name="$detail.sex" value="2"}checked{/eq}>
</td>
<td class="layui-td-gray">入职日期<font>*</font></td>
<td>
<input type="text" value="{$detail.entry_time|date='Y-m-d'}" name="entry_time" readonly lay-verify="required" placeholder="请选择入职日期" lay-reqText="请选择入职日期" class="layui-input tool-time">
</td>
</tr>
<tr>
<td class="layui-td-gray">主部门<font>*</font></td>
<td><select id="did" name="did" xm-selected="{$detail.did}" xm-select="select2" xm-select-skin="default" xm-select-radio="true"></select></td>
<td class="layui-td-gray">次要部门</td>
<td><select id="department_ids" name="department_ids" xm-selected="{$detail.department_ids}" xm-select="select1" xm-select-skin="default"></select></td>
</tr>
<tr>
<td class="layui-td-gray">岗位职称<font>*</font></td>
<td>
<select name="position_id" lay-verify="required" lay-reqText="请选择岗位职称">
<option value="">请选择岗位职称</option>
{volist name="position" id="v"}
<option value="{$v.id}" {eq name="$v.id" value="$detail.position_id"}selected{/eq}>{$v.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">上级主管</td>
<td>
<input type="text" name="pname" value="{$detail.pname|default=''}" readonly placeholder="请选择" class="layui-input picker-admin">
<input type="hidden" name="pid" value="{$detail.pid}">
</td>
</tr>
<tr>
<td class="layui-td-gray">员工类型<font>*</font></td>
<td>
<input type="radio" name="type" value="1" title="正式" {eq name="$detail.type" value="1"}checked{/eq}>
<input type="radio" name="type" value="2" title="试用" {eq name="$detail.type" value="2"}checked{/eq}>
<input type="radio" name="type" value="3" title="实习" {eq name="$detail.type" value="3"}checked{/eq}>
</td>
<td class="layui-td-gray">身份类型<font>*</font></td>
<td>
<input type="radio" name="is_staff" value="1" title="企业员工" {eq name="$detail.is_staff" value="1"}checked{/eq}>
<input type="radio" name="is_staff" value="2" title="劳动派遣" {eq name="$detail.is_staff" value="2"}checked{/eq}>
<input type="radio" name="is_staff" value="3" title="兼职员工" {eq name="$detail.is_staff" value="3"}checked{/eq}>
</td>
<td class="layui-td-gray-3">隐藏联系方式</td>
<td>
<input type="radio" name="is_hide" value="0" title="否" {eq name="$detail.is_hide" value="0"}checked{/eq}>
<input type="radio" name="is_hide" value="1" title="是" {eq name="$detail.is_hide" value="1"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray">数据权限<font>*</font></td>
<td colspan="5">
<input type="radio" name="auth_did" value="0" title="仅自己关联的数据" {eq name="$detail.auth_did" value="0"}checked{/eq}>
<input type="radio" name="auth_did" value="1" title="所属主部门的数据" {eq name="$detail.auth_did" value="1"}checked{/eq}>
<input type="radio" name="auth_did" value="2" title="所属次部门的数据" {eq name="$detail.auth_did" value="2"}checked{/eq}>
<input type="radio" name="auth_did" value="3" title="所属主次部门的数据" {eq name="$detail.auth_did" value="3"}checked{/eq}>
<input type="radio" name="auth_did" value="4" title="所属主部门及其子部门数据" {eq name="$detail.auth_did" value="4"}checked{/eq}>
<input type="radio" name="auth_did" value="5" title="所属次部门及其子部门数据" {eq name="$detail.auth_did" value="5"}checked{/eq}>
<input type="radio" name="auth_did" value="6" title="所属主次部门及其子部门数据" {eq name="$detail.auth_did" value="6"}checked{/eq}>
<input type="radio" name="auth_did" value="7" title="所属主部门所在顶级部门及其子部门数据" {eq name="$detail.auth_did" value="7"}checked{/eq}>
<input type="radio" name="auth_did" value="8" title="所属次部门所在顶级部门及其子部门数据" {eq name="$detail.auth_did" value="8"}checked{/eq}>
<input type="radio" name="auth_did" value="9" title="所属主次部门所在顶级部门及其子部门数据" {eq name="$detail.auth_did" value="9"}checked{/eq}>
<input type="radio" name="auth_did" value="10" title="所有部门数据" {eq name="$detail.auth_did" value="10"}checked{/eq}>
</td>
</tr>
</table>
{/if}
<div class="pt-4">
<input type="hidden" value="{$id}" name="id">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','formSelects','oaPicker','uploadPlus'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects=layui.formSelects,oaPicker = layui.oaPicker,uploadPlus=layui.uploadPlus;
//选择所属部门
var selected_a = $('#did').attr('xm-selected');
formSelects.data('select2', 'server', {
url: '/api/index/get_department_select',
keyword: selected_a
});
//选择所属其他部门
var selected_b = $('#department_ids').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_department_select',
keyword: selected_b
});
//头像上传
var photoUpload = new uploadPlus({
'use':'single',
'callback':function(res){
layer.msg(res.msg);
if (res.code == 0) {
//上传成功
$('#uploadBox input').attr('value', res.data.filepath);
$('#uploadBox img').attr('src', res.data.filepath);
}
}
});
//监听提交
form.on('submit(webform)', function(data){
if(!data.field.sex){
layer.msg('请选择员工性别');
return false;
}
if(!data.field.type){
layer.msg('请选择员工类型');
return false;
}
if(!data.field.is_staff){
layer.msg('请选择员工身份');
return false;
}
let department_ids = data.field.department_ids.split(',');
if(department_ids.includes(data.field.did)){
layer.msg('次要部门不能包含主部门');
return false;
}
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
let clickbtn = $(this);
tool.post("/user/user/add", data.field, callback,clickbtn);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+302
View File
@@ -0,0 +1,302 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.tree-left{width:200px; float:left; height:calc(100vh - 81px); overflow-y: auto; border:1px solid #eeeeee; border-right:0; background-color:#fbfbfb; padding:12px 12px 12px 5px;}
.tree-left::-webkit-scrollbar {width: 0;}
.tree-left h3{font-size:16px; height:30px; padding-left:10px; font-weight:800}
.btn-group-2 .layui-btn-warm,.btn-group-0 .layui-btn-danger,.btn-group-2 .layui-btn-danger{display:none;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<div class="tree-left">
<h3>企业组织架构</h3>
<div id="depament"></div>
</div>
<div class="body-table" style="margin-left:200px; overflow:hidden;">
<form class="layui-form gg-form-bar border-t border-x" lay-filter="barsearchform">
<div class="layui-input-inline" style="width:136px">
<select name="status" lay-filter="status">
<option value="1" selected>正常状态</option>
<option value="2">离职状态</option>
<option value="0">禁止登录</option>
</select>
</div>
<div class="layui-input-inline" style="width:136px">
<select name="type" lay-filter="types">
<option value="">选择员工类型</option>
<option value="1">正式员工</option>
<option value="2">试用员工</option>
<option value="3">实习员工</option>
</select>
</div>
<div class="layui-input-inline" style="width:360px">
<input type="text" name="keywords" placeholder="关键字,如:ID号/姓名/登录账号/手机号码/电子邮箱" class="layui-input" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:150px;">
<input type="text" name="did" style="display:none;" value="0" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="table-search"><i class="layui-icon layui-icon-search mr-1"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-reset" lay-filter="table-reset">重置</button>
</div>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
</div>
<script type="text/html" id="toolbara">
<div id="btnGroup" class="layui-btn-group btn-group-1">
<button class="layui-btn layui-btn-sm" lay-event="add"><i class="layui-icon">&#xe61f;</i></button>
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="disable"><i class="layui-icon">&#x1006;</i></button>
<button class="layui-btn layui-btn-warm layui-btn-sm" lay-event="recovery"><i class="layui-icon">&#xe605;</i></button>
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="import"><i class="layui-icon">&#xe66f;</i></button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','tablePlus','uploadPlus'];
function gouguInit() {
var table = layui.tablePlus,tool = layui.tool,tree = layui.tree,form = layui.form,uploadPlus = layui.uploadPlus;
$.ajax({
url: "/api/index/get_department_tree",
type:'get',
success:function(res){
//仅节点左侧图标控制收缩
tree.render({
elem: '#depament',
data: res.trees,
onlyIconControl: true, //是否仅允许节点左侧图标控制展开收缩
click: function(obj){
//layer.msg(JSON.stringify(obj.data));
$('#depament').find('.layui-tree-main').removeClass('on');
$(obj.elem).find('.layui-tree-main').eq(0).addClass('on');
$('[name="did"]').val(obj.data.id);
layui.form.render('select');
$('[lay-filter="table-search"]').click();
}
});
}
});
$('[lay-filter="table-reset"]').click(function(){
$('#depament').find('.layui-tree-main').removeClass('on');
});
form.on('select(status)', function(data){
$('[lay-filter="table-search"]').click();
$("#btnGroup").attr("class",'layui-btn-group btn-group-'+data.value);
});
form.on('select(types)', function(data){
$('[lay-filter="table-search"]').click();
});
layui.pageTable = table.render({
elem: '#test',
title: '员工列表',
toolbar: '#toolbara',
searchreset:function(){
$('#depament').find('.layui-tree-main').removeClass('on');
},
url: "/user/user/index", //数据接口
height: 'full-114',
size:'lg',
cols: [
[
{type:'checkbox',fixed:'left'},
{field: 'id',title: 'ID号',align: 'center',width: 80},
{field: 'status',title: '状态',align: 'center',width: 60,templet: function (d) {
var html = '';
if(d.status == 1){
html = '<span class="layui-badge layui-bg-green">正常</span>'
}
if(d.status == 2){
html = '<span class="layui-badge layui-bg-orange">已离职</span>'
}
if(d.status == 0){
html = '<span class="layui-badge">被禁用</span>'
}
return html;
}
},
{field: 'type',title: '员工类型',align: 'center',width: 80,templet: function (d) {
var html = '';
if(d.type == 1){
html = '<span style="color:#16b777">正式员工</span>'
}
if(d.type == 2){
html = '<span style="color:#01AAED">试用员工</span>'
}
if(d.type == 3){
html = '<span style="color:#ffb800">实 习 生</span>'
}
return html;
}
},
{field: 'username',title: '登录账号',width: 130},
{field: 'name',title: '员工姓名',width: 130,templet:function(d){
return '<div><div style="float:left; width:36px; height:36px; margin-right:5px;"><img src="'+d.thumb+'" style="width:100%; height:100%; vertical-align:top;object-fit: cover; border-radius:3px;" /></div><span>'+d.name+'</span></div>';
}
},
{field: 'mobile',title: '手机号码',align: 'center',width: 110},
{field: 'email',title: '电子邮箱',width: 200},
{field: 'sex',title: '性别',align: 'center',width: 50,templet: function (d) {
var html = '';
if(d.sex == 1){
html = '男'
}
else if(d.sex == 2){
html = '女'
}
return html;
}
},
{field: 'department',title: '所在主部门',width: 100},
{field: 'departments',title: '所在次部门',width: 160},
{field: 'position',title: '岗位职称',align: 'center',width: 100},
{field: 'entry_time',title: '入职日期',align: 'center',width: 100},
{field: 'login_num',title: '累计登录',align: 'center',width: 80},
{field: 'last_login_time',title: '最后登录时间',align: 'center',minWidth: 136},
{field: 'right',fixed:'right',title: '操作',width: 150,align: 'center',ignoreExport:true,templet: function (d) {
var html = '';
var btn1 = '<span class="layui-btn layui-btn-xs layui-btn-normal" lay-event="view">详情</span>';
var btn2 = '<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
var btn3 = '<span class="layui-btn layui-btn-xs layui-btn-warm" lay-event="copy">复制密码</span>';
var btn4 = '<span class="layui-btn layui-btn-xs layui-btn-danger" lay-event="psw">重置密码</span>';
var btn5 = '<span class="layui-btn layui-bg-orange layui-btn-xs" lay-event="del">删除员工</span>';
if(d.status==2){
html = '<div class="layui-btn-group">'+btn1+btn5+'</div>';
}
else{
if(d.reg_pwd == ''){
html = '<div class="layui-btn-group">'+btn1+btn2+btn4+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
}
}
return html;
}
}
]
]
});
//表头工具栏事件
table.on('toolbar(test)', function(obj){
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
var data = checkStatus.data;
if (obj.event === 'add') {
tool.side("/user/user/add");
return;
}
if (obj.event === 'import') {
let importUpload = new uploadPlus({
"title":'批量导入员工',
"use":'import',
"url":'/api/import/import_admin',
"import":{
"template":'/static/home/file/勾股OA员工导入模板.xlsx',
"tips":'如果导入失败,请根据提示注意检查表格数据,部门、职位需要是系统中存在的数据,如果不存在的话可能会导入失败。'
},
callback:function(res){
layui.pageTable.reload();
}
});
return;
}
var uidArray=[],msg='是否执行该操作?',type=0;
for(var i=0;i<data.length;i++){
uidArray.push(data[i].id);
}
if (obj.event === 'disable') {
if(data.length==0){
layer.msg('请选择要操作的员工');
return false;
}
layer.confirm('您确定要把选中的员工设为禁止登录?', {
icon: 3,
title: '提示'
}, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/user/set", {ids: uidArray.join(','),type:0}, callback);
layer.close(index);
});
}
if (obj.event === 'recovery') {
if(data.length==0){
layer.msg('请选择要操作的员工');
return false;
}
layer.confirm('您确定要把选中的员工恢复正常?', {
icon: 3,
title: '提示'
}, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/user/set", {ids: uidArray.join(','),type:1}, callback);
layer.close(index);
});
}
});
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data;
if (obj.event === 'view') {
tool.side('/user/user/view?id='+data.id);
return;
}
if(obj.data.status == 2){
layer.msg('离职员工不支持操作');
return false;
}
if(obj.event === 'edit'){
if(obj.data.id == 1){
layer.msg('超级管理员信息不支持编辑');
return false;
}
tool.side('/user/user/add?id='+data.id);
}
else if (obj.event === 'copy') {
tool.copyCtrl(data.reg_pwd);
return;
}
else if (obj.event === 'psw') {
layer.confirm('确定要重设该用户的密码?', {
icon: 3,
title: '提示'
}, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/user/user/reset_psw", {id: data.id}, callback);
layer.close(index);
});
return;
}
});
}
</script>
{/block}
<!-- /脚本 -->
+189
View File
@@ -0,0 +1,189 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.checkbox16 .layui-form-checkbox span{font-size:15px;font-weight:800;}
.layui-checkbox-disabled>div{color: #666666!important;}
.layui-disabled,.layui-radio-disabled>*,.layui-radio-disabled>i{color: #666666!important;}
.layui-form-checked.layui-checkbox-disabled[lay-skin=primary]>i{background-color:#999!important;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-3">员工信息</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">登录账号</td>
<td>{$detail.username}</td>
<td class="layui-td-gray">登录密码</td>
<td>
{empty name="$detail.reg_pwd"}
密码已重置
<span class="layui-btn layui-btn-normal layui-btn-xs reset-psw" data-id="{$detail.id}">重设新密码</span>
{else/}
{$detail.reg_pwd}
<span class="layui-btn layui-btn-normal layui-btn-xs copy-psw" data-pwd="{$detail.reg_pwd}">复制初始密码</span>
{/empty}
</td>
<td class="layui-td-gray">员工状态</td>
<td>
{eq name="$detail.status" value="0"}<span style="color:#FF5722">禁止登录</span>{/eq}
{eq name="$detail.status" value="1"}<span style="color:#16b777">正常</span>{/eq}
{eq name="$detail.status" value="2"}<span style="color:#FFB800">已离职</span>{/eq}
</td>
<td rowspan="5" class="layui-td-gray">头像</td>
<td rowspan="5" valign="top" style="width: 160px;">
<div class="layui-upload">
<img src="{$detail.thumb}" style="width:160px; height:160px; max-width:100%" />
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">员工姓名</td>
<td>
{$detail.name}
{eq name="$detail.sex" value="1"} <span class="layui-badge layui-bg-green"></span>{/eq}
{eq name="$detail.sex" value="2"} <span class="layui-badge layui-bg-red"></span>{/eq}
</td>
<td class="layui-td-gray">手机号码</td>
<td>{$detail.mobile}</td>
<td class="layui-td-gray">电子邮箱</td>
<td>{$detail.email}</td>
</tr>
<tr>
<td class="layui-td-gray">所在主部门</td>
<td>{$detail.department}</td>
<td class="layui-td-gray">所在次部门</td>
<td>{$detail.department_names|default=''}</td>
<td class="layui-td-gray">上级主管</td>
<td>{$detail.pname|default=''}</td>
</tr>
<tr>
<td class="layui-td-gray">岗位职称</td>
<td>{$detail.position}</td>
<td class="layui-td-gray">入职日期</td>
<td>{$detail.entry_time | date='Y-m-d'}</td>
<td class="layui-td-gray">员工类型</td>
<td>
{eq name="$detail.type" value="1"}<span style="color:#393D49">正式员工</span>{/eq}
{eq name="$detail.type" value="2"}<span style="color:#01AAED">试用员工</span>{/eq}
{eq name="$detail.type" value="3"}<span style="color:#5FB878">实 习 生</span>{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray">身份类型</td>
<td>
{eq name="$detail.is_staff" value="1"}<span style="color:#393D49">企业员工</span>{/eq}
{eq name="$detail.is_staff" value="2"}<span style="color:#01AAED">劳务派遣</span>{/eq}
{eq name="$detail.is_staff" value="3"}<span style="color:#5FB878">兼职员工</span>{/eq}
</td>
<td class="layui-td-gray">隐藏联系方式</td>
<td colspan="3">
{eq name="$detail.is_hide" value="0"}否{/eq}
{eq name="$detail.is_hide" value="1"}是{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray-2">最后登录时间</td>
<td>{eq name="$detail.last_login_time" value="0"}-{else/}{$detail.last_login_time|date='Y-m-d H:i:s'}{/eq}</td>
<td class="layui-td-gray-2">最后登录IP</td>
<td>{$detail.last_login_ip}</td>
<td class="layui-td-gray-2">累计登录次数</td>
<td colspan="3">{$detail.login_num}</td>
</tr>
<tr>
<td class="layui-td-gray">数据权限</td>
<td colspan="7">
<input type="radio" name="auth_did" value="0" disabled title="仅自己关联的数据" {eq name="$detail.auth_did" value="0"}checked{/eq}>
<input type="radio" name="auth_did" value="1" disabled title="所属主部门的数据" {eq name="$detail.auth_did" value="1"}checked{/eq}>
<input type="radio" name="auth_did" value="2" disabled title="所属次部门的数据" {eq name="$detail.auth_did" value="2"}checked{/eq}>
<input type="radio" name="auth_did" value="3" disabled title="所属主次部门的数据" {eq name="$detail.auth_did" value="3"}checked{/eq}>
<input type="radio" name="auth_did" value="4" disabled title="所属主部门及其子部门数据" {eq name="$detail.auth_did" value="4"}checked{/eq}>
<input type="radio" name="auth_did" value="5" disabled title="所属次部门及其子部门数据" {eq name="$detail.auth_did" value="5"}checked{/eq}>
<input type="radio" name="auth_did" value="6" disabled title="所属主次部门及其子部门数据" {eq name="$detail.auth_did" value="6"}checked{/eq}>
<input type="radio" name="auth_did" value="7" disabled title="所属主部门所在顶级部门及其子部门数据" {eq name="$detail.auth_did" value="7"}checked{/eq}>
<input type="radio" name="auth_did" value="8" disabled title="所属次部门所在顶级部门及其子部门数据" {eq name="$detail.auth_did" value="8"}checked{/eq}>
<input type="radio" name="auth_did" value="9" disabled title="所属主次部门所在顶级部门及其子部门数据" {eq name="$detail.auth_did" value="9"}checked{/eq}>
<input type="radio" name="auth_did" value="10" disabled title="所有部门数据" {eq name="$detail.auth_did" value="10"}checked{/eq}>
</td>
</tr>
</table>
<h3 class="py-3">用户权限</h3>
<table class="layui-table layui-table-form">
{volist name="role_rule" id="vo"}
<tr>
<td style="font-weight:800; text-align:center;">
<input type="checkbox" disabled value="{$vo.id}" title="{$vo.title}" {eq name="$vo.checked" value="true" }checked{/eq}>
</td>
{notempty name="vo.children"}
<td>
<div style="padding:0 0 0 10px;">
{volist name="vo.children" key="k" id="voo"}
<div class="checkbox16" style="padding:10px 0;">
<input type="checkbox" disabled lay-filter="rule" name="rule[]" value="{$voo.id}" lay-skin="primary" title="{$voo.title}" {eq name="$voo.checked" value="true" }checked{/eq}>
</div>
{notempty name="voo.children"}
<div style="padding:0 0 3px; {if condition='$k != count($vo.children)'}margin-bottom:3px; padding-bottom:16px; border-bottom:1px solid #eee;{/if}">
{volist name="voo.children" id="vooo"}
<div class="layui-input-inline" style="margin-right:10px;">
<input type="checkbox" disabled data-rule="{$voo.id}" name="rule[]" value="{$vooo.id}" lay-skin="primary" title="{$vooo.title}" {eq name="$vooo.checked" value="true" }checked{/eq}>
</div>
{/volist}
</div>
{/notempty}
{/volist}
</div>
</td>
{/notempty}
</tr>
{/volist}
</table>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var tool=layui.tool;
//拷贝密码
$('.copy-psw').on('click',function(){
let pwd=$(this).data('pwd');
lay.clipboard.writeText({
text:pwd,
done:function(){
layer.msg('已复制初始化密码');
},
error:function(){
layer.msg('复制失败,请点击详情手动复制');
}
});
});
//重设密码
$('.reset-psw').on('click',function(){
let id=$(this).data('id');
layer.confirm('确定要重设该用户的密码?', {
icon: 3,
title: '提示'
}, function (index) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layer.msg(e.msg);
if(e.code==0){
setTimeout(function(){
location.reload();
},2000);
}
}
}
tool.post("/user/user/reset_psw",{id: id}, callback);
layer.close(index);
})
});
}
</script>
{/block}
<!-- /脚本 -->