新增项目时可关联合同

This commit is contained in:
hdm 2022-11-12 01:22:53 +08:00
parent 0c14f6c281
commit db20c9b795
7 changed files with 158 additions and 8 deletions

View File

@ -37,7 +37,7 @@ class Api extends BaseController
}
$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
$list = Db::name('Contract')
->field('id,name,sign_uid,sign_time')
->field('id,name,customer_id,sign_uid,sign_time')
->order('end_time asc')
->where($where)
->where(function ($query) use($whereOr) {

View File

@ -299,6 +299,7 @@ function gouguInit() {
});
},
btn: ['确定'],
btnAlign: 'c',
yes: function () {
var checkStatus = table.checkStatus(contractTable.config.id);
var data = checkStatus.data;

View File

@ -36,6 +36,10 @@ class Project extends Model
$detail['users'] = Db::name('ProjectUser')->where(['delete_time' => 0,'project_id'=>$id])->count();
$detail['comments'] = Db::name('ProjectComment')->where([['module','=','project'],['topic_id','=',$detail['id']],['delete_time','=',0]])->count();
$detail['logs'] = Db::name('ProjectLog')->where(['module' => 'project', 'project_id' => $detail['id']])->count();
$detail['contract']='';
if($detail['contract_id']>0){
$detail['contract'] = Db::name('Contract')->where(['id' => $detail['contract_id']])->value('name');
}
}
return $detail;
}

View File

