From 2dd16db21c92311666d3883d0c0c5ef95fa740f2 Mon Sep 17 00:00:00 2001
From: hdm <hdm58@qq.com>
Date: Thu, 6 Oct 2022 23:56:46 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8A=A5=E9=94=80=E5=85=B3?=
 =?UTF-8?q?=E8=81=94=E9=A1=B9=E7=9B=AE=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BC=98?=
 =?UTF-8?q?=E5=8C=96=E4=BB=BB=E5=8A=A1=E9=80=89=E6=8B=A9=E5=85=B3=E8=81=94?=
 =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=9A=84=E6=93=8D=E4=BD=9C=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/finance/model/Expense.php               |  6 ++
 app/finance/view/expense/add.html           | 72 +++++++++++++++++++--
 app/finance/view/expense/view.html          |  6 ++
 app/project/controller/Api.php              | 22 +++++--
 app/project/view/task/view.html             |  7 +-
 public/static/assets/gougu/module/oaEdit.js | 61 +++++++++++++++--
 6 files changed, 153 insertions(+), 21 deletions(-)

diff --git a/app/finance/model/Expense.php b/app/finance/model/Expense.php
index 00e4ae8..2a45768 100644
--- a/app/finance/model/Expense.php
+++ b/app/finance/model/Expense.php
@@ -63,6 +63,12 @@ class Expense extends Model
             }
             else{
                 $expense['pay_time'] = '-';
+            }
+			if ($expense['ptid'] > 0) {
+                $expense['ptname'] = Db::name('Project')->where(['id' => $expense['ptid']])->value('name');
+            }
+            else{
+                $expense['ptname'] = '';
             }
             $expense['list'] = Db::name('ExpenseInterfix')
                 ->field('a.*,c.title as cate_title')
diff --git a/app/finance/view/expense/add.html b/app/finance/view/expense/add.html
index 85e4b76..54964c7 100644
--- a/app/finance/view/expense/add.html
+++ b/app/finance/view/expense/add.html
@@ -41,6 +41,13 @@
 				<input type="text" class="layui-input" id="income_month" name="income_month" lay-verify="required" placeholder="请选择入账月份" lay-reqText="请选择入账月份" readonly value="">	
 			</td>
 		</tr>
+		<tr>
+		<td class="layui-td-gray">关联的项目</td>
+			<td colspan="5">
+				<input type="text" class="layui-input project-picker" name="ptname" placeholder="请选择需要关联的项目" readonly value="">		
+				<input type="hidden" class="layui-input" name="ptid" value="0">		
+			</td>
+		</tr>
 		<tr>
 			<td class="layui-td-gray">报销选项<font>*</font></td>
 			<td colspan="5">				
@@ -124,6 +131,13 @@
 				<input type="text" class="layui-input" id="income_month" name="income_month" lay-verify="required" placeholder="请选择入账月份" lay-reqText="请选择入账月份" readonly value="{$expense.income_month}">	
 			</td>
 		</tr>
+		<tr>
+		<td class="layui-td-gray">关联的项目</td>
+			<td colspan="5">
+				<input type="text" class="layui-input project-picker" name="ptname" placeholder="请选择需要关联的项目" readonly value="{$expense.ptname}">		
+				<input type="hidden" class="layui-input" name="ptid" value="{$expense.ptid}">		
+			</td>
+		</tr>
 		<tr>
 			<td class="layui-td-gray">报销选项<font>*</font></td>
 			<td colspan="5">	
