first commit

This commit is contained in:
2025-06-25 10:53:11 +08:00
commit 9f374011ae
1240 changed files with 181139 additions and 0 deletions
+307
View File
@@ -0,0 +1,307 @@
<style>
.layui-form-item.layui-form-pane{margin-bottom:8px;}
.layui-form-pane .layui-form-label {width:60px; padding:8px;}
.layui-form-pane .layui-form-label.label-index,.layui-form-pane .layui-form-label.label-first {width:80px;}
.layui-form-item .layui-input-inline {margin-right:4px;}
.layui-form-item .layui-inline {margin-right:0; margin-bottom:0;}
</style>
<form class="layui-form page-content p-4">
<h3 class="h3-title">新建项目</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">项目名称<font>*</font></td>
<td>
<input type="text" name="name" lay-verify="required" lay-reqText="请输入项目名称" placeholder="请输入项目名称" class="layui-input" value="">
</td>
<td class="layui-td-gray">项目简称<font>*</font></td>
<td>
<input type="text" name="name_short" lay-verify="required" lay-reqText="请输入项目简称" placeholder="请输入项目简称" class="layui-input" value="">
</td>
<td class="layui-td-gray-2">计划完成周期</td>
<td id="date">
<div class="layui-input-inline" style="width:100px;">
<input type="text" id="start_time" name="start_time" readonly lay-reqText="请选择开始时间" placeholder="请选择" class="layui-input" value="">
</div>
-
<div class="layui-input-inline" style="width:100px;">
<input type="text" id="end_time" name="end_time" readonly lay-reqText="请选择结束时间" placeholder="请选择" class="layui-input" value="">
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">负责人<font>*</font></td>
<td>
<input type="text" name="director_name" placeholder="请选择项目负责人" readonly class="layui-input picker-one" value="{$user_info.name}">
<input type="hidden" name="director_uid" lay-verify="required" readonly lay-reqText="请选择项目负责人" value="{$user_info.id}">
</td>
<td class="layui-td-gray">项目成员<span style="color: red">*</span></td>
<td>
<input type="text" id="team_admin_names" name="team_admin_names" placeholder="请选择项目成员" readonly class="layui-input picker-more" value="{$user_info.name}">
<input type="hidden" id="team_admin_ids" name="team_admin_ids" class="layui-input" value="{$user_info.id}">
</td>
<td class="layui-td-gray">项目类型<font>*</font></td>
<td>
<!-- <select name="product_id" lay-verify="required" lay-reqText="请选择关联产品">-->
<select name="project_type" lay-verify="" lay-reqText="是否是内部项目">
<option value="">请选择项目类型</option>
<option value="1">申报项目</option>
<option value="2">维护保障项目</option>
<option value="3">开发项目【外部】</option>
<option value="4">开发项目【内部】</option>
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">关联产品</td>
<td>
<!-- <select name="product_id" lay-verify="required" lay-reqText="请选择关联产品">-->
<select name="product_id" lay-verify="" lay-reqText="请选择关联产品">
<option value="">请选择关联产品</option>
{volist name=":get_product()" id="v"}
<option value="{$v.id}">{$v.name}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">关联客户</td>
<td>
<select name="business_id" id="business_id" lay-verify="" lay-reqText="请选择客户">
<option value="">请选择客户</option>
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">项目简介<span style="color: red">*</span></td>
<td colspan="5">
<textarea name="content" class="layui-textarea" lay-verify="required" lay-reqText="请完善项目简介"></textarea>
</td>
</tr>
<tr>
<td colspan="6" class="layui-td-gray" style="text-align:left; font-weight:600">项目阶段<font>*</font></td>
</tr>
<tr>
<td colspan="6">
<div id="flowList">
{volist name = "$section" id="vo" key="k"}
{eq name="key" value="0"}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label label-first">第{$key+1}阶段</label>
<div class="layui-input-inline" style="width:150px;">
<select name="flowName[]" lay-filter="flowName" lay-reqText="请选择阶段名称">
<option value="">请选择</option>
{volist name = "section" id="voo" key="kk"}
<option value="{$voo}" {eq name="$kk" value ="$k"} selected{/eq}>{$voo}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">负责人</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="chargeNames[]" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-reqText="请选择阶段负责人" value="{$user_info.name}">
<input type="hidden" name="chargeIds[]" value="{$user_info.id}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">成员</label>
<div class="layui-input-inline" style="width:168px;">
<input type="text" name="membeNames[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-reqText="请选择阶段成员">
<input type="hidden" name="membeIds[]" value="{$user_info.id}">
</div>
</div>
</div>
{else/}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label label-index">第{$key+1}阶段</label>
<div class="layui-input-inline" style="width:150px;">
<select name="flowName[]" lay-filter="flowName" lay-reqText="请选择阶段名称">
<option value="">请选择</option>
{volist name = "section" id="voo" key="kk"}
<option value="{$voo}" {eq name="$kk" value ="$k"} selected{/eq}>{$voo}</option>
{/volist}
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">负责人</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="chargeNames[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-reqText="请选择阶段负责人">
<input type="hidden" name="chargeIds[]" value="{$user_info.id}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">成员</label>
<div class="layui-input-inline" style="width:168px;">
<input type="text" name="membeNames[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-reqText="请选择阶段成员">
<input type="hidden" name="membeIds[]" value="{$user_info.id}">
</div>
</div>
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>
</div>
{/eq}
{/volist}
</div>
<span class="layui-btn layui-btn-xs layui-btn-normal add-flow" data-type="0">+ 添加固定阶段</span><span class="layui-btn layui-btn-xs add-flow" data-type="1">+ 添加自定义阶段</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、项目开始流转前,请确保已完善好各项目信息。</p>
<p>2、项目开始流转后,只有项目管理员,创建人和负责人可修改项目信息。</p>
<p>3、项目管理员,创建人和负责人可以修改项目阶段的信息,但是修改完成后已流转的项目阶段需要重新走一遍流程。</p>
</div>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<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>
<script>
function openInit() {
var form = layui.form,
layer = layui.layer,
tool = layui.tool,
laydate = layui.laydate,
employeepicker = layui.employeepicker;
form.render();
function fetchCustomers() {
tool.get('/business/index/getlistsmore', {}, function(response) {
if (response.code == 1) {
var customers = response.data;
var customerSelect = document.getElementById('business_id');
customers.forEach(function(customer) {
var option = document.createElement('option');
option.value = customer.id;
option.text = customer.name;
customerSelect.appendChild(option);
});
form.render('select');
} else {
layer.msg('获取客户数据失败');
}
});
}
fetchCustomers();
form.render();
//日期范围
laydate.render({
elem: '#date',
range: ['#start_time', '#end_time']
});
//日期
lay('.select-time-range').each(function () {
laydate.render({
elem: this,
range: '到',
trigger: 'click'
});
});
$('.add-flow').on('click',function(){
let len = $('#flowList').find('.layui-form-item').length;
let index = len+1;
let type = $(this).data('type');;
let tem=['<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'阶段</label>\
<div class="layui-input-inline" style="width:150px;">\
<select name="flowName[]" lay-filter="flowName" lay-verify="required" lay-reqText="请选择阶段名称">\
<option value="">请选择</option>\
<option value="调研阶段">调研阶段</option>\
<option value="报价阶段">报价阶段</option>\
<option value="招投标阶段">招投标阶段</option>\
<option value="签约阶段">签约阶段</option>\
<option value="研发阶段">研发阶段</option>\
<option value="测试阶段">测试阶段</option>\
<option value="交付阶段">交付阶段</option>\
<option value="项目完结">项目完结</option>\
</select>\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">负责人</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="chargeName[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-verify="required" lay-reqText="请选择阶段负责人">\
<input type="hidden" name="chargeIds[]" value="{$user_info.id}">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">成员</label>\
<div class="layui-input-inline" style="width:168px;">\
<input type="text" name="membeNames[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-verify="required" lay-reqText="请选择阶段成员">\
<input type="hidden" name="membeIds[]" value="{$user_info.id}">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>',
'<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'阶段</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="flowName[]" autocomplete="off" placeholder="输入阶段名称" class="layui-input" lay-verify="required" lay-reqText="请输入阶段名称">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">负责人</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="chargeNames[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-verify="required" lay-reqText="请选择阶段负责人">\
<input type="hidden" name="chargeIds[]" value="{$user_info.id}">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">成员</label>\
<div class="layui-input-inline" style="width:168px;">\
<input type="text" name="membeNames[]" value="{$user_info.name}" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-verify="required" lay-reqText="请选择阶段成员">\
<input type="hidden" name="membeIds[]" value="{$user_info.id}">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>'
];
$('#flowList').append(tem[type]);
form.render();
//日期
lay('.select-time-range').each(function () {
laydate.render({
elem: this,
range: '到',
trigger: 'click'
});
});
});
$('#flowList').on('click','.layui-btn-danger',function(){
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if(items>0){
$('.label-index').each(function(index,item){
$(this).html('第'+(index+2)+'阶段');
})
}
});
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.close(1000);
}
}
tool.post("/project/index/add",data.field,callback);
return false;
});
}
</script>
+197
View File
@@ -0,0 +1,197 @@
<style>
.layui-form-item.layui-form-pane{margin-bottom:8px;}
.layui-form-pane .layui-form-label {width:60px; padding:8px;}
.layui-form-pane .layui-form-label.label-index,.layui-form-pane .layui-form-label.label-first {width:80px;}
.layui-form-item .layui-input-inline {margin-right:4px;}
.layui-form-item .layui-inline {margin-right:0; margin-bottom:0;}
</style>
<form class="layui-form page-content p-4">
<h3 class="pb-3">编辑项目阶段</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">项目名称<font>*</font></td>
<td>{$detail.name}</td>
<td class="layui-td-gray-2">计划完成周期</td>
<td>{$detail.start_time|date='Y-m-d'} - {$detail.end_time|date='Y-m-d'}</td>
</tr>
<tr>
<td class="layui-td-gray">负责人</td>
<td>{$detail.director_name}</td>
<td class="layui-td-gray">项目成员</td>
<td colspan="3">{$detail.team_admin_names}</td>
</tr>
<tr>
<td class="layui-td-gray">项目简介</td>
<td colspan="3">{$detail.content}</td>
</tr>
<tr>
<td colspan="8" class="layui-td-gray" style="text-align:left; font-weight:600">项目阶段</td>
</tr>
<tr>
<td colspan="8">
<div id="flowList">
{volist name="$step_array" id="vo"}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label {$key==0?'label-first':'label-index'}">第{$key+1}阶段</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="flowName[]" autocomplete="off" value="{$vo.flow_name}" placeholder="输入阶段名称" class="layui-input" lay-verify="required" lay-reqText="请输入阶段名称">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">负责人</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="chargeNames[]" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-verify="required" lay-reqText="请选择阶段负责人" value="{$vo.check_name}">
<input type="hidden" name="chargeIds[]" value="{$vo.flow_uid}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">成员</label>
<div class="layui-input-inline" style="width:168px;">
<input type="text" name="membeNames[]" value="{$vo.flow_names}" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-verify="required" lay-reqText="请选择阶段成员">
<input type="hidden" name="membeIds[]" value="{$vo.flow_ids}">
</div>
</div>
{$key==0?'':'<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>'}
</div>
{/volist}
</div>
<span class="layui-btn layui-btn-xs layui-btn-normal add-flow" data-type="0">+ 添加固定阶段</span><span class="layui-btn layui-btn-xs add-flow" data-type="1">+ 添加自定义阶段</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、项目开始流转前,请确保已完善好各项目信息。</p>
<p>2、项目开始流转后,只有项目负责人可修改项目信息。</p>
<p>3、项目负责人可以修改项目阶段的信息,但是修改完成后已流转的项目阶段需要重新走一遍流程。</p>
</div>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<input type="hidden" name="id" value="{$detail.id}" />
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
<script>
function openInit() {
var form = layui.form,
layer = layui.layer,
tool = layui.tool,
laydate = layui.laydate,
employeepicker = layui.employeepicker;
form.render();
//日期范围
laydate.render({
elem: '#date',
range: ['#start_time', '#end_time']
});
//日期
lay('.select-time-range').each(function () {
laydate.render({
elem: this,
range: '到',
trigger: 'click'
});
});
$('.add-flow').on('click',function(){
let len = $('#flowList').find('.layui-form-item').length;
let index = len+1;
let type = $(this).data('type');;
let tem=['<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'阶段</label>\
<div class="layui-input-inline" style="width:120px;">\
<select name="flowName[]" lay-filter="flowName" lay-verify="required" lay-reqText="请选择阶段名称">\
<option value="">请选择</option>\
<option value="调研阶段">调研阶段</option>\
<option value="报价阶段">报价阶段</option>\
<option value="招投标阶段">招投标阶段</option>\
<option value="签约阶段">签约阶段</option>\
<option value="研发阶段">研发阶段</option>\
<option value="测试阶段">测试阶段</option>\
<option value="交付阶段">交付阶段</option>\
<option value="项目完结">项目完结</option>\
</select>\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">负责人</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="chargeName[]" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-verify="required" lay-reqText="请选择阶段负责人">\
<input type="hidden" name="chargeIds[]">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">成员</label>\
<div class="layui-input-inline" style="width:168px;">\
<input type="text" name="membeNames[]" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-verify="required" lay-reqText="请选择阶段成员">\
<input type="hidden" name="membeIds[]">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>',
'<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'阶段</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="flowName[]" autocomplete="off" placeholder="输入阶段名称" class="layui-input" lay-verify="required" lay-reqText="请输入阶段名称">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">负责人</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="chargeNames[]" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-verify="required" lay-reqText="请选择阶段负责人">\
<input type="hidden" name="chargeIds[]">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">成员</label>\
<div class="layui-input-inline" style="width:168px;">\
<input type="text" name="membeNames[]" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-verify="required" lay-reqText="请选择阶段成员">\
<input type="hidden" name="membeIds[]">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>'
];
$('#flowList').append(tem[type]);
form.render();
//日期
lay('.select-time-range').each(function () {
laydate.render({
elem: this,
range: '到',
trigger: 'click'
});
});
});
$('#flowList').on('click','.layui-btn-danger',function(){
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if(items>0){
$('.label-index').each(function(index,item){
$(this).html('第'+(index+2)+'阶段');
})
}
});
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
setTimeout(function(){
location.reload();
},2000);
}
}
tool.post("/api/project/reset_check",data.field,callback);
return false;
});
}
</script>
+222
View File
@@ -0,0 +1,222 @@
<style>
.layui-form-item.layui-form-pane {
margin-bottom: 8px;
}
.layui-form-pane .layui-form-label {
width: 60px;
padding: 8px;
}
.layui-form-pane .layui-form-label.label-index, .layui-form-pane .layui-form-label.label-first {
width: 80px;
}
.layui-form-item .layui-input-inline {
margin-right: 4px;
}
.layui-form-item .layui-inline {
margin-right: 0;
margin-bottom: 0;
}
</style>
<form class="layui-form page-content p-4">
<h3 class="pb-3">编辑项目阶段</h3>
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">项目名称<font>*</font></td>
<td>{$detail.name|default='未定义'}</td>
<td class="layui-td-gray-2">计划完成周期</td>
<td>{$detail.start_time|date='Y-m-d'} - {$detail.end_time|date='Y-m-d'}</td>
</tr>
<tr>
<td class="layui-td-gray">负责人</td>
<td>{$detail.director_name}</td>
<td class="layui-td-gray">项目成员</td>
<td colspan="3">{$detail.team_admin_names}</td>
</tr>
<tr>
<td class="layui-td-gray">项目简介</td>
<td colspan="3">{$detail.content|default='暂无简介'}</td>
</tr>
<tr>
<td colspan="8" class="layui-td-gray" style="text-align:left; font-weight:600">项目阶段</td>
</tr>
<tr>
<td colspan="8">
<div id="flowList">
{volist name="step_array" id="vo"}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label {$key==0?'label-first':'label-index'}">第{$key+1}阶段</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="flowName[]" autocomplete="off" value="{$vo.flow_name}"
placeholder="输入阶段名称" class="layui-input" lay-verify="required"
lay-reqText="请输入阶段名称">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">负责人</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="chargeNames[]" autocomplete="off" readonly
placeholder="选择阶段负责人" class="layui-input picker-one" lay-verify="required"
lay-reqText="请选择阶段负责人" value="{$vo.check_name}">
<input type="hidden" name="chargeIds[]" value="{$vo.flow_uid}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">成员</label>
<div class="layui-input-inline" style="width:168px;">
<input type="text" name="membeNames[]" value="{$vo.flow_names}" autocomplete="off"
readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more"
lay-verify="required" lay-reqText="请选择阶段成员">
<input type="hidden" name="membeIds[]" value="{$vo.flow_ids}">
</div>
</div>
{$key==0?'':'<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>'}
</div>
{/volist}
</div>
<span class="layui-btn layui-btn-xs layui-btn-normal add-flow" data-type="0">+ 添加固定阶段</span><span
class="layui-btn layui-btn-xs add-flow" data-type="1">+ 添加自定义阶段</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、项目开始流转前,请确保已完善好各项目信息。</p>
<p>2、项目开始流转后,只有项目负责人可修改项目信息。</p>
<p>3、项目负责人可以修改项目阶段的信息,但是修改完成后已流转的项目阶段需要重新走一遍流程。</p>
</div>
</td>
</tr>
</table>
<div style="padding: 10px 0">
<input type="hidden" name="id" value="{$detail.id}"/>
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
<script>
function openInit() {
var form = layui.form,
layer = layui.layer,
tool = layui.tool,
laydate = layui.laydate,
employeepicker = layui.employeepicker;
form.render();
//日期范围
laydate.render({
elem: '#date',
range: ['#start_time', '#end_time']
});
//日期
lay('.select-time-range').each(function () {
laydate.render({
elem: this,
range: '到',
trigger: 'click'
});
});
$('.add-flow').on('click', function () {
let len = $('#flowList').find('.layui-form-item').length;
let index = len + 1;
let type = $(this).data('type');
;
let tem = ['<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第' + index + '阶段</label>\
<div class="layui-input-inline" style="width:120px;">\
<select name="flowName[]" lay-filter="flowName" lay-verify="required" lay-reqText="请选择阶段名称">\
<option value="">请选择</option>\
<option value="调研阶段">调研阶段</option>\
<option value="报价阶段">报价阶段</option>\
<option value="招投标阶段">招投标阶段</option>\
<option value="签约阶段">签约阶段</option>\
<option value="研发阶段">研发阶段</option>\
<option value="测试阶段">测试阶段</option>\
<option value="交付阶段">交付阶段</option>\
<option value="项目完结">项目完结</option>\
</select>\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">负责人</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="chargeName[]" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-reqText="请选择阶段负责人" value="{$vo.check_name}">\
<input type="hidden" name="chargeIds[]" value="{$vo.flow_uid}">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">成员</label>\
<div class="layui-input-inline" style="width:168px;">\
<input type="text" name="membeNames[]" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-reqText="请选择阶段成员" value="{$vo.flow_names}">\
<input type="hidden" name="membeIds[]" value="{$vo.flow_ids}">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>',
'<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第' + index + '阶段</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="flowName[]" autocomplete="off" placeholder="输入阶段名称" class="layui-input" lay-reqText="请输入阶段名称">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">负责人 </label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="chargeNames[]" autocomplete="off" readonly placeholder="选择阶段负责人" class="layui-input picker-one" lay-reqText="请选择阶段负责人">\
<input type="hidden" name="chargeIds[]">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label">成员</label>\
<div class="layui-input-inline" style="width:168px;">\
<input type="text" name="membeNames[]" autocomplete="off" readonly placeholder="选择阶段成员,可多选" class="layui-input picker-more" lay-reqText="请选择阶段成员">\
<input type="hidden" name="membeIds[]">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>'
];
$('#flowList').append(tem[type]);
form.render();
//日期
lay('.select-time-range').each(function () {
laydate.render({
elem: this,
range: '到',
trigger: 'click'
});
});
});
$('#flowList').on('click', '.layui-btn-danger', function () {
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if (items > 0) {
$('.label-index').each(function (index, item) {
$(this).html('第' + (index + 2) + '阶段');
})
}
});
//监听提交
form.on('submit(webform)', function (data) {
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
setTimeout(function () {
location.reload();
}, 2000);
}
}
tool.post("/api/project/reset_check", data.field, callback);
return false;
});
}
</script>
+93
View File
@@ -0,0 +1,93 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="breadcrumb"}
<span class="layui-breadcrumb">
<a href="http://www.meteteme.com/" target="_blank">江苏美天科技</a>
<a><cite>项目中心</cite></a>
</span>
{/block}
{block name="body"}
<div class="table-content p-3">
<div class="layui-form-bar border-t border-x">
<button class="layui-btn layui-btn-sm add-project">+ 新建项目</button>
</div>
<table class="layui-hide" id="projectList" lay-filter="project"></table>
</div>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool', 'gouguEdit', 'gouguComment', 'gouguSchedule', 'employeepicker', 'editormd'];
function gouguInit() {
var table = layui.table, tool = layui.tool;
layui.pageTable = table.render({
elem: '#projectList',
title: '项目列表',
cellMinWidth: 80,
page: true, //开启分页
limit: 20,
height: 'full-130',
url: "/project/index/index", //数据接口
cols: [[
{
field: 'id', title: '项目编号', width: 100, align: 'center', fixed: 'left', rowspan: 2, templet: function (d) {
return 'M' + d.id;
}
}
, {
field: 'status', title: '状态', align: 'center', width: 100, rowspan: 2, templet: function (d) {
var html = '<span class="layui-btn layui-btn-xs bg-status-' + d.status + '">' + d.status_name + '</span>';
return html;
}
}
, {
field: 'project_type', title: '项目类型', align: 'center', width: 140, rowspan: 2, templet: function (d) {
var typeText = '';
if (d.project_type == 1) {
typeText = '申报项目';
} else if (d.project_type == 2) {
typeText = '维护保障项目';
} else if (d.project_type == 3) {
typeText = '开发项目【外部】';
} else if (d.project_type == 4) {
typeText = '开发项目【内部】';
}
var html = '<span class="layui-btn-xs ">' + typeText + '</span>';
return html;
}
}
, {
field: 'business_id', title: '客户单位', align: 'center', width: 140, rowspan: 2, templet: function (d) {
var html = '<span>' + d.business_id + '</span>';
return html;
}
}
, {
field: 'name', title: '项目名称', rowspan: 2, templet: function (d) {
var html = '<a class="link-a" data-href="/project/index/view/id/' + d.id + '">' + d.name + '</a>';
return html;
}
}
, { field: 'director_name', title: '负责人', align: 'center', width: 80, rowspan: 2 }
, { field: 'plan_time', title: '项目周期', align: 'center', width: 240, rowspan: 2 }
, { align: 'center', title: '关联任务', colspan: 3 }
, { align: 'center', title: 'BUG缺陷', colspan: 3 }
], [
{ field: 'tasks_a_unfinish', align: 'center', style: 'color: #91CC75;', width: 80, 'title': '进行中' }
, { field: 'tasks_a_finish', align: 'center', style: 'color: #FAC858;', width: 80, 'title': '已完成' }
, { field: 'tasks_a_pensent', align: 'center', style: 'color: #EE6666;', width: 80, 'title': '完成率' }
, { field: 'tasks_b_unfinish', align: 'center', style: 'color: #91CC75;', width: 80, 'title': '进行中' }
, { field: 'tasks_b_finish', align: 'center', style: 'color: #FAC858;', width: 80, 'title': '已完成' }
, { field: 'tasks_b_pensent', align: 'center', style: 'color: #EE6666;', width: 80, 'title': '修复率' }
]]
});
$('.layui-form-bar').on('click', '.add-project', function () {
tool.open('/project/index/add');
});
}
</script>
{/block}
<!-- /脚本 -->
+21
View File
@@ -0,0 +1,21 @@
<div class="sub-menu" style="width: 200px;">
<div id="subMenu" class="sub-menu-content" style="width: 200px;">
<ul>
<li class="sub-menu-title active"><a href="/project/index/view?id={$id}"><i class="far fa-eye"></i><span class="text">项目概览</span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=task"><a href="javascript:;"><i class="fas fa-tasks"></i><span class="text">项目任务<cite>({$detail.tasks})</cite></span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=document"><a href="javascript:;"><i class="fas fa-book"></i><span class="text">项目文档<cite>({$detail.documents})</cite></span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=schedule"><a href="javascript:;"><i class="fas fa-clipboard-list"></i><span class="text">工作记录<cite>({$detail.schedules})</cite></span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=comment"><a href="javascript:;"><i class="fas fa-comment-alt"></i><span class="text">项目评论<cite>({$detail.comments})</cite></span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=user"><a href="javascript:;"><i class="fas fa-users"></i><span class="text">项目人员<cite>({$detail.users})</cite></span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=log"><a href="javascript:;"><i class="fas fa-project-diagram"></i><span class="text">项目动态</span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=robot"><a href="javascript:;"><i class="fas fa-robot"></i><span class="text">钉钉机器人</span></a></li>
<li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=attachment"><a href="javascript:;"><i class="fas fa-paperclip"></i><span class="text">附件管理</span></a></li>
<!-- <li class="sub-menu-title" data-event="subpage" data-page="/api/project/view/id/{$id}?page=log"><a href="javascript:;"><i class="bi bi-balloon"></i><span class="text">沟通进度</span></a></li>-->
</ul>
</div>
<div class="menu-bar">
<div class="menu-bar-content">
<div class="line"></div>
</div>
</div>
</div>
File diff suppressed because it is too large Load Diff