@epxing/business 5.3.0-beta.1 → 5.3.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/API.md +11 -6
  2. package/README.md +44 -43
  3. package/dist/src/base/AiPromptDesigner.js +1 -0
  4. package/dist/src/base/AiPromptView.js +1 -0
  5. package/dist/src/base/AiSkillEditor.js +2 -1
  6. package/dist/src/base/AiSkillEditor.vue.js +2 -0
  7. package/dist/src/base/AppConfigFormItem.js +2 -3
  8. package/dist/src/base/AppConfigFormItem.vue.js +210 -85
  9. package/dist/src/base/AppMarket.js +1 -0
  10. package/dist/src/base/AppMarketList.js +1 -0
  11. package/dist/src/base/AppMarketSystemDetail.js +1 -0
  12. package/dist/src/base/AttributeSubAdd.js +1 -0
  13. package/dist/src/base/ChooseApplication.js +1 -0
  14. package/dist/src/base/ClientAppItem.js +1 -0
  15. package/dist/src/base/ClientApplication.js +1 -0
  16. package/dist/src/base/ClientApplicationList.js +1 -0
  17. package/dist/src/base/ClientModule.js +1 -0
  18. package/dist/src/base/ClientModuleIndex.js +1 -0
  19. package/dist/src/base/ClientSystemDetail.js +1 -0
  20. package/dist/src/base/ClientSystemList.js +1 -0
  21. package/dist/src/base/CommonFieldList.js +2 -1
  22. package/dist/src/base/CommonFieldList.vue.js +2 -1
  23. package/dist/src/base/CommonSearchList.js +1 -0
  24. package/dist/src/base/CompayDetail.js +1 -0
  25. package/dist/src/base/ComponentGlobalSet.js +1 -0
  26. package/dist/src/base/ComponentParamsTree.js +1 -0
  27. package/dist/src/base/ConfigModuleIndex.js +39 -1
  28. package/dist/src/base/CurrentClientApplication.js +1 -0
  29. package/dist/src/base/CurrentVersionInfo.js +1 -0
  30. package/dist/src/base/EntityMatchCompare.js +1 -0
  31. package/dist/src/base/FieldRelationFormItem.js +1 -0
  32. package/dist/src/base/HelpDocSet.js +1 -0
  33. package/dist/src/base/IndexFormItem.js +1 -0
  34. package/dist/src/base/JobFormItem.js +1 -0
  35. package/dist/src/base/ManageAppNav.js +2 -1
  36. package/dist/src/base/ManageMenu.js +2 -1
  37. package/dist/src/base/ManageMenuItem.js +1 -0
  38. package/dist/src/base/NoInstallSystemList.js +1 -0
  39. package/dist/src/base/PageList.js +1 -0
  40. package/dist/src/base/PasswordFormItem.js +1 -0
  41. package/dist/src/base/ProcessFormItem.js +1 -0
  42. package/dist/src/base/PublishSystemApplyFormItem.js +1 -0
  43. package/dist/src/base/RequestLog.js +1 -0
  44. package/dist/src/base/RightRiskList.js +1 -0
  45. package/dist/src/base/RoleAccredit.js +1 -0
  46. package/dist/src/base/RoleBindTrace.js +253 -0
  47. package/dist/src/base/RoleGroupManage.js +1037 -0
  48. package/dist/src/base/RoleRightList.js +1 -0
  49. package/dist/src/base/RoleUserManage.js +1 -0
  50. package/dist/src/base/ServiceAccredit.js +1 -0
  51. package/dist/src/base/ServiceMenu.js +8 -6
  52. package/dist/src/base/ServiceMenuFormItem.js +1 -0
  53. package/dist/src/base/ServiceOperate.js +1 -0
  54. package/dist/src/base/SystemHelpTreeFind.js +1 -0
  55. package/dist/src/base/aiPromptMode.js +1 -0
  56. package/dist/src/base/data-check/DataChckDetail.js +1 -0
  57. package/dist/src/base/data-check/DataCheck.js +1 -0
  58. package/dist/src/base/data-check/DataCheckList.js +1 -0
  59. package/dist/src/base/data-check/DataCheckSubList.js +1 -0
  60. package/dist/src/base/entity-view/EntityViewFormItem.js +1 -0
  61. package/dist/src/base/entity-view/EntityViewSubList.js +1 -0
  62. package/dist/src/base/entity-view-config/BasicInfoDialog.js +1 -0
  63. package/dist/src/base/entity-view-config/FieldPanel.js +1 -0
  64. package/dist/src/base/entity-view-config/FieldPropForm.js +1 -0
  65. package/dist/src/base/entity-view-config/FormulaDialog.js +1 -0
  66. package/dist/src/base/entity-view-config/ObjectFieldDialog.js +1 -0
  67. package/dist/src/base/entity-view-config/RelationPanel.js +1 -0
  68. package/dist/src/base/entity-view-config/SourceManagerDialog.js +1 -0
  69. package/dist/src/base/entity-view-config/SqlPanel.js +1 -0
  70. package/dist/src/base/entity-view-config/UnionPanel.js +1 -0
  71. package/dist/src/base/entity-view-config/ViewConfig.js +1 -0
  72. package/dist/src/base/entity-view-config/constants.js +1 -0
  73. package/dist/src/base/user-type/UserTypeFormItem.js +1 -0
  74. package/dist/src/components/AddPageFormItem.js +1 -0
  75. package/dist/src/components/AddUsedInterface.js +1 -0
  76. package/dist/src/components/AiDocFormItem.js +1 -0
  77. package/dist/src/components/AiList.js +1279 -3
  78. package/dist/src/components/AiPermissionAssistant.js +1 -0
  79. package/dist/src/components/AppList.js +1 -0
  80. package/dist/src/components/Apply/AIApplyIndex.js +1 -0
  81. package/dist/src/components/Apply/ApplyIndex.js +1 -0
  82. package/dist/src/components/AttributeList.js +1 -0
  83. package/dist/src/components/Banner.js +1 -0
  84. package/dist/src/components/BatchAddFieldDialog.js +1 -0
  85. package/dist/src/components/CardO.js +1 -0
  86. package/dist/src/components/CheckForm.js +1 -0
  87. package/dist/src/components/ClientAdminFormItem.js +1 -0
  88. package/dist/src/components/ClientAdminList.js +1 -0
  89. package/dist/src/components/ClientFormItem.js +1 -0
  90. package/dist/src/components/ClientList.js +1 -0
  91. package/dist/src/components/CodeDetail.js +1 -0
  92. package/dist/src/components/CodeManage.js +1 -0
  93. package/dist/src/components/ComponentFind.js +1 -0
  94. package/dist/src/components/ComponentList.js +1 -0
  95. package/dist/src/components/ConfigParamFormItem.js +1 -0
  96. package/dist/src/components/CreatePage.js +1 -0
  97. package/dist/src/components/DashboardCreate.js +1 -0
  98. package/dist/src/components/DataLog.js +1 -0
  99. package/dist/src/components/DataLogTimeline.js +1 -0
  100. package/dist/src/components/DataSnapshot.js +1 -0
  101. package/dist/src/components/DataSnapshotList.js +1 -0
  102. package/dist/src/components/DataSyncInit.js +1 -0
  103. package/dist/src/components/DblogList.js +1 -0
  104. package/dist/src/components/DeptFind.js +1 -0
  105. package/dist/src/components/DynamicUserList.js +1 -0
  106. package/dist/src/components/EntityCheckboxFind.js +1 -0
  107. package/dist/src/components/EntityCheckboxFind.vue.js +14 -10
  108. package/dist/src/components/EntityRelationAdd.js +1 -0
  109. package/dist/src/components/EntityRelationAddFormItem.js +1 -0
  110. package/dist/src/components/EntityRightFormItem.js +2 -5
  111. package/dist/src/components/EntityRightFormItem.vue.js +3 -1
  112. package/dist/src/components/EntityRightSubList.js +1 -0
  113. package/dist/src/components/EntitySystemEr.js +492 -0
  114. package/dist/src/components/EntityTagSubList.js +1 -0
  115. package/dist/src/components/EntityTreeManage.js +1 -0
  116. package/dist/src/components/ExportSystemConfig.js +1 -0
  117. package/dist/src/components/FieldTreeFind.js +1 -0
  118. package/dist/src/components/FormulaEditor.js +1 -0
  119. package/dist/src/components/GenTestData.js +1 -0
  120. package/dist/src/components/HallNav.js +1 -0
  121. package/dist/src/components/HallNav.vue.js +7 -36
  122. package/dist/src/components/HeaderNav.js +1 -0
  123. package/dist/src/components/IconCard.js +1 -0
  124. package/dist/src/components/IconFontLibrary.js +23 -1
  125. package/dist/src/components/IconFontList.js +22 -1
  126. package/dist/src/components/IdentifyList.js +1 -0
  127. package/dist/src/components/ImportSystemConfig.js +1 -0
  128. package/dist/src/components/InterfaceSubList.js +1 -0
  129. package/dist/src/components/JsPanel.js +1 -0
  130. package/dist/src/components/LanguageImportPage.js +1 -0
  131. package/dist/src/components/LanguageSetting.js +1 -0
  132. package/dist/src/components/List/LinkItem.js +1 -0
  133. package/dist/src/components/List/List.js +1 -0
  134. package/dist/src/components/List/ListItem.js +1 -0
  135. package/dist/src/components/MenuTreeFind.js +1 -0
  136. package/dist/src/components/MessageList.js +1 -0
  137. package/dist/src/components/MessageRuleFormItem.js +1 -0
  138. package/dist/src/components/MessageRuleReceiverFormItem.js +1 -0
  139. package/dist/src/components/MessageTemplate.js +1 -0
  140. package/dist/src/components/MetaList.js +1 -0
  141. package/dist/src/components/Nav.js +1 -0
  142. package/dist/src/components/NavFormCatalogItem.js +1 -0
  143. package/dist/src/components/NumList.js +1 -0
  144. package/dist/src/components/OperateLog.js +1 -0
  145. package/dist/src/components/PageCatalog.js +1 -0
  146. package/dist/src/components/PageChart.js +1 -0
  147. package/dist/src/components/PageSwipes.js +1 -0
  148. package/dist/src/components/PersonFormItem.js +1 -0
  149. package/dist/src/components/Popup.js +1 -0
  150. package/dist/src/components/PrintFormList.js +3 -1
  151. package/dist/src/components/PrintFormList.vue.js +3 -1
  152. package/dist/src/components/PublishEntity.js +1 -0
  153. package/dist/src/components/RelyFieldTreeFind.js +1 -0
  154. package/dist/src/components/ReportFormList.js +1 -0
  155. package/dist/src/components/ReportList.js +1 -0
  156. package/dist/src/components/RightSubList.js +1 -0
  157. package/dist/src/components/RoleAddUser.js +1 -0
  158. package/dist/src/components/RoleApplicationCard.js +1 -0
  159. package/dist/src/components/RoleApplicationList.js +1 -0
  160. package/dist/src/components/RoleApplicationSet.js +1 -0
  161. package/dist/src/components/Search.js +1 -0
  162. package/dist/src/components/ServiceFormItem.js +1 -0
  163. package/dist/src/components/SnapshotDataList.js +1 -0
  164. package/dist/src/components/SystemAdminList.js +1 -0
  165. package/dist/src/components/SystemFormItem.js +1 -0
  166. package/dist/src/components/SystemNav.js +1 -0
  167. package/dist/src/components/TaskNumCard.js +1 -0
  168. package/dist/src/components/TimerRuleFormItem.js +1 -0
  169. package/dist/src/components/TodoList.js +1 -0
  170. package/dist/src/components/UpdateSystemConfig.js +1 -0
  171. package/dist/src/components/UserCard.js +1 -0
  172. package/dist/src/components/UserFind.js +1 -0
  173. package/dist/src/components/UserFormItem.js +1 -0
  174. package/dist/src/components/UserList.js +1 -0
  175. package/dist/src/components/UserManage.js +1 -0
  176. package/dist/src/components/UserRoleList.js +1 -0
  177. package/dist/src/components/ValidateRuleFormItem.js +1 -0
  178. package/dist/src/components/ViewFieldDefine.js +1 -0
  179. package/dist/src/components/WikiSpaceList.js +1 -0
  180. package/dist/src/components/WikiWorkbench.js +154 -129
  181. package/dist/src/components/authorization/AddApiPermiss.js +1 -0
  182. package/dist/src/components/authorization/AddAuthorization.js +1 -0
  183. package/dist/src/components/authorization/AddEntityFind.js +1 -0
  184. package/dist/src/components/authorization/AddNoApi.js +1 -0
  185. package/dist/src/components/authorization/AddRoleScope.js +1 -0
  186. package/dist/src/components/authorization/AiRolePlan.js +1 -0
  187. package/dist/src/components/authorization/ApiShareOtherList.js +1 -0
  188. package/dist/src/components/authorization/ApiSystemList.js +1 -0
  189. package/dist/src/components/authorization/AuthorizationInterface.js +4 -1
  190. package/dist/src/components/authorization/AuthorizationRoleSystem.js +1 -0
  191. package/dist/src/components/authorization/EntityConstraintFormItem.js +1 -0
  192. package/dist/src/components/authorization/OtherShareApiList.js +1 -0
  193. package/dist/src/components/authorization/PermissCommonRoleTabs.js +1 -0
  194. package/dist/src/components/authorization/PermissRoleAuthorization.js +1 -0
  195. package/dist/src/components/authorization/PermissRoleTabs.js +1 -0
  196. package/dist/src/components/authorization/RoleLevel.js +1 -0
  197. package/dist/src/components/authorization/RoleLevelScope.js +1 -0
  198. package/dist/src/components/authorization/SystemAddNoApi.js +1 -0
  199. package/dist/src/components/card/CardList.js +1 -0
  200. package/dist/src/components/card/CardListItem.js +1 -0
  201. package/dist/src/components/card/Title.js +1 -0
  202. package/dist/src/components/custom-bpmn/CustomContextPad.js +1 -0
  203. package/dist/src/components/custom-bpmn/CustomPalette.js +1 -0
  204. package/dist/src/components/custom-bpmn/CustomRenderer.js +1 -0
  205. package/dist/src/components/custom-bpmn/CustomRendererBpmn.js +1 -0
  206. package/dist/src/components/custom-bpmn/PropertiesView.js +1992 -1942
  207. package/dist/src/components/custom-bpmn/components/AiModel.js +1 -0
  208. package/dist/src/components/custom-bpmn/components/Api.js +1 -0
  209. package/dist/src/components/custom-bpmn/components/BatchOperation.js +1 -0
  210. package/dist/src/components/custom-bpmn/components/Copy.js +1 -0
  211. package/dist/src/components/custom-bpmn/components/DataTransform.js +1 -0
  212. package/dist/src/components/custom-bpmn/components/Demo.js +1 -0
  213. package/dist/src/components/custom-bpmn/components/EditDiv.js +1 -0
  214. package/dist/src/components/custom-bpmn/components/GenScope.js +1 -0
  215. package/dist/src/components/custom-bpmn/components/GlobalParamsTree.js +1 -0
  216. package/dist/src/components/custom-bpmn/components/Knowledges.js +1 -0
  217. package/dist/src/components/custom-bpmn/components/Login.js +1 -0
  218. package/dist/src/components/custom-bpmn/components/MessageQueue.js +1 -0
  219. package/dist/src/components/custom-bpmn/components/MetaSelect.js +1 -0
  220. package/dist/src/components/custom-bpmn/components/NumStatistic.js +1 -0
  221. package/dist/src/components/custom-bpmn/components/ObjectTransform.js +1 -0
  222. package/dist/src/components/custom-bpmn/components/OutPut.js +1 -0
  223. package/dist/src/components/custom-bpmn/components/ParamsMachining.js +1 -0
  224. package/dist/src/components/custom-bpmn/components/ParamsOutput.js +1 -0
  225. package/dist/src/components/custom-bpmn/components/ProcessAudit.js +1 -0
  226. package/dist/src/components/custom-bpmn/components/SingleMultipleFind.js +1 -0
  227. package/dist/src/components/custom-bpmn/components/TestDialog.js +1 -0
  228. package/dist/src/components/custom-bpmn/index.js +1 -0
  229. package/dist/src/components/custom-bpmn/palette.js +1 -0
  230. package/dist/src/components/custom-bpmn/util.js +1 -0
  231. package/dist/src/components/dashboard-create.js +1 -0
  232. package/dist/src/components/entity-relation-diagram/Er.js +1 -0
  233. package/dist/src/components/entity-relation-diagram/renderErNode.js +1 -0
  234. package/dist/src/components/expand/AddForm.js +1 -0
  235. package/dist/src/components/expand/AddFormItem.js +1 -0
  236. package/dist/src/components/filter/Filter.js +1 -0
  237. package/dist/src/components/filter/FilterItem.js +1 -0
  238. package/dist/src/components/hall/AppCollect.js +1 -0
  239. package/dist/src/components/hall/AppList.js +1 -0
  240. package/dist/src/components/hall/AppVisitRecord.js +1 -0
  241. package/dist/src/components/hall/Banner.js +1 -0
  242. package/dist/src/components/hall/ServiceCard.js +1 -0
  243. package/dist/src/components/hall/UserCard.js +1 -0
  244. package/dist/src/components/icon-gallery/IconGallery.js +193 -0
  245. package/dist/src/components/icon-gallery/mixin.js +150 -0
  246. package/dist/src/components/permiss/AddApi.js +1 -0
  247. package/dist/src/components/permiss/AddNoEntityApi.js +1 -0
  248. package/dist/src/components/permiss/AddSystemPermiss.js +1 -0
  249. package/dist/src/components/permiss/AllocateRole.js +1 -0
  250. package/dist/src/components/permiss/ApiSubList.js +1 -0
  251. package/dist/src/components/permiss/CommonRoleMenu.js +1 -0
  252. package/dist/src/components/permiss/FieldScope.js +1 -0
  253. package/dist/src/components/permiss/PermissManage.js +1 -0
  254. package/dist/src/components/permiss/RoleAppList.js +1 -0
  255. package/dist/src/components/permiss/RoleMenu.js +1 -0
  256. package/dist/src/components/permiss/RoleSubList.js +1 -0
  257. package/dist/src/components/permiss/jurisdiction.js +1 -0
  258. package/dist/src/components/process-healthcheck/HealthcheckChart.js +1 -0
  259. package/dist/src/components/process-healthcheck/HealthcheckRenderer.js +1 -0
  260. package/dist/src/components/process-healthcheck/index.js +1 -0
  261. package/dist/src/components/report/Config.js +1 -0
  262. package/dist/src/components/report/Design.js +1 -0
  263. package/dist/src/components/report/StatList.js +1 -0
  264. package/dist/src/components/right/EntityOtherSystemList.js +1 -0
  265. package/dist/src/components/right/SystemInterfaceList.js +1 -0
  266. package/dist/src/components/right/SystemList.js +1 -0
  267. package/dist/src/components/upLoad.js +1 -0
  268. package/dist/src/components/viewport/LookViewList.js +1 -0
  269. package/dist/src/components/viewport/ViewAddForm.js +1 -0
  270. package/dist/src/components/viewport/ViewDefineList.js +1 -0
  271. package/dist/src/components/viewport/ViewFiedList.js +1 -0
  272. package/dist/src/components/viewport/ViewScope.js +1 -0
  273. package/dist/src/components/wiki-workbench/WikiCites.js +1 -0
  274. package/dist/src/components/wiki-workbench/WikiIntake.js +87 -93
  275. package/dist/src/components/wiki-workbench/WikiIntake.vue.js +153 -73
  276. package/dist/src/components/wiki-workbench/WikiJobs.js +1 -0
  277. package/dist/src/components/wiki-workbench/WikiRevisions.js +1 -0
  278. package/dist/src/components/wiki-workbench/WikiSpaceSettings.js +1 -0
  279. package/dist/src/components/wiki-workbench/codes.js +1 -0
  280. package/dist/src/components/wiki-workbench/index.js +1 -0
  281. package/dist/src/index.js +27 -20
  282. package/dist/src/popup.js +1 -0
  283. package/dist/src/public-components.js +17 -14
  284. package/dist/src/remote.entry.js +1 -0
  285. package/dist/src/route-components.js +6 -5
  286. package/dist/src/system.component.index.js +2 -1
  287. package/dist/src/system.component.js +9 -3
  288. package/dist/src/system.component.lazy.js +2 -1
  289. package/dist/src/views/Add.js +2 -1
  290. package/dist/src/views/Add.vue.js +8 -3
  291. package/dist/src/views/AiToolManager.js +793 -317
  292. package/dist/src/views/App.js +4 -45
  293. package/dist/src/views/AppRoleSelect.js +4 -230
  294. package/dist/src/views/BatchEdit.js +1 -0
  295. package/dist/src/views/Bpmn.js +1 -0
  296. package/dist/src/views/EntityCheckPage.js +1 -0
  297. package/dist/src/views/EntityDetailPage.js +1 -0
  298. package/dist/src/views/EntityEditPage.js +1 -0
  299. package/dist/src/views/EntitySubListPage.js +1 -0
  300. package/dist/src/views/EntityTreePage.js +1 -0
  301. package/dist/src/views/Error.js +4 -207
  302. package/dist/src/views/ExcelDesign.js +327 -316
  303. package/dist/src/views/ExcelPreviewPage.js +1 -0
  304. package/dist/src/views/ExportFilePage.js +1 -0
  305. package/dist/src/views/ExportPage.js +1 -0
  306. package/dist/src/views/FormDesign.js +1 -0
  307. package/dist/src/views/I18nWorkbench.js +1 -0
  308. package/dist/src/views/ImportFilePage.js +1 -0
  309. package/dist/src/views/ImportPage.js +1 -0
  310. package/dist/src/views/JvmMemoryMonitor.js +463 -0
  311. package/dist/src/views/MEntityListPage.js +1 -0
  312. package/dist/src/views/MEntitySubListPage.js +1 -0
  313. package/dist/src/views/MinePage.js +1 -0
  314. package/dist/src/views/Module.js +4 -170
  315. package/dist/src/views/PageAttributeTreePage.js +1 -0
  316. package/dist/src/views/PageConfig.js +1 -0
  317. package/dist/src/views/Permission.js +1 -0
  318. package/dist/src/views/PersonalInfo.js +1 -0
  319. package/dist/src/views/QyWechat.js +1 -0
  320. package/dist/src/views/ReportFormListPage.js +1 -0
  321. package/dist/src/views/TaskPage.js +1 -0
  322. package/dist/src/views/WikiBinding.js +89 -25
  323. package/dist/src/views/client/AddForm.js +1 -0
  324. package/dist/src/views/client/AppMarket.js +1 -0
  325. package/dist/src/views/client/ClientIndex.js +1 -0
  326. package/dist/src/views/client/ClientModuleIndexPage.js +1 -0
  327. package/dist/src/views/client/CopySystem.js +1 -0
  328. package/dist/src/views/client/CreateAppFormItem.js +1 -0
  329. package/dist/src/views/client/CreateMethod.js +1 -0
  330. package/dist/src/views/client/InstallSystem.js +1 -0
  331. package/dist/src/views/client/ManageList.js +1 -0
  332. package/dist/src/views/client/OpenClientManage.js +1 -0
  333. package/dist/src/views/client/OpenSystemManage.js +1 -0
  334. package/dist/src/views/client/PageTabsCyclic.js +1 -0
  335. package/dist/src/views/client/SelfBuiltSystem.js +1 -0
  336. package/dist/src/views/client/StandardProduct.js +1 -0
  337. package/dist/src/views/client/SystemAppAccredit.js +1 -0
  338. package/dist/src/views/client/SystemAppManager.js +1 -0
  339. package/dist/src/views/client/SystemManager.js +1 -0
  340. package/dist/src/views/i18n/I18nAiTaskHistoryDialog.js +1 -0
  341. package/dist/src/views/i18n/I18nPublishDialog.js +1 -0
  342. package/dist/src/views/i18n/I18nTranslationList.js +1 -0
  343. package/dist/src/views/i18n/i18n-workbench-text.js +1 -0
  344. package/dist/src/views/layout/CardList.js +1 -0
  345. package/dist/src/views/layout/Grid.js +1 -0
  346. package/dist/src/views/match/AddTargetField.js +1 -0
  347. package/dist/src/views/match/MatchAddFormItem.js +1 -0
  348. package/dist/src/views/match/conversion.js +1 -0
  349. package/dist/src/views/match/customize.js +1 -0
  350. package/dist/src/views/match/fieldMatch.js +1 -0
  351. package/dist/src/views/report/AddFormItem.js +1 -0
  352. package/dist/src/views/report/DesignReport.js +1 -0
  353. package/dist/src/views/report/ReportTreeFind.js +1 -0
  354. package/dist/style.css +2867 -1487
  355. package/package.json +14 -7
  356. package/src/base/AiSkillEditor.vue +2 -0
  357. package/src/base/AppConfigFormItem.vue +211 -145
  358. package/src/base/CommonFieldList.vue +9 -6
  359. package/src/base/ConfigModuleIndex.vue +37 -1
  360. package/src/base/ManageAppNav.vue +1188 -1188
  361. package/src/base/ManageMenu.vue +933 -933
  362. package/src/base/RoleBindTrace.vue +364 -0
  363. package/src/base/RoleGroupManage.vue +1160 -0
  364. package/src/base/ServiceMenu.vue +6 -5
  365. package/src/components/AiList.vue +439 -113
  366. package/src/components/EntityCheckboxFind.vue +12 -8
  367. package/src/components/EntityRightFormItem.vue +9 -10
  368. package/src/components/EntitySystemEr.vue +517 -0
  369. package/src/components/HallNav.vue +6 -33
  370. package/src/components/IconFontLibrary.vue +27 -60
  371. package/src/components/IconFontList.vue +13 -64
  372. package/src/components/PrintFormList.vue +33 -27
  373. package/src/components/WikiWorkbench.vue +90 -60
  374. package/src/components/authorization/AuthorizationInterface.vue +2 -0
  375. package/src/components/custom-bpmn/CustomPalette.js +1 -1
  376. package/src/components/custom-bpmn/CustomRenderer.js +1 -1
  377. package/src/components/custom-bpmn/PropertiesView.vue +35 -4
  378. package/src/components/custom-bpmn/index.js +1 -1
  379. package/src/components/icon-gallery/IconGallery.vue +130 -0
  380. package/src/components/icon-gallery/mixin.jsx +109 -0
  381. package/src/components/wiki-workbench/WikiIntake.vue +178 -104
  382. package/src/index.js +24 -20
  383. package/src/public-components.js +1 -0
  384. package/src/route-components.js +4 -4
  385. package/src/system.component.index.js +1 -1
  386. package/src/views/Add.vue +8 -5
  387. package/src/views/AiToolManager.vue +326 -4
  388. package/src/views/App.vue +4 -53
  389. package/src/views/AppRoleSelect.vue +4 -334
  390. package/src/views/Error.vue +4 -63
  391. package/src/views/ExcelDesign.vue +24 -7
  392. package/src/views/JvmMemoryMonitor.vue +284 -0
  393. package/src/views/Module.vue +4 -210
  394. package/src/views/WikiBinding.vue +42 -0
  395. package/types/app.d.ts +1 -0
  396. package/types/dept-find.d.ts +1 -1
  397. package/types/index.d.ts +15 -14
  398. package/types/popup.d.ts +2 -2
  399. package/types/route-components.d.ts +1 -1
  400. package/types/user-find.d.ts +1 -1
  401. package/dist/assets/role_select-DTqRlFNz.webp +0 -0
  402. package/dist/src/components/AiList.vue.js +0 -93
  403. package/dist/src/components/IconFontLibrary.vue.js +0 -67
  404. package/dist/src/components/IconFontList.vue.js +0 -79