@ -22,10 +22,12 @@ class ProjectLog extends Model
'end_time' => array('icon' => 'icon-kaoshijihua', 'title' => '预计结束时间'),
'name' => array('icon' => 'icon-wodedianping', 'title' => '标题'),
'status' => array('icon' => 'icon-wodedianping', 'title' => '状态'),
'content' => array('icon' => 'icon-wodedianping', 'title' => '项目描述'),
'file' => array('icon' => 'icon-sucaiziyuan', 'title' => '项目文件'),
'link' => array('icon' => 'icon-sucaiziyuan', 'title' => '项目链接'),
'user' => array('icon' => 'icon-xueshengzhuce', 'title' => '项目成员'),
'content' => array('icon' => 'icon-wodedianping', 'title' => '描述'),
'file' => array('icon' => 'icon-sucaiziyuan', 'title' => '文件'),
'contract_id' => array('icon' => 'icon-hetongguanli', 'title' => '合同'),
'customer_id' => array('icon' => 'icon-jiaoshiguanli', 'title' => '客户'),
'link' => array('icon' => 'icon-sucaiziyuan', 'title' => '链接'),
'user' => array('icon' => 'icon-xueshengzhuce', 'title' => '成员'),
'new' => array('icon' => 'icon-zidingyishezhi', 'title' => '项目'),
'delete' => array('icon' => 'icon-shanchu', 'title' => '项目'),
]],
@ -174,6 +176,9 @@ class ProjectLog extends Model
if ($v['old_content'] == '') {
$v['old_content'] = '未设置';
}
else{
$v['old_content'] = date('Y-m-d', (int) $v['old_content']);
}
$v['new_content'] = date('Y-m-d', (int) $v['new_content']);
}
if (strpos($v['field'], '_uid') !== false) {
@ -190,6 +195,14 @@ class ProjectLog extends Model
if ($v['field'] == 'cate') {
$v['old_content'] = Db::name('WorkCate')->where(['id' => $v['old_content']])->value('title');
$v['new_content'] = Db::name('WorkCate')->where(['id' => $v['new_content']])->value('title');
}
if ($v['field'] == 'contract_id') {
$v['old_content'] = Db::name('Contract')->where(['id' => $v['old_content']])->value('name');
$v['new_content'] = Db::name('Contract')->where(['id' => $v['new_content']])->value('name');
}
if ($v['field'] == 'customer_id') {
$v['old_content'] = Db::name('Customer')->where(['id' => $v['old_content']])->value('name');
$v['new_content'] = Db::name('Customer')->where(['id' => $v['new_content']])->value('name');
}
if ($v['field'] == 'done_ratio') {
$v['old_content'] = $v['old_content'] . '%';

View File

@ -40,6 +40,16 @@
<input type="hidden" id="team_admin_ids" name="team_admin_ids" class="layui-input" value="">
</td>
</tr>
{gt name=":isModule('contract')" value="0"}
<tr>
<td class="layui-td-gray">关联合同</td>
<td colspan="8">
<input type="text" class="layui-input contract-picker" name="contract_name" placeholder="请选择需要关联的合同" readonly value="">
<input type="hidden" class="layui-input" name="contract_id" value="0">
<input type="hidden" class="layui-input" name="customer_id" value="0">
</td>
</tr>
{/gt}
<tr>
<td class="layui-td-gray">项目简介<span style="color: red">*</span></td>
<td colspan="3">
@ -135,7 +145,7 @@
</td>
</tr>
</table>
<div style="padding: 10px 0">
<div class="pt-3">
<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>
@ -149,7 +159,7 @@
<script>
const moduleInit = ['tool','employeepicker'];
function gouguInit() {
var form = layui.form,tool = layui.tool,laydate = layui.laydate,employeepicker = layui.employeepicker;
var form = layui.form,tool = layui.tool,table = layui.table,laydate = layui.laydate,employeepicker = layui.employeepicker;
//日期范围
laydate.render({
elem: '#date',
@ -164,6 +174,61 @@
trigger: 'click'
});
});
//选择关联合同
$('.contract-picker').on('click', function () {
contractProject();
});
var contractTable;
function contractProject() {
layer.open({
title: '选择合同',
area: ['600px', '580px'],
type: 1,
content: '<div class="picker-table">\
<form class="layui-form pb-2">\
<div class="layui-input-inline" style="width:480px;">\
<input type="text" name="keywords" placeholder="合同名称" class="layui-input" autocomplete="off" />\
</div>\
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="search_form">提交搜索</button>\
</form>\
<div id="contractTable"></div></div>',
success: function () {
contractTable = table.render({
elem: '#contractTable'
, url: '/contract/api/get_contract'
, page: true //开启分页
, limit: 10
, cols: [[
{ type: 'radio', title: '选择' }
, { field: 'id', width: 100, title: '编号', align: 'center' }
, { field: 'name', title: '合同名称' }
]]
});
//项目搜索提交
form.on('submit(search_form)', function (data) {
contractTable.reload({ where: { keywords: data.field.keywords }, page: { curr: 1 } });
return false;
});
},
btn: ['确定'],
btnAlign: 'c',
yes: function () {
var checkStatus = table.checkStatus(contractTable.config.id);
var data = checkStatus.data;
if (data.length > 0) {
$('[name="contract_name"]').val(data[0].name);
$('[name="contract_id"]').val(data[0].id);
$('[name="customer_id"]').val(data[0].customer_id);
layer.closeAll();
}
else {
layer.msg('请先选择合同');
return false;
}
}
})
}
$('.add-flow').on('click',function(){

View File

@ -24,6 +24,12 @@
<td class="layui-td-gray">项目成员</td>
<td colspan="3">{$detail.team_admin_names}</td>
</tr>
{gt name="$detail.contract_id" value="0"}
<tr>
<td class="layui-td-gray">关联合同</td>
<td colspan="3">{$detail.contract}</td>
</tr>
{/gt}
<tr>
<td class="layui-td-gray">项目简介</td>
<td colspan="3">{$detail.content}</td>

View File

@ -15,6 +15,11 @@
<i class="iconfont icon-wodedianping" title="修改计划开始日期" data-name="start_time"></i>&nbsp;&nbsp;&nbsp;&nbsp; <span id="end_time_{$detail.id}"
data-val="">{$detail.end_time_str}</span><i class="iconfont icon-wodedianping"
title="修改计划结束日期" data-name="end_time"></i>
{gt name=":isModule('contract')" value="0"}
<span class="gray" style="margin-left:32px">关联合同:</span>
<span id="content_{$detail.id}" data-val="{$detail.contract_id}">{$detail.contract}</span>
<i class="iconfont icon-wodedianping" title="编辑" data-id="{$detail.id}" data-name="contract_id"></i>
{/gt}
</div>
<div class="py-1">
<span class="gray">项目简介:</span>
@ -257,7 +262,7 @@
</div>
<script>
function overview(){
let form = layui.form,tool = layui.tool, comment = layui.oaComment, edit = layui.oaEdit,upload = layui.upload;
let form = layui.form,tool = layui.tool,table = layui.table, comment = layui.oaComment, edit = layui.oaEdit,upload = layui.upload;
$('.hover-edit').hover(function () {
$(this).addClass('hover-on');
}, function () {
@ -309,6 +314,62 @@ function overview(){
if (name == "content") {
edit.textarea(id, name, real_txt, editPost);
}
if (name == "contract_id") {
layer.open({
title: '选择合同',
area: ['600px', '580px'],
type: 1,
content: '<div class="picker-table">\
<form class="layui-form pb-2">\
<div class="layui-input-inline" style="width:480px;">\
<input type="text" name="keywords" placeholder="合同名称" class="layui-input" autocomplete="off" />\
</div>\
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="search_form">提交搜索</button>\
</form>\
<div id="contractTable"></div></div>',
success: function () {
contractTable = table.render({
elem: '#contractTable'
, url: '/contract/api/get_contract'
, page: true //开启分页
, limit: 10
, cols: [[
{ type: 'radio', title: '选择' }
, { field: 'id', width: 100, title: '编号', align: 'center' }
, { field: 'name', title: '合同名称' }
]]
});
//项目搜索提交
form.on('submit(search_form)', function (data) {
contractTable.reload({ where: { keywords: data.field.keywords }, page: { curr: 1 } });
return false;
});
},
btn: ['确定'],
btnAlign: 'c',
yes: function () {
var checkStatus = table.checkStatus(contractTable.config.id);
var data = checkStatus.data;
if (data.length > 0) {
let callback = function (e) {
layer.closeAll();
layer.msg(e.msg);
if (e.code == 0) {
setTimeout(function () {
location.reload();
}, 1000)
}
}
let postData = { id: id, contract_id:data[0].id, customer_id:data[0].customer_id };
tool.post("/project/index/edit", postData, callback);
}
else {
layer.msg('请先选择合同');
return false;
}
}
})
}
}
$('#delProject').on('click', function () {