* [task#140360,doing,5h] Modify the template creation process.

This commit is contained in:
xieqiyu
2025-04-02 11:05:25 +08:00
committed by 代婷婷
parent 7990860171
commit 7c9dffc622
4 changed files with 102 additions and 21 deletions
+3 -3
View File
@@ -103,7 +103,7 @@ window.reloadZentaoList = function(blockID)
*
* @returns {object}
*/
function getDocApp()
window.getDocApp = function()
{
if(!currentDocApp)
{
@@ -395,7 +395,7 @@ function mergeDocFormData(doc, formData)
return doc;
}
function showSaveFailedAlert(error)
window.showSaveFailedAlert = function(error)
{
zui.Modal.alert(
{
@@ -2048,7 +2048,7 @@ function getSortableOptions(type)
}
}
function checkResponse(res)
window.checkResponse = function(res)
{
if(typeof res === 'string') res = JSON.parse(res);
if(typeof res !== 'object' || !res) return true;
+1
View File
@@ -2293,6 +2293,7 @@ class doc extends control
if($modalType == 'doc')
{
$title = $parentID ? $this->lang->doc->addSubDoc : $this->lang->doc->create;
if($objectType == 'template') $title = $this->lang->docTemplate->create;
if($isDraft == 'no') $title = $this->lang->settings;
}
if($modalType == 'chapter') $title = $isCreate ? $this->lang->doc->addChapter : $this->lang->doc->editChapter;
+75 -13
View File
@@ -1,4 +1,5 @@
const savingDocData = {};
let docBasicModal = {};
/**
* 获取文档界面上的表格初始化选项。
* Get the table initialization options on the doc UI.
@@ -83,16 +84,42 @@ function mergeDocFormData(doc, formData)
return doc;
}
function showDocBasicModal(docID, isDraft = false)
function showDocBasicModal(parentID, docID, isDraft, modalType = 'doc')
{
const docApp = getDocApp();
const spaceType = docApp.spaceType;
const spaceID = docApp.spaceID;
const libID = docApp.libID;
const moduleID = docApp.moduleID;
isDraft = isDraft ? 'yes' : 'no';
const url = $.createLink('doc', 'setDocBasic', `objectType=template&objectID=${spaceID}&libID=${libID}&moduleID=${moduleID}&docID=${docID}&isDraft=${isDraft}`);
zui.Modal.open({url: url});
const url = $.createLink('doc', 'setDocBasic', `objectType=template&objectID=${spaceID}&libID=${libID}&moduleID=${moduleID}&parentID=${parentID || 0}&docID=${docID || 0}&isDraft=${isDraft ? 'yes' : 'no'}&modalType=${modalType}`);
if(docBasicModal.doc === docID && docBasicModal.current)
{
docBasicModal.current.show();
}
else
{
if(docBasicModal.current) docBasicModal.current.destroy();
docBasicModal.doc = docID;
zui.Modal.open(
{
ref : docBasicModal,
url : url,
destroyOnHide: false,
cache : true,
request: {
error: error => {
if(docBasicModal.current) docBasicModal.current.hide();
showSaveFailedAlert(error);
}
},
onHidden: () => {
if(!docBasicModal.keepOnHide && docBasicModal.current) docBasicModal.current.destroy();
},
$onDestroy: () => {
if(docBasicModal.current) docBasicModal = {};
}
});
}
return new Promise((resolve) => {window.docBasicModalResolver = resolve;});
}
@@ -103,7 +130,7 @@ function showDocSettingModal(_, args)
const docID = args[0] || doc.id;
const docType = args[1] || doc.contentType;
const saveEdited = args[2] || 0;
showDocBasicModal(docID).then(formData => {
showDocBasicModal(0, docID).then(formData => {
savingDocData[docID] = formData;
if(saveEdited == 1)
{
@@ -137,9 +164,14 @@ function showDocSettingModal(_, args)
* @param {FormData} formData
* @returns
*/
function submitNewDoc(doc, spaceID, libID, moduleID, formData)
function submitNewDoc(doc, spaceID, libID, moduleID, formData, afterCreate)
{
const docApp = getDocApp();
const docApp = getDocApp();
if(docApp.isSavingDoc) return;
docApp.isSavingDoc = true;
$(docApp.element).find('[zui-command^="saveDoc"],[zui-command^="saveNewDoc"]').attr('disabled', true);
const spaceType = docApp.signals.spaceType.value;
const module = docApp.treeMap.modules.get(moduleID);
const url = $.createLink('doc', 'createTemplate', `libID=${libID}&moduleID=${moduleID}`);
@@ -181,17 +213,34 @@ function submitNewDoc(doc, spaceID, libID, moduleID, formData)
try
{
const data = JSON.parse(res);
if(!checkResponse(data)) return;
if(typeof data !== 'object' || data.result === 'fail')
{
throw new Error(getErrorMessage(data));
}
resolve($.extend(doc, {id: data.id}, docData, data.doc, {status: doc.status || data.status}));
const newDoc = $.extend(doc, {id: data.id}, docData, data.doc, {status: doc.status || data.status});
if (!newDoc.space.includes('.')) {
newDoc.space = `${spaceType}.${docData[spaceType]}`;
}
resolve(newDoc);
if(afterCreate)
{
docApp.load(null, null, null, {noLoading: true, picks: 'doc'}).then(() => {
afterCreate(newDoc);
});
}
}
catch (error)
{
zui.Modal.alert(error.message);
showSaveFailedAlert(error);
reject(error);
}
}).fail(error => {
resolve(false);
showSaveFailedAlert(error);
}).complete(() => {
docApp.isSavingDoc = false;
$(docApp.element).find('[zui-command^="saveDoc"],[zui-command^="saveNewDoc"]').removeAttr('disabled');
});
});
}
@@ -202,7 +251,7 @@ function submitNewDoc(doc, spaceID, libID, moduleID, formData)
*/
function handleCreateDoc(doc, spaceID, libID, moduleID)
{
return showDocBasicModal(0, doc.status === 'draft').then((formData) => {
return showDocBasicModal(0, 0, doc.status === 'draft').then((formData) => {
moduleID = parseInt(formData.get('module'));
return submitNewDoc(doc, spaceID, libID, moduleID, formData);
});
@@ -389,12 +438,25 @@ window.setDocAppOptions = function(_, options) // Override the method.
/* 扩展文档模板命令定义。 Extend the doc app command definition. */
$.extend(window.docAppCommands,
{
startCreateTemplate: function()
startCreateTemplate: function(_, args)
{
const docApp = getDocApp();
const hasModules = docApp.props.hasModules;
if(!hasModules) return zui.Modal.alert(getLang('createTypeFirst'));
docApp.startCreateDoc();
const {spaceID, libID, moduleID} = docApp;
return showDocBasicModal(args?.[0] ?? 0, 0, true, 'doc').then((formData) => {
zui.Editor.loadModule().then(() => {
const emptyDoc = zui.Editor.createEmptyDoc();
const snapshot = zui.Editor.toSnapshot(emptyDoc);
const doc = {contentType: 'doc', status: 'draft', content: JSON.stringify(snapshot)};
return submitNewDoc(doc, 0, libID, moduleID, formData, (newDoc) => {
docApp.selectDoc(newDoc.id);
docApp.startEditDoc(newDoc.id);
});
});
});
},
deleteDoc: function(_, args)
{
+23 -5
View File
@@ -24,10 +24,17 @@ formPanel
setData('officeTypes', $this->config->doc->officeTypes),
setData('docType', isset($doc) ? $doc->users : 'undefined'),
set::title($title),
set::submitBtnText($isDraft ? $lang->doc->saveDraft : (empty($docID) ? $lang->doc->release : $lang->save)),
set::submitBtnText($lang->save),
on::change('[name=lib]')->call('loadLibModules', jsRaw("event, 'docTemplate'")),
set::ajax(array('beforeSubmit' => jsRaw('window.beforeSetDocBasicInfo'))),
formGroup
(
set::label($modalType == 'chapter' ? $lang->doc->chapterName : $lang->docTemplate->title),
set::name('title'),
set::required(true),
set::value(isset($doc) ? $doc->title : '')
),
formGroup
(
set::label($lang->docTemplate->scope),
set::required(true),
@@ -39,12 +46,23 @@ formPanel
set::required(true),
picker(set::name('module'), set::items($modules), set::value($moduleID), set::required(true))
),
($modalType != 'chapter' || !$isCreate) ? formGroup
(
set::label($lang->doc->module),
picker
(
set::name('parent'),
set::items($modalType != 'chapter' ? array('m_0' => '/') + $chapterAndDocs : $chapterAndDocs),
set::value($parentID ? $parentID : "m_$moduleID"),
set::required(true)
),
) : null,
formGroup
(
set::label($lang->docTemplate->desc),
textarea(set::name('desc'), set::value($docID ? $doc->templateDesc : ''), set::rows(3))
),
$isDraft ? null : formGroup
formGroup
(
set::label($lang->doclib->control),
radioList
@@ -56,7 +74,7 @@ formPanel
on::change('toggleWhiteList')
)
),
$isDraft ? null : formGroup
formGroup
(
setID('whiteListBox'),
setClass((isset($doc) && $libID == $doc->lib && $objectType != 'mine' && $doc->acl == 'private') ? '' : 'hidden'),
@@ -67,7 +85,7 @@ formPanel
inputGroup
(
setClass('w-full'),
$lang->doc->groups,
$lang->doc->groupLabel,
picker
(
set::name('groups[]'),
@@ -81,7 +99,7 @@ formPanel
setClass('w-full'),
userPicker
(
set::label($lang->doc->users),
set::label($lang->doc->userLabel),
set::items($users),
set::value(isset($doc) ? $doc->users : null)
)