1、优化:项目、任务的状态显示;
2、新增:企业员工管理新增离职状态查询; 3、新增:离职档案新增一键资料转移功能,把项目、任务、客户、合同等资料交接到交接人上; 4、新增:任务新增前置任务,如果存在前置任务的,需要把前置任务完成后才能完成当前任务; 5、新增:任务新增子任务功能; 6、修复:新增项目文档成功后,跳转报错的问题; 7、优化:任务进度与任务状态联动,任务完成时,进度默认设置为100%,任务设置进度时,如果任务未开始,状态默认设置为进行中; 8、删除:去除项目选择项目时间周期的联动操作; 9、优化:项目选择弹层操作; 10、修复:修复自定义tab打开时,左侧二级菜单宽度未收回的问题; 11、优化:客户选择弹层添加‘新增客户’的按钮,方便快捷新建客户; 12、优化:工作台项目、任务、知识位置调整优化; 注意:本次数据结构更新代码如下: ALTER TABLE `oa_personal_quit` ADD COLUMN `connect_id` int(11) NOT NULL DEFAULT 0 COMMENT '资料交接人' AFTER `connect_uids`; ALTER TABLE `oa_personal_quit` ADD COLUMN `connect_time` int(11) NOT NULL DEFAULT 0 COMMENT '资料交接时间' AFTER `connect_id`; ALTER TABLE `oa_personal_quit` MODIFY COLUMN `connect_uids` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参与交接人,多' AFTER `lead_admin_id`; ALTER TABLE `oa_project_task` ADD COLUMN `pid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '父任务id' AFTER `title`; ALTER TABLE `oa_project_task` ADD COLUMN `before_task` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '前置任务id' AFTER `priority`; ALTER TABLE `oa_project_task` MODIFY COLUMN `type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '任务类型(预留字段)' AFTER `cate`;
This commit is contained in:
parent
3249c8a005
commit
9ee6fb5afb
@ -1014,6 +1014,25 @@ function create_tree_list($pid, $arr, $group, &$tree = [])
|
||||
return $tree;
|
||||
}
|
||||
|
||||
function table_tree_list($before_task, $arr, $name='pid', &$tree = [])
|
||||
{
|
||||
foreach ($arr as $key => $vo) {
|
||||
if ($vo[$name] == $before_task) {
|
||||
$child = table_tree_list($vo['id'], $arr, $name);
|
||||
if ($child) {
|
||||
$vo['isParent'] = true;
|
||||
$vo['children'] = $child;
|
||||
}
|
||||
else{
|
||||
$vo['isParent'] = false;
|
||||
$vo['children'] = [];
|
||||
}
|
||||
$tree[] = $vo;
|
||||
}
|
||||
}
|
||||
return $tree;
|
||||
}
|
||||
|
||||
|
||||
//递归排序,用于分类选择
|
||||
function set_recursion($result, $pid = 0, $level=-1)
|
||||
|
@ -20,8 +20,8 @@ function layoutProject(table){
|
||||
return 'P' + d.id;
|
||||
}
|
||||
},
|
||||
{field: 'status', title: '状态', align: 'center', width: 80, templet: function (d) {
|
||||
var html = '<span class="layui-btn layui-btn-xs layui-bg-' + d.status + '">' + d.status_name + '</span>';
|
||||
{field: 'status', title: '状态', align: 'center', width: 90, templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.status + '">『' + d.status_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
},
|
||||
|
@ -20,8 +20,8 @@ function layoutTask(table){
|
||||
return 'T' + d.id;
|
||||
}
|
||||
},
|
||||
{field: 'flow_status', title: '状态', align: 'center', width: 80, templet: function (d) {
|
||||
var html = '<span class="layui-btn layui-btn-xs layui-bg-' + d.flow_status + '">' + d.flow_name + '</span>';
|
||||
{field: 'flow_status', title: '状态', align: 'center', width: 90, templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.flow_status + '">『' + d.flow_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
},
|
||||
|
@ -381,6 +381,8 @@ INSERT INTO `oa_admin_rule` VALUES (199, 196, 'home/files/delete', '删除附件
|
||||
INSERT INTO `oa_admin_rule` VALUES (200, 196, 'home/files/get_group', '附件分组','附件分组', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (201, 196, 'home/files/add_group', '新建/编辑','附件分组', 'home', '', 2, 1, 1, 0, 0);
|
||||
INSERT INTO `oa_admin_rule` VALUES (202, 196, 'home/files/del_group', '删除附件分组','附件分组', 'home', '', 2, 1, 1, 0, 0);
|
||||
|
||||
INSERT INTO `oa_admin_rule` VALUES (203, 76, 'user/personal/leave_check', '资料交接', '离职资料', 'user', '', 2, 1, 1, 0, 0);
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_admin_group
|
||||
-- ----------------------------
|
||||
@ -401,9 +403,9 @@ CREATE TABLE `oa_admin_group` (
|
||||
-- ----------------------------
|
||||
-- Records of oa_admin_group
|
||||
-- ----------------------------
|
||||
INSERT INTO `oa_admin_group` VALUES (1, '超级员工权限', 1, '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202', '1,2,3,4,5,6,7,8,9,10,11,12','超级员工权限,拥有系统的最高权限,不可修改。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (2, '总经理权限', 1, '1,9,13,17,20,23,25,26,30,2,34,37,41,44,47,50,53,56,59,3,62,65,68,69,71,74,76,4,79,82,85,5,88,91,92,93,94,6,95,96,97,98,99,7,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,8,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,140,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202','1,2,3,4,5,6,7,8,9,10,11,12', '总经理的管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (3, '普通员工权限', 1, '5,88,91,92,93,6,95,96,97,98,99,7,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,8,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,140,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202','1,2,3,4,5,6,7,8,9,10,11,12', '普通员工管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (1, '超级员工权限', 1, '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203', '1,2,3,4,5,6,7,8,9,10,11,12','超级员工权限,拥有系统的最高权限,不可修改。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (2, '总经理权限', 1, '1,9,13,17,20,23,25,26,30,2,34,37,41,44,47,50,53,56,59,3,62,65,68,69,71,74,76,4,79,82,85,5,88,91,92,93,94,6,95,96,97,98,99,7,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,8,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,140,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203','1,2,3,4,5,6,7,8,9,10,11,12', '总经理的管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
INSERT INTO `oa_admin_group` VALUES (3, '普通员工权限', 1, '5,88,91,92,93,6,95,96,97,98,99,7,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,8,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,140,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203','1,2,3,4,5,6,7,8,9,10,11,12', '普通员工管理权限,可根据公司的具体需求调整。', 0, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for oa_data_auth
|
||||
@ -527,7 +529,9 @@ CREATE TABLE `oa_personal_quit` (
|
||||
`remark` varchar(1000) NULL DEFAULT '' COMMENT '备注',
|
||||
`admin_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`lead_admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '部门负责人',
|
||||
`connect_uids` varchar(100) NOT NULL DEFAULT '' COMMENT '交接人',
|
||||
`connect_uids` varchar(100) NOT NULL DEFAULT '' COMMENT '参与交接人,多',
|
||||
`connect_id` int(11) NOT NULL DEFAULT 0 COMMENT '资料交接人',
|
||||
`connect_time` int(11) NOT NULL DEFAULT 0 COMMENT '资料交接时间',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1启用',
|
||||
`quit_time` int(11) NOT NULL DEFAULT 0 COMMENT '离职时间',
|
||||
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
@ -1722,6 +1726,7 @@ DROP TABLE IF EXISTS `oa_project_task`;
|
||||
CREATE TABLE `oa_project_task` (
|
||||
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '主题',
|
||||
`pid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '父任务id',
|
||||
`project_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '关联项目id',
|
||||
`admin_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人',
|
||||
`plan_hours` decimal(10, 1) NOT NULL DEFAULT 0.00 COMMENT '预估工时',
|
||||
@ -1730,8 +1735,9 @@ CREATE TABLE `oa_project_task` (
|
||||
`director_uid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '指派给(负责人)',
|
||||
`assist_admin_ids` varchar(500) NOT NULL DEFAULT '' COMMENT '协助人员,如:1,2,3',
|
||||
`cate` tinyint(1) NOT NULL DEFAULT 1 COMMENT '所属工作类型',
|
||||
`type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '任务类型:1需求,2设计,3研发,4缺陷',
|
||||
`type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '任务类型(预留字段)',
|
||||
`priority` tinyint(1) NOT NULL DEFAULT 1 COMMENT '优先级:1低,2中,3高,4紧急',
|
||||
`before_task` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '前置任务id',
|
||||
`flow_status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '流转状态:1待办的,2进行中,3已完成,4已拒绝,5已关闭',
|
||||
`done_ratio` int(2) NOT NULL DEFAULT 0 COMMENT '完成进度:0,20,40,50,60,80,100',
|
||||
`content` text NULL COMMENT '任务描述',
|
||||
|
@ -107,3 +107,32 @@ function cross_count($arrData)
|
||||
}
|
||||
return $documents;
|
||||
}
|
||||
|
||||
//读取后置任务的ids
|
||||
function admin_after_task_son($task_id = 0, $list = [])
|
||||
{
|
||||
$task_ids = Db::name('ProjectTask')->where([['before_task','in',$task_id]])->column('id');
|
||||
if(!empty($task_ids)){
|
||||
$new_list = array_merge($list, $task_ids);
|
||||
$list = admin_after_task_son($task_ids, $new_list);
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
//读取父任务的ids
|
||||
function admin_parent_task($task_id = 0, $list = [])
|
||||
{
|
||||
$pids = Db::name('ProjectTask')->where([['pid','in',$task_id]])->column('id');
|
||||
if(!empty($pids)){
|
||||
$new_list = array_merge($list, $pids);
|
||||
$list = admin_parent_task($pids, $new_list);
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
//获取后置任务
|
||||
function after_task($task_id)
|
||||
{
|
||||
$list = Db::name('ProjectTask')->where('before_task',$task_id)->order('id desc')->select()->toArray();
|
||||
return $list;
|
||||
}
|
@ -10,6 +10,7 @@ namespace app\project\controller;
|
||||
use app\api\BaseController;
|
||||
use app\oa\model\Schedule as ScheduleList;
|
||||
use app\project\model\Project as ProjectList;
|
||||
use app\project\model\ProjectTask as TaskList;
|
||||
use app\project\model\ProjectLog;
|
||||
use app\project\model\ProjectComment;
|
||||
use think\facade\Db;
|
||||
@ -542,6 +543,87 @@ class Api extends BaseController
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
|
||||
//获取任务列表
|
||||
public function get_task(){
|
||||
$param = get_params();
|
||||
$param['uid'] = $this->uid;
|
||||
$list = (new TaskList())->list($param);
|
||||
return table_assign(0, '', $list);
|
||||
}
|
||||
|
||||
//获取树形任务列表
|
||||
public function get_project_task(){
|
||||
$param = get_params();
|
||||
$list = Db::name('ProjectTask')->withoutField('content,md_content')->where('project_id',$param['project_id'])->order('id desc')->select()->toArray();
|
||||
foreach ($list as $key => &$vo) {
|
||||
$vo['director_name'] = '-';
|
||||
if ($vo['director_uid'] > 0) {
|
||||
$vo['director_name'] = Db::name('Admin')->where(['id' => $vo['director_uid']])->value('name');
|
||||
}
|
||||
$assist_admin_names = Db::name('Admin')->where([['id', 'in', $vo['assist_admin_ids']]])->column('name');
|
||||
if (empty($assist_admin_names)) {
|
||||
$vo['assist_admin_names'] = '-';
|
||||
} else {
|
||||
$vo['assist_admin_names'] = implode(',', $assist_admin_names);
|
||||
}
|
||||
$vo['cate_name'] = Db::name('WorkCate')->where(['id' => $vo['cate']])->value('title');
|
||||
$vo['after_num'] = Db::name('ProjectTask')->where(['before_task'=>$vo['id'],'delete_time' => 0])->count();
|
||||
if($vo['after_num']==1){
|
||||
$vo['after_id'] = Db::name('ProjectTask')->where(['before_task'=>$vo['id'],'delete_time' => 0])->value('id');
|
||||
}
|
||||
$vo['delay'] = 0;
|
||||
if ($vo['end_time'] > 0) {
|
||||
$vo['end_time'] = date('Y-m-d', $vo['end_time']);
|
||||
if ($vo['over_time'] > 0 && $vo['flow_status'] < 4) {
|
||||
$vo['delay'] = countDays($vo['end_time'], date('Y-m-d', $vo['over_time']));
|
||||
}
|
||||
if ($vo['over_time'] == 0 && $vo['flow_status'] < 4) {
|
||||
$vo['delay'] = countDays($vo['end_time']);
|
||||
}
|
||||
}
|
||||
else{
|
||||
$vo['end_time'] = '-';
|
||||
}
|
||||
$vo['priority_name'] = TaskList::$Priority[(int) $vo['priority']];
|
||||
$vo['flow_name'] = TaskList::$FlowStatus[(int) $vo['flow_status']];
|
||||
$vo['type_name'] = TaskList::$Type[(int) $vo['type']];
|
||||
}
|
||||
$res['total'] = count($list);
|
||||
$res['data'] = table_tree_list(0, $list);
|
||||
return table_assign(0, '', $res);
|
||||
}
|
||||
|
||||
//子任务新增
|
||||
public function task_add_son()
|
||||
{
|
||||
$param = get_params();
|
||||
$parent_task_array = admin_parent_task($param['id']);
|
||||
if (in_array($param['pid'], $parent_task_array)) {
|
||||
return to_assign(1, '子任务不能是该任务的父级以上的任务');
|
||||
}
|
||||
$after_task_array = admin_after_task_son($param['id']);
|
||||
if (in_array($param['pid'], $after_task_array)) {
|
||||
return to_assign(1, '子任务不能是该任务本身或其前置任务');
|
||||
}
|
||||
$res = Db::name('ProjectTask')->where(['id'=>$param['id']])->update(['pid'=>$param['pid']]);
|
||||
if ($res) {
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
|
||||
//子任务删除
|
||||
public function task_del_son()
|
||||
{
|
||||
$param = get_params();
|
||||
$res = Db::name('ProjectTask')->where(['id'=>$param['id']])->update(['pid'=>0]);
|
||||
if ($res) {
|
||||
return to_assign(0, "操作成功");
|
||||
} else {
|
||||
return to_assign(1, "操作失败");
|
||||
}
|
||||
}
|
||||
//编辑阶段
|
||||
public function reset_check()
|
||||
{
|
||||
|
@ -40,12 +40,6 @@ class Task extends BaseController
|
||||
if (request()->isPost()) {
|
||||
if (isset($param['end_time'])) {
|
||||
$param['end_time'] = strtotime(urldecode($param['end_time']));
|
||||
}if (isset($param['flow_status'])) {
|
||||
if ($param['flow_status'] == 3) {
|
||||
$param['over_time'] = time();
|
||||
} else {
|
||||
$param['over_time'] = 0;
|
||||
}
|
||||
}
|
||||
if (!empty($param['id']) && $param['id'] > 0) {
|
||||
$task = (new TaskList())->detail($param['id']);
|
||||
@ -55,8 +49,31 @@ class Task extends BaseController
|
||||
// 验证失败 输出错误信息
|
||||
return to_assign(1, $e->getError());
|
||||
}
|
||||
if (isset($param['flow_status'])) {
|
||||
if ($param['flow_status'] == 3) {
|
||||
$param['over_time'] = time();
|
||||
$param['done_ratio'] = 100;
|
||||
if($task['before_task']>0){
|
||||
$flow_status = Db::name('ProjectTask')->where(['id' => $task['before_task']])->value('flow_status');
|
||||
if($flow_status !=3){
|
||||
return to_assign(1, '前置任务未完成,不能设置已完成');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$param['over_time'] = 0;
|
||||
$param['done_ratio'] = 0;
|
||||
}
|
||||
}
|
||||
if(isset($param['before_task'])){
|
||||
$after_task_array = admin_after_task_son($param['id']);
|
||||
//包括自己在内
|
||||
$after_task_array[] = $param['id'];
|
||||
if (in_array($param['before_task'], $after_task_array)) {
|
||||
return to_assign(1, '前置任务不能是该任务本身或其后置任务');
|
||||
}
|
||||
}
|
||||
$param['update_time'] = time();
|
||||
$res = TaskList::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
$res = TaskList::where('id', $param['id'])->strict(false)->save($param);
|
||||
if ($res) {
|
||||
add_log('edit', $param['id'], $param);
|
||||
add_project_log($this->uid,'task',$param, $task);
|
||||
@ -125,6 +142,12 @@ class Task extends BaseController
|
||||
->where(array('mf.topic_id' => $id, 'mf.module' => 'task'))
|
||||
->select()->toArray();
|
||||
|
||||
$son_task = Db::name('ProjectTask')->where(['pid' => $detail['id']])->select()->toArray();
|
||||
foreach ($son_task as $key => &$vo) {
|
||||
$vo['flow_name'] = TaskList::$FlowStatus[(int) $vo['flow_status']];
|
||||
}
|
||||
|
||||
View::assign('son_task', $son_task);
|
||||
View::assign('detail', $detail);
|
||||
View::assign('file_array', $file_array);
|
||||
View::assign('role_edit', $role_edit);
|
||||
|
@ -47,6 +47,7 @@ class ProjectLog extends Model
|
||||
'cate' => array('icon' => 'icon-wodedianping', 'title' => '任务类别'),
|
||||
'done_ratio' => array('icon' => 'icon-wodedianping', 'title' => '完成进度'),
|
||||
'project_id' => array('icon' => 'icon-wodedianping', 'title' => '关联项目'),
|
||||
'before_task' => array('icon' => 'icon-wodedianping', 'title' => '前置任务'),
|
||||
'content' => array('icon' => 'icon-wodedianping', 'title' => '描述'),
|
||||
'file' => array('icon' => 'icon-sucaiziyuan', 'title' => '文件'),
|
||||
'new' => array('icon' => 'icon-zidingyishezhi', 'title' => '任务'),
|
||||
@ -99,6 +100,10 @@ class ProjectLog extends Model
|
||||
if ($v['field'] == 'project_id') {
|
||||
$v['old_content'] = Db::name('Project')->where(['id' => $v['old_content']])->value('name');
|
||||
$v['new_content'] = Db::name('Project')->where(['id' => $v['new_content']])->value('name');
|
||||
}
|
||||
if ($v['field'] == 'before_task') {
|
||||
$v['old_content'] = Db::name('ProjectTask')->where(['id' => $v['old_content']])->value('title');
|
||||
$v['new_content'] = Db::name('ProjectTask')->where(['id' => $v['new_content']])->value('title');
|
||||
}
|
||||
if ($v['field'] == 'cate') {
|
||||
$v['old_content'] = Db::name('WorkCate')->where(['id' => $v['old_content']])->value('title');
|
||||
|
@ -76,7 +76,17 @@ class ProjectTask extends Model
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['title|content', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
|
||||
if (!empty($param['task_id'])) {
|
||||
$where[] = ['id', '<>', $param['task_id']];
|
||||
}
|
||||
if (!empty($param['set_pid'])) {
|
||||
$where[] = ['pid', '=', 0];
|
||||
$where[] = ['id', '<>', $param['set_pid']];
|
||||
$where[] = ['before_task', '<>', $param['set_pid']];
|
||||
}
|
||||
if (!empty($param['before_task'])) {
|
||||
$where[] = ['before_task', '=', $param['before_task']];
|
||||
}
|
||||
$where[] = ['delete_time', '=', 0];
|
||||
|
||||
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
|
||||
@ -96,7 +106,6 @@ class ProjectTask extends Model
|
||||
$item['director_name'] = Db::name('Admin')->where(['id' => $item['director_uid']])->value('name');
|
||||
}
|
||||
$assist_admin_names = Db::name('Admin')->where([['id', 'in', $item['assist_admin_ids']]])->column('name');
|
||||
$item['cate_name'] = Db::name('WorkCate')->where(['id' => $item['cate']])->value('title');
|
||||
if (empty($assist_admin_names)) {
|
||||
$item['assist_admin_names'] = '-';
|
||||
} else {
|
||||
@ -105,9 +114,13 @@ class ProjectTask extends Model
|
||||
if ($item['project_id'] == 0) {
|
||||
$item['project_name'] = '-';
|
||||
} else {
|
||||
$item['project_name'] = Db::name('Project')->where(['id' => $item['project_id']])->value('name');
|
||||
$item['project_name'] = Db::name('Project')->where(['id' => $item['project_id'],'delete_time' => 0])->value('name');
|
||||
}
|
||||
|
||||
$item['cate_name'] = Db::name('WorkCate')->where(['id' => $item['cate']])->value('title');
|
||||
$item['after_num'] = Db::name('ProjectTask')->where(['before_task'=>$item['id'],'delete_time' => 0])->count();
|
||||
if($item['after_num']==1){
|
||||
$item['after_id'] = Db::name('ProjectTask')->where(['before_task'=>$item['id'],'delete_time' => 0])->value('id');
|
||||
}
|
||||
$item['delay'] = 0;
|
||||
if ($item['end_time'] > 0) {
|
||||
$item['end_time'] = date('Y-m-d', $item['end_time']);
|
||||
@ -133,11 +146,19 @@ class ProjectTask extends Model
|
||||
{
|
||||
$detail = Db::name('ProjectTask')->where(['id' => $id])->find();
|
||||
if (!empty($detail)) {
|
||||
$detail['product_name'] = '';
|
||||
$detail['before_task_name'] = '';
|
||||
$detail['project_name'] = '';
|
||||
if ($detail['project_id'] > 0) {
|
||||
$detail['project_name'] = Db::name('Project')->where(['id' => $detail['project_id']])->value('name');
|
||||
}
|
||||
|
||||
if ($detail['before_task'] > 0) {
|
||||
$before_task = Db::name('ProjectTask')->where(['id' => $detail['before_task']])->find();
|
||||
$detail['before_task_name'] = $before_task['title'];
|
||||
$detail['before_task_flow_status'] = $before_task['flow_status'];
|
||||
$detail['before_task_flow_name'] = self::$FlowStatus[(int) $before_task['flow_status']];
|
||||
}
|
||||
|
||||
$detail['admin_name'] = Db::name('Admin')->where(['id' => $detail['admin_id']])->value('name');
|
||||
$detail['work_hours'] = Db::name('Schedule')->where(['delete_time' => 0, 'tid' => $detail['id']])->sum('labor_time');
|
||||
$detail['cate_name'] = Db::name('WorkCate')->where(['id' => $detail['cate']])->value('title');
|
||||
|
@ -59,8 +59,8 @@
|
||||
}
|
||||
}
|
||||
, {
|
||||
field: 'status', title: '状态', align: 'center', width: 70, rowspan: 2, templet: function (d) {
|
||||
var html = '<span class="layui-btn layui-btn-xs layui-bg-' + d.status + '">' + d.status_name + '</span>';
|
||||
field: 'status', title: '状态', align: 'center', width: 90, rowspan: 2, templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.status + '">『' + d.status_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ function project_document(){
|
||||
$('#projectTab').find('li').eq(3).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
//项目任务
|
||||
parent.layui.documentTable = table.render({
|
||||
layui.documentTable = table.render({
|
||||
elem: '#document',
|
||||
title: '文档列表',
|
||||
toolbar: '#toolbardocument',
|
||||
@ -57,7 +57,7 @@ function project_document(){
|
||||
var checkStatus = table.checkStatus(obj.config.id);
|
||||
switch(obj.event){
|
||||
case 'add':
|
||||
parent.layui.tool.side('/project/document/add?project_id='+project_id);
|
||||
tool.side('/project/document/add?project_id='+project_id);
|
||||
break;
|
||||
};
|
||||
});
|
||||
@ -66,10 +66,10 @@ function project_document(){
|
||||
var data = obj.data; //获得当前行数据
|
||||
if(obj.event === 'detail'){ //查看
|
||||
let url = '/project/document/view/id/'+data.id;
|
||||
parent.layui.tool.side(url);
|
||||
tool.side(url);
|
||||
}
|
||||
if(obj.event === 'edit'){
|
||||
parent.layui.tool.side('/project/document/add?id='+data.id);
|
||||
tool.side('/project/document/add?id='+data.id);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
|
@ -3,7 +3,7 @@
|
||||
<div class="py-1">
|
||||
<span class="gray">项目状态:</span>
|
||||
<span class="layui-color-{$detail.status}" id="status_{$detail.id}"
|
||||
data-val="{$detail.status}">{$detail.status_name}</span>
|
||||
data-val="{$detail.status}">『{$detail.status_name}』</span>
|
||||
<span class="gray" style="margin-left:32px">负责人:</span>
|
||||
<span id="director_uid_{$detail.id}" data-val="{$detail.director_uid}">{$detail.director_name}</span>
|
||||
<i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}" data-name="director_uid"></i>
|
||||
|
@ -12,39 +12,56 @@ function project_task(){
|
||||
return false;
|
||||
}
|
||||
$('#projectTab').find('li').eq(1).data('load','true');
|
||||
let tool = layui.tool, table = layui.table;
|
||||
let tool = layui.tool, treeTable = layui.treeTable,table = layui.table;
|
||||
//项目任务
|
||||
parent.layui.taskTable = table.render({
|
||||
layui.taskTable = treeTable.render({
|
||||
elem: '#task',
|
||||
title: '任务列表',
|
||||
toolbar: '#toolbartask',
|
||||
cellMinWidth:80,
|
||||
url: "/project/task/index",
|
||||
url: "/project/api/get_project_task",
|
||||
where:{'project_id':project_id},
|
||||
page: true, //开启分页
|
||||
limit: 20,
|
||||
tree: { // treeTable 特定属性集
|
||||
view:{expandAllDefault:true,showIcon:false},
|
||||
},
|
||||
page: false,
|
||||
cols: [[
|
||||
{field: 'id', title: '任务编号', width: 80, align: 'center', fixed: 'left', templet: function (d) {
|
||||
return 'T' + d.id;
|
||||
}
|
||||
}
|
||||
,{field:'flow_name',title: '状态',align:'center',width: 80,templet:function(d){
|
||||
var html = '<span class="layui-badge layui-bg-'+d.flow_status+'">'+d.flow_name+'</span>';
|
||||
,{field:'flow_name',title: '状态',align:'center',width: 90,templet:function(d){
|
||||
var html = '<span class="layui-color-'+d.flow_status+'">『'+d.flow_name+'』</span>';
|
||||
return html;
|
||||
}}
|
||||
, { field: 'cate_name', title: '工作类型', width: 90, align: 'center'}
|
||||
, { field: 'type_name', title: '任务类型', width: 90, align: 'center',templet:function(d){
|
||||
var html = '<span class="layui-color-'+d.type+'">'+d.type_name+'</span>';
|
||||
return html;
|
||||
}}
|
||||
,{field:'title',title: '任务主题',rowspan: 2,templet:function(d){
|
||||
, {field:'name',title: '任务主题', minWidth:300,templet:function(d){
|
||||
var html = '<span class="layui-badge layui-bg-'+d.priority+'">'+d.priority_name+'</span> <a class="side-a" lay-event="detail">'+d.title+'</a>';
|
||||
return html;
|
||||
}}
|
||||
, { field: 'before_task', title: '前置任务编号',align: 'center', width: 100, templet: function (d) {
|
||||
var html = '-';
|
||||
if(d.before_task > 0){
|
||||
html = '<a class="blue" lay-event="before" style="cursor:pointer">T' + d.before_task + '</a>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
, { field: 'after_num', title: '后置任务数', align: 'center',width: 90, templet: function (d) {
|
||||
var html = '-';
|
||||
if(d.after_num > 0){
|
||||
html = '<a class="blue" lay-event="more" style="cursor:pointer;">'+d.after_num+'</a>';
|
||||
if(d.after_num == 1){
|
||||
html = ' <a class="blue" style="cursor:pointer" lay-event="after">'+d.after_num+'</a>';
|
||||
}
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
,{field:'director_name',title: '负责人', align:'center',width: 80}
|
||||
,{field:'assist_admin_names',title: '协作人',width: 160}
|
||||
,{field:'plan_hours',title: '预估工时', align:'center',width: 80}
|
||||
,{field:'end_time',title: '预计结束日期', width: 150,templet:function(d){
|
||||
,{field:'end_time',title: '计划完成日期', width: 150,templet:function(d){
|
||||
var html = d.end_time;
|
||||
if(d.delay>0){
|
||||
html+= '<span class="red ml-1" style="font-size:12px;">逾期'+d.delay+'天</span>';
|
||||
@ -56,21 +73,65 @@ function project_task(){
|
||||
|
||||
//触发事件
|
||||
table.on('toolbar(task)', function(obj){
|
||||
var checkStatus = table.checkStatus(obj.config.id);
|
||||
switch(obj.event){
|
||||
case 'add':
|
||||
parent.layui.tool.side('/project/task/add?project_id='+project_id);
|
||||
break;
|
||||
};
|
||||
var checkStatus = table.checkStatus(obj.config.id);
|
||||
switch(obj.event){
|
||||
case 'add':
|
||||
tool.side('/project/task/add?project_id='+project_id);
|
||||
break;
|
||||
};
|
||||
});
|
||||
|
||||
table.on('tool(task)', function(obj){
|
||||
treeTable.on('tool(task)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
var layEvent = obj.event;
|
||||
|
||||
if(layEvent === 'detail'){ //查看
|
||||
let url = '/project/task/view/id/'+data.id;
|
||||
parent.layui.tool.side(url);
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'before'){ //查看
|
||||
let url = '/project/task/view/id/'+data.before_task;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'after'){ //查看
|
||||
let url = '/project/task/view/id/'+data.after_id;
|
||||
tool.side(url);
|
||||
}
|
||||
if(layEvent === 'more'){
|
||||
layer.open({
|
||||
title: '后置任务列表',
|
||||
area: ['666px', '550px'],
|
||||
type: 1,
|
||||
content: '<div class="picker-table"><div id="taskTable"></div></div>',
|
||||
success: function () {
|
||||
taskTable = table.render({
|
||||
elem: '#taskTable'
|
||||
, url: '/project/api/get_task'
|
||||
, page: true //开启分页
|
||||
, limit: 10
|
||||
, where:{'before_task':obj.data.id}
|
||||
, cols: [[
|
||||
{ field: 'id', width: 90, title: '编号', align: 'center' }
|
||||
, {field: 'title', title: '任务主题',minWidth:240, rowspan: 2, templet: function (d) {
|
||||
var html = '<span class="layui-badge layui-bg-' + d.priority + '">' + d.priority_name + '</span> <a class="blue" style="cursor:pointer" lay-event="tabson">' + d.title + '</a>';
|
||||
return html;
|
||||
}}
|
||||
, { field: 'project_name', width: 200, title: '关联项目' }
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(taskTable)', function(obj){
|
||||
var data = obj.data; //获得当前行数据
|
||||
switch(obj.event){
|
||||
case 'tabson':
|
||||
let url = '/project/task/view/id/'+data.id;
|
||||
tool.side(url);
|
||||
break;
|
||||
};
|
||||
});
|
||||
}
|
||||
})
|
||||
return;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -30,13 +30,11 @@
|
||||
</td>
|
||||
<td class="layui-td-gray">预估工时<span style="color: red">*</span></td>
|
||||
<td>
|
||||
<input type="text" name="plan_hours" lay-verify="required" lay-reqText="请填写预估工时" placeholder="请填写预估工时"
|
||||
class="layui-input" value="">
|
||||
<input type="text" name="plan_hours" lay-verify="required" lay-reqText="请填写预估工时" placeholder="请填写预估工时" class="layui-input" value="">
|
||||
</td>
|
||||
<td class="layui-td-gray-2">预计结束日期<span style="color: red">*</span></td>
|
||||
<td>
|
||||
<input type="text" id="end_time" name="end_time" readonly lay-verify="required" lay-reqText="请选择结束时间"
|
||||
placeholder="请选择时间" class="layui-input" value="">
|
||||
<input type="text" id="end_time" name="end_time" readonly lay-verify="required" lay-reqText="请选择结束时间" placeholder="请选择时间" class="layui-input" value="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -45,30 +43,37 @@
|
||||
<input type="text" name="director_name" placeholder="请选择" readonly class="layui-input picker-one" value="">
|
||||
<input type="hidden" name="director_uid" readonly value="">
|
||||
</td>
|
||||
{empty name="$project_id"}
|
||||
<td class="layui-td-gray">协作人</td>
|
||||
<td>
|
||||
<input type="text" name="assist_admin_names" placeholder="请选择" readonly class="layui-input picker-more" value="">
|
||||
<input type="hidden" name="assist_admin_ids" readonly value="">
|
||||
</td>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td>
|
||||
<select id="projectId" name="project_id" lay-filter="project_id">
|
||||
<option value="">请选择关联项目</option>
|
||||
{volist name=":get_project()" id="v"}
|
||||
<option value="{$v.id}">{$v.name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
{else/}
|
||||
<td class="layui-td-gray">协作人</td>
|
||||
<td colspan="3">
|
||||
<input type="hidden" name="project_id" readonly value="{$project_id}">
|
||||
<input type="text" name="assist_admin_names" placeholder="请选择" readonly class="layui-input picker-more" value="">
|
||||
<input type="hidden" name="assist_admin_ids" readonly value="">
|
||||
</td>
|
||||
{/empty}
|
||||
</tr>
|
||||
{empty name="$project_id"}
|
||||
<tr>
|
||||
<td class="layui-td-gray">前置任务</td>
|
||||
<td>
|
||||
<input type="text" name="before_task_name" readonly placeholder="请选择前置任务" class="layui-input picker-task" value="">
|
||||
<input type="hidden" name="before_task" readonly value="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="project_name" readonly placeholder="请选择关联项目" class="layui-input picker-project" value="">
|
||||
<input type="hidden" name="project_id" readonly value="">
|
||||
</td>
|
||||
</tr>
|
||||
{else/}
|
||||
<tr>
|
||||
<td class="layui-td-gray">前置任务</td>
|
||||
<td colspan="5">
|
||||
<input type="text" name="before_task_name" readonly placeholder="请选择前置任务" class="layui-input picker-task" value="">
|
||||
<input type="hidden" name="before_task" readonly value="">
|
||||
<input type="hidden" name="project_id" readonly value="{$project_id}">
|
||||
</td>
|
||||
</tr>
|
||||
{/empty}
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">详细描述<font>*</font></td>
|
||||
<td colspan="5">
|
||||
@ -76,7 +81,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div style="padding: 10px 0">
|
||||
<div style="padding-top: 10px">
|
||||
<input type="hidden" name="id" value="0" />
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
@ -88,16 +93,16 @@
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tinymce','employeepicker'];
|
||||
const moduleInit = ['tool','tinymce','employeepicker','oaTool'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, laydate = layui.laydate, employeepicker = layui.employeepicker;
|
||||
var form = layui.form,tool=layui.tool, laydate = layui.laydate;
|
||||
|
||||
//编辑器初始化
|
||||
var editor = layui.tinymce;
|
||||
var edit = editor.render({
|
||||
selector: "#container",
|
||||
images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
|
||||
height: 500
|
||||
height: 492
|
||||
});
|
||||
|
||||
//日期范围
|
||||
|
@ -89,8 +89,8 @@
|
||||
}
|
||||
}
|
||||
, {
|
||||
field: 'flow_name', title: '状态', align: 'center', width: 80, templet: function (d) {
|
||||
var html = '<span class="layui-badge layui-bg-' + d.flow_status + '">' + d.flow_name + '</span>';
|
||||
field: 'flow_name', title: '状态', align: 'center', width: 90, templet: function (d) {
|
||||
var html = '<span class="layui-color-' + d.flow_status + '">『' + d.flow_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
@ -101,12 +101,31 @@
|
||||
return html;
|
||||
}
|
||||
}
|
||||
, { field: 'before_task', title: '前置任务编号',align: 'center', width: 100, templet: function (d) {
|
||||
var html = '-';
|
||||
if(d.before_task > 0){
|
||||
html = '<a class="side-a" data-href="/project/task/view/id/' + d.before_task + '">T' + d.before_task + '</a>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
, { field: 'after_num', title: '后置任务数', align: 'center',width: 90, templet: function (d) {
|
||||
var html = '-';
|
||||
if(d.after_num > 0){
|
||||
html = '<a class="blue" lay-event="more" style="cursor:pointer;">'+d.after_num+'</a>';
|
||||
if(d.after_num == 1){
|
||||
html = ' <a class="side-a" data-href="/project/task/view/id/' + d.after_id + '">'+d.after_num+'</a>';
|
||||
}
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
, { field: 'project_name', title: '关联项目', width: 200 }
|
||||
, { field: 'director_name', title: '负责人', align: 'center', width: 80 }
|
||||
, { field: 'assist_admin_names', title: '协作人', width: 200 }
|
||||
, { field: 'plan_hours', title: '预估工时', align: 'center', width: 80 }
|
||||
, {
|
||||
field: 'end_time', title: '预计结束日期', width: 150, templet: function (d) {
|
||||
field: 'end_time', title: '计划完成日期', width: 150, templet: function (d) {
|
||||
var html = d.end_time;
|
||||
if (d.delay > 0) {
|
||||
html += '<span class="red ml-1" style="font-size:12px;">逾期' + d.delay + '天</span>';
|
||||
@ -117,6 +136,35 @@
|
||||
]]
|
||||
});
|
||||
|
||||
//触发事件
|
||||
table.on('tool(task)', function(obj){
|
||||
if(obj.event === 'more'){
|
||||
layer.open({
|
||||
title: '后置任务列表',
|
||||
area: ['666px', '550px'],
|
||||
type: 1,
|
||||
content: '<div class="picker-table"><div id="taskTable"></div></div>',
|
||||
success: function () {
|
||||
taskTable = table.render({
|
||||
elem: '#taskTable'
|
||||
, url: '/project/api/get_task'
|
||||
, page: true //开启分页
|
||||
, limit: 10
|
||||
, where:{'before_task':obj.data.id}
|
||||
, cols: [[
|
||||
{ field: 'id', width: 90, title: '编号', align: 'center' }
|
||||
, {field: 'title', title: '任务主题',minWidth:240, rowspan: 2, templet: function (d) {
|
||||
var html = '<span class="layui-badge layui-bg-' + d.priority + '">' + d.priority_name + '</span> <a class="side-a" data-href="/project/task/view/id/' + d.id + '">' + d.title + '</a>';
|
||||
return html;
|
||||
}}
|
||||
, { field: 'project_name', width: 200, title: '关联项目' }
|
||||
]]
|
||||
});
|
||||
}
|
||||
})
|
||||
return;
|
||||
}
|
||||
});
|
||||
//触发事件
|
||||
table.on('toolbar(task)', function(obj){
|
||||
if(obj.event === 'add'){
|
||||
|
@ -24,6 +24,11 @@
|
||||
.log-item i{font-weight:800; color:#323232}
|
||||
.log-content strong{margin:0 4px; color:#323232}
|
||||
.layui-unselect dl {max-height:188px;}
|
||||
.layui-table-form{margin-top:8px;}
|
||||
|
||||
.task-son{padding:3px 0;}
|
||||
.task-son .red{margin-left:8px; cursor:pointer; display:none;}
|
||||
.task-son:hover .del-son{display:inline;}
|
||||
</style>
|
||||
{/block}
|
||||
{block name="body"}
|
||||
@ -34,7 +39,7 @@
|
||||
<i class="iconfont icon-wodedianping" title="编辑" data-name="title"></i>
|
||||
</h2>
|
||||
<div>
|
||||
<span class="layui-badge layui-bg-gray">#P{$detail.id}</span>
|
||||
<span class="layui-badge layui-bg-gray">#T{$detail.id}</span>
|
||||
<span class="mx-2">{$detail.admin_name}</span>
|
||||
<span class="gray">创建于{$detail.times}<span id="editTips">{gt name="$detail.update_time" value="0"},最近更新于 {:time_trans($detail.update_time)}{/gt}</span></span>
|
||||
{eq name="$detail.admin_id" value="$login_admin.id"}
|
||||
@ -77,19 +82,42 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">实际完成日期</td>
|
||||
<td class="hover-edit">{eq name="$detail.over_time" value="0"}-{else/}{$detail.over_time|
|
||||
date='Y-m-d'}{/eq}</td>
|
||||
<td class="hover-edit">{eq name="$detail.over_time" value="0"}-{else/}{$detail.over_time|date='Y-m-d'}{/eq}</td>
|
||||
<td class="layui-td-gray">实际工时</td>
|
||||
<td class="hover-edit">{eq name="$detail.work_hours" value="0"}-{else/}{$detail.work_hours}{/eq}
|
||||
</td>
|
||||
<td class="layui-td-gray">任务状态</td>
|
||||
<td class="hover-edit">
|
||||
<span class="layui-color-{$detail.flow_status}" id="flow_status_{$detail.id}"
|
||||
data-val="{$detail.flow_status}">{$detail.flow_name}</span><i
|
||||
class="iconfont icon-wodedianping" title="编辑" data-name="flow_status"></i>
|
||||
<span class="layui-color-{$detail.flow_status}" id="flow_status_{$detail.id}" data-val="{$detail.flow_status}">『{$detail.flow_name}』</span><i class="iconfont icon-wodedianping" title="编辑" data-name="flow_status"></i>
|
||||
</td>
|
||||
<td class="layui-td-gray">完成进度</td>
|
||||
<td class="hover-edit"><span class="layui-color-{$detail.done_ratio}" id="done_ratio_{$detail.id}" data-val="{$detail.done_ratio}">{$detail.done_ratio}%</span><i class="iconfont icon-wodedianping" title="编辑" data-name="done_ratio"></i>
|
||||
<td class="hover-edit"><span class="layui-color-{$detail.done_ratio}" id="done_ratio_{$detail.id}" data-val="{$detail.done_ratio}">{$detail.done_ratio}%</span>{neq name="$detail.done_ratio" value="100"}<i class="iconfont icon-wodedianping" title="编辑" data-name="done_ratio"></i>{/neq}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">前置任务</td>
|
||||
<td colspan="7" class="hover-edit">
|
||||
<span id="project_id_{$detail.id}" data-val="{$detail.before_task}">
|
||||
{gt name="$detail.before_task" value="0"}
|
||||
<span class="layui-badge layui-bg-gray">#T{$detail.before_task}</span><span class="layui-color-{$detail.before_task_flow_status}">『{$detail.before_task_flow_name}』</span><a href="/project/task/view/id/{$detail.before_task}">{$detail.before_task_name}</a>
|
||||
{else/}
|
||||
<span class="gray">未设置</span>{/gt}
|
||||
</span>
|
||||
<i class="iconfont icon-wodedianping" title="编辑" data-name="before_task"></i>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray-2">子任务<span class="layui-btn layui-btn-xs add-son">+ 新增</span></td>
|
||||
<td colspan="7" class="hover-edit">
|
||||
<span id="project_id_{$detail.id}" data-val="{$detail.before_task}">
|
||||
{empty name="$son_task"}
|
||||
<span class="gray">暂无子任务</span>
|
||||
{else/}
|
||||
{volist name="son_task" id="vo"}
|
||||
<p class="task-son"><span class="layui-badge layui-bg-gray">#T{$vo.id}</span><span class="layui-color-{$vo.flow_status}">『{$vo.flow_name}』</span><a href="/project/task/view/id/{$vo.id}">{$vo.title}</a><span class="del-son red" title="取消父子关系" data-id="{$vo.id}">✘</span></p>
|
||||
{/volist}
|
||||
{/empty}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -115,8 +143,7 @@
|
||||
<div class="pb-4 hover-{$role_edit}">
|
||||
<p class="gray mb-2">关联项目</p>
|
||||
<span id="project_id_{$detail.id}" data-val="{$detail.project_id}">
|
||||
{gt name="$detail.project_id" value="0"}{$detail.project_name}{else/}<span
|
||||
class="gray">未设置</span>{/gt}
|
||||
{gt name="$detail.project_id" value="0"}{$detail.project_name}{else/}<span class="gray">未设置</span>{/gt}
|
||||
</span>
|
||||
<i class="iconfont icon-wodedianping" title="编辑" data-name="project_id"></i>
|
||||
</div>
|
||||
@ -185,8 +212,7 @@
|
||||
{ 'id': 40, 'title': '40%' },
|
||||
{ 'id': 50, 'title': '50%' },
|
||||
{ 'id': 60, 'title': '60%' },
|
||||
{ 'id': 80, 'title': '80%' },
|
||||
{ 'id': 100, 'title': '100%' }
|
||||
{ 'id': 80, 'title': '80%' }
|
||||
]
|
||||
}
|
||||
const edit = layui.oaEdit,work = layui.oaSchedule,comment = layui.oaComment, oaTool = layui.oaTool, tool = layui.tool;
|
||||
@ -222,6 +248,35 @@
|
||||
});
|
||||
})
|
||||
|
||||
$('.add-son').on('click', function () {
|
||||
let callback = function(data){
|
||||
tool.post("/project/api/task_add_son", {'pid': detail_id, 'id': data.id}, function(e){
|
||||
layer.msg(e.msg);
|
||||
if(e.code==0){
|
||||
location.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
oaTool.taskPicker(callback,{set_pid:detail_id});
|
||||
});
|
||||
|
||||
$('.del-son').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) {
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/project/api/task_del_son", {id: id}, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
});
|
||||
|
||||
oaTool.addFile({
|
||||
type:1,
|
||||
isSave:true,
|
||||
@ -281,11 +336,11 @@
|
||||
let callback = function (e) {
|
||||
layer.closeAll();
|
||||
if (e.code == 0) {
|
||||
location.reload();
|
||||
if (layui.pageTable) {
|
||||
setTimeout(function () {
|
||||
layui.pageTable.reload();
|
||||
}, 400)
|
||||
setTimeout(function () {
|
||||
location.reload();
|
||||
}, 400)
|
||||
if (parent.layui.taskTable) {
|
||||
parent.layui.taskTable.reload();
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -330,7 +385,14 @@
|
||||
}
|
||||
if (name == "project_id") {
|
||||
if (admin_id == login_admin) {
|
||||
edit.select_table(id, name, real_txt, "/project/api/get_project", editPost, 1);
|
||||
edit.select_table(id, name, real_txt, editPost, 1);
|
||||
} else {
|
||||
layer.msg('您没权限修改,请联系创建人或负责人修改');
|
||||
}
|
||||
}
|
||||
if (name == "before_task") {
|
||||
if (admin_id == login_admin) {
|
||||
edit.select_task(id, name, real_txt, editPost, 1);
|
||||
} else {
|
||||
layer.msg('您没权限修改,请联系创建人或负责人修改');
|
||||
}
|
||||
|
@ -52,12 +52,12 @@ class Personal extends BaseController
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$param['move_time'] = isset($param['move_time']) ? strtotime($param['move_time']) : 0;
|
||||
if ($param['id'] > 0) {
|
||||
$param['update_time'] = time();
|
||||
$res = Db::name('DepartmentChange')->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} else {
|
||||
$param['move_time'] = isset($param['move_time']) ? strtotime($param['move_time']) : 0;
|
||||
$count = Db::name('Department')->where(['leader_id' => $param['uid']])->count();
|
||||
if($count>0){
|
||||
return to_assign(1,'请先撤销该员工的部门负责人头衔再调部门');
|
||||
@ -108,7 +108,12 @@ class Personal extends BaseController
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->quit_time = date('Y-m-d', $item->quit_time);
|
||||
$item->connect_time_str='-';
|
||||
if($item->connect_time>0){
|
||||
$item->connect_time_str = date('Y-m-d', $item->connect_time);
|
||||
}
|
||||
$item->lead_admin = Db::name('admin')->where(['id' => $item->lead_admin_id])->value('name');
|
||||
$item->connect_name = Db::name('admin')->where(['id' => $item->connect_id])->value('name');
|
||||
$this_uids_name = Db::name('admin')->where([['id','in', $item->connect_uids]])->column('name');
|
||||
$item->connect_names = implode(',', $this_uids_name);
|
||||
});
|
||||
@ -123,23 +128,23 @@ class Personal extends BaseController
|
||||
{
|
||||
$param = get_params();
|
||||
if (request()->isAjax()) {
|
||||
$count = Db::name('Department')->where(['leader_id' => $param['uid']])->count();
|
||||
if($count>0){
|
||||
return to_assign(1,'请先撤销该员工的部门负责人头衔再添加离职档案');
|
||||
}
|
||||
$param['quit_time'] = isset($param['quit_time']) ? strtotime($param['quit_time']) : 0;
|
||||
if ($param['id'] > 0) {
|
||||
$param['update_time'] = time();
|
||||
$res = Db::name('PersonalQuit')->strict(false)->field(true)->update($param);
|
||||
add_log('edit', $param['id'], $param);
|
||||
} else {
|
||||
$count = Db::name('Department')->where(['leader_id' => $param['uid']])->count();
|
||||
if($count>0){
|
||||
return to_assign(1,'请先撤销该员工的部门负责人头衔再添加离职档案');
|
||||
}
|
||||
$param['create_time'] = time();
|
||||
$param['admin_id'] = $this->uid;
|
||||
$res = Db::name('PersonalQuit')->strict(false)->field(true)->insertGetId($param);
|
||||
add_log('add', $res, $param);
|
||||
}
|
||||
if ($res!==false) {
|
||||
Db::name('Admin')->where('id', $param['uid'])->update(['status' => 2]);
|
||||
if ($res!==false) {
|
||||
Db::name('Admin')->where('id', $param['uid'])->update(['status' => 2]);
|
||||
add_log('add', $res, $param);
|
||||
}
|
||||
}
|
||||
return to_assign();
|
||||
} else {
|
||||
@ -158,6 +163,7 @@ class Personal extends BaseController
|
||||
$this_uids_name = Db::name('Admin')->where([['id','in', $detail['connect_uids']]])->column('name');
|
||||
$detail['connect_names'] = implode(',', $this_uids_name);
|
||||
$detail['quit_time'] = date('Y-m-d', $detail['quit_time']);
|
||||
$detail['connect_name'] = Db::name('admin')->where(['id' => $detail['connect_id']])->value('name');
|
||||
View::assign('detail', $detail);
|
||||
}
|
||||
View::assign('id', $id);
|
||||
@ -181,4 +187,31 @@ class Personal extends BaseController
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
}
|
||||
|
||||
//一键交接资料
|
||||
public function leave_check()
|
||||
{
|
||||
$id = get_params("id");
|
||||
$data['id'] = $id;
|
||||
$data['connect_time'] = time();
|
||||
$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],['flow_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]);
|
||||
|
||||
add_log('hand', $id);
|
||||
return to_assign(0, "删除成功");
|
||||
} else {
|
||||
return to_assign(1, "删除失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,10 +28,12 @@ class User extends BaseController
|
||||
if (!empty($param['keywords'])) {
|
||||
$where[] = ['id|username|name|nickname|mobile|desc', 'like', '%' . $param['keywords'] . '%'];
|
||||
}
|
||||
$where[] = ['status', '<', 2];
|
||||
if (isset($param['status']) && $param['status']!='') {
|
||||
$where[] = ['status', '=', $param['status']];
|
||||
}
|
||||
else{
|
||||
$where[] = ['status', '<', 2];
|
||||
}
|
||||
if (!empty($param['type'])) {
|
||||
$where[] = ['type', '=', $param['type']];
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm" lay-event="add">+ 添加离职档案记录</button> <span style="font-size:12px; margin-left:20px; color:#FF5722">删除离职档案即可恢复在职状态</span>
|
||||
<button class="layui-btn layui-btn-sm" lay-event="add">+ 添加离职档案记录</button> <span style="font-size:12px; margin-left:20px; color:#FF5722">删除离职档案即可恢复在职状态,已交接的资料无法恢复</span>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
@ -37,21 +37,38 @@
|
||||
, limit: 20
|
||||
, cols: [[
|
||||
{ field: 'id', width: 80, title: '序号', align: 'center' }
|
||||
, { field: 'name', width: 110, title: '离职员工姓名', align: 'center','style':'color:#FF5722'}
|
||||
, { field: 'department', width: 120, title: '所在部门', align: 'center'}
|
||||
, { field: 'name', width: 110, title: '离职员工', align: 'center','style':'color:#FF5722'}
|
||||
, { field: 'position', width: 100, title: '职位', align: 'center'}
|
||||
, { field: 'department', width: 120, title: '所在部门', align: 'center'}
|
||||
, { field: 'lead_admin', width: 90, title: '部门负责人', align: 'center'}
|
||||
, { field: 'connect_names', width: 180, title: '交接人', align: 'center'}
|
||||
, { field: 'quit_time', width: 100,title: '离职日期', align: 'center'}
|
||||
, { field: 'connect_status', width: 100,title: '资料交接状态', align: 'center',
|
||||
templet: function (d) {
|
||||
if(d.connect_time==0){
|
||||
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: 'connect_names', width: 180, title: '参与交接人'}
|
||||
, { field: 'remark', title: '离职原因'}
|
||||
, {
|
||||
width: 100, title: '操作',fixed:'right', align: 'center'
|
||||
width: 150, title: '操作',fixed:'right', align: 'center'
|
||||
, templet: function (d) {
|
||||
var html='<div class="layui-btn-group">';
|
||||
html+='<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</button>';
|
||||
html+='<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button>';
|
||||
html+='</div>';
|
||||
return html;
|
||||
let btn1='<button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button>';
|
||||
let btn2='<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="set">资料交接</button>';
|
||||
let btn3='<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button>';
|
||||
|
||||
if(d.connect_time==0){
|
||||
return '<div class="layui-btn-group">'+btn1+btn2+btn3+'</div>';
|
||||
}
|
||||
else{
|
||||
return '<div class="layui-btn-group">'+btn3+'</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
]]
|
||||
@ -64,8 +81,20 @@
|
||||
tool.side('/user/personal/leave_add?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) {
|
||||
obj.del();
|
||||
}
|
||||
}
|
||||
tool.delete("/user/personal/leave_check", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
if (obj.event === 'del') {
|
||||
layer.confirm('确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
layer.confirm('删除该离职档案【'+data.name+'】即可恢复在职状态,已交接的资料无法恢复,确定要删除吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<form class="layui-form p-4">
|
||||
<h3 class="pb-3">离职档案</h3>
|
||||
<h3 class="pb-2">离职档案</h3>
|
||||
{if condition="$id eq 0"}
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
@ -27,9 +27,14 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">交接人员<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="connect_names" autocomplete="off" lay-verify="required" placeholder="请选择交接人员" lay-reqText="请选择交接人员" readonly class="layui-input picker-more">
|
||||
<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-one">
|
||||
<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-more">
|
||||
<input type="hidden" name="connect_uids" class="layui-input">
|
||||
</td>
|
||||
</tr>
|
||||
@ -43,15 +48,10 @@
|
||||
{else/}
|
||||
<table class="layui-table">
|
||||
<tr>
|
||||
<td class="layui-td-gray">离职员工<font>*</font></td>
|
||||
<td>
|
||||
<input type="hidden" name="uid" value="{$detail.uid}" autocomplete="off">
|
||||
<input type="text" name="name" value="{$detail.name}" placeholder="请选择离职员工" lay-reqText="请选择离职员工" lay-verify="required" autocomplete="off" class="layui-input" readonly>
|
||||
</td>
|
||||
<td class="layui-td-gray">离职员工</td>
|
||||
<td>{$detail.name}</td>
|
||||
<td class="layui-td-gray">所在部门</td>
|
||||
<td>
|
||||
<input type="text" name="department" value="{$detail.department}" autocomplete="off" class="layui-input" readonly>
|
||||
</td>
|
||||
<td>{$detail.department}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">离职日期<font>*</font></td>
|
||||
@ -64,9 +64,14 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">交接人员<font>*</font></td>
|
||||
<td colspan="3">
|
||||
<input type="text" name="connect_names" autocomplete="off" lay-verify="required" placeholder="请选择交接人员" lay-reqText="请选择交接人员" readonly class="layui-input picker-more" value="{$detail.connect_names}">
|
||||
<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-one" 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-more" value="{$detail.connect_names}">
|
||||
<input type="hidden" name="connect_uids" class="layui-input" value="{$detail.connect_uids}">
|
||||
</td>
|
||||
</tr>
|
||||
@ -134,6 +139,10 @@
|
||||
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) {
|
||||
|
@ -29,6 +29,7 @@
|
||||
<select name="status">
|
||||
<option value="">选择员工状态</option>
|
||||
<option value="1">正常状态</option>
|
||||
<option value="2">离职状态</option>
|
||||
<option value="0">禁止登录</option>
|
||||
</select>
|
||||
</div>
|
||||
@ -334,7 +335,10 @@
|
||||
uploadImport();
|
||||
return;
|
||||
}
|
||||
|
||||
if(obj.config.where.status == 2){
|
||||
layer.msg('离职员工不支持操作');
|
||||
return false;
|
||||
}
|
||||
var uidArray=[],msg='是否执行该操作?',type=0;
|
||||
for(var i=0;i<data.length;i++){
|
||||
uidArray.push(data[i].id);
|
||||
@ -389,6 +393,10 @@
|
||||
tool.side('/user/user/view?id='+data.id);
|
||||
return;
|
||||
}
|
||||
if(obj.data.status == 2){
|
||||
layer.msg('离职员工不支持操作');
|
||||
return false;
|
||||
}
|
||||
if(obj.event === 'edit'){
|
||||
tool.side('/user/user/add?id='+data.id);
|
||||
}
|
||||
|
@ -22,20 +22,20 @@ return [
|
||||
[
|
||||
'id' => 4,
|
||||
'row' => 1,
|
||||
'name' => 'article',
|
||||
'title' => '知识列表',
|
||||
],
|
||||
[
|
||||
'id' => 5,
|
||||
'row' => 1,
|
||||
'name' => 'project',
|
||||
'title' => '项目列表',
|
||||
],
|
||||
[
|
||||
'id' => 6,
|
||||
'id' => 5,
|
||||
'row' => 1,
|
||||
'name' => 'task',
|
||||
'title' => '任务列表',
|
||||
],
|
||||
[
|
||||
'id' => 6,
|
||||
'row' => 1,
|
||||
'name' => 'article',
|
||||
'title' => '知识列表',
|
||||
],
|
||||
[
|
||||
'id' => 7,
|
||||
|
@ -72,6 +72,7 @@ return [
|
||||
'get' => '获取',
|
||||
'allot' => '分配',
|
||||
'remove' => '移除',
|
||||
'hand' => '交接',
|
||||
'tosea' => '公海移入',
|
||||
'totrash' => '废弃池移入',
|
||||
'reset' => '重新设置',
|
||||
|
@ -169,7 +169,7 @@ a.tab-a:hover,a:hover,a.open-a:hover,a.link-a:hover,a.right-a:hover{color:#1A75F
|
||||
|
||||
.layui-bg-0{background-color:#648A8D !important;}/*灰青*/
|
||||
.layui-bg-1,.layui-bg-green{background-color:#16b777 !important;}/*亮绿*/
|
||||
.layui-bg-2{background-color:#1A75FF !important;}/*亮蓝*/
|
||||
.layui-bg-2{background-color:#1E9FFF !important;}/*亮蓝*/
|
||||
.layui-bg-3{background-color:#FEC939 !important;}/*亮黄*/
|
||||
.layui-bg-4{background-color:#FD6206 !important;}/*亮橙*/
|
||||
.layui-bg-5{background-color:#FF5823 !important;}/*亮红*/
|
||||
@ -180,7 +180,7 @@ a.tab-a:hover,a:hover,a.open-a:hover,a.link-a:hover,a.right-a:hover{color:#1A75F
|
||||
|
||||
.layui-color-0{color:#648A8D !important;}/*灰青*/
|
||||
.layui-color-1{color:#16b777 !important;}/*亮绿*/
|
||||
.layui-color-2{color:#1A75FF !important;}/*亮蓝*/
|
||||
.layui-color-2{color:#1E9FFF !important;}/*亮蓝*/
|
||||
.layui-color-3{color:#FEC939 !important;}/*亮黄*/
|
||||
.layui-color-4{color:#FD6206 !important;}/*亮橙*/
|
||||
.layui-color-5{color:#FF5823 !important;}/*亮红*/
|
||||
@ -216,6 +216,7 @@ a.tab-a:hover,a:hover,a.open-a:hover,a.link-a:hover,a.right-a:hover{color:#1A75F
|
||||
.gray-disabled{color:#c6c6c6;}
|
||||
.gray-light{color:#f1f1f1;}
|
||||
|
||||
.layui-bg-gray { background-color: #f1f1f1!important; color: #686868!important;}
|
||||
/* 滚动条 */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
|
@ -99,7 +99,7 @@ body{color:#323232}
|
||||
.layui-side-white .layui-this>a,
|
||||
.layui-side-white .layui-this>a:hover {background-color: #EBF3FF;}
|
||||
.layui-side-white .layui-nav-child dd a:hover{background-color:#F8FAFF!important;color: #1A75FF!important; opacity: 0.9;}
|
||||
|
||||
.layui-side-white .layui-nav-tree .layui-nav-child{background-color:#ffffff!important;}
|
||||
/**blue**/
|
||||
.layui-side-blue{background-color:#192A5E; color: #C5C9D2;}
|
||||
.layui-side-blue .layui-logo {background-color:#192A5E;border-bottom: 1px solid #122150;}
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user