@@ -242,11 +256,7 @@ Array.prototype.remove = function (val) {
 
 const moduleInit = ['tool','employeepicker'];
 	function gouguInit() {
-		var form = layui.form,
-			upload = layui.upload,
-			tool=layui.tool,
-			employeepicker = layui.employeepicker,
-			laydate = layui.laydate;	
+		var form = layui.form,upload = layui.upload,tool=layui.tool,table=layui.table,employeepicker = layui.employeepicker,laydate = layui.laydate;	
 
 		laydate.render({
 			elem: '#income_month',
@@ -305,6 +315,58 @@ const moduleInit = ['tool','employeepicker'];
 			}
 		});
 		
+		//选择关联项目	
+		$('.project-picker').on('click', function () {
+			selectProject();
+		});
+		var projectTable;
+		function selectProject() {
+			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="projectTable"></div></div>',
+				success: function () {
+					projectTable = table.render({
+						elem: '#projectTable'
+						, url: '/project/api/get_project'
+						, page: true //开启分页
+						, limit: 10
+						, cols: [[
+							{ type: 'radio', title: '选择' }
+							, { field: 'id', width: 100, title: '编号', align: 'center' }
+							, { field: 'title', title: '项目名称' }
+						]]
+					});
+				},
+				btn: ['确定'],
+				yes: function () {
+					var checkStatus = table.checkStatus(projectTable.config.id);
+					var data = checkStatus.data;
+					if (data.length > 0) {
+						$('[name="ptname"]').val(data[0].title);
+						$('[name="ptid"]').val(data[0].id);
+						layer.closeAll();
+					}
+					else {
+						layer.msg('请先选择项目');
+						return false;
+					}
+				}
+			})
+		}
+		//项目搜索提交
+		form.on('submit(search_form)', function (data) {
+			projectTable.reload({ where: { keywords: data.field.keywords }, page: { curr: 1 } });
+			return false;
+		});
 		
 		//监听提交
 		form.on('submit(webform)', function(data){
diff --git a/app/finance/view/expense/view.html b/app/finance/view/expense/view.html
index 92698dc..0e6fb19 100644
--- a/app/finance/view/expense/view.html
+++ b/app/finance/view/expense/view.html
@@ -66,6 +66,12 @@
 			<td class="layui-td-gray-2">原始单据日期</td>
 			<td>{$detail.expense_time}</td>
 		</tr>
+		{if condition="$detail.ptid > 0"}
+		<tr>
+		<td class="layui-td-gray">关联的项目</td>
+			<td colspan="5">{$detail.ptname}</td>
+		</tr>
+		{/if}
 		<tr>
 			<td class="layui-td-gray">报销人</td>
 			<td>{$detail.create_user}</td>
diff --git a/app/project/controller/Api.php b/app/project/controller/Api.php
index a1be7d7..7325cbc 100644
--- a/app/project/controller/Api.php
+++ b/app/project/controller/Api.php
@@ -522,10 +522,24 @@ class Api extends BaseController
     //获取项目列表
     public function get_project()
     {
-        $where = [];
-        $where[] = ['delete_time', '=', 0];
-        $project = Db::name('Project')->field('id,name as title')->where($where)->select();
-        return to_assign(0, '', $project);
+		$param = get_params();
+		$project_ids = Db::name('ProjectUser')->where(['uid' => $this->uid, 'delete_time' => 0])->column('project_id');
+		$rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
+		
+		$auth = isAuth($this->uid,'contract_admin');
+		$where = [];
+		$where[] = ['delete_time', '=', 0];
+		if(isset($param['keywords'])){
+			$where[] = ['name', 'like', '%'.$param['keywords'].'%'];
+		}		
+		if($auth == 0){
+			$where[] = ['id', 'in', $project_ids];
+		}	
+		$list = ProjectList::field('id,name as title')
+			->where($where)
+			->order('id desc')
+			->paginate($rows, false, ['query' => $param]);
+		return table_assign(0, '', $list);
     }
 	
 	//编辑阶段
diff --git a/app/project/view/task/view.html b/app/project/view/task/view.html
index 00be45d..d345ca7 100644
--- a/app/project/view/task/view.html
+++ b/app/project/view/task/view.html
@@ -370,12 +370,7 @@
 			}
 			if (name == "project_id") {
 				if (admin_id == login_user) {
-					loading = true;
-					tool.get("/project/api/get_project", {}, function (res) {
-						let data = res.data;
-						loading = false;
-						edit.dropdown(id, name, real_txt, data, editPost, 1);
-					});
+					edit.select_table(id, name, real_txt, "/project/api/get_project", editPost, 1);
 				} else {
 					layer.msg('您没权限修改,请联系创建人或负责人修改');
 				}
diff --git a/public/static/assets/gougu/module/oaEdit.js b/public/static/assets/gougu/module/oaEdit.js
index 82f121a..ec61582 100644
--- a/public/static/assets/gougu/module/oaEdit.js
+++ b/public/static/assets/gougu/module/oaEdit.js
@@ -1,10 +1,11 @@
 layui.define(['tool','employeepicker','tinymce'], function (exports) {
-	const table = layui.table;
-	const laydate = layui.laydate;
-	const dropdown = layui.dropdown;
-	const employeepicker = layui.employeepicker;
-	const tinymce = layui.tinymce;
-	const obj = {
+	let form = layui.form;
+	let table = layui.table;
+	let laydate = layui.laydate;
+	let dropdown = layui.dropdown;
+	let employeepicker = layui.employeepicker;
+	let tinymce = layui.tinymce;
+	let obj = {
 		//文本
 		text: function (id, name, real_txt, editPost) {
 			let that = this;
@@ -79,6 +80,54 @@ layui.define(['tool','employeepicker','tinymce'], function (exports) {
 				}
 			});
 		},
+		//ajax表格单选
+		select_table: function (id, name, real_val, url, editPost) {
+			let that = this;
+			let selectTable;
+			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="selectTable"></div></div>',
+				success: function () {
+					selectTable = table.render({
+						elem: '#selectTable'
+						, url: url
+						, page: true //开启分页
+						, limit: 10
+						, cols: [[
+							{ type: 'radio', title: '选择' }
+							, { field: 'id', width: 100, title: '编号', align: 'center' }
+							, { field: 'title', title: '项目名称' }
+						]]
+					});
+					//项目搜索提交
+					form.on('submit(search_form)', function (data) {
+						selectTable.reload({ where: { keywords: data.field.keywords }, page: { curr: 1 } });
+						return false;
+					});
+				},
+				btn: ['确定'],
+				yes: function () {
+					var checkStatus = table.checkStatus(selectTable.config.id);
+					var data = checkStatus.data;
+					if (data.length > 0) {
+						editPost(id, name, data[0].title, data[0].id);
+					}
+					else {
+						layer.msg('请选择');
+						return false;
+					}
+				}
+			})
+		},
 		//表格单选
 		select_type: function (id, name, real_val, data, editPost) {
 			let that = this;