From 0b6643e07e508b05dc2dc0f225f1fb401df1f95c Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Fri, 21 Mar 2025 09:29:48 +0800 Subject: [PATCH] * [bug#60727] Change parent when change lib in edit doc. --- module/doc/control.php | 10 ++++++---- module/doc/js/common.ui.js | 15 ++++++++------- module/doc/model.php | 2 +- module/doc/ui/setdocbasic.html.php | 3 ++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/module/doc/control.php b/module/doc/control.php index 5fe6187aa7..2cb91e5db4 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -797,10 +797,11 @@ class doc extends control * @param int $objectID * @param string $docType doc|api * @param int $docID + * @param int $libID * @access public * @return void */ - public function ajaxGetModules(string $objectType, int $objectID, string $docType = 'doc', int $docID = 0) + public function ajaxGetModules(string $objectType, int $objectID, string $docType = 'doc', int $docID = 0, int $libID = 0) { if($objectType != 'mine' && empty($objectID)) return print(json_encode(array())); @@ -813,18 +814,19 @@ class doc extends control { $libs = $this->doc->getApiLibs(0, $objectType, $objectID); $libPairs = array(); - foreach($libs as $libID => $lib) $libPairs[$libID] = $lib->name; + foreach($libs as $lib) $libPairs[$lib->id] = $lib->name; } $libItems = array(); foreach($libPairs as $id => $name) $libItems[] = array('text' => $name, 'value' => $id, 'keys' => $name); $moduleItems = array(); - $libID = key($libPairs); + $libID = $libID ? $libID : key($libPairs); if($libID) { $chapterAndDocs = $this->doc->getDocsOfLibs(array($libID), $objectType, $docID); $modulePairs = empty($libID) ? array() : $this->loadModel('tree')->getOptionMenu($libID, 'doc', 0); - $moduleItems = array(0 => array('text' => '/', 'value' => 0)) + $this->doc->buildNestedDocs($chapterAndDocs, $modulePairs); + $nestedDocs = $this->doc->buildNestedDocs($chapterAndDocs, $modulePairs); + $moduleItems = array_merge(array(array('text' => '/', 'value' => 0)), array_values($nestedDocs)); } return print(json_encode(array('libs' => $libItems, 'modules' => $moduleItems))); diff --git a/module/doc/js/common.ui.js b/module/doc/js/common.ui.js index e042745f07..dc49f20123 100644 --- a/module/doc/js/common.ui.js +++ b/module/doc/js/common.ui.js @@ -204,7 +204,7 @@ window.loadObjectModules = function(e, docID) let docType = $('.radio-primary [name=type]:not(.hidden):checked').val(); if(typeof docType == 'undefined') docType = 'doc'; - const link = $.createLink('doc', 'ajaxGetModules', 'objectType=' + objectType + '&objectID=' + objectID + '&type=' + docType, + '&docID=' + docID); + const link = $.createLink('doc', 'ajaxGetModules', 'objectType=' + objectType + '&objectID=' + objectID + '&type=' + docType + '&docID=' + docID); $.get(link, function(data) { data = JSON.parse(data); @@ -218,20 +218,21 @@ window.loadObjectModules = function(e, docID) }); } -window.loadLibModules = function(e) +window.loadLibModules = function(e, docID) { - const objectID = e.target.value; + const libID = e.target.value; + const libType = $(e.target.closest('div.form-group')).attr('data-lib-type'); + const objectID = $("input[name='" + libType + "']").val(); let docType = $('.radio-primary [name=type]:not(.hidden):checked').val(); if(typeof docType == 'undefined') docType = 'doc'; - const link = $.createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + objectID + '&viewType=' + docType + '&branch=all&rootModuleID=0&returnType=items'); + const link = $.createLink('doc', 'ajaxGetModules', 'objectType=' + libType + '&objectID=' + objectID + '&type=' + docType + '&docID=' + docID + '&libID=' + libID); $.get(link, function(data) { data = JSON.parse(data); - - const $modulePicker = $("[name='module']").zui('picker'); - $modulePicker.render({items: data}); + const $modulePicker = $("[name='parent']").zui('picker'); + $modulePicker.render({items: data.modules}); $modulePicker.$.setValue(''); }); } diff --git a/module/doc/model.php b/module/doc/model.php index c0310c76d9..2fb637977f 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -4013,7 +4013,7 @@ class docModel extends model } $result = array(); - foreach($rootDocs as $rootDoc) $result[] = $this->buildDocItems($rootDoc->id, $rootDoc->title, $children); + foreach($rootDocs as $rootDoc) $result[$rootDoc->id] = $this->buildDocItems($rootDoc->id, $rootDoc->title, $children); return $result; } diff --git a/module/doc/ui/setdocbasic.html.php b/module/doc/ui/setdocbasic.html.php index 38202460c8..773bccb68b 100644 --- a/module/doc/ui/setdocbasic.html.php +++ b/module/doc/ui/setdocbasic.html.php @@ -20,7 +20,7 @@ formPanel set::title($title), set::submitBtnText($lang->save), on::change('[name=space],[name=product],[name=execution]')->call('loadObjectModules', jsRaw('event'), $docID), - on::change('[name=lib]')->call('loadLibModules', jsRaw('event')), + on::change('[name=lib]')->call('loadLibModules', jsRaw('event'), $docID), on::change('[name=project]')->call('loadExecutions', jsRaw('event')), on::change('[name=lib],[name^=users]', "checkLibPriv('#whiteListBox', 'users')"), on::change('[name=lib],[name^=readUsers]', "checkLibPriv('#readListBox', 'readUsers')"), @@ -77,6 +77,7 @@ formPanel ) : null, ($modalType != 'chapter' || !$isCreate) ? formGroup ( + setData('libType', $objectType), set::width('1/2'), set::label($lang->doc->lib), set::required(true),