first commit
This commit is contained in:
@@ -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">
|
||||
<tr>
|
||||
<td class="layui-td-gray">任务主题<font>*</font></td>
|
||||
<td colspan="3"><input type="text" name="title" lay-verify="required" lay-reqText="请输入任务主题" placeholder="请输入任务主题" class="layui-input" value=""></td>
|
||||
<td class="layui-td-gray-2">任务优先级<span style="color: red">*</span></td>
|
||||
<td>
|
||||
<select name="priority" lay-verify="required" lay-reqText="请选择优先级">
|
||||
{volist name=":get_priority()" id="vo"}
|
||||
{gt name="$key" value="0"}
|
||||
<option value="{$key}">{$vo}</option>
|
||||
{/gt}
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">工作类型<span style="color: red">*</span></td>
|
||||
<td>
|
||||
<select name="work_id" lay-verify="required" lay-reqText="请选择工作类型">
|
||||
<option value="">请选择</option>
|
||||
{volist name=":get_base_data('WorkCate')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</td>
|
||||
<td class="layui-td-gray">预估工时<span style="color: red">*</span></td>
|
||||
<td><input type="text" name="plan_hours" lay-verify="required|number" lay-reqText="请填写预估工时" placeholder="请填写预估工时" class="layui-input" value=""></td>
|
||||
<td class="layui-td-gray-2">预计结束日期<span style="color: red">*</span></td>
|
||||
<td><input type="text" name="end_time" readonly lay-verify="required" lay-reqText="请选择预计结束日期" placeholder="请选择时间" class="layui-input tool-time" value=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">负责人</td>
|
||||
<td>
|
||||
<input type="text" name="director_name" placeholder="请选择" readonly class="layui-input picker-admin" value="">
|
||||
<input type="hidden" name="director_uid" readonly value="0">
|
||||
</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-admin" data-type="2" value="">
|
||||
<input type="hidden" name="assist_admin_ids" readonly value="">
|
||||
</td>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td>
|
||||
<input type="text" name="project_name" placeholder="所属项目" readonly class="layui-input picker-oa" data-types="project" autocomplete="off" />
|
||||
<input type="hidden" name="project_id" value="0" />
|
||||
</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-admin" data-type="2" value="">
|
||||
<input type="hidden" name="assist_admin_ids" readonly value="">
|
||||
</td>
|
||||
{/empty}
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray" style="vertical-align:top;">详细描述<font>*</font></td>
|
||||
<td colspan="5">
|
||||
<textarea name="content" placeholder="请输入内容" class="layui-textarea" id="container" style="border:0;padding:0"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="pt-4">
|
||||
<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>
|
||||
</div>
|
||||
</form>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tinymce','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,tool=layui.tool, oaPicker = layui.oaPicker;
|
||||
|
||||
//编辑器初始化
|
||||
var editor = layui.tinymce;
|
||||
var edit = editor.render({
|
||||
selector: "#container",
|
||||
images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
|
||||
height: 500
|
||||
});
|
||||
|
||||
//监听提交
|
||||
form.on('submit(webform)', function (data) {
|
||||
data.field.content = tinyMCE.editors['container'].getContent();
|
||||
if (data.field.content == '') {
|
||||
layer.msg('请先完善任务描述内容');
|
||||
return false;
|
||||
}
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
tool.sideClose(1000);
|
||||
}
|
||||
}
|
||||
let clickbtn = $(this);
|
||||
tool.post("/project/task/add", data.field, callback,clickbtn);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
@@ -0,0 +1,111 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-unselect dl {max-height:188px;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<input type="text" name="username" placeholder="请选择评论人" class="layui-input picker-admin" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:300px;">
|
||||
<input type="text" name="keywords" placeholder="关键字,输入评论内容" class="layui-input"/>
|
||||
</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>
|
||||
<div>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<h3>任务评论</h3>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const moduleInit = ['tool','tablePlus','oaPicker'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,table = layui.tablePlus,tool=layui.tool, work = layui.oaSchedule;
|
||||
layui.commentTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'评论列表'
|
||||
,url: "/project/task/comment"
|
||||
,cellMinWidth: 80
|
||||
,is_excel:true
|
||||
,height: 'full-110'
|
||||
,cols: [[ //表头
|
||||
{field: 'id', title: '序号',fixed: 'left', width:80, align:'center'}
|
||||
,{field: 'content', title: '评论内容'}
|
||||
,{field: 'project', title: '关联项目&任务', width:300,templet:function(d){
|
||||
var html='';
|
||||
if(d.labor_type==0){
|
||||
html='<span class="layui-color-'+d.labor_type+'">-</span>';
|
||||
}
|
||||
else if(d.module =='project'){
|
||||
html='<span class="green">『项目』</span><a data-href="/project/index/view/id/'+d.topic_id+'.html" class="side-a">'+d.topic_name+'</a>';
|
||||
}
|
||||
else{
|
||||
html='<span class="blue">『任务』</span><a data-href="/project/task/view/id/'+d.topic_id+'.html" class="side-a">'+d.topic_name+'</a>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
,{field: 'to_names', title: '@关联人', width:160}
|
||||
,{field: 'admin_name', title: '评论人', align:'center',width:80}
|
||||
,{field: 'create_time', title: '评论时间', align:'center',width:150}
|
||||
,{field: 'right', title: '操作',fixed:'right', width:90, align:'center',templet:function(d){
|
||||
if(d.read==0){
|
||||
return '<button class="layui-btn layui-btn-xs layui-btn-normal" lay-event="read">设为已读</button>';
|
||||
}
|
||||
else if(d.read==2){
|
||||
return '<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</button>';
|
||||
}
|
||||
else{
|
||||
return '-';
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('tool(test)', function(obj){
|
||||
var data = obj.data;
|
||||
if (obj.event === 'read') {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.commentTable.reload();
|
||||
}
|
||||
}
|
||||
tool.post("/project/api/read_comment", { id: data.id }, callback);
|
||||
}
|
||||
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("/project/api/delete_comment", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
return;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,146 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
<!-- 主体 -->
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-unselect dl {
|
||||
max-height: 188px;
|
||||
}
|
||||
</style>
|
||||
{/block}
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<div class="gg-form-bar border-t border-x">
|
||||
<form id="taskForm" class="layui-form" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<select name="status" lay-filter="status">
|
||||
<option value="">任务状态</option>
|
||||
{volist name=":get_task_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="priority" lay-filter="priority">
|
||||
<option value="">优先级</option>
|
||||
{volist name=":get_priority()" 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="work_id" lay-filter="cate">
|
||||
<option value="">工作类型</option>
|
||||
{volist name=":get_base_data('WorkCate')" id="vo"}
|
||||
<option value="{$vo.id}">{$vo.title}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<input type="text" name="project_name" placeholder="所属项目" readonly class="layui-input picker-oa" data-types="project" autocomplete="off" />
|
||||
<input name="project_id" style="display: none;" value="" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:160px;">
|
||||
<input type="text" name="director" placeholder="任务负责人,可多选" readonly class="layui-input picker-admin" data-type="2" autocomplete="off" />
|
||||
<input name="director_uid" style="display: none;" value="" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:240px;">
|
||||
<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>
|
||||
</div>
|
||||
<table class="layui-hide" id="task" lay-filter="task"></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','oaPicker'];
|
||||
function gouguInit() {
|
||||
var table = layui.tablePlus, form = layui.form, tool = layui.tool;
|
||||
|
||||
layui.taskTable = table.render({
|
||||
elem: '#task',
|
||||
title: '任务列表',
|
||||
toolbar: '#toolbarDemo',
|
||||
is_excel:true,
|
||||
cellMinWidth: 80,
|
||||
url: "/project/task/datalist", //数据接口
|
||||
height: 'full-114',
|
||||
cols: [[
|
||||
{field: 'id', title: '任务编号', width: 80, align: 'center', fixed: 'left', templet: function (d) {
|
||||
return 'T' + d.id;
|
||||
}}
|
||||
,{ field: 'status', title: '任务状态', align: 'center', width: 90, templet: function (d) {
|
||||
var html = '<span class="check-status-color-' + d.status + '">『' + d.status_name + '』</span>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
, { field: 'cate_name', title: '工作类型', width: 90, align: 'center'}
|
||||
,{field:'title',title: '任务主题', minWidth: 300,templet:function(d){
|
||||
var html = '<span class="layui-badge layui-bg-'+d.priority+'">'+d.priority_name+'</span> <a data-href="/project/task/view/id/'+d.id+'.html" class="side-a">'+d.title+'</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){
|
||||
var html = d.end_time;
|
||||
if(d.delay>0){
|
||||
html+= '<span class="red ml-1" style="font-size:12px;">逾期'+d.delay+'天</span>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
,{field: 'right', title: '操作',fixed:'right', width:90, align:'center',templet:function(d){
|
||||
var html='<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 layui-btn-danger" lay-event="del">删除</button></div>';
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
//触发事件
|
||||
table.on('toolbar(task)', function(obj){
|
||||
if(obj.event === 'add'){
|
||||
tool.side('/project/task/add');
|
||||
return;
|
||||
}
|
||||
});
|
||||
table.on('tool(task)', function(obj){
|
||||
if(obj.event === 'view'){
|
||||
tool.side('/project/task/view/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) {
|
||||
layui.taskTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/project/task/del", { id: obj.data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,234 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-unselect dl {max-height:188px;}
|
||||
</style>
|
||||
{/block}
|
||||
<!-- 主体 -->
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<form class="layui-form gg-form-bar border-x border-t" lay-filter="barsearchform">
|
||||
<div class="layui-input-inline" style="width:180px;">
|
||||
<input type="text" class="layui-input tool-time" data-range="至" placeholder="选择时间区间" readonly name="range_time">
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:100px;">
|
||||
<input type="text" name="username" placeholder="请选择员工" class="layui-input picker-admin" readonly />
|
||||
<input type="text" name="uid" value="" style="display:none" />
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:300px;">
|
||||
<input type="text" name="keywords" placeholder="关键字,输入工作内容" class="layui-input"/>
|
||||
</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>
|
||||
<div>
|
||||
<table class="layui-hide" id="test" lay-filter="test"></table>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<h3>任务工时</h3>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const is_leader = '{$is_leader}';
|
||||
const role_auth = '{$role_auth}';
|
||||
const hour_auth = '{$hour_auth}';
|
||||
const moduleInit = ['tool','tablePlus','oaPicker','oaSchedule'];
|
||||
function gouguInit() {
|
||||
var form = layui.form,table = layui.tablePlus,tool=layui.tool, work = layui.oaSchedule,laydate = layui.laydate;
|
||||
layui.scheduleTable = table.render({
|
||||
elem: '#test'
|
||||
,toolbar: '#toolbarDemo'
|
||||
,title:'工时列表'
|
||||
,url: "/project/task/hour"
|
||||
,cellMinWidth: 80
|
||||
,is_excel:true
|
||||
,height: 'full-114'
|
||||
,cols: [[ //表头
|
||||
{field: 'id', title: '序号',fixed: 'left', width:80, align:'center'}
|
||||
,{field: 'labor_type_string', title: '工作类型', align:'center',width:90,templet:function(d){
|
||||
var html='';
|
||||
if(d.labor_type==0){
|
||||
html='<span class="layui-color-'+d.labor_type+'">-</span>';
|
||||
}
|
||||
else if(d.labor_type == 1){
|
||||
html='<span class="layui-color-'+d.labor_type+'">案头工作</span>';
|
||||
}
|
||||
else if(d.labor_type == 2){
|
||||
html='<span class="layui-color-'+d.labor_type+'">外勤工作</span>';
|
||||
}
|
||||
return html;
|
||||
}}
|
||||
,{field: 'work_cate', title: '工作类别', align:'center',width:80}
|
||||
,{field: 'start_time', title: '工作时间范围', align:'center',width:186,templet:function(d){
|
||||
var html=d.start_time+'至'+d.end_time;
|
||||
return html;
|
||||
}}
|
||||
,{field: 'name', title: '执行人', align:'center',width:80}
|
||||
,{field: 'labor_time', title: '工时', align:'center',width:80}
|
||||
,{field: 'title', title: '工作内容'}
|
||||
,{field: 'task', title: '关联任务', width:200}
|
||||
,{field: 'project', title: '关联项目', width:180}
|
||||
,{field: 'create_time', title: '记录时间', align:'center',width:150}
|
||||
,{field: 'right', title: '操作',fixed:'right', width:180, align:'center',templet:function(d){
|
||||
var html='<div class="layui-btn-group">';
|
||||
if(hour_auth==2 && d.admin_id==login_admin){
|
||||
//开放员工自己调整
|
||||
html+='<button class="layui-btn layui-btn-xs layui-bg-orange" lay-event="time">调整工时</button>';
|
||||
html+='<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</button>';
|
||||
}
|
||||
if(hour_auth==3 && is_leader > 0){
|
||||
//开放部门负责人调整
|
||||
html+='<button class="layui-btn layui-btn-xs layui-bg-orange" lay-event="time">调整工时</button>';
|
||||
html+='<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</button>';
|
||||
}
|
||||
if(hour_auth==4 && role_auth > 0){
|
||||
//开放日常办公数据管理员调整
|
||||
html+='<button class="layui-btn layui-btn-xs layui-bg-orange" lay-event="time">调整工时</button>';
|
||||
html+='<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</button>';
|
||||
}
|
||||
if(d.admin_id==login_admin){
|
||||
html+='<button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button>';
|
||||
}
|
||||
html+='<button class="layui-btn layui-btn-xs layui-btn-normal" lay-event="view">查看</button>';
|
||||
html+='</div>';
|
||||
return html;
|
||||
}}
|
||||
]]
|
||||
});
|
||||
//更改工时
|
||||
table.on('tool(test)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'time'){
|
||||
var content='<form class="layui-form" style="width:568px">\
|
||||
<table class="layui-table" style="margin:15px 15px 0;">\
|
||||
<tr>\
|
||||
<td class="layui-td-gray-2">工作时间范围<font>*</font></td>\
|
||||
<td>\
|
||||
<input id="start_time_a" name="start_time_a" style="width:120px; display:inline-block;" autocomplete="off" class="layui-input" value="" readonly lay-verify="required" lay-reqText="请选择"><div style="display: inline-block; margin-left:5px; width: 80px;"><select lay-filter="start_time_b" id="start_time_b"></select></div> 至 <input id="end_time_a" name="end_time_a" style="width:120px; display:inline-block;" autocomplete="off" class="layui-input" value="" readonly lay-verify="required" lay-reqText="请选择"><div style="display: inline-block; margin-left:5px; width: 80px;"><select lay-filter="end_time_b" id="end_time_b"></select></div>\
|
||||
</td>\
|
||||
</tr>\
|
||||
</table>\
|
||||
</form>';
|
||||
layer.open({
|
||||
type:1,
|
||||
title:'调整工时',
|
||||
area:['600px','388px'],
|
||||
content:content,
|
||||
success:function(){
|
||||
//日期时间范围
|
||||
laydate.render({
|
||||
elem: '#start_time_a',
|
||||
type: 'date',
|
||||
max:0,
|
||||
format: 'yyyy-MM-dd',
|
||||
showBottom: false,
|
||||
done:function(a,b,c){
|
||||
$('#end_time_a').val(a);
|
||||
}
|
||||
});
|
||||
|
||||
//日期时间范围
|
||||
laydate.render({
|
||||
elem: '#end_time_a',
|
||||
type: 'date',
|
||||
max:0,
|
||||
format: 'yyyy-MM-dd',
|
||||
showBottom: false,
|
||||
done:function(a,b,c){
|
||||
$('#start_time_a').val(a);
|
||||
}
|
||||
});
|
||||
$('#start_time_b,#end_time_b').empty();
|
||||
|
||||
var hourArray=[];
|
||||
for(var h=0;h<24;h++){
|
||||
var t=h<10?'0'+h:h
|
||||
var t_1=t+':00',t_2=t+':15',t_3=t+':30',t_4=t+':45';
|
||||
hourArray.push(t_1,t_2,t_3,t_4);
|
||||
}
|
||||
|
||||
var html_1='', html_2='',def_h1='09:00',def_h2='09:30';
|
||||
for(var s=0;s<hourArray.length;s++){
|
||||
var check_1='',check_2='';
|
||||
if(hourArray[s]==def_h1){
|
||||
check_1='selected';
|
||||
}
|
||||
if(hourArray[s]==def_h2){
|
||||
check_2='selected';
|
||||
}
|
||||
html_1 += '<option value="'+hourArray[s]+'" '+check_1+'>'+hourArray[s]+'</option>';
|
||||
html_2 += '<option value="'+hourArray[s]+'" '+check_2+'>'+hourArray[s]+'</option>';
|
||||
}
|
||||
|
||||
$('#start_time_b').append(html_1);
|
||||
$('#end_time_b').append(html_2);
|
||||
form.render();
|
||||
|
||||
},
|
||||
btn: ['确定提交'],
|
||||
btnAlign: 'c',
|
||||
yes: function(idx){
|
||||
let start_time_a = $('#start_time_a').val();
|
||||
let end_time_a = $('#end_time_a').val();
|
||||
let start_time_b = $('#start_time_b').val();
|
||||
let end_time_b = $('#end_time_b').val();
|
||||
if(start_time_a=='' || end_time_a==''){
|
||||
layer.msg('请选择工作时间范围');
|
||||
return;
|
||||
}
|
||||
$.ajax({
|
||||
url: "/oa/api/update_schedule",
|
||||
type:'post',
|
||||
data:{
|
||||
id:data.id,
|
||||
admin_id:data.admin_id,
|
||||
start_time_a:start_time_a,
|
||||
end_time_a:end_time_a,
|
||||
start_time_b:start_time_b,
|
||||
end_time_b:end_time_b
|
||||
},
|
||||
success:function(e){
|
||||
layer.msg(e.msg);
|
||||
if(e.code==0){
|
||||
layer.close(idx);
|
||||
layui.scheduleTable.reload();
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
else if(obj.event === 'edit'){
|
||||
work.add(0, obj.data);
|
||||
}
|
||||
else if(obj.event === 'view'){
|
||||
work.view(obj.data);
|
||||
}
|
||||
else if(obj.event === 'del'){
|
||||
layer.confirm('您确定要删除该工作记录?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
}, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.msg(e.msg);
|
||||
if (e.code == 0) {
|
||||
layui.scheduleTable.reload();
|
||||
}
|
||||
}
|
||||
tool.delete("/oa/schedule/del", { id: obj.data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /脚本 -->
|
||||
@@ -0,0 +1,255 @@
|
||||
{extend name="../../base/view/common/base" /}
|
||||
{block name="style"}
|
||||
<style>
|
||||
.layui-tab-title .layui-this{background-color:#fff;}
|
||||
.layui-tab-card,.layui-card{box-shadow:0 0 0 0 rgb(0 0 0 / 10%); border-radius:0; border-top:none;}
|
||||
.layui-card-tips {color: #969696;}
|
||||
.layui-card-value {padding: 4px 0 16px;font-size: 18px;color: #1E9FFF;}
|
||||
|
||||
.content-content{line-height:1.6;}
|
||||
.content-content p{margin-bottom:6px;}
|
||||
.content-content img{max-width:100%; padding:8px; box-sizing: border-box;}
|
||||
|
||||
.log-item i{font-weight:800; color:#323232}
|
||||
.log-content strong{margin:0 4px; color:#323232}
|
||||
.layui-unselect dl {max-height:188px;}
|
||||
.layui-table td.table-content img{max-width:100%; height:auto;}
|
||||
</style>
|
||||
{/block}
|
||||
{block name="body"}
|
||||
<div class="p-page">
|
||||
<h3 class="pb-3">任务详情</h3>
|
||||
<table class="layui-table layui-table-form" id="task">
|
||||
<tr>
|
||||
<td class="layui-td-gray">任务主题</td>
|
||||
<td colspan="3" class="click-edit" data-types="text" data-field="title">{$detail.title|default=''}</td>
|
||||
<td class="layui-td-gray">工作类型</td>
|
||||
<td class="click-edit" data-types="picker" data-field="work_id" data-type="1" data-picker="workcate">{$detail.cate_name|default='-'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">负责人员</td>
|
||||
<td class="click-edit" data-types="adminpicker" data-field="director_uid" data-type="1" data-ids="{$detail.director_uid}" data-names="{$detail.director_name|default=''}">{$detail.director_name|default=''}</td>
|
||||
<td class="layui-td-gray">协作人</td>
|
||||
<td colspan="3" class="click-edit" data-types="adminpicker" data-field="assist_admin_ids" data-type="2" data-ids="{$detail.assist_admin_ids}" data-names="{$detail.assist_admin_names|default=''}">{$detail.assist_admin_names|default=''}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">优先级</td>
|
||||
<td class="click-edit" data-types="dropdown" data-field="priority" data-array="priority" data-text="{$detail.priority}">{$detail.priority_name}</td>
|
||||
<td class="layui-td-gray">关联项目</td>
|
||||
<td colspan="3" class="click-edit" data-types="picker" data-field="project_id" data-type="1" data-picker="project">{$detail.project_name|default='-'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">完成进度</td>
|
||||
<td class="click-edit" data-types="num" data-field="done_ratio" data-text="{$detail.done_ratio}" data-min="0" data-max="100">{$detail.done_ratio|default='0'}%</td>
|
||||
<td class="layui-td-gray">估计结束日期</td>
|
||||
<td class="click-edit" data-types="oadate" data-field="end_time">{$detail.end_time|date='Y-m-d'}</span>{gt name="$detail.delay" value="0"}<span class="red">『逾期 {$detail.delay}天』</span>{/gt}</td>
|
||||
<td class="layui-td-gray-3">估计工作量(工时)</td>
|
||||
<td class="click-edit" data-types="num" data-field="plan_hours">{$detail.plan_hours|default=''}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">任务状态</td>
|
||||
<td class="click-edit" data-types="dropdown" data-field="status" data-array="status" data-text="{$detail.status}">{$detail.status_name}</td>
|
||||
<td class="layui-td-gray-2">实际完成日期</td>
|
||||
<td>{eq name="$detail.over_time" value="0"}-{else/}{$detail.over_time|date='Y-m-d'}{/eq}</td>
|
||||
<td class="layui-td-gray">实际工时</td>
|
||||
<td>{eq name="$detail.work_hours" value="0"}-{else/}{$detail.work_hours}{/eq}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="layui-td-gray">相关附件 <button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">附件上传</button></td>
|
||||
<td colspan="5">
|
||||
<div class="layui-row" id="uploadBox">
|
||||
<input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids|default=''}">
|
||||
{notempty name="$file_array"}
|
||||
{volist name="$file_array" id="vo"}
|
||||
<div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
|
||||
{/volist}
|
||||
{/notempty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6" class="click-edit" data-types="editor" data-field="content" data-target="content" style="background-color:#FAFAFA;"><strong>任务描述</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6" id="content" class="table-content">{$detail.content|raw}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<div class="layui-tab layui-tab-card" style="margin:0;" lay-filter="docDemoTabBrief">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">工作记录({$detail.schedules})</li>
|
||||
<li>员工评论(<span id="commentTotal">0</span>)</li>
|
||||
<li>操作日志(<span id="logListTotal">0</span>)</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content py-1 px-3" style="background-color:#fff;">
|
||||
<div class="layui-tab-item layui-show py-2">
|
||||
<table class="layui-hide" id="table_work" lay-filter="table_work"></table>
|
||||
</div>
|
||||
<div class="layui-tab-item comment-list">
|
||||
<div class="comment-input my-2">
|
||||
<input type="text" id="commentInput" readonly placeholder="发表一下你的看法" class="layui-input" value="">
|
||||
</div>
|
||||
<div id="commentBox"></div>
|
||||
</div>
|
||||
<div class="layui-tab-item logs-list">
|
||||
<div id="logList" class="log-timeline p-3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/html" id="toolbarDemo">
|
||||
<div>
|
||||
<div class="layui-input-inline" style="margin-right:12px;"><strong>工作日志</strong></div><div class="layui-input-inline"><button class="layui-btn layui-btn-xs" type="button" lay-event="add">+ 添加工作日志</button></div>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
<!-- /主体 -->
|
||||
|
||||
<!-- 脚本 -->
|
||||
{block name="script"}
|
||||
<script>
|
||||
const admin_id = '{$detail.admin_id}';
|
||||
const detail_id = '{$detail.id}';
|
||||
const status_array = {:json_encode(get_task_status(1),JSON_UNESCAPED_UNICODE)};
|
||||
const priority_array = {:json_encode(get_priority(1),JSON_UNESCAPED_UNICODE)};
|
||||
const moduleInit = ['tool','oaPicker','oaEdit','oaSchedule','oaComment','uploadPlus'];
|
||||
function gouguInit() {
|
||||
const oaEdit = layui.oaEdit,work = layui.oaSchedule,comment = layui.oaComment, uploadPlus = layui.uploadPlus, tool = layui.tool, table = layui.table;
|
||||
|
||||
oaEdit.log('logList','Task',detail_id);
|
||||
|
||||
comment.init({
|
||||
"box":'commentBox',//容器id
|
||||
"input": 'commentInput',
|
||||
"topic_id":detail_id,
|
||||
"module": 'task',
|
||||
});
|
||||
|
||||
let edit_callback = function(e){
|
||||
layer.msg(e.msg);
|
||||
if(e.code==0){
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
//附件上传
|
||||
var attachment = new uploadPlus({
|
||||
"target":'uploadBtn',
|
||||
"targetBox":'uploadBox',
|
||||
"attachment":{
|
||||
"type":1,//0ajax多文件模式,1ajax单文件单记录模式
|
||||
"uidDelete":true,//是否开启只有上传人自己才能删除自己的附件
|
||||
"ajaxSave":function(res){
|
||||
tool.post('/project/api/add_file',{'topic_id':detail_id,'file_id':res.data.id,'file_name': res.data.name, 'module': 'task'},edit_callback);
|
||||
},
|
||||
"ajaxDelete":function(file_id){
|
||||
tool.delete('/project/api/delete_file', {id: file_id}, edit_callback);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//快捷编辑
|
||||
oaEdit.init({
|
||||
box:'task',
|
||||
id:detail_id,
|
||||
url: "/project/task/add",
|
||||
dropdown:{
|
||||
status:status_array,
|
||||
priority:priority_array
|
||||
}
|
||||
});
|
||||
|
||||
//工作记录相关
|
||||
layui.scheduleTable = table.render({
|
||||
elem: "#table_work"
|
||||
, toolbar: "#toolbarDemo"
|
||||
,url: "/oa/api/get_schedule"
|
||||
,page: true
|
||||
,limit: 20
|
||||
,where:{task_id:detail_id}
|
||||
,cellMinWidth: 80
|
||||
,cols: [[
|
||||
{field:'id',width:80, title: 'ID号', align:'center'}
|
||||
,{field:'title',title: '工作内容',minWidth:240}
|
||||
,{field: 'name', title: '所属人员', align:'center',width:80}
|
||||
,{field: 'start_time', title: '工作时间范围', align:'center',width:260,templet:function(d){
|
||||
var html=d.start_time+' 至 '+d.end_time;
|
||||
return html;
|
||||
}}
|
||||
,{field: 'labor_type_string', title: '工作类型', align:'center',width:80}
|
||||
,{field: 'labor_time', title: '工时', align:'center',width:80}
|
||||
,{field:'create_time', title: '创建时间',width:150,align:'center'}
|
||||
,{width:90,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>';
|
||||
if(d.admin_id !== login_admin){
|
||||
return btn1;
|
||||
}
|
||||
else{
|
||||
var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
|
||||
html = '<div class="layui-btn-group">'+btn1+btn2+'</div>';
|
||||
return html;
|
||||
}
|
||||
}}
|
||||
]]
|
||||
});
|
||||
|
||||
table.on('toolbar(table_work)',function (obj) {
|
||||
if (obj.event === 'add') {
|
||||
work.add(detail_id,{'id':0});
|
||||
}
|
||||
});
|
||||
table.on('tool(table_work)',function (obj) {
|
||||
var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
|
||||
var data = obj.data;
|
||||
if (obj.event === 'view') {
|
||||
work.view(data);
|
||||
return;
|
||||
}
|
||||
if (obj.event === 'edit') {
|
||||
work.add(data.task_id,data);
|
||||
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("/project/task/del", { id: data.id }, callback);
|
||||
layer.close(index);
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
//工作记录相关
|
||||
$('.add-schedule').on('click', function () {
|
||||
work.add(detail_id,{'id':0});
|
||||
})
|
||||
//回复
|
||||
$('#comment_task_' + detail_id).on('click', '[data-event="replay"]', function () {
|
||||
let pid = $(this).data('id');
|
||||
let to_uid = $(this).data('uid');
|
||||
let to_unames = $(this).data('unames');
|
||||
comment.textarea(0,detail_id,'task','',pid,to_uid,to_unames);
|
||||
})
|
||||
//编辑
|
||||
$('#comment_task_' + detail_id).on('click', '[data-event="edit"]', function () {
|
||||
let id = $(this).data('id');
|
||||
let content = $('#comment_' + id).data('content');
|
||||
comment.textarea(id, detail_id, 'task', content,0,0,'');
|
||||
})
|
||||
|
||||
//删除
|
||||
$('#comment_task_' + detail_id).on('click', '[data-event="del"]', function () {
|
||||
let id = $(this).data('id');
|
||||
comment.del(id, detail_id, 'task');
|
||||
})
|
||||
}
|
||||
</script>
|
||||
{/block}
|
||||
Reference in New Issue
Block a user