From b87131e77215a9876e4892d19b51ebf9b38fb793 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Tue, 27 May 2025 09:20:40 +0000 Subject: [PATCH 1/7] * [bug#144213,done,1h,0h] Fix select product error. --- module/doc/model.php | 2 +- module/my/model.php | 1 + module/pivot/tao.php | 1 + module/product/model.php | 5 +++-- module/product/tao.php | 2 ++ module/program/model.php | 1 + module/project/model.php | 11 ++++++----- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/module/doc/model.php b/module/doc/model.php index 28f7146cf2..ec02f17058 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -1411,7 +1411,7 @@ class docModel extends model } if($type == 'project') { - $projects = $this->loadModel('project')->getListByCurrentUser(); + $projects = $this->loadModel('project')->getListByCurrentUser('*', false); $involvedProjects = $this->project->getInvolvedListByCurrentUser(); $spaceID = $this->project->checkAccess($spaceID, $projects); diff --git a/module/my/model.php b/module/my/model.php index 475413119c..9572c66a22 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -1507,6 +1507,7 @@ class myModel extends model ->beginIF($type == 'undone')->andWhere('t1.status')->eq('normal')->fi() ->beginIF($type == 'ownbyme')->andWhere('t1.PO')->eq($this->app->user->account)->fi() ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() + ->setAutoTpl(false) ->orderBy('t1.order_asc') ->fetchAll('id'); diff --git a/module/pivot/tao.php b/module/pivot/tao.php index 1482a92d86..f2222a8246 100644 --- a/module/pivot/tao.php +++ b/module/pivot/tao.php @@ -79,6 +79,7 @@ class pivotTao extends pivotModel ->beginIF($productID)->andWhere('t1.id')->eq($productID)->fi() ->beginIF($productStatus)->andWhere('t1.status')->eq($productStatus)->fi() ->beginIF($productType)->andWhere('t1.type')->eq($productType)->fi() + ->setAutoTpl(false) ->orderBy('t2.order_asc, t1.line_desc, t1.order_asc') ->fetchAll('id'); } diff --git a/module/product/model.php b/module/product/model.php index feb53a801b..b266353ad6 100755 --- a/module/product/model.php +++ b/module/product/model.php @@ -52,7 +52,7 @@ class productModel extends model */ public function getByIdList(array $productIdList): array { - return $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in($productIdList)->fetchAll('id', false); + return $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in($productIdList)->setAutoTpl(false)->fetchAll('id', false); } /** @@ -65,7 +65,7 @@ class productModel extends model */ public function getListByAcl(string $acl): array { - return $this->dao->select('id, program, PO, QD, RD, feedback, ticket, acl, whitelist, reviewer, PMT, createdBy')->from(TABLE_PRODUCT)->where('acl')->in($acl)->fetchAll('id'); + return $this->dao->select('id, program, PO, QD, RD, feedback, ticket, acl, whitelist, reviewer, PMT, createdBy')->from(TABLE_PRODUCT)->where('acl')->in($acl)->setAutoTpl(false)->fetchAll('id'); } /** @@ -90,6 +90,7 @@ class productModel extends model ->andWhere('t1.shadow')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() ->beginIF($this->config->vision != 'or')->andWhere("FIND_IN_SET('{$this->config->vision}', t1.vision)")->fi() + ->setAutoTpl(false) ->orderBy('t1.order_asc') ->fetchAll('id'); } diff --git a/module/product/tao.php b/module/product/tao.php index 60a8dab5d0..3ee8d2f95e 100644 --- a/module/product/tao.php +++ b/module/product/tao.php @@ -65,6 +65,7 @@ class productTao extends productModel ->beginIF(!$this->app->user->admin && $this->config->vision != 'lite' && $this->app->rawModule != 'repo')->andWhere('t1.id')->in($this->app->user->view->products)->fi() ->markRight(1) ->beginIF($append)->orWhere('(t1.id')->in($append)->markRight(1)->fi() + ->setAutoTpl(false) ->orderBy("isClosed,t2.order_asc,t1.line_desc,t1.order_asc") ->fetchPairs('id', 'name'); } @@ -150,6 +151,7 @@ class productTao extends productModel return $this->dao->select('t1.*')->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') ->where('t1.id')->in($productIDs) + ->setAutoTpl(false) ->orderBy('t2.order_asc, t1.line_desc, t1.order_asc') ->page($pager) ->fetchAll('id'); diff --git a/module/program/model.php b/module/program/model.php index 8e0f080a30..89f2b90e1a 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -110,6 +110,7 @@ class programModel extends model ->beginIF($mode == 'assign')->andWhere('t1.program')->eq($programID)->fi() ->beginIF(strpos($status, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($views)->fi() + ->setAutoTpl(false) ->orderBy('t2.order_asc,t1.line_desc,t1.order_asc'); if(!$withProgram) return $dao->fetchPairs('id', 'name'); diff --git a/module/project/model.php b/module/project/model.php index a459fff199..b746c37b9b 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -47,6 +47,7 @@ class projectModel extends model return $this->dao->select('id, project, type, parent, path, openedBy, PO, PM, QD, RD, acl')->from(TABLE_PROJECT) ->where('acl')->in($acl) ->beginIF($type)->andWhere('type')->in($type)->fi() + ->setAutoTpl(false) ->fetchAll('id'); } @@ -67,19 +68,19 @@ class projectModel extends model * 获取当前登录用户有权限查看的项目列表. * Get project list by current user. * - * @param string $fields + * @param string $fields + * @param bool $autoTpl * @access public * @return array */ - public function getListByCurrentUser(string $fields = '*') :array + public function getListByCurrentUser(string $fields = '*', bool $autoTpl = true) :array { return $this->dao->select($fields)->from(TABLE_PROJECT) ->where('type')->eq('project') ->beginIF($this->config->vision)->andWhere('vision')->eq($this->config->vision)->fi() - ->andWhere('(deleted')->eq(0) + ->andWhere('deleted')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() - ->orWhere('isTpl')->eq('1') - ->markRight(1) + ->setAutoTpl($autoTpl) ->orderBy('order_asc,id_desc') ->fetchAll('id'); } From ac60f1406415c293844f855b621b80866cd26a2f Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 28 May 2025 01:36:08 +0000 Subject: [PATCH 2/7] * Add getproducts unit test script. --- module/my/test/model/getproducts.php | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 module/my/test/model/getproducts.php diff --git a/module/my/test/model/getproducts.php b/module/my/test/model/getproducts.php new file mode 100755 index 0000000000..832f38a580 --- /dev/null +++ b/module/my/test/model/getproducts.php @@ -0,0 +1,47 @@ +#!/usr/bin/env php +gen(10); +zenData('release')->gen(10); +zenData('story')->gen(0); +zenData('project')->gen(10); +zenData('productplan')->gen(10); +zenData('projectproduct')->gen(10); +su('admin'); + +/** + +title=测试 myModel->getproducts(); +timeout=0 +cid=1 + +- 测试获取流程键值对属性allCount @10 +- 测试获取流程键值对属性unclosedCount @10 +- 测试获取流程键值对 + - 第0条的id属性 @1 + - 第0条的name属性 @正常产品1 + - 第0条的releases属性 @5 +- 测试获取流程键值对 + - 第1条的id属性 @2 + - 第1条的name属性 @正常产品2 + - 第1条的releases属性 @2 +- 测试获取流程键值对 + - 第2条的id属性 @3 + - 第2条的name属性 @正常产品3 + - 第2条的releases属性 @0 + +*/ + +global $tester; +$tester->loadModel('my'); + +$products = $tester->my->getProducts(); +r($products) && p('allCount') && e(10); // 测试获取流程键值对 +r($products) && p('unclosedCount') && e(10); // 测试获取流程键值对 + +$products = $products->products; +r($products) && p('0:id,name,releases') && e('1,正常产品1,5'); // 测试获取流程键值对 +r($products) && p('1:id,name,releases') && e('2,正常产品2,2'); // 测试获取流程键值对 +r($products) && p('2:id,name,releases') && e('3,正常产品3,0'); // 测试获取流程键值对 From 4b54d416d81f8b80662e0d114391d3fa46420ba0 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 28 May 2025 01:48:38 +0000 Subject: [PATCH 3/7] * Add getlistbyacl unit test script. --- module/my/test/model/getproducts.php | 20 ++++---- module/product/test/model/getlistbyacl.php | 55 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 10 deletions(-) create mode 100755 module/product/test/model/getlistbyacl.php diff --git a/module/my/test/model/getproducts.php b/module/my/test/model/getproducts.php index 832f38a580..2d503c7b48 100755 --- a/module/my/test/model/getproducts.php +++ b/module/my/test/model/getproducts.php @@ -17,17 +17,17 @@ title=测试 myModel->getproducts(); timeout=0 cid=1 -- 测试获取流程键值对属性allCount @10 -- 测试获取流程键值对属性unclosedCount @10 -- 测试获取流程键值对 +- 获取所有产品的数量属性allCount @10 +- 获取所有未关闭的产品数量属性unclosedCount @10 +- 获取产品中序号为0的产品属性 - 第0条的id属性 @1 - 第0条的name属性 @正常产品1 - 第0条的releases属性 @5 -- 测试获取流程键值对 +- 获取产品中序号为1的产品属性 - 第1条的id属性 @2 - 第1条的name属性 @正常产品2 - 第1条的releases属性 @2 -- 测试获取流程键值对 +- 获取产品中序号为2的产品属性 - 第2条的id属性 @3 - 第2条的name属性 @正常产品3 - 第2条的releases属性 @0 @@ -38,10 +38,10 @@ global $tester; $tester->loadModel('my'); $products = $tester->my->getProducts(); -r($products) && p('allCount') && e(10); // 测试获取流程键值对 -r($products) && p('unclosedCount') && e(10); // 测试获取流程键值对 +r($products) && p('allCount') && e(10); // 获取所有产品的数量 +r($products) && p('unclosedCount') && e(10); // 获取所有未关闭的产品数量 $products = $products->products; -r($products) && p('0:id,name,releases') && e('1,正常产品1,5'); // 测试获取流程键值对 -r($products) && p('1:id,name,releases') && e('2,正常产品2,2'); // 测试获取流程键值对 -r($products) && p('2:id,name,releases') && e('3,正常产品3,0'); // 测试获取流程键值对 +r($products) && p('0:id,name,releases') && e('1,正常产品1,5'); // 获取产品中序号为0的产品属性 +r($products) && p('1:id,name,releases') && e('2,正常产品2,2'); // 获取产品中序号为1的产品属性 +r($products) && p('2:id,name,releases') && e('3,正常产品3,0'); // 获取产品中序号为2的产品属性 diff --git a/module/product/test/model/getlistbyacl.php b/module/product/test/model/getlistbyacl.php new file mode 100755 index 0000000000..f5681944ad --- /dev/null +++ b/module/product/test/model/getlistbyacl.php @@ -0,0 +1,55 @@ +#!/usr/bin/env php +gen(100); +su('admin'); + +/** + +title=测试 productModel->getlistbyacl(); +timeout=0 +cid=1 + +- 获取权限为公开ID为1的产品属性。 + - 第1条的id属性 @1 + - 第1条的program属性 @0 + - 第1条的PO属性 @po1 + - 第1条的QD属性 @test1 + - 第1条的RD属性 @dev1 +- 获取权限为公开ID为2的产品属性。 + - 第2条的id属性 @2 + - 第2条的program属性 @1 + - 第2条的PO属性 @po2 + - 第2条的QD属性 @test2 + - 第2条的RD属性 @dev2 +- 获取权限为私有ID为100的产品属性。 + - 第100条的id属性 @100 + - 第100条的program属性 @0 + - 第100条的PO属性 @po10 + - 第100条的QD属性 @test100 + - 第100条的RD属性 @dev100 +- 获取权限为私有ID为80的产品属性。 + - 第80条的id属性 @80 + - 第80条的program属性 @2 + - 第80条的PO属性 @po10 + - 第80条的QD属性 @test80 + - 第80条的RD属性 @dev80 +- 获取权限为私有ID为60的产品属性。 + - 第60条的id属性 @60 + - 第60条的program属性 @4 + - 第60条的PO属性 @po10 + - 第60条的QD属性 @test60 + - 第60条的RD属性 @dev60 + +*/ + +global $tester; +$tester->loadModel('product'); + +r($tester->product->getlistbyacl('open')) && p('1:id,program,PO,QD,RD') && e('1,0,po1,test1,dev1'); // 获取权限为公开ID为1的产品属性。 +r($tester->product->getlistbyacl('open')) && p('2:id,program,PO,QD,RD') && e('2,1,po2,test2,dev2'); // 获取权限为公开ID为2的产品属性。 +r($tester->product->getlistbyacl('private')) && p('100:id,program,PO,QD,RD') && e('100,0,po10,test100,dev100'); // 获取权限为私有ID为100的产品属性。 +r($tester->product->getlistbyacl('private')) && p('80:id,program,PO,QD,RD') && e('80,2,po10,test80,dev80'); // 获取权限为私有ID为80的产品属性。 +r($tester->product->getlistbyacl('private')) && p('60:id,program,PO,QD,RD') && e('60,4,po10,test60,dev60'); // 获取权限为私有ID为60的产品属性。 From f7ee242dfefab4db438b3c9e00afd90d0b2b5d61 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 28 May 2025 02:01:37 +0000 Subject: [PATCH 4/7] * Add getlistbyaclandtype unit test script. --- .../test/model/getlistbyaclandtype.php | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 module/project/test/model/getlistbyaclandtype.php diff --git a/module/project/test/model/getlistbyaclandtype.php b/module/project/test/model/getlistbyaclandtype.php new file mode 100755 index 0000000000..db783f4319 --- /dev/null +++ b/module/project/test/model/getlistbyaclandtype.php @@ -0,0 +1,45 @@ +#!/usr/bin/env php +gen(100); +su('admin'); + +/** + +title=测试 projectModel->getlistbyaclandtype(); +timeout=0 +cid=1 + +- 获取权限为公开类型为项目ID为100的项目属性。 + - 第100条的id属性 @100 + - 第100条的project属性 @10 + - 第100条的type属性 @project +- 获取权限为公开类型为项目集ID为10的项目集属性。 + - 第10条的id属性 @10 + - 第10条的project属性 @0 + - 第10条的type属性 @program +- 获取权限为私有类型为项目ID为98的项目属性。 + - 第98条的id属性 @98 + - 第98条的project属性 @8 + - 第98条的type属性 @project +- 获取权限为私有类型为项目ID为11的项目属性。 + - 第11条的id属性 @11 + - 第11条的project属性 @1 + - 第11条的type属性 @project +- 获取权限为私有类型为项目集ID为8的项目集属性。 + - 第8条的id属性 @8 + - 第8条的project属性 @0 + - 第8条的type属性 @program + +*/ + +global $tester; +$tester->loadModel('project'); + +r($tester->project->getListByAclAndType('open', 'project')) && p('100:id,project,type') && e('100,10,project'); // 获取权限为公开类型为项目ID为100的项目属性。 +r($tester->project->getListByAclAndType('open', 'program')) && p('10:id,project,type') && e('10,0,program'); // 获取权限为公开类型为项目集ID为10的项目集属性。 +r($tester->project->getListByAclAndType('private', 'project')) && p('98:id,project,type') && e('98,8,project'); // 获取权限为私有类型为项目ID为98的项目属性。 +r($tester->project->getListByAclAndType('private', 'project')) && p('11:id,project,type') && e('11,1,project'); // 获取权限为私有类型为项目ID为11的项目属性。 +r($tester->project->getListByAclAndType('private', 'program')) && p('8:id,project,type') && e('8,0,program'); // 获取权限为私有类型为项目集ID为8的项目集属性。 From 9886b487bf3f57d42373df1c448232d56d71e2a8 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 28 May 2025 03:14:01 +0000 Subject: [PATCH 5/7] * Add unit test script extract comment. --- module/pivot/test/tao/getproductlist.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/module/pivot/test/tao/getproductlist.php b/module/pivot/test/tao/getproductlist.php index 298cad24f0..f4e60b7b9e 100644 --- a/module/pivot/test/tao/getproductlist.php +++ b/module/pivot/test/tao/getproductlist.php @@ -6,10 +6,24 @@ title=测试 pivotTao->getProductList(); cid=1 pid=1 -查询所有的已关闭产品 >> 1,正常产品1;9,正常产品9 -查询所有的未关闭产品 >> 1,正常产品1;10,正常产品10 -查询所有的已关闭产品,并且id在1,2,3,5中 >> 1,5 -查询所有的未关闭产品,并且id在5,7,8,9中 >> 5,7,9 +- 查询所有的已关闭产品 + - 第1条的id属性 @1 + - 第1条的name属性 @正常产品1 + - 第9条的id属性 @9 + - 第9条的name属性 @正常产品9 +- 查询所有的未关闭产品 + - 第1条的id属性 @1 + - 第1条的name属性 @正常产品1 + - 第10条的id属性 @10 + - 第10条的name属性 @正常产品10 +- 查询所有的已关闭产品,并且id在1,2,3,5中 + - 第1条的id属性 @1 + - 第5条的id属性 @5 +- 查询所有的未关闭产品,并且id在5,7,8,9中 + - 第5条的id属性 @5 + - 第7条的id属性 @7 + - 第9条的id属性 @9 + */ include dirname(__FILE__, 5) . '/test/lib/init.php'; From b465fbd0bc3a9a9de14aef8668cf84094ac86739 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 28 May 2025 03:17:56 +0000 Subject: [PATCH 6/7] * Add unit test script comment. --- module/product/test/model/getlistbysearch.php | 5 ++++- module/program/test/model/getproductpairs.php | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/module/product/test/model/getlistbysearch.php b/module/product/test/model/getlistbysearch.php index 37935bc321..dee13b82e4 100644 --- a/module/product/test/model/getlistbysearch.php +++ b/module/product/test/model/getlistbysearch.php @@ -1,13 +1,14 @@ #!/usr/bin/env php getListBySearch(); cid=0 - 测试通过空的搜索条件筛选产品数据第1条的name属性 @产品1 +- 测试通过空的搜索条件筛选产品数据第2条的name属性 @产品2 - 测试通过搜索条件筛选产品数据第1条的name属性 @产品1 +- 测试通过搜索条件筛选产品数据第2条的name属性 @产品2 - 测试通过不存在的搜索条件筛选产品数据第1条的name属性 @产品1 */ @@ -27,5 +28,7 @@ $queryIdList = array(0, 1, 2); global $tester; $tester->loadModel('product'); r($tester->product->getListBySearch($queryIdList[0])) && p('1:name') && e('产品1'); // 测试通过空的搜索条件筛选产品数据 +r($tester->product->getListBySearch($queryIdList[0])) && p('2:name') && e('产品2'); // 测试通过空的搜索条件筛选产品数据 r($tester->product->getListBySearch($queryIdList[1])) && p('1:name') && e('产品1'); // 测试通过搜索条件筛选产品数据 +r($tester->product->getListBySearch($queryIdList[1])) && p('2:name') && e('产品2'); // 测试通过搜索条件筛选产品数据 r($tester->product->getListBySearch($queryIdList[2])) && p('1:name') && e('产品1'); // 测试通过不存在的搜索条件筛选产品数据 diff --git a/module/program/test/model/getproductpairs.php b/module/program/test/model/getproductpairs.php index 5fc0a4e9c9..fec0cacef9 100755 --- a/module/program/test/model/getproductpairs.php +++ b/module/program/test/model/getproductpairs.php @@ -31,10 +31,10 @@ title=测试 programModel::getProductPairs(); cid=1 pid=1 -获取项目集1下的所有产品数量 >> 10 -根据项目集ID获取关联产品名字 >> 产品2 -获取项目集1下的未关闭的产品数量 >> 5 -根据项目或项目集ID获取关联产品详情 >> 产品3 +- 获取项目集1下的所有产品数量 @10 +- 根据项目集ID获取关联产品名字属性2 @产品2 +- 获取项目集1下的未关闭的产品数量 @5 +- 根据项目或项目集ID获取关联产品详情属性3 @产品3 */ From b1beade608add339515ba2b25fae644e784632df Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 28 May 2025 03:23:49 +0000 Subject: [PATCH 7/7] * Add unit test script comment. --- module/program/test/model/getproductpairs.php | 2 ++ .../test/model/getlistbycurrentuser.php | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/module/program/test/model/getproductpairs.php b/module/program/test/model/getproductpairs.php index fec0cacef9..c4ad0c9955 100755 --- a/module/program/test/model/getproductpairs.php +++ b/module/program/test/model/getproductpairs.php @@ -35,6 +35,7 @@ pid=1 - 根据项目集ID获取关联产品名字属性2 @产品2 - 获取项目集1下的未关闭的产品数量 @5 - 根据项目或项目集ID获取关联产品详情属性3 @产品3 +- 根据项目或项目集ID获取关联产品详情属性4 @~~ */ @@ -47,3 +48,4 @@ r(count($products1)) && p() && e('10'); // 获取项目集1下的所有产 r($products1) && p('2') && e('产品2'); // 根据项目集ID获取关联产品名字 r(count($products2)) && p() && e('5'); // 获取项目集1下的未关闭的产品数量 r($products2) && p('3') && e('产品3'); // 根据项目或项目集ID获取关联产品详情 +r($products2) && p('4') && e('~~'); // 根据项目或项目集ID获取关联产品详情 diff --git a/module/project/test/model/getlistbycurrentuser.php b/module/project/test/model/getlistbycurrentuser.php index 0ac7d56f10..1775e7680e 100644 --- a/module/project/test/model/getlistbycurrentuser.php +++ b/module/project/test/model/getlistbycurrentuser.php @@ -11,7 +11,17 @@ title=测试 projectModel->getListByCurrentUser(); timeout=0 cid=1 - +- 执行projectModel模块的getListByCurrentUser方法 @0 +- 执行projectModel模块的getListByCurrentUser方法 @1 +- 执行projectModel模块的getListByCurrentUser方法 + - 第1条的id属性 @1 + - 第1条的name属性 @项目1 +- 执行projectModel模块的getListByCurrentUser方法 + - 第1条的budget属性 @900000 + - 第1条的budgetUnit属性 @CNY +- 执行projectModel模块的getListByCurrentUser方法 + - 第1条的auth属性 @extend + - 第1条的code属性 @program1 */ @@ -24,5 +34,7 @@ $tester->app->config->vision = 'lite'; r(count($projectModel->getListByCurrentUser())) && p() && e('0'); $tester->app->config->vision = 'rnd'; -r(count($projectModel->getListByCurrentUser())) && p() && e('1'); -r($projectModel->getListByCurrentUser()) && p('1:id,name') && e('1,项目1'); +r(count($projectModel->getListByCurrentUser())) && p() && e('1'); +r($projectModel->getListByCurrentUser()) && p('1:id,name') && e('1,项目1'); +r($projectModel->getListByCurrentUser()) && p('1:budget,budgetUnit') && e('900000,CNY'); +r($projectModel->getListByCurrentUser()) && p('1:auth,code') && e('extend,program1');