DocItemPanelController.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. Ext.define('saas.view.help.DocItemPanelController', {
  2. extend: 'Ext.app.ViewController',
  3. alias: 'controller.help-docitem-panel',
  4. onViewReady: function () {
  5. var me = this, view = me.getView();
  6. me.getProjectDetail(view.initId);
  7. },
  8. getProjectDetail: function (id) {
  9. var me = this,
  10. view = me.getView(),
  11. vm = me.getViewModel();
  12. view.mask();
  13. Ext.Ajax.promise({
  14. url: '/api/help/project/read/' + id
  15. }).then(res => {
  16. view.unmask();
  17. var project = res.data;
  18. vm.getStore('treeStore').transformAndLoad(project.items);
  19. delete project.items;
  20. vm.set('project', project);
  21. });
  22. },
  23. /**
  24. * 查看文档
  25. */
  26. handleViewArticle: function () {
  27. var me = this, vm = me.getViewModel(),
  28. article = vm.get('article');
  29. window.open(Ext.manifest.client.help + '/doc/' + article.projectCode + '/' + article.itemCode);
  30. },
  31. /**
  32. * 保存文档
  33. */
  34. handleSaveArticle: function () {
  35. var me = this, view = me.getView(), vm = me.getViewModel(),
  36. data = vm.get('article');
  37. view.mask('正在保存');
  38. Ext.Ajax.payload({
  39. url: '/api/help/article/save',
  40. jsonData: data
  41. }).then(function (res) {
  42. view.unmask();
  43. if (res.success) {
  44. saas.util.BaseUtil.showSuccessToast('保存成功');
  45. }
  46. }).catch(function (e) {
  47. view.unmask();
  48. saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message);
  49. });
  50. },
  51. handleCreateFolder: function (menuitem) {
  52. this.doCreateItem(menuitem.ownerCt.record, false);
  53. },
  54. handleCreateItem: function (menuitem) {
  55. this.doCreateItem(menuitem.ownerCt.record, true);
  56. },
  57. doCreateItem: function (parent, isArticle) {
  58. var me = this, vm = me.getViewModel(), projectId = vm.get('project.id'),
  59. store = vm.getStore('treeStore'),
  60. root = store.getRoot(),
  61. parentId = parent ? parent.get('raw').id : null,
  62. lastChild = (parent || root).lastChild,
  63. orderNum = lastChild ? (lastChild.get('raw').orderNum + 1) : 1;
  64. me.showItemWindow({
  65. article: isArticle,
  66. projectId,
  67. parentId,
  68. orderNum
  69. }, null, parent);
  70. },
  71. handleEditItem: function (menuitem) {
  72. var me = this, record = menuitem.ownerCt.record;
  73. me.showItemWindow(record.get('raw'), record);
  74. },
  75. /**
  76. * 目录编辑窗口
  77. * @param {*} item 目录
  78. * @param {*} node 目录对应树节点
  79. * @param {*} parentNode 目录上级文件夹对应树节点
  80. */
  81. showItemWindow: function (item, node, parentNode) {
  82. var me = this, vm = me.getViewModel(),
  83. store = vm.getStore('treeStore');
  84. var panel = Ext.create({
  85. xtype: 'help-docitem-win',
  86. modal: true,
  87. autoShow: true,
  88. onConfirm: function (data) {
  89. me.saveItem(data).then(res => {
  90. data = res.data;
  91. if (node) {
  92. node.set('raw', data);
  93. node.set('text', data.name);
  94. if (item.id == vm.get('article.id')) {
  95. vm.set('article.itemCode', data.code);
  96. vm.set('article.itemName', data.name);
  97. vm.set('articlePath', node.getPath('text').replace('/Root', ''));
  98. }
  99. } else {
  100. if (!parentNode) {
  101. parentNode = store.getRoot();
  102. }
  103. parentNode.appendChild(store.itemMapper(data));
  104. parentNode.expand();
  105. }
  106. });
  107. }
  108. });
  109. panel.loadData(item);
  110. },
  111. /**
  112. * 保存目录
  113. * @param {*} data
  114. */
  115. saveItem: function (data) {
  116. var me = this, view = me.getView();
  117. view.mask('正在保存');
  118. return Ext.Ajax.payload({
  119. url: '/api/help/project_item/save',
  120. jsonData: data
  121. }).then(function (res) {
  122. view.unmask();
  123. if (res.success) {
  124. saas.util.BaseUtil.showSuccessToast('保存成功');
  125. return res;
  126. }
  127. }).catch(function (e) {
  128. view.unmask();
  129. saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message);
  130. });
  131. },
  132. /**
  133. * 删除目录
  134. * @param {*} menuitem
  135. */
  136. handleDeleteItem: function (menuitem) {
  137. var me = this, view = me.getView(), vm = me.getViewModel(),
  138. record = menuitem.ownerCt.record,
  139. id = record.get('raw').id;
  140. view.mask('正在删除');
  141. Ext.Ajax.form({
  142. url: '/api/help/project_item/delete/' + id
  143. }).then(function (res) {
  144. view.unmask();
  145. if (res.success) {
  146. saas.util.BaseUtil.showSuccessToast('删除成功');
  147. record.remove();
  148. if (vm.get('article.id') == id) {
  149. vm.set('article', null);
  150. vm.set('articlePath', null);
  151. }
  152. }
  153. }).catch(function (e) {
  154. view.unmask();
  155. saas.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
  156. });
  157. },
  158. /**
  159. * 点击树节点打开文档
  160. * @param {*} selModel
  161. * @param {*} selected
  162. */
  163. onItemSelect: function (selModel, selected) {
  164. if (selected.length) {
  165. var record = selModel.lastSelected, raw = record.get('raw');
  166. if (raw.article) {
  167. var me = this, vm = me.getViewModel(), project = vm.get('project');
  168. me.getArticle(raw.id).then(res => {
  169. var article = res.data || {
  170. id: raw.id,
  171. projectCode: project.code,
  172. itemCode: raw.code,
  173. itemName: raw.name
  174. };
  175. vm.set('article', article);
  176. vm.set('articlePath', record.getPath('text').replace('/Root', ''));
  177. });
  178. }
  179. }
  180. },
  181. /**
  182. * 查找文档
  183. * @param {*} id
  184. */
  185. getArticle: function (id) {
  186. var me = this, view = me.getView();
  187. view.mask('加载中');
  188. return Ext.Ajax.promise({
  189. url: '/api/help/article/read/' + id
  190. }).then(function (res) {
  191. view.unmask();
  192. if (res.success) {
  193. return res;
  194. }
  195. }).catch(function (e) {
  196. view.unmask();
  197. saas.util.BaseUtil.showErrorToast(e.message);
  198. });
  199. },
  200. /**
  201. * 拖拽改变目录顺序、所属文件夹
  202. * @param {*} el
  203. * @param {*} data
  204. * @param {*} over
  205. * @param {*} position
  206. * @param {*} e
  207. */
  208. onItemDragDrop: function (el, data, over, position, e) {
  209. var dropData = data.records[0].get('raw'),
  210. overData = over.get('raw'),
  211. orderNum, parentId, parent, updates = [];
  212. if (position == 'before') {
  213. orderNum = overData.orderNum;
  214. parentId = overData.parentId;
  215. parent = over.parentNode;
  216. } else if (position == 'after') {
  217. orderNum = overData.orderNum + 1;
  218. parentId = overData.parentId;
  219. parent = over.parentNode;
  220. } else if (position == 'append') {
  221. orderNum = over.lastChild ? (over.lastChild.get('raw').orderNum + 1) : 1;
  222. parentId = overData.id;
  223. parent = over;
  224. }
  225. dropData.orderNum = orderNum;
  226. dropData.parentId = parentId;
  227. updates.push(dropData);
  228. parent.eachChild(child => {
  229. var raw = child.get('raw');
  230. if (raw.id != dropData.id && raw.orderNum >= dropData.orderNum) {
  231. raw.orderNum++;
  232. updates.push(raw);
  233. }
  234. });
  235. this.batchSaveItem(updates);
  236. },
  237. /**
  238. * 批量保存目录
  239. * @param {*} data
  240. */
  241. batchSaveItem: function (data) {
  242. var me = this, view = me.getView();
  243. view.mask('正在保存');
  244. return Ext.Ajax.payload({
  245. url: '/api/help/project_item/batch_save',
  246. jsonData: data
  247. }).then(function (res) {
  248. view.unmask();
  249. if (res.success) {
  250. saas.util.BaseUtil.showSuccessToast('保存成功');
  251. return res;
  252. }
  253. }).catch(function (e) {
  254. view.unmask();
  255. saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message);
  256. });
  257. },
  258. });