Ext.define('saas.view.help.DocItemPanelController', { extend: 'Ext.app.ViewController', alias: 'controller.help-docitem-panel', onViewReady: function () { var me = this, view = me.getView(); me.getProjectDetail(view.initId); }, getProjectDetail: function (id) { var me = this, view = me.getView(), vm = me.getViewModel(); view.mask(); Ext.Ajax.promise({ url: '/api/help/project/read/' + id }).then(res => { view.unmask(); var project = res.data; vm.getStore('treeStore').transformAndLoad(project.items); delete project.items; vm.set('project', project); }); }, /** * 查看文档 */ handleViewArticle: function () { var me = this, vm = me.getViewModel(), article = vm.get('article'); window.open(Ext.manifest.client.help + '/doc/' + article.projectCode + '/' + article.itemCode); }, /** * 保存文档 */ handleSaveArticle: function () { var me = this, view = me.getView(), vm = me.getViewModel(), data = vm.get('article'); view.mask('正在保存'); Ext.Ajax.payload({ url: '/api/help/article/save', jsonData: data }).then(function (res) { view.unmask(); if (res.success) { saas.util.BaseUtil.showSuccessToast('保存成功'); } }).catch(function (e) { view.unmask(); saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message); }); }, handleCreateFolder: function (menuitem) { this.doCreateItem(menuitem.ownerCt.record, false); }, handleCreateItem: function (menuitem) { this.doCreateItem(menuitem.ownerCt.record, true); }, doCreateItem: function (parent, isArticle) { var me = this, vm = me.getViewModel(), projectId = vm.get('project.id'), store = vm.getStore('treeStore'), root = store.getRoot(), parentId = parent ? parent.get('raw').id : null, lastChild = (parent || root).lastChild, orderNum = lastChild ? (lastChild.get('raw').orderNum + 1) : 1; me.showItemWindow({ article: isArticle, projectId, parentId, orderNum }, null, parent); }, handleEditItem: function (menuitem) { var me = this, record = menuitem.ownerCt.record; me.showItemWindow(record.get('raw'), record); }, /** * 目录编辑窗口 * @param {*} item 目录 * @param {*} node 目录对应树节点 * @param {*} parentNode 目录上级文件夹对应树节点 */ showItemWindow: function (item, node, parentNode) { var me = this, vm = me.getViewModel(), store = vm.getStore('treeStore'); var panel = Ext.create({ xtype: 'help-docitem-win', modal: true, autoShow: true, onConfirm: function (data) { me.saveItem(data).then(res => { data = res.data; if (node) { node.set('raw', data); node.set('text', data.name); if (item.id == vm.get('article.id')) { vm.set('article.itemCode', data.code); vm.set('article.itemName', data.name); vm.set('articlePath', node.getPath('text').replace('/Root', '')); } } else { if (!parentNode) { parentNode = store.getRoot(); } parentNode.appendChild(store.itemMapper(data)); parentNode.expand(); } }); } }); panel.loadData(item); }, /** * 保存目录 * @param {*} data */ saveItem: function (data) { var me = this, view = me.getView(); view.mask('正在保存'); return Ext.Ajax.payload({ url: '/api/help/project_item/save', jsonData: data }).then(function (res) { view.unmask(); if (res.success) { saas.util.BaseUtil.showSuccessToast('保存成功'); return res; } }).catch(function (e) { view.unmask(); saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message); }); }, /** * 删除目录 * @param {*} menuitem */ handleDeleteItem: function (menuitem) { var me = this, view = me.getView(), vm = me.getViewModel(), record = menuitem.ownerCt.record, id = record.get('raw').id; view.mask('正在删除'); Ext.Ajax.form({ url: '/api/help/project_item/delete/' + id }).then(function (res) { view.unmask(); if (res.success) { saas.util.BaseUtil.showSuccessToast('删除成功'); record.remove(); if (vm.get('article.id') == id) { vm.set('article', null); vm.set('articlePath', null); } } }).catch(function (e) { view.unmask(); saas.util.BaseUtil.showErrorToast('删除失败: ' + e.message); }); }, /** * 点击树节点打开文档 * @param {*} selModel * @param {*} selected */ onItemSelect: function (selModel, selected) { if (selected.length) { var record = selModel.lastSelected, raw = record.get('raw'); if (raw.article) { var me = this, vm = me.getViewModel(), project = vm.get('project'); me.getArticle(raw.id).then(res => { var article = res.data || { id: raw.id, projectCode: project.code, itemCode: raw.code, itemName: raw.name }; vm.set('article', article); vm.set('articlePath', record.getPath('text').replace('/Root', '')); }); } } }, /** * 查找文档 * @param {*} id */ getArticle: function (id) { var me = this, view = me.getView(); view.mask('加载中'); return Ext.Ajax.promise({ url: '/api/help/article/read/' + id }).then(function (res) { view.unmask(); if (res.success) { return res; } }).catch(function (e) { view.unmask(); saas.util.BaseUtil.showErrorToast(e.message); }); }, /** * 拖拽改变目录顺序、所属文件夹 * @param {*} el * @param {*} data * @param {*} over * @param {*} position * @param {*} e */ onItemDragDrop: function (el, data, over, position, e) { var dropData = data.records[0].get('raw'), overData = over.get('raw'), orderNum, parentId, parent, updates = []; if (position == 'before') { orderNum = overData.orderNum; parentId = overData.parentId; parent = over.parentNode; } else if (position == 'after') { orderNum = overData.orderNum + 1; parentId = overData.parentId; parent = over.parentNode; } else if (position == 'append') { orderNum = over.lastChild ? (over.lastChild.get('raw').orderNum + 1) : 1; parentId = overData.id; parent = over; } dropData.orderNum = orderNum; dropData.parentId = parentId; updates.push(dropData); parent.eachChild(child => { var raw = child.get('raw'); if (raw.id != dropData.id && raw.orderNum >= dropData.orderNum) { raw.orderNum++; updates.push(raw); } }); this.batchSaveItem(updates); }, /** * 批量保存目录 * @param {*} data */ batchSaveItem: function (data) { var me = this, view = me.getView(); view.mask('正在保存'); return Ext.Ajax.payload({ url: '/api/help/project_item/batch_save', jsonData: data }).then(function (res) { view.unmask(); if (res.success) { saas.util.BaseUtil.showSuccessToast('保存成功'); return res; } }).catch(function (e) { view.unmask(); saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message); }); }, });