更新命名问题
This commit is contained in:
+137
-117
@@ -32,8 +32,22 @@ class Index extends BaseController
|
||||
->paginate($rows, false, ['query' => $param])
|
||||
->each(function ($item, $key) {
|
||||
$item->director_name = Db::name('Admin')->where(['id' => $item->director_uid])->value('name');
|
||||
$item->plan_time = date('Y-m-d', $item->start_time) . ' 至 ' . date('Y-m-d', $item->end_time);
|
||||
$item->status_name = ProjectList::$Status[(int)$item->status];
|
||||
// 判断时间戳是否为空,如果为空则返回“-”
|
||||
$item->plan_time = $item->start_time && $item->end_time
|
||||
? date('Y-m-d', $item->start_time) . ' ~ ' . date('Y-m-d', $item->end_time)
|
||||
: '-';
|
||||
$item->project_plan_time = $item->project_start_time
|
||||
? (
|
||||
$item->project_end_time
|
||||
? (
|
||||
date('Y-m-d', $item->project_end_time) === '1970-01-01'
|
||||
? date('Y-m-d', $item->project_start_time) . ' ~ 至今'
|
||||
: date('Y-m-d', $item->project_start_time) . ' ~ ' . date('Y-m-d', $item->project_end_time)
|
||||
)
|
||||
: date('Y-m-d', $item->project_start_time) . ' ~ 至今'
|
||||
)
|
||||
: '-';
|
||||
$item->status_name = ProjectList::$Status[(int) $item->status];
|
||||
|
||||
$business = BusinessList::where('id', $item->business_id)->find();
|
||||
$item->business_id = $business ? ($business->name_short ?: $business->name) : null;
|
||||
@@ -100,7 +114,7 @@ class Index extends BaseController
|
||||
$flowNameData = isset($param['flowName']) ? $param['flowName'] : '';
|
||||
$flowUidsData = isset($param['chargeIds']) ? $param['chargeIds'] : '';
|
||||
$flowIdsData = isset($param['membeIds']) ? $param['membeIds'] : '';
|
||||
// $flowDateData = isset($param['cycleDate']) ? $param['cycleDate'] : '';
|
||||
// $flowDateData = isset($param['cycleDate']) ? $param['cycleDate'] : '';
|
||||
$flow = [];
|
||||
$time_1 = $param['start_time'];
|
||||
$time_2 = $param['end_time'];
|
||||
@@ -108,7 +122,7 @@ class Index extends BaseController
|
||||
if (!$value) {
|
||||
continue;
|
||||
}
|
||||
// $flowDate = explode('到', $flowDateData[$key]);
|
||||
// $flowDate = explode('到', $flowDateData[$key]);
|
||||
// $start_time = strtotime(urldecode(trim($flowDate[0])));
|
||||
// $end_time = strtotime(urldecode(trim($flowDate[1])));
|
||||
// if ($start_time < $time_1) {
|
||||
@@ -131,7 +145,7 @@ class Index extends BaseController
|
||||
$item['flow_uid'] = $flowUidsData[$key];
|
||||
$item['flow_ids'] = $flowIdsData[$key];
|
||||
$item['sort'] = $key;
|
||||
// $item['start_time'] = $start_time;
|
||||
// $item['start_time'] = $start_time;
|
||||
// $item['end_time'] = $end_time;
|
||||
$item['create_time'] = time();
|
||||
$flow[] = $item;
|
||||
@@ -155,7 +169,7 @@ class Index extends BaseController
|
||||
if (!empty($param['team_admin_ids'])) {
|
||||
$project_users .= "," . $param['team_admin_ids'];
|
||||
}
|
||||
$project_array = explode(",", (string)$project_users);
|
||||
$project_array = explode(",", (string) $project_users);
|
||||
$project_array = array_unique($project_array);
|
||||
$project_user_array = [];
|
||||
foreach ($project_array as $k => $v) {
|
||||
@@ -209,137 +223,143 @@ class Index extends BaseController
|
||||
|
||||
//编辑
|
||||
public function edit()
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$detail = (new ProjectList())->detail($id);
|
||||
{
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
$detail = (new ProjectList())->detail($id);
|
||||
|
||||
if (request()->isPost()) {
|
||||
if ($this->uid == $detail['admin_id'] || $this->uid == $detail['director_uid']) {
|
||||
try {
|
||||
validate(ProjectCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
return json(['code' => 1, 'msg' => $e->getError()]);
|
||||
}
|
||||
|
||||
// Convert start_time and end_time from date string to Unix timestamp
|
||||
if (!empty($param['start_time'])) {
|
||||
$param['start_time'] = strtotime($param['start_time']);
|
||||
}
|
||||
if (!empty($param['end_time'])) {
|
||||
$param['end_time'] = strtotime($param['end_time']);
|
||||
}
|
||||
|
||||
$param['update_time'] = time();
|
||||
$res = ProjectList::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
// 新增 team_admin_ids 处理逻辑
|
||||
$project_users = $this->uid;
|
||||
if (!empty($param['director_uid'])) {
|
||||
$project_users .= "," . $param['director_uid'];
|
||||
if (request()->isPost()) {
|
||||
if ($this->uid == $detail['admin_id'] || $this->uid == $detail['director_uid']) {
|
||||
try {
|
||||
validate(ProjectCheck::class)->scene('edit')->check($param);
|
||||
} catch (ValidateException $e) {
|
||||
return json(['code' => 1, 'msg' => $e->getError()]);
|
||||
}
|
||||
|
||||
// 如果 team_admin_ids 存在,则拆解并加入到 $project_users
|
||||
if (!empty($param['team_admin_ids'])) {
|
||||
$project_users .= "," . $param['team_admin_ids'];
|
||||
// 将时间从日期字符串转换为Unix时间戳
|
||||
if (!empty($param['start_time'])) {
|
||||
$param['start_time'] = strtotime($param['start_time']);
|
||||
}
|
||||
if (!empty($param['end_time'])) {
|
||||
$param['end_time'] = strtotime($param['end_time']);
|
||||
}
|
||||
if (!empty($param['project_start_time'])) {
|
||||
$param['project_start_time'] = strtotime($param['project_start_time']);
|
||||
}
|
||||
if (!empty($param['project_end_time'])) {
|
||||
$param['project_end_time'] = strtotime($param['project_end_time']);
|
||||
}
|
||||
|
||||
// 将 $project_users 拆解为数组,去重
|
||||
$project_array = explode(",", (string)$project_users);
|
||||
$project_array = array_unique($project_array);
|
||||
$param['update_time'] = time();
|
||||
$res = ProjectList::where('id', $param['id'])->strict(false)->field(true)->update($param);
|
||||
if ($res) {
|
||||
// 新增 team_admin_ids 处理逻辑
|
||||
$project_users = $this->uid;
|
||||
if (!empty($param['director_uid'])) {
|
||||
$project_users .= "," . $param['director_uid'];
|
||||
}
|
||||
|
||||
// 获取当前已有的项目用户
|
||||
$existing_users = Db::name('ProjectUser')->where('project_id', $param['id'])->column('uid');
|
||||
$delete_users = array_diff($existing_users, $project_array); // 找出要删除的用户
|
||||
// 如果 team_admin_ids 存在,则拆解并加入到 $project_users
|
||||
if (!empty($param['team_admin_ids'])) {
|
||||
$project_users .= "," . $param['team_admin_ids'];
|
||||
}
|
||||
|
||||
// 删除用户,将 `delete_time` 设置为当前时间
|
||||
if (!empty($delete_users)) {
|
||||
Db::name('ProjectUser')->where('project_id', $param['id'])
|
||||
->whereIn('uid', $delete_users)
|
||||
->update(['delete_time' => time()]);
|
||||
}
|
||||
// 将 $project_users 拆解为数组,去重
|
||||
$project_array = explode(",", (string) $project_users);
|
||||
$project_array = array_unique($project_array);
|
||||
|
||||
// 插入新用户(如果之前没有的话)
|
||||
$project_user_array = [];
|
||||
foreach ($project_array as $k => $v) {
|
||||
if (is_numeric($v)) {
|
||||
$project_user_array[] = array(
|
||||
'uid' => $v,
|
||||
// 获取当前已有的项目用户
|
||||
$existing_users = Db::name('ProjectUser')->where('project_id', $param['id'])->column('uid');
|
||||
$delete_users = array_diff($existing_users, $project_array); // 找出要删除的用户
|
||||
|
||||
// 删除用户,将 `delete_time` 设置为当前时间
|
||||
if (!empty($delete_users)) {
|
||||
Db::name('ProjectUser')->where('project_id', $param['id'])
|
||||
->whereIn('uid', $delete_users)
|
||||
->update(['delete_time' => time()]);
|
||||
}
|
||||
|
||||
// 插入新用户(如果之前没有的话)
|
||||
$project_user_array = [];
|
||||
foreach ($project_array as $k => $v) {
|
||||
if (is_numeric($v)) {
|
||||
$project_user_array[] = array(
|
||||
'uid' => $v,
|
||||
'admin_id' => $this->uid,
|
||||
'project_id' => $param['id'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 插入或更新 ProjectUser 表
|
||||
Db::name('ProjectUser')->strict(false)->field(true)->insertAll($project_user_array);
|
||||
|
||||
// 更新阶段的处理逻辑(保持不变)
|
||||
if (isset($param['director_uid'])) {
|
||||
$project_user = [
|
||||
'uid' => $param['director_uid'],
|
||||
'admin_id' => $this->uid,
|
||||
'project_id' => $param['id'],
|
||||
'create_time' => time(),
|
||||
);
|
||||
'delete_time' => 0,
|
||||
];
|
||||
$has = Db::name('ProjectUser')->where(['uid' => $param['director_uid'], 'project_id' => $param['id']])->find();
|
||||
if (empty($has)) {
|
||||
Db::name('ProjectUser')->strict(false)->field(true)->insert($project_user);
|
||||
} else {
|
||||
Db::name('ProjectUser')->where(['id' => $has['id']])->strict(false)->field(true)->update($project_user);
|
||||
}
|
||||
}
|
||||
|
||||
add_log('edit', $param['id'], $param, $detail);
|
||||
}
|
||||
return json(['code' => 0, 'msg' => '编辑成功']);
|
||||
} else {
|
||||
return json(['code' => 1, 'msg' => '只有创建人或者负责人才有权限编辑']);
|
||||
}
|
||||
} else {
|
||||
if (empty($detail)) {
|
||||
return json(['code' => 1, 'msg' => '项目不存在']);
|
||||
} else {
|
||||
$step_array = Db::name('Step')
|
||||
->field('s.*,a.name as check_name')
|
||||
->alias('s')
|
||||
->join('Admin a', 'a.id = s.flow_uid', 'LEFT')
|
||||
->order('s.sort asc')
|
||||
->where(['s.action_id' => $id, 's.type' => 1, 's.delete_time' => 0])
|
||||
->select()->toArray();
|
||||
foreach ($step_array as &$vv) {
|
||||
$flow_names = Db::name('Admin')->where([['id', 'in', $vv['flow_ids']]])->column('name');
|
||||
$vv['flow_names'] = implode(',', $flow_names);
|
||||
}
|
||||
|
||||
// 插入或更新 ProjectUser 表
|
||||
Db::name('ProjectUser')->strict(false)->field(true)->insertAll($project_user_array);
|
||||
$file_array = Db::name('FileInterfix')
|
||||
->field('mf.id,mf.topic_id,mf.admin_id,f.name,f.filesize,f.filepath,a.name as admin_name')
|
||||
->alias('mf')
|
||||
->join('File f', 'mf.file_id = f.id', 'LEFT')
|
||||
->join('Admin a', 'mf.admin_id = a.id', 'LEFT')
|
||||
->order('mf.create_time desc')
|
||||
->where(['mf.topic_id' => $id, 'mf.module' => 'project'])
|
||||
->select()->toArray();
|
||||
|
||||
// 更新阶段的处理逻辑(保持不变)
|
||||
if (isset($param['director_uid'])) {
|
||||
$project_user = [
|
||||
'uid' => $param['director_uid'],
|
||||
'admin_id' => $this->uid,
|
||||
'project_id' => $param['id'],
|
||||
'create_time' => time(),
|
||||
'delete_time' => 0,
|
||||
];
|
||||
$has = Db::name('ProjectUser')->where(['uid' => $param['director_uid'], 'project_id' => $param['id']])->find();
|
||||
if (empty($has)) {
|
||||
Db::name('ProjectUser')->strict(false)->field(true)->insert($project_user);
|
||||
} else {
|
||||
Db::name('ProjectUser')->where(['id' => $has['id']])->strict(false)->field(true)->update($project_user);
|
||||
}
|
||||
}
|
||||
|
||||
add_log('edit', $param['id'], $param, $detail);
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '成功',
|
||||
'data' => [
|
||||
'detail' => $detail,
|
||||
'step_array' => $step_array,
|
||||
'file_array' => $file_array,
|
||||
]
|
||||
]);
|
||||
}
|
||||
return json(['code' => 0, 'msg' => '编辑成功']);
|
||||
} else {
|
||||
return json(['code' => 1, 'msg' => '只有创建人或者负责人才有权限编辑']);
|
||||
}
|
||||
} else {
|
||||
if (empty($detail)) {
|
||||
return json(['code' => 1, 'msg' => '项目不存在']);
|
||||
} else {
|
||||
$step_array = Db::name('Step')
|
||||
->field('s.*,a.name as check_name')
|
||||
->alias('s')
|
||||
->join('Admin a', 'a.id = s.flow_uid', 'LEFT')
|
||||
->order('s.sort asc')
|
||||
->where(['s.action_id' => $id, 's.type' => 1, 's.delete_time' => 0])
|
||||
->select()->toArray();
|
||||
foreach ($step_array as &$vv) {
|
||||
$flow_names = Db::name('Admin')->where([['id', 'in', $vv['flow_ids']]])->column('name');
|
||||
$vv['flow_names'] = implode(',', $flow_names);
|
||||
}
|
||||
|
||||
$file_array = Db::name('FileInterfix')
|
||||
->field('mf.id,mf.topic_id,mf.admin_id,f.name,f.filesize,f.filepath,a.name as admin_name')
|
||||
->alias('mf')
|
||||
->join('File f', 'mf.file_id = f.id', 'LEFT')
|
||||
->join('Admin a', 'mf.admin_id = a.id', 'LEFT')
|
||||
->order('mf.create_time desc')
|
||||
->where(['mf.topic_id' => $id, 'mf.module' => 'project'])
|
||||
->select()->toArray();
|
||||
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '成功',
|
||||
'data' => [
|
||||
'detail' => $detail,
|
||||
'step_array' => $step_array,
|
||||
'file_array' => $file_array,
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// public function edit()
|
||||
// public function edit()
|
||||
// {
|
||||
// $param = get_params();
|
||||
// $id = isset($param['id']) ? $param['id'] : 0;
|
||||
@@ -434,7 +454,7 @@ class Index extends BaseController
|
||||
$param = get_params();
|
||||
$id = isset($param['id']) ? $param['id'] : 0;
|
||||
|
||||
// print_r('id是:'.$id);
|
||||
// print_r('id是:'.$id);
|
||||
|
||||
// 获取项目详细信息
|
||||
$detail = (new ProjectList())->detail($id);
|
||||
@@ -473,7 +493,7 @@ class Index extends BaseController
|
||||
View::assign('detail', $detail); // 传递 detail
|
||||
return view();
|
||||
|
||||
// return json([
|
||||
// return json([
|
||||
// 'code' => 1,
|
||||
// 'msg' => '获取项目阶段信息成功',
|
||||
// 'data' => [
|
||||
|
||||
@@ -1,46 +1,45 @@
|
||||
<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;}
|
||||
.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 class="layui-td-gray">项目名称<font>*</font>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="name" lay-verify="required" lay-reqText="请输入项目名称" placeholder="请输入项目名称" class="layui-input" value="">
|
||||
<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 class="layui-td-gray">项目简称<font>*</font></td>
|
||||
<td>
|
||||
<input type="text" name="name_short" lay-verify="required" lay-reqText="请输入项目简称" placeholder="请输入项目简称" class="layui-input" value="">
|
||||
<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 class="layui-td-gray">项目类型<font>*</font>
|
||||
</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="是否是内部项目">
|
||||
@@ -52,22 +51,51 @@
|
||||
</select>
|
||||
</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">关联客户</td>
|
||||
<td>
|
||||
<select name="business_id" id="business_id" lay-verify="" lay-search="" lay-reqText="请选择客户">
|
||||
<option value="">请选择客户</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="请选择关联产品">
|
||||
<select name="product_id" lay-verify="" lay-search="" 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 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>
|
||||
@@ -77,7 +105,8 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6" class="layui-td-gray" style="text-align:left; font-weight:600">项目阶段<font>*</font></td>
|
||||
<td colspan="6" class="layui-td-gray" style="text-align:left; font-weight:600">项目阶段<font>*</font>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
@@ -91,7 +120,7 @@
|
||||
<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>
|
||||
<option value="{$voo}" {eq name="$kk" value="$k" } selected{/eq}>{$voo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
@@ -99,14 +128,18 @@
|
||||
<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="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="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>
|
||||
@@ -119,7 +152,7 @@
|
||||
<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>
|
||||
<option value="{$voo}" {eq name="$kk" value="$k" } selected{/eq}>{$voo}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
@@ -127,14 +160,18 @@
|
||||
<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="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="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>
|
||||
@@ -143,7 +180,8 @@
|
||||
{/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>
|
||||
<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>
|
||||
@@ -171,11 +209,11 @@
|
||||
form.render();
|
||||
|
||||
function fetchCustomers() {
|
||||
tool.get('/business/index/getlistsmore', {}, function(response) {
|
||||
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) {
|
||||
customers.forEach(function (customer) {
|
||||
var option = document.createElement('option');
|
||||
option.value = customer.id;
|
||||
option.text = customer.name;
|
||||
@@ -209,13 +247,13 @@
|
||||
});
|
||||
});
|
||||
|
||||
$('.add-flow').on('click',function(){
|
||||
$('.add-flow').on('click', function () {
|
||||
let len = $('#flowList').find('.layui-form-item').length;
|
||||
let index = len+1;
|
||||
let index = len + 1;
|
||||
let type = $(this).data('type');;
|
||||
let tem=['<div class="layui-form-item layui-form-pane">\
|
||||
let tem = ['<div class="layui-form-item layui-form-pane">\
|
||||
<div class="layui-inline">\
|
||||
<label class="layui-form-label label-index">第'+index+'阶段</label>\
|
||||
<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>\
|
||||
@@ -246,9 +284,9 @@
|
||||
</div>\
|
||||
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
|
||||
</div>',
|
||||
'<div class="layui-form-item layui-form-pane">\
|
||||
'<div class="layui-form-item layui-form-pane">\
|
||||
<div class="layui-inline">\
|
||||
<label class="layui-form-label label-index">第'+index+'阶段</label>\
|
||||
<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>\
|
||||
@@ -281,12 +319,12 @@
|
||||
});
|
||||
});
|
||||
});
|
||||
$('#flowList').on('click','.layui-btn-danger',function(){
|
||||
$('#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)+'阶段');
|
||||
if (items > 0) {
|
||||
$('.label-index').each(function (index, item) {
|
||||
$(this).html('第' + (index + 2) + '阶段');
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -299,7 +337,7 @@
|
||||
tool.close(1000);
|
||||
}
|
||||
}
|
||||
tool.post("/project/index/add",data.field,callback);
|
||||
tool.post("/project/index/add", data.field, callback);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<tr>
|
||||
<td class="layui-td-gray">项目名称<font>*</font></td>
|
||||
<td>{$detail.name}</td>
|
||||
<td class="layui-td-gray-2">计划完成周期</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>
|
||||
|
||||
@@ -71,7 +71,8 @@
|
||||
}
|
||||
}
|
||||
, { field: 'director_name', title: '负责人', align: 'center', width: 80, rowspan: 2 }
|
||||
, { field: 'plan_time', title: '项目周期', align: 'center', width: 240, rowspan: 2 }
|
||||
, { field: 'plan_time', title: '合同周期', align: 'center', width: 240, rowspan: 2 }
|
||||
, { field: 'project_plan_time', title: '项目周期', align: 'center', width: 240, rowspan: 2 }
|
||||
, { align: 'center', title: '关联任务', colspan: 3 }
|
||||
, { align: 'center', title: 'BUG缺陷', colspan: 3 }
|
||||
], [
|
||||
|
||||
+202
-168
@@ -105,17 +105,17 @@
|
||||
<div class="layui-col-md3" style="text-align:right">
|
||||
{eq name="$role" value="2"}
|
||||
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm"
|
||||
id="delProject">删除项目
|
||||
id="delProject">删除项目
|
||||
</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-bg-blue" id="editProject">编辑项目
|
||||
</button>
|
||||
{eq name="$detail.status" value="4"}
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm"
|
||||
id="reopenProject">开启项目
|
||||
id="reopenProject">开启项目
|
||||
</button>
|
||||
{else/}
|
||||
<button type="button" class="layui-btn layui-btn-waring layui-btn-sm"
|
||||
id="closeProject">关闭项目
|
||||
id="closeProject">关闭项目
|
||||
</button>
|
||||
{/eq}
|
||||
{/eq}
|
||||
@@ -127,42 +127,57 @@
|
||||
<span class="font-gray">项目ID:</span>
|
||||
<span id="{$detail.id}" data-val="{$detail.id}">{$detail.id}</span>
|
||||
<input type="hidden" name="id" value="{$detail.id}">
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="id"></i>-->
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="id"></i>-->
|
||||
<!-- <button data-id="{$detail.id}" data-name="business_id">编辑</button> -->
|
||||
</div>
|
||||
<hr>
|
||||
<div class="py-1">
|
||||
<span class="font-gray">客户名称:</span>
|
||||
<span id="business_id_{$detail.id}"
|
||||
data-val="{$detail.business_id}">{$detail.business_id}</span>
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="business_id"></i>-->
|
||||
data-val="{$detail.business_id}">{$detail.business_id}</span>
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="business_id"></i>-->
|
||||
<!-- <button data-id="{$detail.id}" data-name="business_id">编辑</button> -->
|
||||
</div>
|
||||
<hr>
|
||||
<div class="py-1">
|
||||
<span class="font-gray">计划完成周期:</span>
|
||||
<span class="font-gray">合同周期:</span>
|
||||
<span id="start_time_{$detail.id}" data-val="">{$detail.start_time|date='Y-m-d'}</span>
|
||||
至 <span id="end_time_{$detail.id}" data-val="">{$detail.end_time|
|
||||
~ <span id="end_time_{$detail.id}" data-val="">{$detail.end_time|
|
||||
date='Y-m-d'}</span>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="py-1">
|
||||
<span class="font-gray">项目周期:</span>
|
||||
<span id="project_start_time_{$detail.id}"
|
||||
data-val="">{$detail.project_start_time|date='Y-m-d'}</span>
|
||||
~
|
||||
<span id="project_end_time_{$detail.id}" data-val="">
|
||||
{if $detail.project_end_time == '1970-01-01' || $detail.project_end_time == 0 ||
|
||||
$detail.project_end_time == ''}
|
||||
至今
|
||||
{else}
|
||||
{$detail.project_end_time|date='Y-m-d'}
|
||||
{/if}
|
||||
</span>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="py-1">
|
||||
<span class="font-gray">创建人:</span>{$detail.admin_name}
|
||||
<span class="font-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>-->
|
||||
data-val="{$detail.director_uid}">{$detail.director_name}</span>
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="director_uid"></i>-->
|
||||
<span class="font-gray" style="margin-left:32px">项目成员:</span>{$detail.team_admin_names}
|
||||
</div>
|
||||
<hr>
|
||||
<div class="py-1">
|
||||
<span class="font-gray">项目简介:</span>
|
||||
<span id="content_{$detail.id}" data-val="{$detail.content}">{$detail.content}</span>
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="content"></i>-->
|
||||
<!-- <i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}"-->
|
||||
<!-- data-name="content"></i>-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -180,7 +195,7 @@
|
||||
{neq name="$detail.status" value="4"}
|
||||
<div class="layui-col-md6" style="margin-top:10px">
|
||||
<span data-href="/project/index/editstep/id/{$detail.id}"
|
||||
class="layui-btn layui-btn-normal layui-btn-sm open-a fr">编辑项目阶段</span>
|
||||
class="layui-btn layui-btn-normal layui-btn-sm open-a fr">编辑项目阶段</span>
|
||||
</div>
|
||||
{/neq}
|
||||
{/gt}
|
||||
@@ -191,16 +206,16 @@
|
||||
<span class="gray">当前阶段:</span>{$step.flow_name}
|
||||
<span class="gray" style="margin-left:20px">负责人:</span>{$step.check_name}
|
||||
<span class="gray" style="margin-left:20px">成员:</span>{$step.flow_names}
|
||||
<!-- <span class="gray" style="margin-left:20px">周期:</span>{$step.start_time|time_format=###,'Y-m-d'}-->
|
||||
<!-- 到 {$step.end_time|time_format=###,'Y-m-d'}-->
|
||||
<!-- <span class="gray" style="margin-left:20px">周期:</span>{$step.start_time|time_format=###,'Y-m-d'}-->
|
||||
<!-- 到 {$step.end_time|time_format=###,'Y-m-d'}-->
|
||||
{eq name="$step.flow_uid" value="$login_user"}
|
||||
{neq name="$detail.status" value="4"}
|
||||
<div class="pt-3">
|
||||
<span class="layui-btn layui-btn-normal layui-btn-sm" data-event="step"
|
||||
data-check="1">确认</span>
|
||||
data-check="1">确认</span>
|
||||
{gt name="$detail.step_sort" value="0"}
|
||||
<span class="layui-btn layui-btn-danger layui-btn-sm" data-event="step"
|
||||
data-check="2">退回</span>
|
||||
data-check="2">退回</span>
|
||||
{/gt}
|
||||
</div>
|
||||
{/neq}
|
||||
@@ -215,7 +230,7 @@
|
||||
<i class="layui-icon layui-icon-time"></i>
|
||||
{/gt}
|
||||
{eq name="$vo.sort" value="$detail.step_sort"}
|
||||
<!-- <i class="layui-icon layui-icon-username" data-on=""></i>-->
|
||||
<!-- <i class="layui-icon layui-icon-username" data-on=""></i>-->
|
||||
{/eq}
|
||||
{lt name="$vo.sort" value="$detail.step_sort"}
|
||||
<i class="layui-icon layui-icon-ok-circle" data-ok=""></i>
|
||||
@@ -271,7 +286,7 @@
|
||||
</div>
|
||||
<div class="layui-col-md6" style="margin-top: 10px;">
|
||||
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm fr"
|
||||
style="margin-left: 10px" id="fileBtn">选择文件
|
||||
style="margin-left: 10px" id="fileBtn">选择文件
|
||||
</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-sm2 fr" id="test9">开始上传
|
||||
</button>
|
||||
@@ -288,11 +303,11 @@
|
||||
</div>
|
||||
<div class="file-tool">
|
||||
<a href="{$vo.filepath}" download="{$vo.name}" data-id="{$vo.id}" target="_blank"
|
||||
title="大小:{$vo.filesize/1048576|round=2}MB">
|
||||
title="大小:{$vo.filesize/1048576|round=2}MB">
|
||||
<i class="iconfont icon-shujudaoru" style="color: #12bb37;"></i>
|
||||
</a>
|
||||
<i class="btn-delete iconfont icon-shanchu" data-id="{$vo.id}"
|
||||
style="color: #FF5722;"></i>
|
||||
style="color: #FF5722;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -319,36 +334,36 @@
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="50%">链接URL</th>
|
||||
<th width="30%" style="text-align:center">链接说明</th>
|
||||
<th width="10%" style="text-align:center">添加人</th>
|
||||
<th width="10%" style="text-align:center">操作</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th width="50%">链接URL</th>
|
||||
<th width="30%" style="text-align:center">链接说明</th>
|
||||
<th width="10%" style="text-align:center">添加人</th>
|
||||
<th width="10%" style="text-align:center">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="linkList">
|
||||
{volist name="link_array" id="vo"}
|
||||
<tr>
|
||||
<td><a href="{$vo.url}" target="_blank">{$vo.url}</a></td>
|
||||
<td>{$vo.desc}</td>
|
||||
<td style="text-align: center;">{$vo.admin_name}</td>
|
||||
<td style="text-align: center;">
|
||||
<div class="layui-btn-group" style="width:66px">
|
||||
<button type="button" class="layui-btn layui-btn-xs link-edit"
|
||||
{volist name="link_array" id="vo"}
|
||||
<tr>
|
||||
<td><a href="{$vo.url}" target="_blank">{$vo.url}</a></td>
|
||||
<td>{$vo.desc}</td>
|
||||
<td style="text-align: center;">{$vo.admin_name}</td>
|
||||
<td style="text-align: center;">
|
||||
<div class="layui-btn-group" style="width:66px">
|
||||
<button type="button" class="layui-btn layui-btn-xs link-edit"
|
||||
data-id="{$vo.id}" data-href="{$vo.url}" data-desc="{$vo.desc}"><i
|
||||
class="layui-icon"></i></button>
|
||||
<button type="button"
|
||||
class="layui-icon"></i></button>
|
||||
<button type="button"
|
||||
class="layui-btn layui-btn-danger layui-btn-xs link-delete"
|
||||
data-id="{$vo.id}"><i class="layui-icon"></i></button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{empty name="$link_array" }
|
||||
<tr>
|
||||
<td colspan="4" class="content-none">暂无链接</td>
|
||||
</tr>
|
||||
{/empty}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
{empty name="$link_array" }
|
||||
<tr>
|
||||
<td colspan="4" class="content-none">暂无链接</td>
|
||||
</tr>
|
||||
{/empty}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -417,7 +432,7 @@
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div id="cross" class="data-none" style="width:100%; height:360px;"
|
||||
data-tips="任务数:{$detail.tasks},已完成:{$detail.tasks_finish},未完成:{$detail.tasks_unfinish}">
|
||||
data-tips="任务数:{$detail.tasks},已完成:{$detail.tasks_finish},未完成:{$detail.tasks_unfinish}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -467,7 +482,7 @@
|
||||
if (deleteFilePaths) {
|
||||
$.ajax({
|
||||
url: basePath + 'deleteFile.do',
|
||||
data: {deleteFilePaths: deleteFilePaths},
|
||||
data: { deleteFilePaths: deleteFilePaths },
|
||||
dataType: 'JSON',
|
||||
Type: 'POST',
|
||||
async: false,
|
||||
@@ -551,71 +566,71 @@
|
||||
var $ = layui.jquery
|
||||
, upload = layui.upload
|
||||
, uploadListIns = upload.render({
|
||||
elem: '#testList'
|
||||
, url: basePath + 'upload.do'
|
||||
, data: {fileDir: fileDirIndex}
|
||||
, accept: 'file'
|
||||
, multiple: true
|
||||
, auto: false
|
||||
, bindAction: '#testListAction'
|
||||
, choose: function (obj) {
|
||||
files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
|
||||
//读取本地文件
|
||||
obj.preview(function (index, file, result) {
|
||||
var tr = $(['<tr id="upload-' + index + '">'
|
||||
, '<td>' + file.name + '</td>'
|
||||
, '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
|
||||
, '<td>等待上传</td>'
|
||||
, '<td>'
|
||||
, '<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
|
||||
, '<button class="layui-btn layui-btn-xs layui-btn-danger notUpload-delete">删除</button>'
|
||||
, '</td>'
|
||||
, '</tr>'].join(''));
|
||||
elem: '#testList'
|
||||
, url: basePath + 'upload.do'
|
||||
, data: { fileDir: fileDirIndex }
|
||||
, accept: 'file'
|
||||
, multiple: true
|
||||
, auto: false
|
||||
, bindAction: '#testListAction'
|
||||
, choose: function (obj) {
|
||||
files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
|
||||
//读取本地文件
|
||||
obj.preview(function (index, file, result) {
|
||||
var tr = $(['<tr id="upload-' + index + '">'
|
||||
, '<td>' + file.name + '</td>'
|
||||
, '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
|
||||
, '<td>等待上传</td>'
|
||||
, '<td>'
|
||||
, '<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
|
||||
, '<button class="layui-btn layui-btn-xs layui-btn-danger notUpload-delete">删除</button>'
|
||||
, '</td>'
|
||||
, '</tr>'].join(''));
|
||||
|
||||
//单个重传
|
||||
tr.find('.demo-reload').on('click', function () {
|
||||
obj.upload(index, file);
|
||||
});
|
||||
//单个重传
|
||||
tr.find('.demo-reload').on('click', function () {
|
||||
obj.upload(index, file);
|
||||
});
|
||||
|
||||
//删除
|
||||
tr.find('.notUpload-delete').on('click', function () {
|
||||
delete files[index]; //删除对应的文件
|
||||
tr.remove();
|
||||
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
|
||||
//删除
|
||||
tr.find('.notUpload-delete').on('click', function () {
|
||||
delete files[index]; //删除对应的文件
|
||||
tr.remove();
|
||||
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
|
||||
});
|
||||
demoListView.append(tr);
|
||||
});
|
||||
demoListView.append(tr);
|
||||
});
|
||||
}
|
||||
, allDone: function (obj) { //当文件全部被提交后,才触发
|
||||
$("#" + id + "State").text("已上传");
|
||||
layer.closeAll('page'); //关闭所有页面层
|
||||
}
|
||||
, done: function (res, index, upload) {
|
||||
if (res.code == 0) { //上传成功
|
||||
}
|
||||
, allDone: function (obj) { //当文件全部被提交后,才触发
|
||||
$("#" + id + "State").text("已上传");
|
||||
layer.closeAll('page'); //关闭所有页面层
|
||||
}
|
||||
, done: function (res, index, upload) {
|
||||
if (res.code == 0) { //上传成功
|
||||
var tr = demoListView.find('tr#upload-' + index)
|
||||
, tds = tr.children();
|
||||
tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
|
||||
tds.eq(3).html(''); //清空操作
|
||||
|
||||
//赋值给弹出框对应的input
|
||||
var value = JSON.stringify(res);
|
||||
if ($("#" + id).val() == '') {
|
||||
$("#" + id).val(value);
|
||||
} else {
|
||||
$("#" + id).val($("#" + id).val() + ";" + value);
|
||||
}
|
||||
|
||||
return delete this.files[index]; //删除文件队列已经上传成功的文件
|
||||
}
|
||||
this.error(index, upload);
|
||||
}
|
||||
, error: function (index, upload) {
|
||||
var tr = demoListView.find('tr#upload-' + index)
|
||||
, tds = tr.children();
|
||||
tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
|
||||
tds.eq(3).html(''); //清空操作
|
||||
|
||||
//赋值给弹出框对应的input
|
||||
var value = JSON.stringify(res);
|
||||
if ($("#" + id).val() == '') {
|
||||
$("#" + id).val(value);
|
||||
} else {
|
||||
$("#" + id).val($("#" + id).val() + ";" + value);
|
||||
}
|
||||
|
||||
return delete this.files[index]; //删除文件队列已经上传成功的文件
|
||||
tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
|
||||
tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
|
||||
}
|
||||
this.error(index, upload);
|
||||
}
|
||||
, error: function (index, upload) {
|
||||
var tr = demoListView.find('tr#upload-' + index)
|
||||
, tds = tr.children();
|
||||
tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
|
||||
tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
//添加已上传文件列表
|
||||
@@ -655,10 +670,10 @@
|
||||
var project_start_time = '{$detail.start_time| date="Y-m-d"}';
|
||||
const opsData = {
|
||||
status: [
|
||||
{'id': 1, 'title': '未开始'},
|
||||
{'id': 2, 'title': '进行中'},
|
||||
{'id': 3, 'title': '已完成'},
|
||||
{'id': 4, 'title': '已关闭'}
|
||||
{ 'id': 1, 'title': '未开始' },
|
||||
{ 'id': 2, 'title': '进行中' },
|
||||
{ 'id': 3, 'title': '已完成' },
|
||||
{ 'id': 4, 'title': '已关闭' }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -698,8 +713,8 @@
|
||||
show: false
|
||||
},
|
||||
data: [
|
||||
{value: 1048, name: '待处理'},
|
||||
{value: 735, name: '已完成'}
|
||||
{ value: 1048, name: '待处理' },
|
||||
{ value: 735, name: '已完成' }
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -748,13 +763,13 @@
|
||||
color: "#ED6666",
|
||||
}
|
||||
},
|
||||
{
|
||||
value: 735,
|
||||
name: '按时完成',
|
||||
itemStyle: {
|
||||
color: "#91CC75",
|
||||
}
|
||||
{
|
||||
value: 735,
|
||||
name: '按时完成',
|
||||
itemStyle: {
|
||||
color: "#91CC75",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -782,11 +797,11 @@
|
||||
radius: ['25%', '75%'],
|
||||
center: ['60%', '50%'],
|
||||
data: [
|
||||
{value: 40, name: '待解决'},
|
||||
{value: 38, name: '进行中'},
|
||||
{value: 32, name: '已解决'},
|
||||
{value: 28, name: '不解决'},
|
||||
{value: 26, name: '已关闭'}
|
||||
{ value: 40, name: '待解决' },
|
||||
{ value: 38, name: '进行中' },
|
||||
{ value: 32, name: '已解决' },
|
||||
{ value: 28, name: '不解决' },
|
||||
{ value: 26, name: '已关闭' }
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -897,7 +912,7 @@
|
||||
itemStyle: {
|
||||
borderWidth: 0.5
|
||||
},
|
||||
yearLabel: {show: false},
|
||||
yearLabel: { show: false },
|
||||
monthLabel: {
|
||||
nameMap: 'cn',
|
||||
fontSize: 12
|
||||
@@ -962,7 +977,7 @@
|
||||
itemStyle: {
|
||||
borderWidth: 0.5
|
||||
},
|
||||
yearLabel: {show: false},
|
||||
yearLabel: { show: false },
|
||||
monthLabel: {
|
||||
nameMap: 'cn',
|
||||
fontSize: 12
|
||||
@@ -1005,7 +1020,7 @@
|
||||
data.push([this_date, 0]);
|
||||
}
|
||||
}
|
||||
var res = {'range': rangeArray, 'data': data};
|
||||
var res = { 'range': rangeArray, 'data': data };
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -1061,7 +1076,7 @@
|
||||
yArray = tem_y_array.concat(yArray);
|
||||
yArray2 = tem_y_array.concat(yArray2);
|
||||
}
|
||||
return {'x': xArray, 'y': yArray, 'y2': yArray2};
|
||||
return { 'x': xArray, 'y': yArray, 'y2': yArray2 };
|
||||
}
|
||||
|
||||
function cross_recursion(start, end, arr) {
|
||||
@@ -1121,7 +1136,7 @@
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
let postData = {id: id};
|
||||
let postData = { id: id };
|
||||
postData[name] = real_val;
|
||||
tool.post("/project/index/edit", postData, callback);
|
||||
}
|
||||
@@ -1157,7 +1172,7 @@
|
||||
|
||||
|
||||
$('#delProject').on('click', function () {
|
||||
layer.confirm('确定要删除该项目吗?请慎重', {icon: 3, title: '提示'}, function (index) {
|
||||
layer.confirm('确定要删除该项目吗?请慎重', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.closeAll();
|
||||
layer.msg(e.msg);
|
||||
@@ -1167,7 +1182,7 @@
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
let postData = {"id": project_id};
|
||||
let postData = { "id": project_id };
|
||||
tool.delete("/project/index/delete", postData, callback);
|
||||
});
|
||||
})
|
||||
@@ -1253,23 +1268,40 @@
|
||||
</div>
|
||||
<div class="layui-form-item" style="display:flex">
|
||||
<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
|
||||
<label class="layui-form-label">开始时间</label>
|
||||
<label class="layui-form-label">合同开始</label>
|
||||
<div class="" style="width: 212px">
|
||||
<input type="text" name="start_time" required lay-verify="required" placeholder="请输入开始时间" autocomplete="off"
|
||||
<input type="text" name="start_time" placeholder="请输入开始时间" autocomplete="off"
|
||||
class="layui-input" id="start_time" value="${new Date(detail.start_time * 1000).toLocaleDateString('en-CA')}"
|
||||
onclick="layui.use('laydate', function(){ laydate({ elem: '#start_time', format: 'YYYY-MM-DD' }); })">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
|
||||
<label class="layui-form-label">结束时间</label>
|
||||
<label class="layui-form-label">合同结束</label>
|
||||
<div class="" style="width: 212px">
|
||||
<input type="text" name="end_time" required lay-verify="required" placeholder="请输入结束时间" autocomplete="off"
|
||||
<input type="text" name="end_time" placeholder="请输入结束时间" autocomplete="off"
|
||||
class="layui-input" id="end_time" value="${formatLocalDate(detail.end_time)}"
|
||||
onclick="layui.use('laydate', function(){ laydate({ elem: '#end_time', format: 'YYYY-MM-DD' }); })">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="display:flex">
|
||||
<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
|
||||
<label class="layui-form-label">项目开始</label>
|
||||
<div class="" style="width: 212px">
|
||||
<input type="text" name="project_start_time" placeholder="请输入开始时间" autocomplete="off"
|
||||
class="layui-input" id="project_start_time" value="${new Date(detail.project_start_time * 1000).toLocaleDateString('en-CA')}"
|
||||
onclick="layui.use('laydate', function(){ laydate({ elem: '#project_start_time', format: 'YYYY-MM-DD' }); })">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline" style="display:flex;align-items:center;justify-content:center;">
|
||||
<label class="layui-form-label">项目结束</label>
|
||||
<div class="" style="width: 212px">
|
||||
<input type="text" name="project_end_time" placeholder="请输入结束时间" autocomplete="off"
|
||||
class="layui-input" id="project_end_time" value="${formatLocalDate(detail.project_end_time)}"
|
||||
onclick="layui.use('laydate', function(){ laydate({ elem: '#project_end_time', format: 'YYYY-MM-DD' }); })">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">项目简介</label>
|
||||
<div class="layui-input-block">
|
||||
@@ -1290,6 +1322,8 @@
|
||||
|
||||
laydate.render({ elem: '#start_time', type: 'date', format: 'yyyy-MM-dd' });
|
||||
laydate.render({ elem: '#end_time', type: 'date', format: 'yyyy-MM-dd' });
|
||||
laydate.render({ elem: '#project_start_time', type: 'date', format: 'yyyy-MM-dd' });
|
||||
laydate.render({ elem: '#project_end_time', type: 'date', format: 'yyyy-MM-dd' });
|
||||
|
||||
form.on('submit(saveProject)', function (data) {
|
||||
$.ajax({
|
||||
@@ -1339,11 +1373,11 @@
|
||||
|
||||
//关闭项目
|
||||
$('#closeProject').on('click', function () {
|
||||
layer.confirm('确定要关闭该项目吗?请慎重', {icon: 3, title: '提示'}, function (index) {
|
||||
layer.confirm('确定要关闭该项目吗?请慎重', { icon: 3, title: '提示' }, function (index) {
|
||||
$.ajax({
|
||||
url: "/project/index/close",
|
||||
type: "POST",
|
||||
data: {"id": project_id},
|
||||
data: { "id": project_id },
|
||||
success: function (e) {
|
||||
layer.closeAll();
|
||||
layer.msg(e.msg);
|
||||
@@ -1362,11 +1396,11 @@
|
||||
|
||||
//开启项目
|
||||
$('#reopenProject').on('click', function () {
|
||||
layer.confirm('确定要开启该项目吗?请慎重', {icon: 3, title: '提示'}, function (index) {
|
||||
layer.confirm('确定要开启该项目吗?请慎重', { icon: 3, title: '提示' }, function (index) {
|
||||
$.ajax({
|
||||
url: "/project/index/open",
|
||||
type: "POST", // 根据实际情况调整请求类型
|
||||
data: {"id": project_id},
|
||||
data: { "id": project_id },
|
||||
success: function (e) {
|
||||
layer.closeAll();
|
||||
layer.msg(e.msg);
|
||||
@@ -1416,11 +1450,11 @@
|
||||
})
|
||||
} else {
|
||||
layer.confirm('确认已完成该阶段工作,进入下个阶段?', {
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
},
|
||||
icon: 3,
|
||||
title: '提示'
|
||||
},
|
||||
function (index) {
|
||||
tool.post("/api/project/step_check", {id: project_id, check: check}, callback);
|
||||
tool.post("/api/project/step_check", { id: project_id, check: check }, callback);
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -1434,7 +1468,7 @@
|
||||
//,multiple: true
|
||||
, bindAction: '#test9'
|
||||
, before: function (obj) {
|
||||
layer.msg('上传中...', {time: 3600000});
|
||||
layer.msg('上传中...', { time: 3600000 });
|
||||
}
|
||||
, done: function (res, index, upload) {
|
||||
let callback = function (e) {
|
||||
@@ -1460,7 +1494,7 @@
|
||||
|
||||
$('#fileList').on('click', '.btn-delete', function () {
|
||||
let id = $(this).data('id');
|
||||
layer.confirm('确定要删除该附件吗?', {icon: 3, title: '提示'}, function (index) {
|
||||
layer.confirm('确定要删除该附件吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.closeAll();
|
||||
layer.msg(e.msg);
|
||||
@@ -1468,7 +1502,7 @@
|
||||
location.reload();
|
||||
}, 2000)
|
||||
}
|
||||
let postData = {"id": id};
|
||||
let postData = { "id": id };
|
||||
tool.delete("/api/appendix/delete", postData, callback);
|
||||
});
|
||||
})
|
||||
@@ -1484,7 +1518,7 @@
|
||||
})
|
||||
$('#linkList').on('click', '.link-delete', function () {
|
||||
let id = $(this).data('id');
|
||||
layer.confirm('确定要删除该链接吗?', {icon: 3, title: '提示'}, function (index) {
|
||||
layer.confirm('确定要删除该链接吗?', { icon: 3, title: '提示' }, function (index) {
|
||||
let callback = function (e) {
|
||||
layer.closeAll();
|
||||
layer.msg(e.msg);
|
||||
@@ -1492,7 +1526,7 @@
|
||||
location.reload();
|
||||
}, 2000)
|
||||
}
|
||||
let postData = {"id": id};
|
||||
let postData = { "id": id };
|
||||
tool.delete("/api/appendix/delete_link", postData, callback);
|
||||
});
|
||||
})
|
||||
@@ -1510,8 +1544,8 @@
|
||||
show: false
|
||||
},
|
||||
data: [
|
||||
{value: res.data.task_pie.count - res.data.task_pie.count_ok, name: '待处理'},
|
||||
{value: res.data.task_pie.count_ok, name: '已完成'}
|
||||
{ value: res.data.task_pie.count - res.data.task_pie.count_ok, name: '待处理' },
|
||||
{ value: res.data.task_pie.count_ok, name: '已完成' }
|
||||
]
|
||||
}
|
||||
];
|
||||
@@ -1534,13 +1568,13 @@
|
||||
color: "#ED6666",
|
||||
}
|
||||
},
|
||||
{
|
||||
value: res.data.task_pie.count - res.data.task_pie.delay,
|
||||
name: '按时完成',
|
||||
itemStyle: {
|
||||
color: "#91CC75",
|
||||
}
|
||||
{
|
||||
value: res.data.task_pie.count - res.data.task_pie.delay,
|
||||
name: '按时完成',
|
||||
itemStyle: {
|
||||
color: "#91CC75",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
@@ -1553,11 +1587,11 @@
|
||||
radius: ['25%', '75%'],
|
||||
center: ['60%', '50%'],
|
||||
data: [
|
||||
{value: res.data.bug_status.status_a, name: '待解决'},
|
||||
{value: res.data.bug_status.status_b, name: '进行中'},
|
||||
{value: res.data.bug_status.status_c, name: '已解决'},
|
||||
{value: res.data.bug_status.status_d, name: '不解决'},
|
||||
{value: res.data.bug_status.status_e, name: '已关闭'}
|
||||
{ value: res.data.bug_status.status_a, name: '待解决' },
|
||||
{ value: res.data.bug_status.status_b, name: '进行中' },
|
||||
{ value: res.data.bug_status.status_c, name: '已解决' },
|
||||
{ value: res.data.bug_status.status_d, name: '不解决' },
|
||||
{ value: res.data.bug_status.status_e, name: '已关闭' }
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1588,7 +1622,7 @@
|
||||
type: 'line',
|
||||
showSymbol: false,
|
||||
markLine: {
|
||||
data: [{type: 'average', name: 'Avg'}],
|
||||
data: [{ type: 'average', name: 'Avg' }],
|
||||
},
|
||||
lineStyle: {
|
||||
width: 2
|
||||
@@ -1603,7 +1637,7 @@
|
||||
opacity: 0.1
|
||||
},
|
||||
markLine: {
|
||||
data: [{type: 'average', name: 'Avg'}],
|
||||
data: [{ type: 'average', name: 'Avg' }],
|
||||
},
|
||||
lineStyle: {
|
||||
width: 2
|
||||
@@ -1634,7 +1668,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
tool.get('/api/project/get_chart_data', {'project_id': project_id}, callback);
|
||||
tool.get('/api/project/get_chart_data', { 'project_id': project_id }, callback);
|
||||
|
||||
window.onresize = function () {
|
||||
progressChart.resize();
|
||||
|
||||
Reference in New Issue
Block a user