From f026a5be959c8c05bce559774f5a216f90e6e2e7 Mon Sep 17 00:00:00 2001 From: sunguangming Date: Mon, 25 Dec 2023 17:33:27 +0800 Subject: [PATCH] * Fix bug #41871. --- db/update20.0.alpha1.sql | 2 +- module/project/config/form.php | 1 + module/project/js/common.ui.js | 2 +- module/project/js/manageproducts.ui.js | 77 +++++++++++++++++++++++ module/project/lang/de.php | 4 +- module/project/lang/en.php | 4 +- module/project/lang/fr.php | 4 +- module/project/lang/zh-cn.php | 4 +- module/project/model.php | 4 +- module/project/ui/create.html.php | 14 ++--- module/project/ui/edit.html.php | 12 ++-- module/project/ui/manageproducts.html.php | 3 +- 12 files changed, 105 insertions(+), 26 deletions(-) diff --git a/db/update20.0.alpha1.sql b/db/update20.0.alpha1.sql index fad582dcd7..916e15d43a 100644 --- a/db/update20.0.alpha1.sql +++ b/db/update20.0.alpha1.sql @@ -26,7 +26,7 @@ DELETE FROM `zt_block` where `module` = 'project' and `code` = 'projectteam'; ALTER TABLE `zt_todo` CHANGE `idvalue` `objectID` mediumint(8) unsigned default '0' NOT NULL AFTER `type`; ALTER TABLE `zt_todo` CHANGE `config` `config` VARCHAR(1000) NOT NULL DEFAULT ''; -ALTER TABLE `zt_project` ADD `stageBy` enum('project', 'product') NOT NULL DEFAULT 'product' AFTER `division`; +ALTER TABLE `zt_project` ADD `stageBy` enum('project', 'product') NOT NULL DEFAULT 'project' AFTER `division`; UPDATE `zt_project` SET `stageBy` = 'project' WHERE `division` = '0'; UPDATE `zt_project` SET `stageBy` = 'product' WHERE `division` = '1'; ALTER TABLE `zt_project` DROP `division`; diff --git a/module/project/config/form.php b/module/project/config/form.php index fe050bee63..dd6a77affb 100755 --- a/module/project/config/form.php +++ b/module/project/config/form.php @@ -15,6 +15,7 @@ $config->project->form->create['parent'] = array('type' => 'int', 'requir $config->project->form->create['name'] = array('type' => 'string', 'required' => true, 'filter' => 'trim'); $config->project->form->create['multiple'] = array('type' => 'int', 'required' => false, 'default' => 1); $config->project->form->create['hasProduct'] = array('type' => 'string', 'required' => false, 'default' => ''); +$config->project->form->create['stageBy'] = array('type' => 'string', 'required' => false, 'default' => 'project'); $config->project->form->create['PM'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->project->form->create['budget'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->project->form->create['budgetUnit'] = array('type' => 'string', 'required' => false, 'default' => 'CNY'); diff --git a/module/project/js/common.ui.js b/module/project/js/common.ui.js index a9e1db93f4..9274d55a3a 100644 --- a/module/project/js/common.ui.js +++ b/module/project/js/common.ui.js @@ -41,7 +41,7 @@ function changeType(type) function changeStageBy(type) { if($('.project-stageBy-' + type).hasClass('disabled')) return; - $('.project-stageBy-1, .project-stageBy-0').removeClass('primary-pale'); + $('.project-stageBy-project, .project-stageBy-product').removeClass('primary-pale'); $('.project-stageBy-' + type).addClass('primary-pale'); $('input[name=stageBy]').val(type); } diff --git a/module/project/js/manageproducts.ui.js b/module/project/js/manageproducts.ui.js index be7c170cac..1da661c6e1 100644 --- a/module/project/js/manageproducts.ui.js +++ b/module/project/js/manageproducts.ui.js @@ -21,3 +21,80 @@ window.checkUnlink = function() } } } + +$(function() +{ + $('#manageProducts [type="submit"]').on('click', function(){ + let checkedProducts = []; + $('input[name^="products"]:checked').each(function() + { + let value = $(this).val(); + if(checkedProducts.indexOf(value) == -1) checkedProducts.push(value); + }) + + if(noticeSwitch && checkedProducts.length > 1) + { + notice(); + return false; + } + }); + + $('#linkProduct [type="submit"]').on('click', function(){ + let checkedProducts = $('[name^="otherProducts"]').val(); + + if(noticeSwitch && checkedProducts.length > 1) + { + notice('otherProducts'); + return false; + } + }); +}) + +function notice(type) +{ + zui.Modal.confirm( + { + 'message' : noticeDivsion, + 'actions': [ + {text: stageBySwitchList['1'], key: 'confirm'}, + {text: stageBySwitchList['0'], key: 'cancel'}, + ], + onResult: function(result) + { + let link; + let formData; + let stageBy = result ? 'product' : ''; + if(type == 'otherProducts') + { + link = $('#linkProduct form').attr('action'); + formData = {'otherProducts[]': $('[name^="otherProducts"]').val(), stageBy: stageBy}; + } + else + { + let products = []; + let branch = []; + $('input[type="checkbox"][name^="products"]:checked').each(function() { + if(products.indexOf($(this).val()) == -1) products.push($(this).val()); + }); + + $('input[type="hidden"][name^="products"]').each(function() { + if(products.indexOf($(this).val()) == -1) products.push($(this).val()); + }); + + $('input[type="hidden"][name^="branch"]').each(function() { + if(branch.indexOf($(this).val()) == -1) branch.push($(this).val()); + }); + + $('select[name^="branch"]').each(function() { + if(branch.indexOf($(this).val()) == -1) branch.push($(this).val()); + }); + + link = $.createLink('project', 'manageproducts', 'projectID=' + projectID); + formData = {"products[]": products, "branch[]": branch, stageBy: stageBy}; + } + + $.ajaxSubmit({url: link, data: formData}); + } + } + ); +} diff --git a/module/project/lang/de.php b/module/project/lang/de.php index e3b85759e8..6c534ce902 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -203,8 +203,8 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = "{$lang->projectCommon}s Ownedbyme"; $lang->project->typeList['other'] = "Other {$lang->projectCommon}s"; -$lang->project->stageByList['0'] = "Create by {$lang->projectCommon}"; -$lang->project->stageByList['1'] = "Create by {$lang->productCommon}"; +$lang->project->stageByList['project'] = "Create by {$lang->projectCommon}"; +$lang->project->stageByList['product'] = "Create by {$lang->productCommon}"; $lang->project->stageBySwitchList['0'] = 'Close'; $lang->project->stageBySwitchList['1'] = "Open"; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 4b639556ef..4f9d17918a 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -203,8 +203,8 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = "{$lang->projectCommon}s Ownedbyme"; $lang->project->typeList['other'] = "Other {$lang->projectCommon}s"; -$lang->project->stageByList['0'] = "Create by {$lang->projectCommon}"; -$lang->project->stageByList['1'] = "Create by {$lang->productCommon}"; +$lang->project->stageByList['project'] = "Create by {$lang->projectCommon}"; +$lang->project->stageByList['product'] = "Create by {$lang->productCommon}"; $lang->project->stageBySwitchList['0'] = 'Close'; $lang->project->stageBySwitchList['1'] = "Open"; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index e3b85759e8..1e6ff88f05 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -203,8 +203,8 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = "{$lang->projectCommon}s Ownedbyme"; $lang->project->typeList['other'] = "Other {$lang->projectCommon}s"; -$lang->project->stageByList['0'] = "Create by {$lang->projectCommon}"; -$lang->project->stageByList['1'] = "Create by {$lang->productCommon}"; +$lang->project->stageByList['product'] = "Create by {$lang->projectCommon}"; +$lang->project->stageByList['product'] = "Create by {$lang->productCommon}"; $lang->project->stageBySwitchList['0'] = 'Close'; $lang->project->stageBySwitchList['1'] = "Open"; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index bf8f3ab314..4fe494d64e 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -203,8 +203,8 @@ $lang->project->typeList = array(); $lang->project->typeList['my'] = "我负责的{$lang->projectCommon}"; $lang->project->typeList['other'] = "其他{$lang->projectCommon}"; -$lang->project->stageByList['0'] = "按{$lang->projectCommon}创建"; -$lang->project->stageByList['1'] = "按{$lang->productCommon}创建"; +$lang->project->stageByList['project'] = "按{$lang->projectCommon}创建"; +$lang->project->stageByList['product'] = "按{$lang->productCommon}创建"; $lang->project->stageBySwitchList['0'] = '关闭'; $lang->project->stageBySwitchList['1'] = "开启"; diff --git a/module/project/model.php b/module/project/model.php index e756b9ffd5..7c38c8c057 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -1758,7 +1758,7 @@ class projectModel extends model $executions = $this->dao->select('id')->from(TABLE_EXECUTION)->where('project')->eq($projectID)->fetchPairs('id'); $this->dao->delete()->from(TABLE_PROJECTPRODUCT)->where('project')->in($executions)->andWhere('product')->notin($products)->exec(); - if(!empty($_POST['stageBy'])) + if(isset($_POST['stageBy']) and $_POST['stageBy'] == 'product') { $this->dao->update(TABLE_PROJECT)->set('stageBy')->eq('product')->where('id')->eq($projectID)->orWhere('project')->eq($projectID)->exec(); } @@ -1889,7 +1889,7 @@ class projectModel extends model } $this->user->updateUserView($productIdList, 'product', $members); - if($projectID > 0 and !empty($_POST['stageBy'])) + if($projectID > 0 and isset($_POST['stageBy']) and $_POST['stageBy'] == 'product') { $this->dao->update(TABLE_PROJECT)->set('stageBy')->eq('product')->where('id')->eq($projectID)->orWhere('project')->eq($projectID)->exec(); } diff --git a/module/project/ui/create.html.php b/module/project/ui/create.html.php index 24a5898673..6cceae7760 100644 --- a/module/project/ui/create.html.php +++ b/module/project/ui/create.html.php @@ -154,8 +154,8 @@ formPanel on::click('.removeLine', 'removeLine'), on::click('.project-type-1', 'changeType(1)'), on::click('.project-type-0', 'changeType(0)'), - on::click('.project-stageBy-0', 'changeStageBy(0)'), - on::click('.project-stageBy-1', 'changeStageBy(1)'), + on::click('.project-stageBy-project', 'changeStageBy("project")'), + on::click('.project-stageBy-product', 'changeStageBy("product")'), on::click('[type=submit]', 'removeAllTips'), on::click('#name, #code, #end, #days', 'removeTips'), on::change('#end, #days', 'removeTips'), @@ -521,18 +521,18 @@ formPanel ( set::seg(true), btn( - setClass('primary-pale project-stageBy-0'), + setClass('primary-pale project-stageBy-project'), set::disabled($copyProjectID), - $lang->project->stageByList[0] + $lang->project->stageByList['project'] ), btn ( - setClass('project-stageBy-1'), + setClass('project-stageBy-product'), set::disabled($copyProjectID), - $lang->project->stageByList[1] + $lang->project->stageByList['product'] ) ), - formHidden('stageBy', $copyProjectID ? $copyProject->stageBy : '0') + formHidden('stageBy', $copyProjectID ? $copyProject->stageBy : 'project') ) ) : null, formGroup diff --git a/module/project/ui/edit.html.php b/module/project/ui/edit.html.php index 75f149a46b..295543f0f4 100644 --- a/module/project/ui/edit.html.php +++ b/module/project/ui/edit.html.php @@ -175,8 +175,8 @@ formPanel on::click('.removeLine', 'removeLine'), on::click('.project-type-1', 'changeType(1)'), on::click('.project-type-0', 'changeType(0)'), - on::click('.project-stageBy-0', 'changeStageBy(0)'), - on::click('.project-stageBy-1', 'changeStageBy(1)'), + on::click('.project-stageBy-project', 'changeStageBy("project")'), + on::click('.project-stageBy-product', 'changeStageBy("product")'), on::change('#parent', 'setParentProgram'), on::change('#parent, #budget', "checkBudget({$project->id})"), on::change('#begin, [name=delta]', 'computeEndDate'), @@ -490,15 +490,15 @@ formPanel set::seg(true), btn ( - setClass('primary-pale project-stageBy-0'), + setClass('primary-pale project-stageBy-project'), set::disabled($disableStageBy), - $lang->project->stageByList[0] + $lang->project->stageByList['project'] ), btn ( - setClass('project-stageBy-1'), + setClass('project-stageBy-product'), set::disabled($disableStageBy), - $lang->project->stageByList[1] + $lang->project->stageByList['product'] ) ), formHidden('stageBy', $project->stageBy) diff --git a/module/project/ui/manageproducts.html.php b/module/project/ui/manageproducts.html.php index a400304aa4..f222145db1 100644 --- a/module/project/ui/manageproducts.html.php +++ b/module/project/ui/manageproducts.html.php @@ -14,10 +14,11 @@ jsVar('unmodifiableBranches', $unmodifiableBranches); jsVar('unmodifiableMainBranches', $unmodifiableMainBranches); jsVar('allProducts', $allProducts); jsVar('branchGroups', $branchGroups); +jsVar('projectID', $project->id); jsVar('BRANCH_MAIN', BRANCH_MAIN); jsVar('unLinkProductTip', $lang->project->unLinkProductTip); -$noticeSwitch = ($project->stageBy == 'product' and count($linkedProducts) == 1 and empty($executions) and in_array($project->model, array('waterfall', 'waterfallplus'))); +$noticeSwitch = ($project->stageBy == 'project' and count($linkedProducts) == 1 and empty($executions) and in_array($project->model, array('waterfall', 'waterfallplus'))); jsVar('linkedProducts', array_keys($linkedProducts)); jsVar('noticeSwitch', $noticeSwitch); jsVar('noticeDivsion', $lang->project->noticeDivsion);