@@ -1,1190 +1,1190 @@
1
- <script>
2
- // @jsx-vue3(T30 JSX 批:Vue3 JSX 语法,@vue/babel-plugin-jsx 编译)
3
-
4
- // '侧边导航', value: '0' '顶部导航', value: '1'
5
- // '经典(默认)', value: '1' '左侧', value: '0' '顶部', value: '2'
6
- import AppNav from '@epxing/components/src/app-nav/AppNav.vue'
7
- import draggable from '@epxing/core/src/components/draggable'
8
- export default {
9
- name: 'epx-manage-app-nav',
10
- extends: AppNav,
11
- components: {
12
- draggable
13
- },
14
- computed: {
15
- currentRoleName () {
16
- if (this.$route.name === 'manage') return '管理模式'
17
- const role = this.roleList.find(item => item.ID === this.$currentRoleId)
18
- if (role) return role['NAME#'] || this.$t(role.NAME)
19
- return this.$t('set the role')
20
- }
21
- },
22
- data () {
23
- return {
24
- addMenuTypeList: [
25
- { label: '列表查询页面', value: 'list', preview: require('@/assets/images/addmenu/list.png') },
26
- { label: '数据看板页面', value: 'data', preview: require('@/assets/images/addmenu/data.png') },
27
- { label: '空白页面', value: 'blank', preview: require('@/assets/images/addmenu/basepage.png') },
28
- { label: '自选模版页面', value: 'choose', preview: require('@/assets/images/addmenu/zxmb.png') },
29
- { label: '关联已有页面', value: 'select', preview: require('@/assets/images/addmenu/link.png') },
30
- { label: '菜单目录', value: 'dir', preview: require('@/assets/images/addmenu/menu.png') }
31
- ],
32
- showEditAppDialog: false,
33
- dialogTitle: '',
34
- editType: '1',
35
- inputAppName: '',
36
- navOptions: [
37
- { label: '经典(默认)', value: '1', preview: require('@/assets/images/nav/1.png') },
38
- { label: '左侧', value: '0', preview: require('@/assets/images/nav/0.png') },
39
- { label: '顶部', value: '2', preview: require('@/assets/images/nav/2.png') },
40
- { label: '双列', value: '3', preview: require('@/assets/images/nav/3.svg') }
41
- ],
42
- dialogWidth: '610',
43
- navType: '',
44
- navAppType: '',
45
- editMenuInfo: {},
46
- addMenuData: {},
47
- appAllRoleList: [],
48
- checkRoleList: []
49
- // popoverManualVisible: false
50
- }
51
- },
52
- watch: {
53
- menu () {
54
- this.judgeClickMenu()
55
- this.validateNavWidth()
56
- }
57
- },
58
- methods: {
59
- switchRole (role) {
60
- const { params = {}, query = {} } = this.$route
61
- if (role === 'app-manage-code') {
62
- return
63
- }
64
- const switchRoleCode = role.CODE + (role.TYPE === 'client' ? '-client' : '')
65
- // if (switchRoleCode !== params.role) {
66
- this.$router.replace({
67
- name: 'app1',
68
- params: {
69
- ...params,
70
- role: switchRoleCode
71
- },
72
- query
73
- })
74
- .then(() => {
75
- const timer = setTimeout(() => {
76
- location.reload()
77
- clearTimeout(timer)
78
- }, 10)
79
- })
80
- // }
81
- },
82
- editAppMenu (nav, name, type, width) {
83
- this.editMenuInfo = { ...nav }
84
- this.dialogTitle = name
85
- this.editType = type
86
- if (name === 'delete-menu') {
87
- this.removeEntity(nav, type)
88
- } else {
89
- if (type === 'menu-rename') {
90
- this.inputAppName = nav.text
91
- } else if (type === 'menu-setting') {
92
- const query = {
93
- openType: '2',
94
- pageType: 'DETAIL',
95
- flag: 'v_service_menu_detail_mobile',
96
- metaId: 'FM_MODULE',
97
- title: name,
98
- id: nav.id,
99
- callback: this.reloadMenu
100
- }
101
- this.$createPage(query)
102
- return
103
- } else if (type === 'menu-sq') {
104
- // const query = {
105
- // openType: '2',
106
- // pageType: 'ADD',
107
- // flag: 'manage-client-system-app-menu-add-role',
108
- // metaId: 'FM_ROLE_MODULE',
109
- // title: name,
110
- // parentId: nav.id
111
- // }
112
- // this.$createPage(query)
113
- // return
114
- this.checkRoleList = []
115
- this.showEditAppDialog = true
116
- this.getSqList()
117
- return
118
- }
119
- this.dialogWidth = width || '610'
120
- this.showEditAppDialog = true
121
- }
122
- },
123
- getClientSystemAppRole () {
124
- const scopeParams = [
125
- {
126
- field: 'SYSTEM',
127
- mode: 'equal',
128
- values: this.SYSTEM,
129
- link: 'or'
130
- },
131
- {
132
- field: 'TYPE',
133
- mode: 'equal',
134
- values: 'client'
135
- }
136
- ]
137
- const params = {
138
- entityId: 'FM_ROLE',
139
- scopeParams: JSON.stringify(scopeParams),
140
- order_field: 'TYPE',
141
- order_mode: 'desc'
142
- }
143
- this.$http.list(params)
144
- .then(data => {
145
- this.appAllRoleList = data.entitys
146
- })
147
- },
148
- getSqList () {
149
- this.$http.list({
150
- entityId: 'FM_ROLE_MODULE',
151
- 'scope.MODULE': this.editMenuInfo.id
152
- })
153
- .then(data => {
154
- this.checkRoleList = data.entitys.map(item => item.ROLE)
155
- })
156
- },
157
- addAppMenu (nav, menuTypeItem, name, type, width) {
158
- this.editMenuInfo = { ...nav }
159
- this.editType = type
160
- const defaultValue = {}
161
- // 这里的add-nav-menu为新增同级菜单
162
- defaultValue.UP_ID = (type === 'add-nav-menu' || type === 'add-tj') ? nav.parent : nav.id
163
- // 新增菜单
164
- const query = {
165
- flag: 'manage-client-system-app-add-menu',
166
- metaId: 'FM_MODULE',
167
- defaultValue,
168
- title: name,
169
- serviceId: this.appConfig.ID,
170
- moduleType: menuTypeItem.value,
1
+ <script>
2
+ // @jsx-vue3(T30 JSX 批:Vue3 JSX 语法,@vue/babel-plugin-jsx 编译)
3
+
4
+ // '侧边导航', value: '0' '顶部导航', value: '1'
5
+ // '经典(默认)', value: '1' '左侧', value: '0' '顶部', value: '2'
6
+ import AppNav from '@epxing/components/src/app-nav/AppNav.vue'
7
+ import draggable from '@epxing/core/src/components/draggable'
8
+ export default {
9
+ name: 'epx-manage-app-nav',
10
+ extends: AppNav,
11
+ components: {
12
+ draggable
13
+ },
14
+ computed: {
15
+ currentRoleName () {
16
+ if (this.$route.name === 'manage') return '管理模式'
17
+ const role = this.roleList.find(item => item.ID === this.$currentRoleId)
18
+ if (role) return role['NAME#'] || this.$t(role.NAME)
19
+ return this.$t('set the role')
20
+ }
21
+ },
22
+ data () {
23
+ return {
24
+ addMenuTypeList: [
25
+ { label: '列表查询页面', value: 'list', preview: require('@/assets/images/addmenu/list.png') },
26
+ { label: '数据看板页面', value: 'data', preview: require('@/assets/images/addmenu/data.png') },
27
+ { label: '空白页面', value: 'blank', preview: require('@/assets/images/addmenu/basepage.png') },
28
+ { label: '自选模版页面', value: 'choose', preview: require('@/assets/images/addmenu/zxmb.png') },
29
+ { label: '关联已有页面', value: 'select', preview: require('@/assets/images/addmenu/link.png') },
30
+ { label: '菜单目录', value: 'dir', preview: require('@/assets/images/addmenu/menu.png') }
31
+ ],
32
+ showEditAppDialog: false,
33
+ dialogTitle: '',
34
+ editType: '1',
35
+ inputAppName: '',
36
+ navOptions: [
37
+ { label: '经典(默认)', value: '1', preview: require('@/assets/images/nav/1.png') },
38
+ { label: '左侧', value: '0', preview: require('@/assets/images/nav/0.png') },
39
+ { label: '顶部', value: '2', preview: require('@/assets/images/nav/2.png') },
40
+ { label: '双列', value: '3', preview: require('@/assets/images/nav/3.svg') }
41
+ ],
42
+ dialogWidth: '610',
43
+ navType: '',
44
+ navAppType: '',
45
+ editMenuInfo: {},
46
+ addMenuData: {},
47
+ appAllRoleList: [],
48
+ checkRoleList: []
49
+ // popoverManualVisible: false
50
+ }
51
+ },
52
+ watch: {
53
+ menu () {
54
+ this.judgeClickMenu()
55
+ this.validateNavWidth()
56
+ }
57
+ },
58
+ methods: {
59
+ switchRole (role) {
60
+ const { params = {}, query = {} } = this.$route
61
+ if (role === 'app-manage-code') {
62
+ return
63
+ }
64
+ const switchRoleCode = role.CODE + (role.TYPE === 'client' ? '-client' : '')
65
+ // if (switchRoleCode !== params.role) {
66
+ this.$router.replace({
67
+ name: 'app1',
68
+ params: {
69
+ ...params,
70
+ role: switchRoleCode
71
+ },
72
+ query
73
+ })
74
+ .then(() => {
75
+ const timer = setTimeout(() => {
76
+ location.reload()
77
+ clearTimeout(timer)
78
+ }, 10)
79
+ })
80
+ // }
81
+ },
82
+ editAppMenu (nav, name, type, width) {
83
+ this.editMenuInfo = { ...nav }
84
+ this.dialogTitle = name
85
+ this.editType = type
86
+ if (name === 'delete-menu') {
87
+ this.removeEntity(nav, type)
88
+ } else {
89
+ if (type === 'menu-rename') {
90
+ this.inputAppName = nav.text
91
+ } else if (type === 'menu-setting') {
92
+ const query = {
93
+ openType: '2',
94
+ pageType: 'DETAIL',
95
+ flag: 'v_service_menu_detail_mobile',
96
+ metaId: 'FM_MODULE',
97
+ title: name,
98
+ id: nav.id,
99
+ callback: this.reloadMenu
100
+ }
101
+ this.$createPage(query)
102
+ return
103
+ } else if (type === 'menu-sq') {
104
+ // const query = {
105
+ // openType: '2',
106
+ // pageType: 'ADD',
107
+ // flag: 'manage-client-system-app-menu-add-role',
108
+ // metaId: 'FM_ROLE_MODULE',
109
+ // title: name,
110
+ // parentId: nav.id
111
+ // }
112
+ // this.$createPage(query)
113
+ // return
114
+ this.checkRoleList = []
115
+ this.showEditAppDialog = true
116
+ this.getSqList()
117
+ return
118
+ }
119
+ this.dialogWidth = width || '610'
120
+ this.showEditAppDialog = true
121
+ }
122
+ },
123
+ getClientSystemAppRole () {
124
+ const scopeParams = [
125
+ {
126
+ field: 'SYSTEM',
127
+ mode: 'equal',
128
+ values: this.SYSTEM,
129
+ link: 'or'
130
+ },
131
+ {
132
+ field: 'TYPE',
133
+ mode: 'equal',
134
+ values: 'client'
135
+ }
136
+ ]
137
+ const params = {
138
+ entityId: 'FM_ROLE',
139
+ scopeParams: JSON.stringify(scopeParams),
140
+ order_field: 'TYPE',
141
+ order_mode: 'desc'
142
+ }
143
+ this.$http.list(params)
144
+ .then(data => {
145
+ this.appAllRoleList = data.entitys
146
+ })
147
+ },
148
+ getSqList () {
149
+ this.$http.list({
150
+ entityId: 'FM_ROLE_MODULE',
151
+ 'scope.MODULE': this.editMenuInfo.id
152
+ })
153
+ .then(data => {
154
+ this.checkRoleList = data.entitys.map(item => item.ROLE)
155
+ })
156
+ },
157
+ addAppMenu (nav, menuTypeItem, name, type, width) {
158
+ this.editMenuInfo = { ...nav }
159
+ this.editType = type
160
+ const defaultValue = {}
161
+ // 这里的add-nav-menu为新增同级菜单
162
+ defaultValue.UP_ID = (type === 'add-nav-menu' || type === 'add-tj') ? nav.parent : nav.id
163
+ // 新增菜单
164
+ const query = {
165
+ flag: 'manage-client-system-app-add-menu',
166
+ metaId: 'FM_MODULE',
167
+ defaultValue,
168
+ title: name,
169
+ serviceId: this.appConfig.ID,
170
+ moduleType: menuTypeItem.value,
171
171
  ...(menuTypeItem.value === 'data' ? { component: 'dashboard-create', flag: undefined, title: '创建数据看板', dialogWidth: '560px' } : {}),
172
- openType: '2',
173
- callback: this.reloadMenu
174
- }
175
- this.$createPage(query)
176
- },
177
- chooseMenuType (item) {
178
- this.editType = 'add-nav-menu'
179
- // 新增菜单
180
- const query = {
181
- flag: 'manage-client-system-app-add-menu',
182
- metaId: 'FM_MODULE',
183
- serviceId: this.appConfig.ID,
184
- moduleType: item.value,
172
+ openType: '2',
173
+ callback: this.reloadMenu
174
+ }
175
+ this.$createPage(query)
176
+ },
177
+ chooseMenuType (item) {
178
+ this.editType = 'add-nav-menu'
179
+ // 新增菜单
180
+ const query = {
181
+ flag: 'manage-client-system-app-add-menu',
182
+ metaId: 'FM_MODULE',
183
+ serviceId: this.appConfig.ID,
184
+ moduleType: item.value,
185
185
  ...(item.value === 'data' ? { component: 'dashboard-create', flag: undefined, title: '创建数据看板', dialogWidth: '560px' } : {}),
186
- openType: '2',
187
- callback: this.reloadMenu
188
- }
189
- const popover = this.$refs.popover
190
- if (popover)popover.doClose()
191
- // this.popoverManualVisible = false
192
- this.$createPage(query)
193
- },
194
- judgeClickMenu () {
195
- // 一级导航菜单信息后点击查看该新增菜单信息
196
- if (this.editType === 'add-nav-menu') {
197
- const nav = this.menu.find(item => item.ID === this.addMenuData.ID)
198
- if (nav) {
199
- // this.clickNavMenu(nav)
200
- this.toPage(nav)
201
- }
202
- }
203
- },
204
- reloadMenu (v) {
205
- // 经典模式新增下级菜单
206
- if (this.type === '1' && this.editType === 'add-xj') {
207
- this.toPage(this.editMenuInfo)
208
- } else {
209
- // 一级导航菜单信息后点击查看该新增菜单信息
210
- if (this.editType === 'add-nav-menu') {
211
- this.addMenuData = v
212
- }
213
- this.$emit('updateMenu')
214
- }
215
- },
216
- removeEntity (select, type) {
217
- this.showPopover = null
218
- let selectItem = this.clickItem
219
- if (select && select.id) {
220
- selectItem = select
221
- }
222
- this.expandKeys = []
223
- if (!selectItem || !selectItem.id) {
224
- this.$message.error(this.$t('please select a record'))
225
- return
226
- }
227
- // const idArr = [selectItem.id]
228
- // this.getSubIds(idArr, selectItem.children)
229
- const params = {
230
- action: 'removeMulti',
231
- entityId: 'FM_MODULE',
232
- ids: selectItem.id
233
- // ids: idArr.join(',')
234
- }
235
- if (type === '1') {
236
- params.deletePag = '1'
237
- }
238
- this.$confirm(this.$t('Confirm the deletion') + '?')
239
- .then(() => {
240
- this.$http.$request(params)
241
- .then(data => {
242
- this.$message.success(this.$t('deleted successfully'))
243
- // 删除菜单
244
- if (!selectItem.parent) {
245
- const key = 'default-' + selectItem.ID
246
- this.$store.commit('DESTORY_TAB', key)
247
- }
248
- this.reloadMenu()
249
- })
250
- })
251
- },
252
- getSubIds (idArr = [], data) {
253
- data.forEach(item => {
254
- idArr.push(item.id)
255
- if (item.children) {
256
- this.getSubIds(idArr, item.children)
257
- }
258
- })
259
- },
260
- editAppConfig (name, type, width, e) {
261
- this.dialogTitle = name
262
- this.editType = type
263
- if (type === '1') {
264
- this.inputAppName = this.appConfig.NAME
265
- } else if (type === '2') {
266
- const appConfig = this.appConfig.APP_CONFIG ? JSON.parse(this.appConfig.APP_CONFIG) : {}
267
- this.navAppType = appConfig.navType
268
- this.navType = appConfig.navType
269
- } else if (type === '3') {
270
- const query = {
271
- flag: 'manage-client-system-app-accredit',
272
- metaId: 'FM_ROLE',
273
- systemId: this.SYSTEM,
274
- serviceId: this.appConfig.ID,
275
- systemName: this.appConfig['SYSTEM|NAME'],
276
- appName: this.appConfig.NAME,
277
- appType: this.appConfig.TYPE
278
- }
279
- this.$store.commit('CREATE_TAB', {
280
- key: 'default-' + this.appConfig.ID,
281
- moduleId: this.appConfig.ID,
282
- component: 'module-index-page',
283
- title: name,
284
- showBack: true,
285
- ...query
286
- })
287
- return
288
- } else {
289
- const query = {
290
- flag: 'manage-client-system-app-detail',
291
- metaId: 'FM_SERVICE',
292
- id: this.appConfig.ID
293
- }
294
- this.$store.commit('CREATE_TAB', {
295
- key: 'default-' + new Date().getTime(),
296
- moduleId: this.appConfig.ID,
297
- component: 'module-index-page',
298
- title: name,
299
- showBack: true,
300
- ...query
301
- })
302
- return
303
- }
304
- this.dialogWidth = width || '610'
305
- this.showEditAppDialog = true
306
- },
307
- editAppDialog () {
308
- if (this.editType === 'menu-rename') {
309
- if (!this.inputAppName) {
310
- this.$message.error('名称不能为空')
311
- return
312
- }
313
- this.$http.update({
314
- entityId: 'FM_MODULE',
315
- 'bean.ID': this.editMenuInfo.id,
316
- 'bean.NAME': this.inputAppName
317
- })
318
- .then(data => {
319
- this.$emit('updateMenu')
320
- this.$message.success('修改成功')
321
- this.showEditAppDialog = false
322
- })
323
- .catch(err => {
324
- this.$message.error(err.message || '修改失败')
325
- this.showEditAppDialog = false
326
- })
327
- } else if (this.editType === 'menu-sq') {
328
- // if (this.checkRoleList.length === 0) {
329
- // this.$message.error('请先选择授权角色')
330
- // return
331
- // }
332
- this.$http.$post({
333
- action: 'refreshModuleRoles',
334
- entityId: 'FM_ROLE_MODULE',
335
- moduleId: this.editMenuInfo.id,
336
- roleIds: this.checkRoleList.join(',')
337
- })
338
- .then(data => {
339
- this.$message.success('添加成功')
340
- this.showEditAppDialog = false
341
- })
342
- .catch(err => {
343
- this.$message.error(err.message || '操作失败')
344
- })
345
- } else {
346
- const params = {
347
- entityId: 'FM_SERVICE',
348
- 'bean.ID': this.appConfig.ID
349
- }
350
- if (this.editType === '1') {
351
- params['bean.NAME'] = this.inputAppName
352
- if (!this.inputAppName) {
353
- this.$message.error('名称不能为空')
354
- return
355
- }
356
- } else if (this.editType === '2') {
357
- if (this.navAppType === this.navType) {
358
- this.$message.error('您未修改导航模式')
359
- return
360
- }
361
- const appConfig = this.appConfig.APP_CONFIG ? JSON.parse(this.appConfig.APP_CONFIG) : {}
362
- const obj = { ...appConfig, navType: this.navType }
363
- params['bean.APP_CONFIG'] = JSON.stringify(obj)
364
- }
365
- this.$http.update(params)
366
- .then(data => {
367
- if (this.editType === '1') {
368
- this.appName = ''
369
- this.$store.dispatch({ type: 'GET_APP_CONFIG', client: this.appConfig['CLIENT|CODE'], system: this.appConfig['SYSTEM|CODE'], app: this.appConfig.CODE })
370
- } else if (this.editType === '2') {
371
- window.location.reload()
372
- }
373
- this.$message.success('修改成功')
374
- this.showEditAppDialog = false
375
- })
376
- .catch(err => {
377
- this.$message.error(err.message || '修改失败')
378
- this.showEditAppDialog = false
379
- })
380
- }
381
- },
382
- switchNav (option) {
383
- this.navType = option.value
384
- },
385
- renderEditDialog () {
386
- return (
387
- <el-dialog
388
- title={this.dialogTitle}
389
- modelValue={!!this.showEditAppDialog}
390
- class="popup-dialog"
391
- append-to-body={true}
392
- width={this.dialogWidth + 'px'}
393
- onClose={() => (this.showEditAppDialog = false)}
394
- >
395
- <div class="epx-add-form__check-dialog">
396
- <div>
397
- {this.editType === '1' &&
398
- <div>
399
- <div style="width:300px;margin:auto;marginBottom:20px">
400
- <el-input v-model={this.inputAppName} clearable placeholder="请输入要修改的应用名称"></el-input>
401
- </div>
402
- </div>
403
- }
404
- {this.editType === 'menu-rename' &&
405
- <div>
406
- <div style="width:300px;margin:auto;marginBottom:20px">
407
- <el-input v-model={this.inputAppName} clearable placeholder="请输入要修改的菜单名称"></el-input>
408
- </div>
409
- </div>
410
- }
411
- {this.editType === '2' &&
412
- <div class='add-type nav-type'>
413
- {
414
- this.navOptions.map(option => (
415
- <div class={['add-menu-type__item', 'manage-nav-mode-item', 'nav-type__item', { 'is-active': this.navType === option.value }]} key={option.value} onClick={this.switchNav.bind(this, option)}>
416
- <div class="nav-img">
417
- <img src={option.preview} />
418
- </div>
419
- <p class="add-menu-type-label">{option.label}</p>
420
- </div>
421
- ))
422
- }
423
- </div>
424
- }
425
- {this.editType === 'menu-sq' &&
426
- <div class='role-system__content'>
427
- <el-checkbox-group v-model={this.checkRoleList}>
428
- {
429
- this.appAllRoleList.map(item => (
430
- <el-checkbox key={item.ID} label={item.ID} value={item.ID}>{item.NAME}
431
- {item.TYPE === 'client' && <el-tag style="marginLeft:4px" size="small">通用</el-tag>}
432
- </el-checkbox>
433
- ))
434
- }
435
- </el-checkbox-group>
436
- </div>
437
- }
438
- </div>
439
- <div class="epx-add-form__sign-buttongroup">
440
- <el-button size="middle" type="primary" onClick={this.editAppDialog}>{this.$t('determine')}</el-button>
441
- <el-button size="middle" onClick={() => (this.showEditAppDialog = false)}>{this.$t('return')}</el-button>
442
- </div>
443
- </div>
444
- </el-dialog>
445
- )
446
- },
447
- renderLogo () {
448
- return (
449
- <div class="epx-app-nav__logo" ref="logo" onClick={this.backIndex}>
450
- {this.renderEditDialog()}
451
- { this.logo && <img class="epx-app-nav__logo-icon" src={this.logo} />}
452
- <span title={this.appName || this.NAME || this.appConfig.NAME}>{this.appName || this.NAME || this.appConfig.NAME}<span style="marginLeft:6px">{'[管理模式]'}</span></span>
453
- <el-dropdown
454
- placement="bottom-start"
455
- trigger="click"
456
- v-slots={{
457
- dropdown: () => (<el-dropdown-menu>
458
- <el-dropdown-item onClick={this.editAppConfig.bind(this, '重命名', '1')} class="app-config-item"><i class="el-icon-edit"></i>重命名</el-dropdown-item>
459
- <el-dropdown-item onClick={this.editAppConfig.bind(this, '修改导航模式', '2')} class="app-config-item"><i class="el-icon-receiving"></i>导航模式</el-dropdown-item>
460
- <el-dropdown-item onClick={this.editAppConfig.bind(this, '应用授权', '3')} class="app-config-item"><i class="el-icon-finished"></i>应用授权</el-dropdown-item>
461
- <el-dropdown-item onClick={this.editAppConfig.bind(this, '更多设置', '4')} class="app-config-item"><i class="el-icon-setting"></i>更多设置</el-dropdown-item>
462
- </el-dropdown-menu>)
463
- }}>
464
- <div class="app-logo-right" onClick={(e) => { e.stopPropagation() }}>
465
- <i class="el-icon-caret-bottom"></i>
466
- </div>
467
- </el-dropdown>
468
- </div>
469
- )
470
- },
471
- renderMenuItem (nav, isSub = false) {
472
- if (this.showAllLevel && nav.children && nav.children.length > 0) {
473
- return (
474
- <el-sub-menu class={['epx-app-nav__submenu', 'top-type-nav-menu', 'epx-app-nav__menu-item', { 'epx-app-nav__menu-item--sub': isSub }, { active: this.$tab.key === ('default-' + nav.ID) }]} index={nav.ID} onClick={this.clickNavMenu.bind(this, nav)} v-slots={{
475
- // JSX 里必须用 v-slots 传具名插槽,v-slot 不生效(内容会被当默认插槽塞错位置)
476
- title: () => (
477
- // 原 <template> 允许多根,但箭头函数返回值必须单根 ⇒ 用 Fragment 包住
478
- // 下面这两个相邻顶层元素(菜单名 + 配置下拉)
479
- <>
480
- <span>
481
- <i class={['fa', nav.FONT_ICON]}></i>
482
- <span style={{ fontSize: this.navMenuFontSize ? `${this.navMenuFontSize}px` : '' }}>{nav.text}1</span>
483
- </span>
484
- <el-dropdown
485
- placement={nav.parent ? 'right-start' : 'bottom-start'}
486
- trigger="click"
487
- v-slots={{
488
- dropdown: () => (<el-dropdown-menu>
489
- <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-重命名', 'menu-rename')} class="app-config-item" ><i class="el-icon-edit"></i>重命名</el-dropdown-item>
490
- <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-设置', 'menu-setting')}><i class="el-icon-setting"></i>设置</el-dropdown-item>
491
- <el-popover
492
- popper-class="manage-menu-popover"
493
- placement="right-start"
494
- trigger="hover"
495
- v-slots={{
496
- reference: () => (<div class="delete-dropdown-item">
497
- <div class="app-config-delete-item"><i class="el-icon-delete"></i>删除</div>
498
- <i class="el-icon-arrow-right"></i>
499
- </div>)
500
- }}>
501
- <div>
502
- <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '0')}>删除菜单1</div>
503
- <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '1')}>删除菜单及页面</div>
504
- </div>
505
- </el-popover>
506
- <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单授权', 'menu-sq')} class="app-config-item"><i class="el-icon-finished"></i>菜单授权</el-dropdown-item>
507
- <el-popover
508
- popper-class="manage-menu-popover"
509
- placement="right-start"
510
- trigger="hover"
511
- v-slots={{
512
- reference: () => (<div class="delete-dropdown-item">
513
- <div class="app-config-delete-item"><i class="el-icon-plus"></i>新增同级菜单</div>
514
- <i class="el-icon-arrow-right"></i>
515
- </div>)
516
- }}>
517
- <div class="add-menu-container">
518
- <div>选择新增菜单类型</div>
519
- <div class="add-type">
520
- {this.addMenuTypeList.map(item => {
521
- return (
522
- <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增同级菜单', 'add-nav-menu')}>
523
- <div>
524
- <img src={item.preview} />
525
- </div>
526
- <p class="add-menu-type-label">{item.label}</p>
527
- </div>
528
- )
529
- })
530
- }
531
- </div>
532
- </div>
533
- </el-popover>
534
- <el-popover
535
- popper-class="manage-menu-popover"
536
- placement="right-start"
537
- trigger="hover"
538
- v-slots={{
539
- reference: () => (<div class="delete-dropdown-item">
540
- <div class="app-config-delete-item"><i class="el-icon-bottom"></i>新增下级菜单</div>
541
- <i class="el-icon-arrow-right"></i>
542
- </div>)
543
- }}>
544
- <div class="add-menu-container">
545
- <div>选择新增菜单类型</div>
546
- <div class="add-type">
547
- {this.addMenuTypeList.map(item => {
548
- return (
549
- <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增下级菜单', 'add-xj')}>
550
- <div>
551
- <img src={item.preview} />
552
- </div>
553
- <p class="add-menu-type-label">{item.label}</p>
554
- </div>
555
- )
556
- })
557
- }
558
- </div>
559
- </div>
560
- </el-popover>
561
- </el-dropdown-menu>)
562
- }}>
563
- <span onClick={this.settingAppMenu.bind(this, nav)} class="app-menu-setting has-children-app-menu-setting"><i class="el-icon-s-tools"></i></span>
564
- </el-dropdown>
565
- </>
566
- )
567
- }}>
568
- {
569
- nav.children.map(item => this.renderMenuItem(item, true))
570
- }
571
- </el-sub-menu>
572
- )
573
- } else {
574
- return (
575
- <el-menu-item key={nav.ID} index={nav.ID} class={['epx-app-nav__menu-item', 'top-type-nav-menu', 'top-type-nav-menu-no-children', { 'epx-app-nav__menu-item--sub': isSub }, { active: this.$tab.key === ('default-' + nav.ID) }]} onClick={this.toPage.bind(this, nav)} >
576
- <span>
577
- <i class={['fa', nav.FONT_ICON]}></i>
578
- <span style={this.navMenuFontSize ? { fontSize: this.navMenuFontSize + 'px' } : {}}>{nav.text}</span>
579
- </span>
580
- <el-dropdown
581
- placement={nav.parent ? 'right-start' : 'bottom-start'}
582
- trigger="click"
583
- v-slots={{
584
- dropdown: () => (<el-dropdown-menu>
585
- <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-重命名', 'menu-rename')} class="app-config-item" ><i class="el-icon-edit"></i>重命名</el-dropdown-item>
586
- <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-设置', 'menu-setting')}><i class="el-icon-setting"></i>设置</el-dropdown-item>
587
- <el-popover
588
- popper-class="manage-menu-popover"
589
- placement="right-start"
590
- trigger="hover"
591
- v-slots={{
592
- reference: () => (<div class="delete-dropdown-item">
593
- <div class="app-config-delete-item"><i class="el-icon-delete"></i>删除</div>
594
- <i class="el-icon-arrow-right"></i>
595
- </div>)
596
- }}>
597
- <div>
598
- <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '0')}>删除菜单</div>
599
- <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '1')}>删除菜单及页面</div>
600
- </div>
601
- </el-popover>
602
- <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单授权', 'menu-sq')} class="app-config-item"><i class="el-icon-finished"></i>菜单授权</el-dropdown-item>
603
- <el-popover
604
- popper-class="manage-menu-popover"
605
- placement="right-start"
606
- trigger="hover"
607
- v-slots={{
608
- reference: () => (<div class="delete-dropdown-item">
609
- <div class="app-config-delete-item"><i class="el-icon-plus"></i>新增同级菜单</div>
610
- <i class="el-icon-arrow-right"></i>
611
- </div>)
612
- }}>
613
- <div class="add-menu-container">
614
- <div>选择新增菜单类型</div>
615
- <div class="add-type">
616
- {this.addMenuTypeList.map(item => {
617
- return (
618
- <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增同级菜单', 'add-nav-menu')}>
619
- <div>
620
- <img src={item.preview} />
621
- </div>
622
- <p class="add-menu-type-label">{item.label}</p>
623
- </div>
624
- )
625
- })
626
- }
627
- </div>
628
- </div>
629
- </el-popover>
630
- <el-popover
631
- popper-class="manage-menu-popover"
632
- placement="right-start"
633
- trigger="hover"
634
- v-slots={{
635
- reference: () => (<div class="delete-dropdown-item">
636
- <div class="app-config-delete-item"><i class="el-icon-bottom"></i>新增下级菜单</div>
637
- <i class="el-icon-arrow-right"></i>
638
- </div>)
639
- }}>
640
- <div class="add-menu-container">
641
- <div>选择新增菜单类型</div>
642
- <div class="add-type">
643
- {this.addMenuTypeList.map(item => {
644
- return (
645
- <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增下级菜单', 'add-xj')}>
646
- <div>
647
- <img src={item.preview} />
648
- </div>
649
- <p class="add-menu-type-label">{item.label}</p>
650
- </div>
651
- )
652
- })
653
- }
654
- </div>
655
- </div>
656
- </el-popover>
657
- </el-dropdown-menu>)
658
- }}>
659
- <span onClick={this.settingAppMenu.bind(this, nav)} class="app-menu-setting"><i class="el-icon-s-tools"></i></span>
660
- </el-dropdown>
661
- </el-menu-item>
662
- )
663
- }
664
- },
665
- validateNavWidth () {
666
- if (!this.$refs.container) return
667
- let maxWidth = this.$refs.container.offsetWidth - this.$refs.logo.offsetWidth - this.$refs.rightContainer.offsetWidth - 128
668
- if (this.tabs.length > 0) {
669
- maxWidth -= 138
670
- }
671
- let foldMenuIndex = 0
672
- let width = 0
673
- if (!this.showMenu) return
674
- for (let i = 0; i < this.showMenu.length; i++) {
675
- const item = this.showMenu[i]
676
- const itemWidth = (item.text || '').length * 14 + (item.FONT_ICON ? 20 : 0) + 44 + 12
677
- if (width + itemWidth > maxWidth) {
678
- if (width + 100 <= maxWidth) {
679
- foldMenuIndex = i
680
- } else {
681
- foldMenuIndex = i - 1
682
- }
683
- break
684
- }
685
- width += itemWidth
686
- }
687
- if (foldMenuIndex) {
688
- this.openMenu = this.showMenu.slice(0, foldMenuIndex)
689
- this.foldMenu = this.showMenu.slice(foldMenuIndex)
690
- } else {
691
- this.openMenu = [...this.showMenu]
692
- this.foldMenu = []
693
- }
694
- },
695
- moveEnd (e) {
696
- const index = e.newIndex
697
- const node = this.openMenu[index]
698
- const parentId = 'root'
699
- // 获取其父节点的所有子节点orderString
700
- const str = this.openMenu.reduce((str, item, index) => (str += item.id + ':' + index + ','), '')
701
- // // this.drag = false
702
- this.$http.$post({
703
- action: 'moveTree',
704
- entityId: 'FM_MODULE',
705
- orderString: str,
706
- newParentId: parentId,
707
- id: node.id,
708
- selfAttriName: 'ID',
709
- orderAtrriName: 'ORDER_NUM'
710
- })
711
- .then(() => {
712
-
713
- })
714
- .catch(err => {
715
- this.$message.error(err.message || '拖拽排序失败')
716
- this.reloadMenu()
717
- })
718
- },
719
- renderNav () {
720
- // menu-trigger="click" 菜单点击 子菜单打开的触发方式(只在 mode 为 horizontal 时有效)
721
- return (
722
- <div class="epx-app-nav__home">
723
- {
724
- (this.type === '1' || this.type === '2') ? (
725
- <div class="epx-app-nav__menu-content">
726
- <el-menu ref="menu" style="display:flex" class="epx-app-nav__menu" mode="horizontal" ellipsis={false}>
727
- {
728
- this.showMenu && (
729
- <draggable
730
- class="el-menu--horizontal epx-app-nav__menu nav-draggable"
731
- v-model={this.openMenu}
732
- group="description"
733
- ghostClass="ghost"
734
- animation={300}
735
- onEnd={this.moveEnd}
736
- >
737
- {this.openMenu.map(nav => {
738
- if (nav.HIDDEN_MENU !== '1') {
739
- return this.renderMenuItem(nav, false)
740
- }
741
- })}
742
-
743
- </draggable>
744
- )
745
- }
746
- </el-menu>
747
- {
748
- this.foldMenu.length > 0 && (
749
- <el-dropdown class="epx-app-nav__foldmenu" onCommand={this.toPage} trigger="click" v-slots={{
750
- dropdown: () => (<el-dropdown-menu>
751
- {
752
- this.foldMenu.map(menu => (
753
- <el-dropdown-item key={menu.ID} command={menu} class={{ 'epx-app-nav__foldmenu-item': true, ' more-menu-item': true, 'is-active': this.$tab.key === ('default-' + menu.ID) }}>
754
- <span>
755
- <i class={['fa', menu.FONT_ICON]}></i>
756
- <span>{menu.text}</span>
757
- </span>
758
- <el-dropdown
759
- placement="right-start"
760
- trigger="click"
761
- v-slots={{
762
- dropdown: () => (<el-dropdown-menu>
763
- <el-dropdown-item onClick={this.editAppMenu.bind(this, menu, '菜单-重命名', 'menu-rename')} class="app-config-item"><i class="el-icon-edit"></i>重命名</el-dropdown-item>
764
- <el-dropdown-item onClick={this.editAppMenu.bind(this, menu, '菜单-设置', 'menu-setting')}><i class="el-icon-setting"></i>设置</el-dropdown-item>
765
- <el-popover
766
- popper-class="manage-menu-popover"
767
- placement="right-start"
768
- trigger="hover"
769
- v-slots={{
770
- reference: () => (<div class="delete-dropdown-item">
771
- <div class="app-config-delete-item"><i class="el-icon-delete"></i>删除</div>
772
- <i class="el-icon-arrow-right"></i>
773
- </div>)
774
- }}>
775
- <div>
776
- <div class="app-config-item" onClick={this.editAppMenu.bind(this, menu, 'delete-menu', '0')}>删除菜单</div>
777
- <div class="app-config-item" onClick={this.editAppMenu.bind(this, menu, 'delete-menu', '1')}>删除菜单及页面</div>
778
- </div>
779
- </el-popover>
780
- <el-dropdown-item onClick={this.editAppMenu.bind(this, menu, '菜单授权', 'menu-sq')} class="app-config-item"><i class="el-icon-finished"></i>菜单授权</el-dropdown-item>
781
- <el-popover
782
- popper-class="manage-menu-popover"
783
- placement="right-start"
784
- trigger="hover"
785
- v-slots={{
786
- reference: () => (<div class="delete-dropdown-item">
787
- <div class="app-config-delete-item"><i class="el-icon-plus"></i>新增同级菜单</div>
788
- <i class="el-icon-arrow-right"></i>
789
- </div>)
790
- }}>
791
- <div class="add-menu-container">
792
- <div>选择新增菜单类型</div>
793
- <div class="add-type">
794
- {this.addMenuTypeList.map(item => {
795
- return (
796
- <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, menu, item, '新增同级菜单', 'add-nav-menu')}>
797
- <div>
798
- <img src={item.preview} />
799
- </div>
800
- <p class="add-menu-type-label">{item.label}</p>
801
- </div>
802
- )
803
- })
804
- }
805
- </div>
806
- </div>
807
- </el-popover>
808
- <el-popover
809
- popper-class="manage-menu-popover"
810
- placement="right-start"
811
- trigger="hover"
812
- v-slots={{
813
- reference: () => (<div class="delete-dropdown-item">
814
- <div class="app-config-delete-item"><i class="el-icon-bottom"></i>新增下级菜单</div>
815
- <i class="el-icon-arrow-right"></i>
816
- </div>)
817
- }}>
818
- <div class="add-menu-container">
819
- <div>选择新增菜单类型</div>
820
- <div class="add-type">
821
- {this.addMenuTypeList.map(item => {
822
- return (
823
- <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, menu, item, '新增下级菜单', 'add-xj')}>
824
- <div>
825
- <img src={item.preview} />
826
- </div>
827
- <p class="add-menu-type-label">{item.label}</p>
828
- </div>
829
- )
830
- })
831
- }
832
- </div>
833
- </div>
834
- </el-popover>
835
- </el-dropdown-menu>)
836
- }}>
837
- <span onClick={this.settingAppMenu.bind(this, menu)} class="app-menu-setting"><i class="el-icon-s-tools"></i></span>
838
- </el-dropdown>
839
- </el-dropdown-item>
840
- ))
841
- }
842
- </el-dropdown-menu>)
843
- }}>
844
- <span class={{ 'epx-app-nav__foldmenu-text': true, 'is-active': this.activeMenuInMore }} >
845
- {this.$t('more')}<i class="el-icon-caret-bottom"></i>
846
- </span>
847
- </el-dropdown>
848
- )
849
- }
850
- <el-popover
851
- ref="popover"
852
- popper-class="manage-menu-popover"
853
- placement="bottom"
854
- trigger="click"
855
- v-slots={{ reference: () => (<span class="app-add-menu"><i class="el-icon-circle-plus-outline"></i></span>) }}>
856
- <div class="add-menu-container">
857
- <div>选择新增菜单类型</div>
858
- <div class="add-type">
859
- {this.addMenuTypeList.map(item => {
860
- return (
861
- <div class="add-menu-type__item" key={item.value} onClick={this.chooseMenuType.bind(this, item)}>
862
- <div>
863
- <img src={item.preview} />
864
- </div>
865
- <p class="add-menu-type-label">{item.label}</p>
866
- </div>
867
- )
868
- })
869
- }
870
- </div>
871
- </div>
872
- </el-popover>
873
- {
874
- this.tabs.length > 0 && (
875
- <el-dropdown onCommand={this.selectTab} v-slots={{
876
- dropdown: () => (<el-dropdown-menu>
877
- {
878
- this.tabs.map(tab => (
879
- <el-dropdown-item key={tab.key} command={tab}>
880
- {tab.title || tab.menuTitle}
881
- <i class="epx-app-nav__tabs-delete el-icon-error" onClick={this.tabRemove.bind(this, tab.key)}></i>
882
- </el-dropdown-item>
883
- ))
884
- }
885
- <el-dropdown-item onClick={this.clearTabs}>
886
- <el-button class="epx-app-nav__tabs-clear" type="primary" link><i class="el-icon-document-delete"></i>{this.$t('empty')}</el-button>
887
- </el-dropdown-item>
888
- </el-dropdown-menu>)
889
- }}>
890
- <el-button round size="default" class="epx-app-nav__tabs-page">{this.$tab && this.$tab.title}<i class="el-icon-arrow-down el-icon--right"></i></el-button>
891
- </el-dropdown>
892
- )
893
- }
894
- </div>
895
- ) : (
896
- <div class="epx-app-nav__menu-tabs">
897
- {
898
- this.tabs.length > 0 && (
899
- <div class="epx-app-nav__menu-home">
900
- <i class="el-icon-s-home" onClick={this.toAppIndex}></i>
901
- </div>
902
- )
903
- }
904
- <el-tabs class="epx-app-nav__tabs" modelValue={this.$tab.key} onTabClick={this.tabClick} closable onTabRemove={this.tabRemove} onContextmenu={this.tabsContextmenu}>
905
- {
906
- this.tabs.map(tab => (
907
- <el-tab-pane key={tab.key} label={tab.title || tab.menuTitle} name={tab.key}></el-tab-pane>
908
- ))
909
- }
910
- </el-tabs>
911
- </div>
912
- )
913
- }
914
- <el-popover
915
- ref="tabPopover"
916
- placement="bottom"
917
- width="200"
918
- trigger="manual"
919
- v-model:visible={this.popoverVisible}
920
- v-slots={{ reference: () => (<span > </span>) }}>
921
- <div class="tabs-popover-clear" onClick={this.clearTabs}>{this.$t('Clear tabs')}</div>
922
- </el-popover>
923
- </div>
924
- )
925
- },
926
- renderRole () {
927
- const { EXTEND_OF_COMPETENCE } = this.appConfig
928
- // 本组件只在管理模式下渲染。这个下拉显示「管理模式」并提供退回运行模式的唯一入口,
929
- // 不能被应用自定义工具栏(TOOLBAR,如智能体应用只留 language)裁掉
930
- if (EXTEND_OF_COMPETENCE !== 'allRole') {
931
- return (
932
- <el-dropdown trigger="click" placement="bottom-start" onCommand={this.switchRole} v-slots={{
933
- dropdown: () => (<el-dropdown-menu>
934
- <el-dropdown-item command='app-manage-code'>
935
- 管理模式
936
- </el-dropdown-item>
937
- {
938
- this.roleList.map(role => (
939
- <el-dropdown-item
940
- class={['epx-app-nav__role-dropdown-item', { 'epx-app-nav__role-dropdown-item--default': role.MAIN_ROLE === 'true' }]}
941
- key={role.CODE}
942
- command={role}
943
- >
944
- <span class="epx-app-nav__role-name">{role['NAME#'] || this.$t(role.NAME)}</span>
945
- <i class="epx-app-nav__role-icon epx-icon-qizhi" ></i>
946
- <span class="epx-app-nav__role-text" onClick={this.setMainRole.bind(this, role)}>{role.MAIN_ROLE === 'true' ? this.$t('default') : this.$t('Set to the default')}</span>
947
- </el-dropdown-item>
948
- ))
949
- }
950
- </el-dropdown-menu>)
951
- }}>
952
- <el-button size="default" type="primary" plain class="epx-app-nav__role-button">
953
- {this.currentRoleName}<i class="el-icon-arrow-down el-icon--right"></i>
954
- </el-button>
955
- </el-dropdown>
956
- )
957
- }
958
- },
959
- settingAppMenu (menu, event) {
960
- event.stopPropagation()
961
- }
962
- },
963
- created () {
964
- this.getClientSystemAppRole()
965
- }
966
- }
967
- </script>
968
-
969
- <style lang="scss" scoped>
970
- .app-logo-right .el-icon-caret-bottom{
971
- font-size: var(--epx-font-size-l);
972
- color: #fff;
973
- }
974
- .app-config-item{
975
- box-sizing: border-box;
976
- height: 36px;
977
- background: var(--epx-bg-card);
978
- cursor: pointer;
979
- line-height: 36px;
980
- padding: 0 40px 0 20px;
981
- color: var(--epx-text);
982
- i{
983
- margin-right: 10px;
984
- }
985
- &:hover{
986
- @include font_color_primary;
987
- @include bg_color_primary(0.1);
988
- }
989
- }
990
- .top-type-nav-menu:hover,.more-menu-item:hover{
991
- .app-menu-setting{
992
- visibility: visible;
993
- }
994
- }
995
- .app-menu-setting{
996
- visibility: hidden;
997
- margin-left: 4px;
998
- width: 24px;
999
- display: inline-block;
1000
- i{
1001
- font-size: var(--epx-font-size-l);
1002
- position: relative;
1003
- top: 2px;
1004
- }
1005
- }
1006
- .has-children-app-menu-setting{
1007
- padding-left: 16px;
1008
- }
1009
- .more-menu-item{
1010
- padding-right: 10px;
1011
- display: flex;
1012
- justify-content: space-between;
1013
- }
1014
- .app-add-menu{
1015
- display: inline-block;
1016
- width: 64px;
1017
- color: #fff;
1018
- cursor: pointer;
1019
- text-align: center;
1020
- font-size: 21px;
1021
- }
1022
- .app-add-menu:hover{
1023
- background-color: rgba(0,0,0,.2);
1024
- }
1025
- .add-menu-container{
1026
- box-sizing: border-box;
1027
- padding: 4px 0 0 20px;
1028
- width: 560px;
1029
- height: 352px;
1030
- font-size: var(--epx-font-size-l);
1031
- color: var(--epx-text);
1032
- font-weight: bold;
1033
- }
1034
- .add-type {
1035
- display: flex;
1036
- flex-wrap: wrap;
1037
- margin-top: 12px;
1038
- }
1039
- .add-menu-type-label{
1040
- font-size: var(--epx-font-size-base);
1041
- color: #444444;
1042
- margin-top: 10px;
1043
- margin-bottom: 10px;
1044
- line-height: 19px;
1045
- font-weight: 500;
1046
- }
1047
- .add-menu-type__item {
1048
- box-sizing: border-box;
1049
- width: 160px;
1050
- margin-right: 20px;
1051
- margin-bottom: 20px;
1052
- text-align: center;
1053
- cursor: pointer;
1054
- img {
1055
- width: 100%;
1056
- }
1057
- &:hover {
1058
- .add-menu-type-label{
1059
- @include font_color_primary;
1060
- }
1061
- }
1062
- }
1063
- .manage-nav-mode-item{
1064
- margin-bottom: 40px;
1065
- margin-left: 10px;
1066
- margin-right: 10px;
1067
- }
1068
- .nav-type {
1069
- img {
1070
- opacity: 0.5;
1071
- transition: all .5s;
1072
- }
1073
- .is-active {
1074
- .add-menu-type-label{
1075
- @include font_color_primary;
1076
- }
1077
- img {
1078
- opacity: 1;
1079
- }
1080
- .nav-img{
1081
- border: 1px solid;
1082
- @include border_color_primary;
1083
- }
1084
- }
1085
- }
1086
- .top-type-nav-menu{
1087
- display: flex;
1088
- align-items: center;
1089
- justify-content: space-between;
1090
- padding-right: 4px !important;
1091
-
1092
- :deep(.el-sub-menu__title) {
1093
- // padding-right: 34px;
1094
- width: 100%;
1095
- display: flex;
1096
- align-items: center;
1097
- justify-content: space-between;
1098
- padding-right: 0;
1099
- .el-sub-menu__icon-arrow{
1100
- position: absolute;
1101
- top: 42%;
1102
- }
1103
- }
1104
-
1105
- }
1106
- .epx-app-nav__menu-item--sub {
1107
- // padding: 0 !important;
1108
-
1109
- :deep(.el-sub-menu__title .el-sub-menu__icon-arrow) {
1110
- top: 50%;
1111
- }
1112
- :deep(.app-menu-setting i) {
1113
- top:0;
1114
- }
1115
-
1116
- }
1117
- .top-type-app-menu-setting{
1118
- position: absolute;
1119
- right: -10px;
1120
- top: 0;
1121
- }
1122
- // .top-type-nav-menu-no-children{
1123
- // padding-right: 10px !important;
1124
- // }
1125
- // .top-menu-setting-item{
1126
- // display: flex;
1127
- // align-items: center;
1128
- // justify-content: space-between;
1129
- // padding-right: 10px;
1130
- // }
1131
- .mode-manage-choose{
1132
- display: flex;
1133
- justify-content: space-between;
1134
- align-items: center;
1135
- border-bottom: 1px solid var(--epx-border);
1136
- }
1137
- .nav-draggable{
1138
- display: flex;
1139
- }
1140
- .delete-dropdown-item{
1141
- display: flex;
1142
- align-items: center;
1143
- justify-content: space-between;
1144
- padding-right: 10px;
1145
- cursor: pointer;
1146
- background: var(--epx-bg-card);
1147
- color: var(--epx-text);
1148
- }
1149
- .delete-dropdown-item:hover{
1150
- @include font_color_primary;
1151
- @include bg_color_primary(0.1);
1152
- }
1153
- .app-config-delete-item{
1154
- box-sizing: border-box;
1155
- height: 36px;
1156
- cursor: pointer;
1157
- line-height: 36px;
1158
- padding: 0 40px 0 20px;
1159
- i{
1160
- margin-right: 10px;
1161
- }
1162
- }
1163
- .role-system__content {
1164
- padding-bottom: 20px;
1165
-
1166
- :deep(.el-checkbox) {
1167
- padding: 10px 0;
1168
- color: var(--epx-text);
1169
- }
1170
-
1171
- }
1172
- .popup-dialog{
1173
- :deep(.el-dialog__header){
1174
- padding: 16px;
1175
- }
1176
- }
1177
- .epx-add-form__sign-buttongroup .el-button + .el-button{
1178
- margin-left: 20px;
1179
- }
1180
- </style>
1181
-
1182
- <style lang="scss">
1183
- .manage-menu-popover{
1184
- box-sizing: border-box;
1185
- padding: 8px 0;
1186
- box-shadow: 0px 4px 12px 0px rgba(0,0,0,0.15);
1187
- border-radius: var(--epx-radius-base);
1188
- border: 1px solid var(--epx-border);
1189
- }
1190
- </style>
186
+ openType: '2',
187
+ callback: this.reloadMenu
188
+ }
189
+ const popover = this.$refs.popover
190
+ if (popover)popover.doClose()
191
+ // this.popoverManualVisible = false
192
+ this.$createPage(query)
193
+ },
194
+ judgeClickMenu () {
195
+ // 一级导航菜单信息后点击查看该新增菜单信息
196
+ if (this.editType === 'add-nav-menu') {
197
+ const nav = this.menu.find(item => item.ID === this.addMenuData.ID)
198
+ if (nav) {
199
+ // this.clickNavMenu(nav)
200
+ this.toPage(nav)
201
+ }
202
+ }
203
+ },
204
+ reloadMenu (v) {
205
+ // 经典模式新增下级菜单
206
+ if (this.type === '1' && this.editType === 'add-xj') {
207
+ this.toPage(this.editMenuInfo)
208
+ } else {
209
+ // 一级导航菜单信息后点击查看该新增菜单信息
210
+ if (this.editType === 'add-nav-menu') {
211
+ this.addMenuData = v
212
+ }
213
+ this.$emit('updateMenu')
214
+ }
215
+ },
216
+ removeEntity (select, type) {
217
+ this.showPopover = null
218
+ let selectItem = this.clickItem
219
+ if (select && select.id) {
220
+ selectItem = select
221
+ }
222
+ this.expandKeys = []
223
+ if (!selectItem || !selectItem.id) {
224
+ this.$message.error(this.$t('please select a record'))
225
+ return
226
+ }
227
+ // const idArr = [selectItem.id]
228
+ // this.getSubIds(idArr, selectItem.children)
229
+ const params = {
230
+ action: 'removeMulti',
231
+ entityId: 'FM_MODULE',
232
+ ids: selectItem.id
233
+ // ids: idArr.join(',')
234
+ }
235
+ if (type === '1') {
236
+ params.deletePag = '1'
237
+ }
238
+ this.$confirm(this.$t('Confirm the deletion') + '?')
239
+ .then(() => {
240
+ this.$http.$request(params)
241
+ .then(data => {
242
+ this.$message.success(this.$t('deleted successfully'))
243
+ // 删除菜单
244
+ if (!selectItem.parent) {
245
+ const key = 'default-' + selectItem.ID
246
+ this.$store.commit('DESTORY_TAB', key)
247
+ }
248
+ this.reloadMenu()
249
+ })
250
+ })
251
+ },
252
+ getSubIds (idArr = [], data) {
253
+ data.forEach(item => {
254
+ idArr.push(item.id)
255
+ if (item.children) {
256
+ this.getSubIds(idArr, item.children)
257
+ }
258
+ })
259
+ },
260
+ editAppConfig (name, type, width, e) {
261
+ this.dialogTitle = name
262
+ this.editType = type
263
+ if (type === '1') {
264
+ this.inputAppName = this.appConfig.NAME
265
+ } else if (type === '2') {
266
+ const appConfig = this.appConfig.APP_CONFIG ? JSON.parse(this.appConfig.APP_CONFIG) : {}
267
+ this.navAppType = appConfig.navType
268
+ this.navType = appConfig.navType
269
+ } else if (type === '3') {
270
+ const query = {
271
+ flag: 'manage-client-system-app-accredit',
272
+ metaId: 'FM_ROLE',
273
+ systemId: this.SYSTEM,
274
+ serviceId: this.appConfig.ID,
275
+ systemName: this.appConfig['SYSTEM|NAME'],
276
+ appName: this.appConfig.NAME,
277
+ appType: this.appConfig.TYPE
278
+ }
279
+ this.$store.commit('CREATE_TAB', {
280
+ key: 'default-' + this.appConfig.ID,
281
+ moduleId: this.appConfig.ID,
282
+ component: 'module-index-page',
283
+ title: name,
284
+ showBack: true,
285
+ ...query
286
+ })
287
+ return
288
+ } else {
289
+ const query = {
290
+ flag: 'manage-client-system-app-detail',
291
+ metaId: 'FM_SERVICE',
292
+ id: this.appConfig.ID
293
+ }
294
+ this.$store.commit('CREATE_TAB', {
295
+ key: 'default-' + new Date().getTime(),
296
+ moduleId: this.appConfig.ID,
297
+ component: 'module-index-page',
298
+ title: name,
299
+ showBack: true,
300
+ ...query
301
+ })
302
+ return
303
+ }
304
+ this.dialogWidth = width || '610'
305
+ this.showEditAppDialog = true
306
+ },
307
+ editAppDialog () {
308
+ if (this.editType === 'menu-rename') {
309
+ if (!this.inputAppName) {
310
+ this.$message.error('名称不能为空')
311
+ return
312
+ }
313
+ this.$http.update({
314
+ entityId: 'FM_MODULE',
315
+ 'bean.ID': this.editMenuInfo.id,
316
+ 'bean.NAME': this.inputAppName
317
+ })
318
+ .then(data => {
319
+ this.$emit('updateMenu')
320
+ this.$message.success('修改成功')
321
+ this.showEditAppDialog = false
322
+ })
323
+ .catch(err => {
324
+ this.$message.error(err.message || '修改失败')
325
+ this.showEditAppDialog = false
326
+ })
327
+ } else if (this.editType === 'menu-sq') {
328
+ // if (this.checkRoleList.length === 0) {
329
+ // this.$message.error('请先选择授权角色')
330
+ // return
331
+ // }
332
+ this.$http.$post({
333
+ action: 'refreshModuleRoles',
334
+ entityId: 'FM_ROLE_MODULE',
335
+ moduleId: this.editMenuInfo.id,
336
+ roleIds: this.checkRoleList.join(',')
337
+ })
338
+ .then(data => {
339
+ this.$message.success('添加成功')
340
+ this.showEditAppDialog = false
341
+ })
342
+ .catch(err => {
343
+ this.$message.error(err.message || '操作失败')
344
+ })
345
+ } else {
346
+ const params = {
347
+ entityId: 'FM_SERVICE',
348
+ 'bean.ID': this.appConfig.ID
349
+ }
350
+ if (this.editType === '1') {
351
+ params['bean.NAME'] = this.inputAppName
352
+ if (!this.inputAppName) {
353
+ this.$message.error('名称不能为空')
354
+ return
355
+ }
356
+ } else if (this.editType === '2') {
357
+ if (this.navAppType === this.navType) {
358
+ this.$message.error('您未修改导航模式')
359
+ return
360
+ }
361
+ const appConfig = this.appConfig.APP_CONFIG ? JSON.parse(this.appConfig.APP_CONFIG) : {}
362
+ const obj = { ...appConfig, navType: this.navType }
363
+ params['bean.APP_CONFIG'] = JSON.stringify(obj)
364
+ }
365
+ this.$http.update(params)
366
+ .then(data => {
367
+ if (this.editType === '1') {
368
+ this.appName = ''
369
+ this.$store.dispatch({ type: 'GET_APP_CONFIG', client: this.appConfig['CLIENT|CODE'], system: this.appConfig['SYSTEM|CODE'], app: this.appConfig.CODE })
370
+ } else if (this.editType === '2') {
371
+ window.location.reload()
372
+ }
373
+ this.$message.success('修改成功')
374
+ this.showEditAppDialog = false
375
+ })
376
+ .catch(err => {
377
+ this.$message.error(err.message || '修改失败')
378
+ this.showEditAppDialog = false
379
+ })
380
+ }
381
+ },
382
+ switchNav (option) {
383
+ this.navType = option.value
384
+ },
385
+ renderEditDialog () {
386
+ return (
387
+ <el-dialog
388
+ title={this.dialogTitle}
389
+ modelValue={!!this.showEditAppDialog}
390
+ class="popup-dialog"
391
+ append-to-body={true}
392
+ width={this.dialogWidth + 'px'}
393
+ onClose={() => (this.showEditAppDialog = false)}
394
+ >
395
+ <div class="epx-add-form__check-dialog">
396
+ <div>
397
+ {this.editType === '1' &&
398
+ <div>
399
+ <div style="width:300px;margin:auto;marginBottom:20px">
400
+ <el-input v-model={this.inputAppName} clearable placeholder="请输入要修改的应用名称"></el-input>
401
+ </div>
402
+ </div>
403
+ }
404
+ {this.editType === 'menu-rename' &&
405
+ <div>
406
+ <div style="width:300px;margin:auto;marginBottom:20px">
407
+ <el-input v-model={this.inputAppName} clearable placeholder="请输入要修改的菜单名称"></el-input>
408
+ </div>
409
+ </div>
410
+ }
411
+ {this.editType === '2' &&
412
+ <div class='add-type nav-type'>
413
+ {
414
+ this.navOptions.map(option => (
415
+ <div class={['add-menu-type__item', 'manage-nav-mode-item', 'nav-type__item', { 'is-active': this.navType === option.value }]} key={option.value} onClick={this.switchNav.bind(this, option)}>
416
+ <div class="nav-img">
417
+ <img src={option.preview} />
418
+ </div>
419
+ <p class="add-menu-type-label">{option.label}</p>
420
+ </div>
421
+ ))
422
+ }
423
+ </div>
424
+ }
425
+ {this.editType === 'menu-sq' &&
426
+ <div class='role-system__content'>
427
+ <el-checkbox-group v-model={this.checkRoleList}>
428
+ {
429
+ this.appAllRoleList.map(item => (
430
+ <el-checkbox key={item.ID} label={item.ID} value={item.ID}>{item.NAME}
431
+ {item.TYPE === 'client' && <el-tag style="marginLeft:4px" size="small">通用</el-tag>}
432
+ </el-checkbox>
433
+ ))
434
+ }
435
+ </el-checkbox-group>
436
+ </div>
437
+ }
438
+ </div>
439
+ <div class="epx-add-form__sign-buttongroup">
440
+ <el-button size="middle" type="primary" onClick={this.editAppDialog}>{this.$t('determine')}</el-button>
441
+ <el-button size="middle" onClick={() => (this.showEditAppDialog = false)}>{this.$t('return')}</el-button>
442
+ </div>
443
+ </div>
444
+ </el-dialog>
445
+ )
446
+ },
447
+ renderLogo () {
448
+ return (
449
+ <div class="epx-app-nav__logo" ref="logo" onClick={this.backIndex}>
450
+ {this.renderEditDialog()}
451
+ { this.logo && <img class="epx-app-nav__logo-icon" src={this.logo} />}
452
+ <span title={this.appName || this.NAME || this.appConfig.NAME}>{this.appName || this.NAME || this.appConfig.NAME}<span style="marginLeft:6px">{'[管理模式]'}</span></span>
453
+ <el-dropdown
454
+ placement="bottom-start"
455
+ trigger="click"
456
+ v-slots={{
457
+ dropdown: () => (<el-dropdown-menu>
458
+ <el-dropdown-item onClick={this.editAppConfig.bind(this, '重命名', '1')} class="app-config-item"><i class="el-icon-edit"></i>重命名</el-dropdown-item>
459
+ <el-dropdown-item onClick={this.editAppConfig.bind(this, '修改导航模式', '2')} class="app-config-item"><i class="el-icon-receiving"></i>导航模式</el-dropdown-item>
460
+ <el-dropdown-item onClick={this.editAppConfig.bind(this, '应用授权', '3')} class="app-config-item"><i class="el-icon-finished"></i>应用授权</el-dropdown-item>
461
+ <el-dropdown-item onClick={this.editAppConfig.bind(this, '更多设置', '4')} class="app-config-item"><i class="el-icon-setting"></i>更多设置</el-dropdown-item>
462
+ </el-dropdown-menu>)
463
+ }}>
464
+ <div class="app-logo-right" onClick={(e) => { e.stopPropagation() }}>
465
+ <i class="el-icon-caret-bottom"></i>
466
+ </div>
467
+ </el-dropdown>
468
+ </div>
469
+ )
470
+ },
471
+ renderMenuItem (nav, isSub = false) {
472
+ if (this.showAllLevel && nav.children && nav.children.length > 0) {
473
+ return (
474
+ <el-sub-menu class={['epx-app-nav__submenu', 'top-type-nav-menu', 'epx-app-nav__menu-item', { 'epx-app-nav__menu-item--sub': isSub }, { active: this.$tab.key === ('default-' + nav.ID) }]} index={nav.ID} onClick={this.clickNavMenu.bind(this, nav)} v-slots={{
475
+ // JSX 里必须用 v-slots 传具名插槽,v-slot 不生效(内容会被当默认插槽塞错位置)
476
+ title: () => (
477
+ // 原 <template> 允许多根,但箭头函数返回值必须单根 ⇒ 用 Fragment 包住
478
+ // 下面这两个相邻顶层元素(菜单名 + 配置下拉)
479
+ <>
480
+ <span>
481
+ <i class={['fa', nav.FONT_ICON]}></i>
482
+ <span style={{ fontSize: this.navMenuFontSize ? `${this.navMenuFontSize}px` : '' }}>{nav.text}1</span>
483
+ </span>
484
+ <el-dropdown
485
+ placement={nav.parent ? 'right-start' : 'bottom-start'}
486
+ trigger="click"
487
+ v-slots={{
488
+ dropdown: () => (<el-dropdown-menu>
489
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-重命名', 'menu-rename')} class="app-config-item" ><i class="el-icon-edit"></i>重命名</el-dropdown-item>
490
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-设置', 'menu-setting')}><i class="el-icon-setting"></i>设置</el-dropdown-item>
491
+ <el-popover
492
+ popper-class="manage-menu-popover"
493
+ placement="right-start"
494
+ trigger="hover"
495
+ v-slots={{
496
+ reference: () => (<div class="delete-dropdown-item">
497
+ <div class="app-config-delete-item"><i class="el-icon-delete"></i>删除</div>
498
+ <i class="el-icon-arrow-right"></i>
499
+ </div>)
500
+ }}>
501
+ <div>
502
+ <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '0')}>删除菜单1</div>
503
+ <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '1')}>删除菜单及页面</div>
504
+ </div>
505
+ </el-popover>
506
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单授权', 'menu-sq')} class="app-config-item"><i class="el-icon-finished"></i>菜单授权</el-dropdown-item>
507
+ <el-popover
508
+ popper-class="manage-menu-popover"
509
+ placement="right-start"
510
+ trigger="hover"
511
+ v-slots={{
512
+ reference: () => (<div class="delete-dropdown-item">
513
+ <div class="app-config-delete-item"><i class="el-icon-plus"></i>新增同级菜单</div>
514
+ <i class="el-icon-arrow-right"></i>
515
+ </div>)
516
+ }}>
517
+ <div class="add-menu-container">
518
+ <div>选择新增菜单类型</div>
519
+ <div class="add-type">
520
+ {this.addMenuTypeList.map(item => {
521
+ return (
522
+ <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增同级菜单', 'add-nav-menu')}>
523
+ <div>
524
+ <img src={item.preview} />
525
+ </div>
526
+ <p class="add-menu-type-label">{item.label}</p>
527
+ </div>
528
+ )
529
+ })
530
+ }
531
+ </div>
532
+ </div>
533
+ </el-popover>
534
+ <el-popover
535
+ popper-class="manage-menu-popover"
536
+ placement="right-start"
537
+ trigger="hover"
538
+ v-slots={{
539
+ reference: () => (<div class="delete-dropdown-item">
540
+ <div class="app-config-delete-item"><i class="el-icon-bottom"></i>新增下级菜单</div>
541
+ <i class="el-icon-arrow-right"></i>
542
+ </div>)
543
+ }}>
544
+ <div class="add-menu-container">
545
+ <div>选择新增菜单类型</div>
546
+ <div class="add-type">
547
+ {this.addMenuTypeList.map(item => {
548
+ return (
549
+ <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增下级菜单', 'add-xj')}>
550
+ <div>
551
+ <img src={item.preview} />
552
+ </div>
553
+ <p class="add-menu-type-label">{item.label}</p>
554
+ </div>
555
+ )
556
+ })
557
+ }
558
+ </div>
559
+ </div>
560
+ </el-popover>
561
+ </el-dropdown-menu>)
562
+ }}>
563
+ <span onClick={this.settingAppMenu.bind(this, nav)} class="app-menu-setting has-children-app-menu-setting"><i class="el-icon-s-tools"></i></span>
564
+ </el-dropdown>
565
+ </>
566
+ )
567
+ }}>
568
+ {
569
+ nav.children.map(item => this.renderMenuItem(item, true))
570
+ }
571
+ </el-sub-menu>
572
+ )
573
+ } else {
574
+ return (
575
+ <el-menu-item key={nav.ID} index={nav.ID} class={['epx-app-nav__menu-item', 'top-type-nav-menu', 'top-type-nav-menu-no-children', { 'epx-app-nav__menu-item--sub': isSub }, { active: this.$tab.key === ('default-' + nav.ID) }]} onClick={this.toPage.bind(this, nav)} >
576
+ <span>
577
+ <i class={['fa', nav.FONT_ICON]}></i>
578
+ <span style={this.navMenuFontSize ? { fontSize: this.navMenuFontSize + 'px' } : {}}>{nav.text}</span>
579
+ </span>
580
+ <el-dropdown
581
+ placement={nav.parent ? 'right-start' : 'bottom-start'}
582
+ trigger="click"
583
+ v-slots={{
584
+ dropdown: () => (<el-dropdown-menu>
585
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-重命名', 'menu-rename')} class="app-config-item" ><i class="el-icon-edit"></i>重命名</el-dropdown-item>
586
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单-设置', 'menu-setting')}><i class="el-icon-setting"></i>设置</el-dropdown-item>
587
+ <el-popover
588
+ popper-class="manage-menu-popover"
589
+ placement="right-start"
590
+ trigger="hover"
591
+ v-slots={{
592
+ reference: () => (<div class="delete-dropdown-item">
593
+ <div class="app-config-delete-item"><i class="el-icon-delete"></i>删除</div>
594
+ <i class="el-icon-arrow-right"></i>
595
+ </div>)
596
+ }}>
597
+ <div>
598
+ <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '0')}>删除菜单</div>
599
+ <div class="app-config-item" onClick={this.editAppMenu.bind(this, nav, 'delete-menu', '1')}>删除菜单及页面</div>
600
+ </div>
601
+ </el-popover>
602
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, nav, '菜单授权', 'menu-sq')} class="app-config-item"><i class="el-icon-finished"></i>菜单授权</el-dropdown-item>
603
+ <el-popover
604
+ popper-class="manage-menu-popover"
605
+ placement="right-start"
606
+ trigger="hover"
607
+ v-slots={{
608
+ reference: () => (<div class="delete-dropdown-item">
609
+ <div class="app-config-delete-item"><i class="el-icon-plus"></i>新增同级菜单</div>
610
+ <i class="el-icon-arrow-right"></i>
611
+ </div>)
612
+ }}>
613
+ <div class="add-menu-container">
614
+ <div>选择新增菜单类型</div>
615
+ <div class="add-type">
616
+ {this.addMenuTypeList.map(item => {
617
+ return (
618
+ <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增同级菜单', 'add-nav-menu')}>
619
+ <div>
620
+ <img src={item.preview} />
621
+ </div>
622
+ <p class="add-menu-type-label">{item.label}</p>
623
+ </div>
624
+ )
625
+ })
626
+ }
627
+ </div>
628
+ </div>
629
+ </el-popover>
630
+ <el-popover
631
+ popper-class="manage-menu-popover"
632
+ placement="right-start"
633
+ trigger="hover"
634
+ v-slots={{
635
+ reference: () => (<div class="delete-dropdown-item">
636
+ <div class="app-config-delete-item"><i class="el-icon-bottom"></i>新增下级菜单</div>
637
+ <i class="el-icon-arrow-right"></i>
638
+ </div>)
639
+ }}>
640
+ <div class="add-menu-container">
641
+ <div>选择新增菜单类型</div>
642
+ <div class="add-type">
643
+ {this.addMenuTypeList.map(item => {
644
+ return (
645
+ <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, nav, item, '新增下级菜单', 'add-xj')}>
646
+ <div>
647
+ <img src={item.preview} />
648
+ </div>
649
+ <p class="add-menu-type-label">{item.label}</p>
650
+ </div>
651
+ )
652
+ })
653
+ }
654
+ </div>
655
+ </div>
656
+ </el-popover>
657
+ </el-dropdown-menu>)
658
+ }}>
659
+ <span onClick={this.settingAppMenu.bind(this, nav)} class="app-menu-setting"><i class="el-icon-s-tools"></i></span>
660
+ </el-dropdown>
661
+ </el-menu-item>
662
+ )
663
+ }
664
+ },
665
+ validateNavWidth () {
666
+ if (!this.$refs.container) return
667
+ let maxWidth = this.$refs.container.offsetWidth - this.$refs.logo.offsetWidth - this.$refs.rightContainer.offsetWidth - 128
668
+ if (this.tabs.length > 0) {
669
+ maxWidth -= 138
670
+ }
671
+ let foldMenuIndex = 0
672
+ let width = 0
673
+ if (!this.showMenu) return
674
+ for (let i = 0; i < this.showMenu.length; i++) {
675
+ const item = this.showMenu[i]
676
+ const itemWidth = (item.text || '').length * 14 + (item.FONT_ICON ? 20 : 0) + 44 + 12
677
+ if (width + itemWidth > maxWidth) {
678
+ if (width + 100 <= maxWidth) {
679
+ foldMenuIndex = i
680
+ } else {
681
+ foldMenuIndex = i - 1
682
+ }
683
+ break
684
+ }
685
+ width += itemWidth
686
+ }
687
+ if (foldMenuIndex) {
688
+ this.openMenu = this.showMenu.slice(0, foldMenuIndex)
689
+ this.foldMenu = this.showMenu.slice(foldMenuIndex)
690
+ } else {
691
+ this.openMenu = [...this.showMenu]
692
+ this.foldMenu = []
693
+ }
694
+ },
695
+ moveEnd (e) {
696
+ const index = e.newIndex
697
+ const node = this.openMenu[index]
698
+ const parentId = 'root'
699
+ // 获取其父节点的所有子节点orderString
700
+ const str = this.openMenu.reduce((str, item, index) => (str += item.id + ':' + index + ','), '')
701
+ // // this.drag = false
702
+ this.$http.$post({
703
+ action: 'moveTree',
704
+ entityId: 'FM_MODULE',
705
+ orderString: str,
706
+ newParentId: parentId,
707
+ id: node.id,
708
+ selfAttriName: 'ID',
709
+ orderAtrriName: 'ORDER_NUM'
710
+ })
711
+ .then(() => {
712
+
713
+ })
714
+ .catch(err => {
715
+ this.$message.error(err.message || '拖拽排序失败')
716
+ this.reloadMenu()
717
+ })
718
+ },
719
+ renderNav () {
720
+ // menu-trigger="click" 菜单点击 子菜单打开的触发方式(只在 mode 为 horizontal 时有效)
721
+ return (
722
+ <div class="epx-app-nav__home">
723
+ {
724
+ (this.type === '1' || this.type === '2') ? (
725
+ <div class="epx-app-nav__menu-content">
726
+ <el-menu ref="menu" style="display:flex" class="epx-app-nav__menu" mode="horizontal" ellipsis={false}>
727
+ {
728
+ this.showMenu && (
729
+ <draggable
730
+ class="el-menu--horizontal epx-app-nav__menu nav-draggable"
731
+ v-model={this.openMenu}
732
+ group="description"
733
+ ghostClass="ghost"
734
+ animation={300}
735
+ onEnd={this.moveEnd}
736
+ >
737
+ {this.openMenu.map(nav => {
738
+ if (nav.HIDDEN_MENU !== '1') {
739
+ return this.renderMenuItem(nav, false)
740
+ }
741
+ })}
742
+
743
+ </draggable>
744
+ )
745
+ }
746
+ </el-menu>
747
+ {
748
+ this.foldMenu.length > 0 && (
749
+ <el-dropdown class="epx-app-nav__foldmenu" onCommand={this.toPage} trigger="click" v-slots={{
750
+ dropdown: () => (<el-dropdown-menu>
751
+ {
752
+ this.foldMenu.map(menu => (
753
+ <el-dropdown-item key={menu.ID} command={menu} class={{ 'epx-app-nav__foldmenu-item': true, ' more-menu-item': true, 'is-active': this.$tab.key === ('default-' + menu.ID) }}>
754
+ <span>
755
+ <i class={['fa', menu.FONT_ICON]}></i>
756
+ <span>{menu.text}</span>
757
+ </span>
758
+ <el-dropdown
759
+ placement="right-start"
760
+ trigger="click"
761
+ v-slots={{
762
+ dropdown: () => (<el-dropdown-menu>
763
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, menu, '菜单-重命名', 'menu-rename')} class="app-config-item"><i class="el-icon-edit"></i>重命名</el-dropdown-item>
764
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, menu, '菜单-设置', 'menu-setting')}><i class="el-icon-setting"></i>设置</el-dropdown-item>
765
+ <el-popover
766
+ popper-class="manage-menu-popover"
767
+ placement="right-start"
768
+ trigger="hover"
769
+ v-slots={{
770
+ reference: () => (<div class="delete-dropdown-item">
771
+ <div class="app-config-delete-item"><i class="el-icon-delete"></i>删除</div>
772
+ <i class="el-icon-arrow-right"></i>
773
+ </div>)
774
+ }}>
775
+ <div>
776
+ <div class="app-config-item" onClick={this.editAppMenu.bind(this, menu, 'delete-menu', '0')}>删除菜单</div>
777
+ <div class="app-config-item" onClick={this.editAppMenu.bind(this, menu, 'delete-menu', '1')}>删除菜单及页面</div>
778
+ </div>
779
+ </el-popover>
780
+ <el-dropdown-item onClick={this.editAppMenu.bind(this, menu, '菜单授权', 'menu-sq')} class="app-config-item"><i class="el-icon-finished"></i>菜单授权</el-dropdown-item>
781
+ <el-popover
782
+ popper-class="manage-menu-popover"
783
+ placement="right-start"
784
+ trigger="hover"
785
+ v-slots={{
786
+ reference: () => (<div class="delete-dropdown-item">
787
+ <div class="app-config-delete-item"><i class="el-icon-plus"></i>新增同级菜单</div>
788
+ <i class="el-icon-arrow-right"></i>
789
+ </div>)
790
+ }}>
791
+ <div class="add-menu-container">
792
+ <div>选择新增菜单类型</div>
793
+ <div class="add-type">
794
+ {this.addMenuTypeList.map(item => {
795
+ return (
796
+ <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, menu, item, '新增同级菜单', 'add-nav-menu')}>
797
+ <div>
798
+ <img src={item.preview} />
799
+ </div>
800
+ <p class="add-menu-type-label">{item.label}</p>
801
+ </div>
802
+ )
803
+ })
804
+ }
805
+ </div>
806
+ </div>
807
+ </el-popover>
808
+ <el-popover
809
+ popper-class="manage-menu-popover"
810
+ placement="right-start"
811
+ trigger="hover"
812
+ v-slots={{
813
+ reference: () => (<div class="delete-dropdown-item">
814
+ <div class="app-config-delete-item"><i class="el-icon-bottom"></i>新增下级菜单</div>
815
+ <i class="el-icon-arrow-right"></i>
816
+ </div>)
817
+ }}>
818
+ <div class="add-menu-container">
819
+ <div>选择新增菜单类型</div>
820
+ <div class="add-type">
821
+ {this.addMenuTypeList.map(item => {
822
+ return (
823
+ <div class="add-menu-type__item" key={item.value} onClick={this.addAppMenu.bind(this, menu, item, '新增下级菜单', 'add-xj')}>
824
+ <div>
825
+ <img src={item.preview} />
826
+ </div>
827
+ <p class="add-menu-type-label">{item.label}</p>
828
+ </div>
829
+ )
830
+ })
831
+ }
832
+ </div>
833
+ </div>
834
+ </el-popover>
835
+ </el-dropdown-menu>)
836
+ }}>
837
+ <span onClick={this.settingAppMenu.bind(this, menu)} class="app-menu-setting"><i class="el-icon-s-tools"></i></span>
838
+ </el-dropdown>
839
+ </el-dropdown-item>
840
+ ))
841
+ }
842
+ </el-dropdown-menu>)
843
+ }}>
844
+ <span class={{ 'epx-app-nav__foldmenu-text': true, 'is-active': this.activeMenuInMore }} >
845
+ {this.$t('more')}<i class="el-icon-caret-bottom"></i>
846
+ </span>
847
+ </el-dropdown>
848
+ )
849
+ }
850
+ <el-popover
851
+ ref="popover"
852
+ popper-class="manage-menu-popover"
853
+ placement="bottom"
854
+ trigger="click"
855
+ v-slots={{ reference: () => (<span class="app-add-menu"><i class="el-icon-circle-plus-outline"></i></span>) }}>
856
+ <div class="add-menu-container">
857
+ <div>选择新增菜单类型</div>
858
+ <div class="add-type">
859
+ {this.addMenuTypeList.map(item => {
860
+ return (
861
+ <div class="add-menu-type__item" key={item.value} onClick={this.chooseMenuType.bind(this, item)}>
862
+ <div>
863
+ <img src={item.preview} />
864
+ </div>
865
+ <p class="add-menu-type-label">{item.label}</p>
866
+ </div>
867
+ )
868
+ })
869
+ }
870
+ </div>
871
+ </div>
872
+ </el-popover>
873
+ {
874
+ this.tabs.length > 0 && (
875
+ <el-dropdown onCommand={this.selectTab} v-slots={{
876
+ dropdown: () => (<el-dropdown-menu>
877
+ {
878
+ this.tabs.map(tab => (
879
+ <el-dropdown-item key={tab.key} command={tab}>
880
+ {tab.title || tab.menuTitle}
881
+ <i class="epx-app-nav__tabs-delete el-icon-error" onClick={this.tabRemove.bind(this, tab.key)}></i>
882
+ </el-dropdown-item>
883
+ ))
884
+ }
885
+ <el-dropdown-item onClick={this.clearTabs}>
886
+ <el-button class="epx-app-nav__tabs-clear" type="primary" link><i class="el-icon-document-delete"></i>{this.$t('empty')}</el-button>
887
+ </el-dropdown-item>
888
+ </el-dropdown-menu>)
889
+ }}>
890
+ <el-button round size="default" class="epx-app-nav__tabs-page">{this.$tab && this.$tab.title}<i class="el-icon-arrow-down el-icon--right"></i></el-button>
891
+ </el-dropdown>
892
+ )
893
+ }
894
+ </div>
895
+ ) : (
896
+ <div class="epx-app-nav__menu-tabs">
897
+ {
898
+ this.tabs.length > 0 && (
899
+ <div class="epx-app-nav__menu-home">
900
+ <i class="el-icon-s-home" onClick={this.toAppIndex}></i>
901
+ </div>
902
+ )
903
+ }
904
+ <el-tabs class="epx-app-nav__tabs" modelValue={this.$tab.key} onTabClick={this.tabClick} closable onTabRemove={this.tabRemove} onContextmenu={this.tabsContextmenu}>
905
+ {
906
+ this.tabs.map(tab => (
907
+ <el-tab-pane key={tab.key} label={tab.title || tab.menuTitle} name={tab.key}></el-tab-pane>
908
+ ))
909
+ }
910
+ </el-tabs>
911
+ </div>
912
+ )
913
+ }
914
+ <el-popover
915
+ ref="tabPopover"
916
+ placement="bottom"
917
+ width="200"
918
+ trigger="manual"
919
+ v-model:visible={this.popoverVisible}
920
+ v-slots={{ reference: () => (<span > </span>) }}>
921
+ <div class="tabs-popover-clear" onClick={this.clearTabs}>{this.$t('Clear tabs')}</div>
922
+ </el-popover>
923
+ </div>
924
+ )
925
+ },
926
+ renderRole () {
927
+ const { EXTEND_OF_COMPETENCE } = this.appConfig
928
+ // 本组件只在管理模式下渲染。这个下拉显示「管理模式」并提供退回运行模式的唯一入口,
929
+ // 不能被应用自定义工具栏(TOOLBAR,如智能体应用只留 language)裁掉
930
+ if (EXTEND_OF_COMPETENCE !== 'allRole') {
931
+ return (
932
+ <el-dropdown trigger="click" placement="bottom-start" onCommand={this.switchRole} v-slots={{
933
+ dropdown: () => (<el-dropdown-menu>
934
+ <el-dropdown-item command='app-manage-code'>
935
+ 管理模式
936
+ </el-dropdown-item>
937
+ {
938
+ this.roleList.map(role => (
939
+ <el-dropdown-item
940
+ class={['epx-app-nav__role-dropdown-item', { 'epx-app-nav__role-dropdown-item--default': role.MAIN_ROLE === 'true' }]}
941
+ key={role.CODE}
942
+ command={role}
943
+ >
944
+ <span class="epx-app-nav__role-name">{role['NAME#'] || this.$t(role.NAME)}</span>
945
+ <i class="epx-app-nav__role-icon epx-icon-qizhi" ></i>
946
+ <span class="epx-app-nav__role-text" onClick={this.setMainRole.bind(this, role)}>{role.MAIN_ROLE === 'true' ? this.$t('default') : this.$t('Set to the default')}</span>
947
+ </el-dropdown-item>
948
+ ))
949
+ }
950
+ </el-dropdown-menu>)
951
+ }}>
952
+ <el-button size="default" type="primary" plain class="epx-app-nav__role-button">
953
+ {this.currentRoleName}<i class="el-icon-arrow-down el-icon--right"></i>
954
+ </el-button>
955
+ </el-dropdown>
956
+ )
957
+ }
958
+ },
959
+ settingAppMenu (menu, event) {
960
+ event.stopPropagation()
961
+ }
962
+ },
963
+ created () {
964
+ this.getClientSystemAppRole()
965
+ }
966
+ }
967
+ </script>
968
+
969
+ <style lang="scss" scoped>
970
+ .app-logo-right .el-icon-caret-bottom{
971
+ font-size: var(--epx-font-size-l);
972
+ color: #fff;
973
+ }
974
+ .app-config-item{
975
+ box-sizing: border-box;
976
+ height: 36px;
977
+ background: var(--epx-bg-card);
978
+ cursor: pointer;
979
+ line-height: 36px;
980
+ padding: 0 40px 0 20px;
981
+ color: var(--epx-text);
982
+ i{
983
+ margin-right: 10px;
984
+ }
985
+ &:hover{
986
+ @include font_color_primary;
987
+ @include bg_color_primary(0.1);
988
+ }
989
+ }
990
+ .top-type-nav-menu:hover,.more-menu-item:hover{
991
+ .app-menu-setting{
992
+ visibility: visible;
993
+ }
994
+ }
995
+ .app-menu-setting{
996
+ visibility: hidden;
997
+ margin-left: 4px;
998
+ width: 24px;
999
+ display: inline-block;
1000
+ i{
1001
+ font-size: var(--epx-font-size-l);
1002
+ position: relative;
1003
+ top: 2px;
1004
+ }
1005
+ }
1006
+ .has-children-app-menu-setting{
1007
+ padding-left: 16px;
1008
+ }
1009
+ .more-menu-item{
1010
+ padding-right: 10px;
1011
+ display: flex;
1012
+ justify-content: space-between;
1013
+ }
1014
+ .app-add-menu{
1015
+ display: inline-block;
1016
+ width: 64px;
1017
+ color: #fff;
1018
+ cursor: pointer;
1019
+ text-align: center;
1020
+ font-size: 21px;
1021
+ }
1022
+ .app-add-menu:hover{
1023
+ background-color: rgba(0,0,0,.2);
1024
+ }
1025
+ .add-menu-container{
1026
+ box-sizing: border-box;
1027
+ padding: 4px 0 0 20px;
1028
+ width: 560px;
1029
+ height: 352px;
1030
+ font-size: var(--epx-font-size-l);
1031
+ color: var(--epx-text);
1032
+ font-weight: bold;
1033
+ }
1034
+ .add-type {
1035
+ display: flex;
1036
+ flex-wrap: wrap;
1037
+ margin-top: 12px;
1038
+ }
1039
+ .add-menu-type-label{
1040
+ font-size: var(--epx-font-size-base);
1041
+ color: #444444;
1042
+ margin-top: 10px;
1043
+ margin-bottom: 10px;
1044
+ line-height: 19px;
1045
+ font-weight: 500;
1046
+ }
1047
+ .add-menu-type__item {
1048
+ box-sizing: border-box;
1049
+ width: 160px;
1050
+ margin-right: 20px;
1051
+ margin-bottom: 20px;
1052
+ text-align: center;
1053
+ cursor: pointer;
1054
+ img {
1055
+ width: 100%;
1056
+ }
1057
+ &:hover {
1058
+ .add-menu-type-label{
1059
+ @include font_color_primary;
1060
+ }
1061
+ }
1062
+ }
1063
+ .manage-nav-mode-item{
1064
+ margin-bottom: 40px;
1065
+ margin-left: 10px;
1066
+ margin-right: 10px;
1067
+ }
1068
+ .nav-type {
1069
+ img {
1070
+ opacity: 0.5;
1071
+ transition: all .5s;
1072
+ }
1073
+ .is-active {
1074
+ .add-menu-type-label{
1075
+ @include font_color_primary;
1076
+ }
1077
+ img {
1078
+ opacity: 1;
1079
+ }
1080
+ .nav-img{
1081
+ border: 1px solid;
1082
+ @include border_color_primary;
1083
+ }
1084
+ }
1085
+ }
1086
+ .top-type-nav-menu{
1087
+ display: flex;
1088
+ align-items: center;
1089
+ justify-content: space-between;
1090
+ padding-right: 4px !important;
1091
+
1092
+ :deep(.el-sub-menu__title) {
1093
+ // padding-right: 34px;
1094
+ width: 100%;
1095
+ display: flex;
1096
+ align-items: center;
1097
+ justify-content: space-between;
1098
+ padding-right: 0;
1099
+ .el-sub-menu__icon-arrow{
1100
+ position: absolute;
1101
+ top: 42%;
1102
+ }
1103
+ }
1104
+
1105
+ }
1106
+ .epx-app-nav__menu-item--sub {
1107
+ // padding: 0 !important;
1108
+
1109
+ :deep(.el-sub-menu__title .el-sub-menu__icon-arrow) {
1110
+ top: 50%;
1111
+ }
1112
+ :deep(.app-menu-setting i) {
1113
+ top:0;
1114
+ }
1115
+
1116
+ }
1117
+ .top-type-app-menu-setting{
1118
+ position: absolute;
1119
+ right: -10px;
1120
+ top: 0;
1121
+ }
1122
+ // .top-type-nav-menu-no-children{
1123
+ // padding-right: 10px !important;
1124
+ // }
1125
+ // .top-menu-setting-item{
1126
+ // display: flex;
1127
+ // align-items: center;
1128
+ // justify-content: space-between;
1129
+ // padding-right: 10px;
1130
+ // }
1131
+ .mode-manage-choose{
1132
+ display: flex;
1133
+ justify-content: space-between;
1134
+ align-items: center;
1135
+ border-bottom: 1px solid var(--epx-border);
1136
+ }
1137
+ .nav-draggable{
1138
+ display: flex;
1139
+ }
1140
+ .delete-dropdown-item{
1141
+ display: flex;
1142
+ align-items: center;
1143
+ justify-content: space-between;
1144
+ padding-right: 10px;
1145
+ cursor: pointer;
1146
+ background: var(--epx-bg-card);
1147
+ color: var(--epx-text);
1148
+ }
1149
+ .delete-dropdown-item:hover{
1150
+ @include font_color_primary;
1151
+ @include bg_color_primary(0.1);
1152
+ }
1153
+ .app-config-delete-item{
1154
+ box-sizing: border-box;
1155
+ height: 36px;
1156
+ cursor: pointer;
1157
+ line-height: 36px;
1158
+ padding: 0 40px 0 20px;
1159
+ i{
1160
+ margin-right: 10px;
1161
+ }
1162
+ }
1163
+ .role-system__content {
1164
+ padding-bottom: 20px;
1165
+
1166
+ :deep(.el-checkbox) {
1167
+ padding: 10px 0;
1168
+ color: var(--epx-text);
1169
+ }
1170
+
1171
+ }
1172
+ .popup-dialog{
1173
+ :deep(.el-dialog__header){
1174
+ padding: 16px;
1175
+ }
1176
+ }
1177
+ .epx-add-form__sign-buttongroup .el-button + .el-button{
1178
+ margin-left: 20px;
1179
+ }
1180
+ </style>
1181
+
1182
+ <style lang="scss">
1183
+ .manage-menu-popover{
1184
+ box-sizing: border-box;
1185
+ padding: 8px 0;
1186
+ box-shadow: 0px 4px 12px 0px rgba(0,0,0,0.15);
1187
+ border-radius: var(--epx-radius-base);
1188
+ border: 1px solid var(--epx-border);
1189
+ }
1190
+ </style>