@epxing/business 0.0.0-stage → 5.3.0-beta.2

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 (861) hide show
  1. package/API.md +111 -0
  2. package/README.md +43 -2
  3. package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
  4. package/dist/_virtual/preload-helper.js +88 -0
  5. package/dist/assets/0-C_2vdOtO.png +0 -0
  6. package/dist/assets/1-CsiSr5nw.png +0 -0
  7. package/dist/assets/2-C9hZOTyC.png +0 -0
  8. package/dist/assets/ai-CcPHuAhD.jpg +0 -0
  9. package/dist/assets/app-DBNIokDP.png +0 -0
  10. package/dist/assets/approval-DGcBv-re.png +0 -0
  11. package/dist/assets/aurorablue-N56tat3G.png +0 -0
  12. package/dist/assets/basepage-BF4dvOT8.png +0 -0
  13. package/dist/assets/classicblue-BdgPGKXa.png +0 -0
  14. package/dist/assets/create_market_system-BH__UVbt.png +0 -0
  15. package/dist/assets/create_system-irg--ePh.png +0 -0
  16. package/dist/assets/custom-C-ujlHz1.png +0 -0
  17. package/dist/assets/data-BDvuB-m7.png +0 -0
  18. package/dist/assets/deepblue-B78G_DNb.png +0 -0
  19. package/dist/assets/default-icon-2193FMjv.png +0 -0
  20. package/dist/assets/ex_link-4fYPd9nh.png +0 -0
  21. package/dist/assets/forestgreen-B2YR4xgz.png +0 -0
  22. package/dist/assets/hall_banner-Dc5YRV5A.webp +0 -0
  23. package/dist/assets/import-tfKWbWVS.png +0 -0
  24. package/dist/assets/link-BeD2ZGO9.png +0 -0
  25. package/dist/assets/m_hall_banner-Cf1Qwhh3.webp +0 -0
  26. package/dist/assets/orange-wT0uHIyo.png +0 -0
  27. package/dist/assets/palevioletred-DZXBQKru.png +0 -0
  28. package/dist/assets/photo-uscRzRXF.png +0 -0
  29. package/dist/assets/purple-CXrRrENi.png +0 -0
  30. package/dist/assets/role_select-DTqRlFNz.webp +0 -0
  31. package/dist/assets/skyblue-DPPlKPXU.png +0 -0
  32. package/dist/assets/snapshot-history-BsVY9cVj.png +0 -0
  33. package/dist/assets/snapshot-manual-DBRfFHYI.png +0 -0
  34. package/dist/assets/snapshot-realtime-DjHnJI6C.png +0 -0
  35. package/dist/assets/sync_loading-D7LoNPFP.png +0 -0
  36. package/dist/assets/tiffanyblue-DkyBoUQf.png +0 -0
  37. package/dist/assets/topbg-C_5lVpoA.webp +0 -0
  38. package/dist/assets/zxmb-CkPnmDaV.png +0 -0
  39. package/dist/src/assets/customTranslate/customTranslate.js +11 -0
  40. package/dist/src/assets/customTranslate/translations.js +219 -0
  41. package/dist/src/assets/images/addmenu/basepage.png.js +4 -0
  42. package/dist/src/assets/images/addmenu/data.png.js +4 -0
  43. package/dist/src/assets/images/addmenu/link.png.js +4 -0
  44. package/dist/src/assets/images/addmenu/list.png.js +4 -0
  45. package/dist/src/assets/images/addmenu/menu.png.js +4 -0
  46. package/dist/src/assets/images/addmenu/zxmb.png.js +4 -0
  47. package/dist/src/assets/images/ai.jpg.js +4 -0
  48. package/dist/src/assets/images/app.png.js +4 -0
  49. package/dist/src/assets/images/approval.png.js +4 -0
  50. package/dist/src/assets/images/create_market_system.png.js +4 -0
  51. package/dist/src/assets/images/create_system.png.js +4 -0
  52. package/dist/src/assets/images/custom.png.js +4 -0
  53. package/dist/src/assets/images/default-icon.png.js +4 -0
  54. package/dist/src/assets/images/ex_link.png.js +4 -0
  55. package/dist/src/assets/images/hall_banner.webp.js +4 -0
  56. package/dist/src/assets/images/hr.png.js +4 -0
  57. package/dist/src/assets/images/import.png.js +4 -0
  58. package/dist/src/assets/images/m_hall_banner.webp.js +4 -0
  59. package/dist/src/assets/images/nav/0.png.js +4 -0
  60. package/dist/src/assets/images/nav/1.png.js +4 -0
  61. package/dist/src/assets/images/nav/2.png.js +4 -0
  62. package/dist/src/assets/images/nav/3.svg.js +4 -0
  63. package/dist/src/assets/images/photo.png.js +4 -0
  64. package/dist/src/assets/images/snapshot-history.png.js +4 -0
  65. package/dist/src/assets/images/snapshot-manual.png.js +4 -0
  66. package/dist/src/assets/images/snapshot-realtime.png.js +4 -0
  67. package/dist/src/assets/images/sync_loading.png.js +4 -0
  68. package/dist/src/assets/images/theme/aurorablue.png.js +4 -0
  69. package/dist/src/assets/images/theme/classicblue.png.js +4 -0
  70. package/dist/src/assets/images/theme/deepblue.png.js +4 -0
  71. package/dist/src/assets/images/theme/forestgreen.png.js +4 -0
  72. package/dist/src/assets/images/theme/orange.png.js +4 -0
  73. package/dist/src/assets/images/theme/palevioletred.png.js +4 -0
  74. package/dist/src/assets/images/theme/purple.png.js +4 -0
  75. package/dist/src/assets/images/theme/skyblue.png.js +4 -0
  76. package/dist/src/assets/images/theme/tiffanyblue.png.js +4 -0
  77. package/dist/src/base/AiPromptDesigner.js +685 -0
  78. package/dist/src/base/AiPromptView.js +363 -0
  79. package/dist/src/base/AiSkillEditor.js +1029 -0
  80. package/dist/src/base/AiSkillEditor.vue.js +1176 -0
  81. package/dist/src/base/AppConfigFormItem.js +8 -0
  82. package/dist/src/base/AppConfigFormItem.vue.js +407 -0
  83. package/dist/src/base/AppMarket.js +212 -0
  84. package/dist/src/base/AppMarketList.js +8 -0
  85. package/dist/src/base/AppMarketList.vue.js +214 -0
  86. package/dist/src/base/AppMarketSystemDetail.js +293 -0
  87. package/dist/src/base/AttributeSubAdd.js +26 -0
  88. package/dist/src/base/ChooseApplication.js +132 -0
  89. package/dist/src/base/ClientAppItem.js +190 -0
  90. package/dist/src/base/ClientApplication.js +360 -0
  91. package/dist/src/base/ClientApplicationList.js +126 -0
  92. package/dist/src/base/ClientModule.js +119 -0
  93. package/dist/src/base/ClientModuleIndex.js +295 -0
  94. package/dist/src/base/ClientSystemDetail.js +203 -0
  95. package/dist/src/base/ClientSystemList.js +8 -0
  96. package/dist/src/base/ClientSystemList.vue.js +450 -0
  97. package/dist/src/base/CommonFieldList.js +11 -0
  98. package/dist/src/base/CommonFieldList.vue.js +530 -0
  99. package/dist/src/base/CommonSearchList.js +5 -0
  100. package/dist/src/base/CommonSearchList.vue.js +253 -0
  101. package/dist/src/base/CompayDetail.js +116 -0
  102. package/dist/src/base/ComponentGlobalSet.js +8 -0
  103. package/dist/src/base/ComponentGlobalSet.vue.js +722 -0
  104. package/dist/src/base/ComponentParamsTree.js +335 -0
  105. package/dist/src/base/ConfigModuleIndex.js +135 -0
  106. package/dist/src/base/CurrentClientApplication.js +54 -0
  107. package/dist/src/base/CurrentVersionInfo.js +98 -0
  108. package/dist/src/base/EntityMatchCompare.js +533 -0
  109. package/dist/src/base/FieldRelationFormItem.js +8 -0
  110. package/dist/src/base/FieldRelationFormItem.vue.js +272 -0
  111. package/dist/src/base/HelpDocSet.js +363 -0
  112. package/dist/src/base/HelpDocSet.vue.js +685 -0
  113. package/dist/src/base/IndexFormItem.js +5 -0
  114. package/dist/src/base/IndexFormItem.vue.js +230 -0
  115. package/dist/src/base/JobFormItem.js +8 -0
  116. package/dist/src/base/JobFormItem.vue.js +131 -0
  117. package/dist/src/base/ManageAppNav.js +9 -0
  118. package/dist/src/base/ManageAppNav.vue.js +1178 -0
  119. package/dist/src/base/ManageMenu.js +916 -0
  120. package/dist/src/base/ManageMenuItem.js +551 -0
  121. package/dist/src/base/NoInstallSystemList.js +5 -0
  122. package/dist/src/base/NoInstallSystemList.vue.js +159 -0
  123. package/dist/src/base/PageList.js +48 -0
  124. package/dist/src/base/PasswordFormItem.js +8 -0
  125. package/dist/src/base/PasswordFormItem.vue.js +125 -0
  126. package/dist/src/base/ProcessFormItem.js +148 -0
  127. package/dist/src/base/PublishSystemApplyFormItem.js +5 -0
  128. package/dist/src/base/PublishSystemApplyFormItem.vue.js +104 -0
  129. package/dist/src/base/RequestLog.js +170 -0
  130. package/dist/src/base/RightRiskList.js +8 -0
  131. package/dist/src/base/RightRiskList.vue.js +224 -0
  132. package/dist/src/base/RoleAccredit.js +1087 -0
  133. package/dist/src/base/RoleRightList.js +8 -0
  134. package/dist/src/base/RoleRightList.vue.js +118 -0
  135. package/dist/src/base/RoleUserManage.js +8 -0
  136. package/dist/src/base/RoleUserManage.vue.js +146 -0
  137. package/dist/src/base/ServiceAccredit.js +1075 -0
  138. package/dist/src/base/ServiceMenu.js +399 -0
  139. package/dist/src/base/ServiceMenuFormItem.js +20 -0
  140. package/dist/src/base/ServiceOperate.js +1003 -0
  141. package/dist/src/base/SystemHelpTreeFind.js +44 -0
  142. package/dist/src/base/aiPromptMode.js +145 -0
  143. package/dist/src/base/data-check/DataChckDetail.js +243 -0
  144. package/dist/src/base/data-check/DataCheck.js +308 -0
  145. package/dist/src/base/data-check/DataCheckList.js +364 -0
  146. package/dist/src/base/data-check/DataCheckSubList.js +6 -0
  147. package/dist/src/base/data-check/DataCheckSubList.vue.js +195 -0
  148. package/dist/src/base/entity-view/EntityViewFormItem.js +5 -0
  149. package/dist/src/base/entity-view/EntityViewFormItem.vue.js +229 -0
  150. package/dist/src/base/entity-view/EntityViewSubList.js +5 -0
  151. package/dist/src/base/entity-view/EntityViewSubList.vue.js +181 -0
  152. package/dist/src/base/entity-view-config/BasicInfoDialog.js +208 -0
  153. package/dist/src/base/entity-view-config/FieldPanel.js +692 -0
  154. package/dist/src/base/entity-view-config/FieldPropForm.js +786 -0
  155. package/dist/src/base/entity-view-config/FormulaDialog.js +143 -0
  156. package/dist/src/base/entity-view-config/ObjectFieldDialog.js +271 -0
  157. package/dist/src/base/entity-view-config/RelationPanel.js +779 -0
  158. package/dist/src/base/entity-view-config/SourceManagerDialog.js +658 -0
  159. package/dist/src/base/entity-view-config/SqlPanel.js +62 -0
  160. package/dist/src/base/entity-view-config/SqlPanel.vue.js +43 -0
  161. package/dist/src/base/entity-view-config/UnionPanel.js +1082 -0
  162. package/dist/src/base/entity-view-config/ViewConfig.js +586 -0
  163. package/dist/src/base/entity-view-config/constants.js +146 -0
  164. package/dist/src/base/user-type/UserTypeFormItem.js +5 -0
  165. package/dist/src/base/user-type/UserTypeFormItem.vue.js +183 -0
  166. package/dist/src/components/AddPageFormItem.js +5 -0
  167. package/dist/src/components/AddPageFormItem.vue.js +92 -0
  168. package/dist/src/components/AddUsedInterface.js +214 -0
  169. package/dist/src/components/AiDocFormItem.js +6 -0
  170. package/dist/src/components/AiDocFormItem.vue.js +271 -0
  171. package/dist/src/components/AiList.js +8 -0
  172. package/dist/src/components/AiList.vue.js +93 -0
  173. package/dist/src/components/AiPermissionAssistant.js +284 -0
  174. package/dist/src/components/AppList.js +414 -0
  175. package/dist/src/components/Apply/AIApplyIndex.js +179 -0
  176. package/dist/src/components/Apply/ApplyIndex.js +282 -0
  177. package/dist/src/components/AttributeList.js +870 -0
  178. package/dist/src/components/Banner.js +26 -0
  179. package/dist/src/components/BatchAddFieldDialog.js +425 -0
  180. package/dist/src/components/CardO.js +47 -0
  181. package/dist/src/components/CheckForm.js +34 -0
  182. package/dist/src/components/ClientAdminFormItem.js +47 -0
  183. package/dist/src/components/ClientAdminList.js +9 -0
  184. package/dist/src/components/ClientAdminList.vue.js +221 -0
  185. package/dist/src/components/ClientFormItem.js +48 -0
  186. package/dist/src/components/ClientList.js +6 -0
  187. package/dist/src/components/ClientList.vue.js +216 -0
  188. package/dist/src/components/CodeDetail.js +454 -0
  189. package/dist/src/components/CodeManage.js +1030 -0
  190. package/dist/src/components/ComponentFind.js +210 -0
  191. package/dist/src/components/ComponentList.js +499 -0
  192. package/dist/src/components/ConfigParamFormItem.js +8 -0
  193. package/dist/src/components/ConfigParamFormItem.vue.js +389 -0
  194. package/dist/src/components/CreatePage.js +298 -0
  195. package/dist/src/components/DashboardCreate.js +106 -0
  196. package/dist/src/components/DataLog.js +169 -0
  197. package/dist/src/components/DataLogTimeline.js +111 -0
  198. package/dist/src/components/DataSnapshot.js +207 -0
  199. package/dist/src/components/DataSnapshotList.js +75 -0
  200. package/dist/src/components/DataSyncInit.js +173 -0
  201. package/dist/src/components/DblogList.js +6 -0
  202. package/dist/src/components/DblogList.vue.js +143 -0
  203. package/dist/src/components/DeptFind.js +8 -0
  204. package/dist/src/components/DeptFind.vue.js +109 -0
  205. package/dist/src/components/DynamicUserList.js +5 -0
  206. package/dist/src/components/DynamicUserList.vue.js +89 -0
  207. package/dist/src/components/EntityCheckboxFind.js +5 -0
  208. package/dist/src/components/EntityCheckboxFind.vue.js +97 -0
  209. package/dist/src/components/EntityRelationAdd.js +388 -0
  210. package/dist/src/components/EntityRelationAddFormItem.js +5 -0
  211. package/dist/src/components/EntityRelationAddFormItem.vue.js +284 -0
  212. package/dist/src/components/EntityRightFormItem.js +10 -0
  213. package/dist/src/components/EntityRightFormItem.vue.js +401 -0
  214. package/dist/src/components/EntityRightSubList.js +640 -0
  215. package/dist/src/components/EntityTagSubList.js +5 -0
  216. package/dist/src/components/EntityTagSubList.vue.js +103 -0
  217. package/dist/src/components/EntityTreeManage.js +865 -0
  218. package/dist/src/components/ExportSystemConfig.js +167 -0
  219. package/dist/src/components/FieldTreeFind.js +41 -0
  220. package/dist/src/components/FormulaEditor.js +8 -0
  221. package/dist/src/components/FormulaEditor.vue.js +1235 -0
  222. package/dist/src/components/GenTestData.js +638 -0
  223. package/dist/src/components/HallNav.js +6 -0
  224. package/dist/src/components/HallNav.vue.js +156 -0
  225. package/dist/src/components/HeaderNav.js +369 -0
  226. package/dist/src/components/IconCard.js +98 -0
  227. package/dist/src/components/IconFontLibrary.js +5 -0
  228. package/dist/src/components/IconFontLibrary.vue.js +67 -0
  229. package/dist/src/components/IconFontList.js +5 -0
  230. package/dist/src/components/IconFontList.vue.js +79 -0
  231. package/dist/src/components/IdentifyList.js +33 -0
  232. package/dist/src/components/ImportSystemConfig.js +303 -0
  233. package/dist/src/components/InterfaceSubList.js +320 -0
  234. package/dist/src/components/JsPanel.js +101 -0
  235. package/dist/src/components/LanguageImportPage.js +590 -0
  236. package/dist/src/components/LanguageSetting.js +545 -0
  237. package/dist/src/components/List/LinkItem.js +113 -0
  238. package/dist/src/components/List/List.js +18 -0
  239. package/dist/src/components/List/ListItem.js +31 -0
  240. package/dist/src/components/MenuTreeFind.js +8 -0
  241. package/dist/src/components/MenuTreeFind.vue.js +81 -0
  242. package/dist/src/components/MessageList.js +8 -0
  243. package/dist/src/components/MessageList.vue.js +101 -0
  244. package/dist/src/components/MessageRuleFormItem.js +60 -0
  245. package/dist/src/components/MessageRuleReceiverFormItem.js +224 -0
  246. package/dist/src/components/MessageTemplate.js +395 -0
  247. package/dist/src/components/MessageTemplate.vue.js +693 -0
  248. package/dist/src/components/MetaList.js +5 -0
  249. package/dist/src/components/MetaList.vue.js +100 -0
  250. package/dist/src/components/Nav.js +496 -0
  251. package/dist/src/components/NavFormCatalogItem.js +7 -0
  252. package/dist/src/components/NumList.js +60 -0
  253. package/dist/src/components/OperateLog.js +133 -0
  254. package/dist/src/components/PageCatalog.js +8 -0
  255. package/dist/src/components/PageCatalog.vue.js +292 -0
  256. package/dist/src/components/PageChart.js +213 -0
  257. package/dist/src/components/PageSwipes.js +132 -0
  258. package/dist/src/components/PersonFormItem.js +5 -0
  259. package/dist/src/components/PersonFormItem.vue.js +96 -0
  260. package/dist/src/components/Popup.js +239 -0
  261. package/dist/src/components/PrintFormList.js +9 -0
  262. package/dist/src/components/PrintFormList.vue.js +203 -0
  263. package/dist/src/components/PublishEntity.js +114 -0
  264. package/dist/src/components/RelyFieldTreeFind.js +52 -0
  265. package/dist/src/components/ReportFormList.js +236 -0
  266. package/dist/src/components/ReportList.js +9 -0
  267. package/dist/src/components/ReportList.vue.js +248 -0
  268. package/dist/src/components/RightSubList.js +8 -0
  269. package/dist/src/components/RightSubList.vue.js +150 -0
  270. package/dist/src/components/RoleAddUser.js +55 -0
  271. package/dist/src/components/RoleApplicationCard.js +138 -0
  272. package/dist/src/components/RoleApplicationList.js +937 -0
  273. package/dist/src/components/RoleApplicationSet.js +1001 -0
  274. package/dist/src/components/Search.js +254 -0
  275. package/dist/src/components/ServiceFormItem.js +33 -0
  276. package/dist/src/components/SnapshotDataList.js +73 -0
  277. package/dist/src/components/SystemAdminList.js +8 -0
  278. package/dist/src/components/SystemAdminList.vue.js +198 -0
  279. package/dist/src/components/SystemFormItem.js +8 -0
  280. package/dist/src/components/SystemFormItem.vue.js +170 -0
  281. package/dist/src/components/SystemNav.js +30 -0
  282. package/dist/src/components/TaskNumCard.js +23 -0
  283. package/dist/src/components/TimerRuleFormItem.js +333 -0
  284. package/dist/src/components/TodoList.js +8 -0
  285. package/dist/src/components/TodoList.vue.js +327 -0
  286. package/dist/src/components/UpdateSystemConfig.js +241 -0
  287. package/dist/src/components/UserCard.js +83 -0
  288. package/dist/src/components/UserFind.js +6 -0
  289. package/dist/src/components/UserFind.vue.js +592 -0
  290. package/dist/src/components/UserFormItem.js +9 -0
  291. package/dist/src/components/UserFormItem.vue.js +609 -0
  292. package/dist/src/components/UserList.js +5 -0
  293. package/dist/src/components/UserList.vue.js +23 -0
  294. package/dist/src/components/UserManage.js +802 -0
  295. package/dist/src/components/UserRoleList.js +579 -0
  296. package/dist/src/components/ValidateRuleFormItem.js +109 -0
  297. package/dist/src/components/ViewFieldDefine.js +747 -0
  298. package/dist/src/components/WikiSpaceList.js +5 -0
  299. package/dist/src/components/WikiSpaceList.vue.js +330 -0
  300. package/dist/src/components/WikiWorkbench.js +647 -0
  301. package/dist/src/components/authorization/AddApiPermiss.js +231 -0
  302. package/dist/src/components/authorization/AddAuthorization.js +161 -0
  303. package/dist/src/components/authorization/AddEntityFind.js +62 -0
  304. package/dist/src/components/authorization/AddNoApi.js +191 -0
  305. package/dist/src/components/authorization/AddRoleScope.js +337 -0
  306. package/dist/src/components/authorization/AiRolePlan.js +672 -0
  307. package/dist/src/components/authorization/ApiShareOtherList.js +397 -0
  308. package/dist/src/components/authorization/ApiSystemList.js +242 -0
  309. package/dist/src/components/authorization/AuthorizationInterface.js +622 -0
  310. package/dist/src/components/authorization/AuthorizationRoleSystem.js +850 -0
  311. package/dist/src/components/authorization/EntityConstraintFormItem.js +284 -0
  312. package/dist/src/components/authorization/OtherShareApiList.js +247 -0
  313. package/dist/src/components/authorization/PermissCommonRoleTabs.js +114 -0
  314. package/dist/src/components/authorization/PermissRoleAuthorization.js +1286 -0
  315. package/dist/src/components/authorization/PermissRoleTabs.js +113 -0
  316. package/dist/src/components/authorization/RoleLevel.js +5 -0
  317. package/dist/src/components/authorization/RoleLevel.vue.js +110 -0
  318. package/dist/src/components/authorization/RoleLevelScope.js +270 -0
  319. package/dist/src/components/authorization/SystemAddNoApi.js +187 -0
  320. package/dist/src/components/card/CardList.js +65 -0
  321. package/dist/src/components/card/CardListItem.js +97 -0
  322. package/dist/src/components/card/Title.js +42 -0
  323. package/dist/src/components/custom-bpmn/CustomContextPad.js +54 -0
  324. package/dist/src/components/custom-bpmn/CustomPalette.js +5 -0
  325. package/dist/src/components/custom-bpmn/CustomRenderer.js +5 -0
  326. package/dist/src/components/custom-bpmn/CustomRendererBpmn.js +88 -0
  327. package/dist/src/components/custom-bpmn/PropertiesView.js +12560 -0
  328. package/dist/src/components/custom-bpmn/components/AiModel.js +353 -0
  329. package/dist/src/components/custom-bpmn/components/Api.js +376 -0
  330. package/dist/src/components/custom-bpmn/components/BatchOperation.js +209 -0
  331. package/dist/src/components/custom-bpmn/components/Copy.js +653 -0
  332. package/dist/src/components/custom-bpmn/components/DataTransform.js +442 -0
  333. package/dist/src/components/custom-bpmn/components/Demo.js +63 -0
  334. package/dist/src/components/custom-bpmn/components/EditDiv.js +358 -0
  335. package/dist/src/components/custom-bpmn/components/GenScope.js +259 -0
  336. package/dist/src/components/custom-bpmn/components/GlobalParamsTree.js +76 -0
  337. package/dist/src/components/custom-bpmn/components/Knowledges.js +238 -0
  338. package/dist/src/components/custom-bpmn/components/Login.js +591 -0
  339. package/dist/src/components/custom-bpmn/components/MessageQueue.js +221 -0
  340. package/dist/src/components/custom-bpmn/components/MetaSelect.js +160 -0
  341. package/dist/src/components/custom-bpmn/components/NumStatistic.js +408 -0
  342. package/dist/src/components/custom-bpmn/components/ObjectTransform.js +789 -0
  343. package/dist/src/components/custom-bpmn/components/OutPut.js +395 -0
  344. package/dist/src/components/custom-bpmn/components/ParamsMachining.js +889 -0
  345. package/dist/src/components/custom-bpmn/components/ParamsOutput.js +161 -0
  346. package/dist/src/components/custom-bpmn/components/ProcessAudit.js +796 -0
  347. package/dist/src/components/custom-bpmn/components/SingleMultipleFind.js +1040 -0
  348. package/dist/src/components/custom-bpmn/components/TestDialog.js +861 -0
  349. package/dist/src/components/custom-bpmn/img/chaxun.png.js +4 -0
  350. package/dist/src/components/custom-bpmn/img/fasong.png.js +4 -0
  351. package/dist/src/components/custom-bpmn/img/gengxin.png.js +4 -0
  352. package/dist/src/components/custom-bpmn/img/jiagong.png.js +4 -0
  353. package/dist/src/components/custom-bpmn/img/jiekou.png.js +4 -0
  354. package/dist/src/components/custom-bpmn/img/shanchu.png.js +4 -0
  355. package/dist/src/components/custom-bpmn/img/tongbu.png.js +4 -0
  356. package/dist/src/components/custom-bpmn/img/xinzeng.png.js +4 -0
  357. package/dist/src/components/custom-bpmn/img/xunhuanend.png.js +4 -0
  358. package/dist/src/components/custom-bpmn/img/xunhuanstart.png.js +4 -0
  359. package/dist/src/components/custom-bpmn/img/ywgz.png.js +4 -0
  360. package/dist/src/components/custom-bpmn/index.js +5 -0
  361. package/dist/src/components/custom-bpmn/palette.js +13 -0
  362. package/dist/src/components/custom-bpmn/util.js +7 -0
  363. package/dist/src/components/dashboard-create.js +20 -0
  364. package/dist/src/components/entity-relation-diagram/Er.js +340 -0
  365. package/dist/src/components/entity-relation-diagram/renderErNode.js +36 -0
  366. package/dist/src/components/expand/AddForm.js +86 -0
  367. package/dist/src/components/expand/AddFormItem.js +149 -0
  368. package/dist/src/components/filter/Filter.js +720 -0
  369. package/dist/src/components/filter/FilterItem.js +493 -0
  370. package/dist/src/components/hall/AppCollect.js +121 -0
  371. package/dist/src/components/hall/AppList.js +480 -0
  372. package/dist/src/components/hall/AppVisitRecord.js +113 -0
  373. package/dist/src/components/hall/Banner.js +33 -0
  374. package/dist/src/components/hall/ServiceCard.js +124 -0
  375. package/dist/src/components/hall/UserCard.js +81 -0
  376. package/dist/src/components/permiss/AddApi.js +143 -0
  377. package/dist/src/components/permiss/AddNoEntityApi.js +180 -0
  378. package/dist/src/components/permiss/AddSystemPermiss.js +131 -0
  379. package/dist/src/components/permiss/AllocateRole.js +131 -0
  380. package/dist/src/components/permiss/ApiSubList.js +151 -0
  381. package/dist/src/components/permiss/CommonRoleMenu.js +591 -0
  382. package/dist/src/components/permiss/FieldScope.js +200 -0
  383. package/dist/src/components/permiss/PermissManage.js +88 -0
  384. package/dist/src/components/permiss/RoleAppList.js +36 -0
  385. package/dist/src/components/permiss/RoleMenu.js +518 -0
  386. package/dist/src/components/permiss/RoleSubList.js +5 -0
  387. package/dist/src/components/permiss/RoleSubList.vue.js +300 -0
  388. package/dist/src/components/permiss/jurisdiction.js +359 -0
  389. package/dist/src/components/process-healthcheck/HealthcheckChart.js +234 -0
  390. package/dist/src/components/process-healthcheck/HealthcheckChart.vue.js +348 -0
  391. package/dist/src/components/process-healthcheck/HealthcheckRenderer.js +36 -0
  392. package/dist/src/components/process-healthcheck/index.js +8 -0
  393. package/dist/src/components/report/Config.js +1708 -0
  394. package/dist/src/components/report/Design.js +4632 -0
  395. package/dist/src/components/report/StatList.js +217 -0
  396. package/dist/src/components/right/EntityOtherSystemList.js +82 -0
  397. package/dist/src/components/right/SystemInterfaceList.js +418 -0
  398. package/dist/src/components/right/SystemList.js +1017 -0
  399. package/dist/src/components/upLoad.js +71 -0
  400. package/dist/src/components/viewport/LookViewList.js +22 -0
  401. package/dist/src/components/viewport/ViewAddForm.js +142 -0
  402. package/dist/src/components/viewport/ViewDefineList.js +50 -0
  403. package/dist/src/components/viewport/ViewFiedList.js +723 -0
  404. package/dist/src/components/viewport/ViewScope.js +116 -0
  405. package/dist/src/components/wiki-workbench/WikiCites.js +301 -0
  406. package/dist/src/components/wiki-workbench/WikiIntake.js +308 -0
  407. package/dist/src/components/wiki-workbench/WikiIntake.vue.js +309 -0
  408. package/dist/src/components/wiki-workbench/WikiJobs.js +195 -0
  409. package/dist/src/components/wiki-workbench/WikiRevisions.js +229 -0
  410. package/dist/src/components/wiki-workbench/WikiSpaceSettings.js +59 -0
  411. package/dist/src/components/wiki-workbench/WikiSpaceSettings.vue.js +127 -0
  412. package/dist/src/components/wiki-workbench/codes.js +27 -0
  413. package/dist/src/components/wiki-workbench/index.js +13 -0
  414. package/dist/src/index.js +42 -0
  415. package/dist/src/popup.js +68 -0
  416. package/dist/src/public-components.js +20 -0
  417. package/dist/src/remote.entry.js +31 -0
  418. package/dist/src/route-components.js +12 -0
  419. package/dist/src/system.component.index.js +5 -0
  420. package/dist/src/system.component.js +342 -0
  421. package/dist/src/system.component.lazy.js +50 -0
  422. package/dist/src/views/Add.js +8 -0
  423. package/dist/src/views/Add.vue.js +734 -0
  424. package/dist/src/views/AiToolManager.js +2530 -0
  425. package/dist/src/views/App.js +48 -0
  426. package/dist/src/views/AppRoleSelect.js +233 -0
  427. package/dist/src/views/BatchEdit.js +256 -0
  428. package/dist/src/views/Bpmn.js +319 -0
  429. package/dist/src/views/Bpmn.vue.js +1196 -0
  430. package/dist/src/views/EntityCheckPage.js +49 -0
  431. package/dist/src/views/EntityDetailPage.js +5 -0
  432. package/dist/src/views/EntityDetailPage.vue.js +73 -0
  433. package/dist/src/views/EntityEditPage.js +10 -0
  434. package/dist/src/views/EntitySubListPage.js +41 -0
  435. package/dist/src/views/EntityTreePage.js +32 -0
  436. package/dist/src/views/Error.js +210 -0
  437. package/dist/src/views/ExcelDesign.js +2730 -0
  438. package/dist/src/views/ExcelDesign.vue.js +2165 -0
  439. package/dist/src/views/ExcelPreviewPage.js +166 -0
  440. package/dist/src/views/ExcelPreviewPage.vue.js +572 -0
  441. package/dist/src/views/ExportFilePage.js +21 -0
  442. package/dist/src/views/ExportPage.js +21 -0
  443. package/dist/src/views/FormDesign.js +1033 -0
  444. package/dist/src/views/FormDesign.vue.js +1564 -0
  445. package/dist/src/views/I18nWorkbench.js +521 -0
  446. package/dist/src/views/ImportFilePage.js +21 -0
  447. package/dist/src/views/ImportPage.js +21 -0
  448. package/dist/src/views/MEntityListPage.js +66 -0
  449. package/dist/src/views/MEntitySubListPage.js +41 -0
  450. package/dist/src/views/MinePage.js +16 -0
  451. package/dist/src/views/Module.js +173 -0
  452. package/dist/src/views/PageAttributeTreePage.js +421 -0
  453. package/dist/src/views/PageConfig.js +177 -0
  454. package/dist/src/views/Permission.js +742 -0
  455. package/dist/src/views/PersonalInfo.js +792 -0
  456. package/dist/src/views/QyWechat.js +62 -0
  457. package/dist/src/views/ReportFormListPage.js +77 -0
  458. package/dist/src/views/TaskPage.js +180 -0
  459. package/dist/src/views/WikiBinding.js +614 -0
  460. package/dist/src/views/client/AddForm.js +55 -0
  461. package/dist/src/views/client/AppMarket.js +290 -0
  462. package/dist/src/views/client/ClientIndex.js +209 -0
  463. package/dist/src/views/client/ClientModuleIndexPage.js +5 -0
  464. package/dist/src/views/client/ClientModuleIndexPage.vue.js +30 -0
  465. package/dist/src/views/client/CopySystem.js +136 -0
  466. package/dist/src/views/client/CreateAppFormItem.js +8 -0
  467. package/dist/src/views/client/CreateAppFormItem.vue.js +232 -0
  468. package/dist/src/views/client/CreateMethod.js +76 -0
  469. package/dist/src/views/client/InstallSystem.js +309 -0
  470. package/dist/src/views/client/ManageList.js +5 -0
  471. package/dist/src/views/client/ManageList.vue.js +211 -0
  472. package/dist/src/views/client/OpenClientManage.js +51 -0
  473. package/dist/src/views/client/OpenSystemManage.js +56 -0
  474. package/dist/src/views/client/PageTabsCyclic.js +92 -0
  475. package/dist/src/views/client/SelfBuiltSystem.js +444 -0
  476. package/dist/src/views/client/StandardProduct.js +233 -0
  477. package/dist/src/views/client/SystemAppAccredit.js +561 -0
  478. package/dist/src/views/client/SystemAppManager.js +293 -0
  479. package/dist/src/views/client/SystemAppManager.vue.js +559 -0
  480. package/dist/src/views/client/SystemManager.js +452 -0
  481. package/dist/src/views/client/SystemManager.vue.js +522 -0
  482. package/dist/src/views/i18n/I18nAiTaskHistoryDialog.js +230 -0
  483. package/dist/src/views/i18n/I18nPublishDialog.js +451 -0
  484. package/dist/src/views/i18n/I18nTranslationList.js +8 -0
  485. package/dist/src/views/i18n/I18nTranslationList.vue.js +247 -0
  486. package/dist/src/views/i18n/i18n-workbench-text.js +11 -0
  487. package/dist/src/views/layout/CardList.js +96 -0
  488. package/dist/src/views/layout/Grid.js +138 -0
  489. package/dist/src/views/match/AddTargetField.js +8 -0
  490. package/dist/src/views/match/AddTargetField.vue.js +127 -0
  491. package/dist/src/views/match/MatchAddFormItem.js +5 -0
  492. package/dist/src/views/match/MatchAddFormItem.vue.js +84 -0
  493. package/dist/src/views/match/conversion.js +805 -0
  494. package/dist/src/views/match/customize.js +391 -0
  495. package/dist/src/views/match/fieldMatch.js +8 -0
  496. package/dist/src/views/match/fieldMatch.vue.js +610 -0
  497. package/dist/src/views/report/AddFormItem.js +60 -0
  498. package/dist/src/views/report/DesignReport.js +1392 -0
  499. package/dist/src/views/report/ReportTreeFind.js +8 -0
  500. package/dist/src/views/report/ReportTreeFind.vue.js +166 -0
  501. package/dist/style.css +33364 -0
  502. package/package.json +133 -3
  503. package/src/base/AiPromptDesigner.vue +653 -0
  504. package/src/base/AiPromptView.vue +467 -0
  505. package/src/base/AiSkillEditor.vue +2125 -0
  506. package/src/base/AppConfigFormItem.vue +404 -0
  507. package/src/base/AppMarket.vue +264 -0
  508. package/src/base/AppMarketList.vue +233 -0
  509. package/src/base/AppMarketSystemDetail.vue +380 -0
  510. package/src/base/AttributeSubAdd.vue +29 -0
  511. package/src/base/ChooseApplication.vue +176 -0
  512. package/src/base/ClientAppItem.vue +247 -0
  513. package/src/base/ClientApplication.vue +447 -0
  514. package/src/base/ClientApplicationList.vue +180 -0
  515. package/src/base/ClientModule.vue +69 -0
  516. package/src/base/ClientModuleIndex.vue +437 -0
  517. package/src/base/ClientSystemDetail.vue +319 -0
  518. package/src/base/ClientSystemList.vue +435 -0
  519. package/src/base/CommonFieldList.vue +1397 -0
  520. package/src/base/CommonSearchList.vue +191 -0
  521. package/src/base/CompayDetail.vue +199 -0
  522. package/src/base/ComponentGlobalSet.vue +842 -0
  523. package/src/base/ComponentParamsTree.vue +310 -0
  524. package/src/base/ConfigModuleIndex.vue +121 -0
  525. package/src/base/CurrentClientApplication.vue +37 -0
  526. package/src/base/CurrentVersionInfo.vue +107 -0
  527. package/src/base/EntityMatchCompare.vue +442 -0
  528. package/src/base/FieldRelationFormItem.vue +260 -0
  529. package/src/base/HelpDocSet.vue +1217 -0
  530. package/src/base/IndexFormItem.vue +197 -0
  531. package/src/base/JobFormItem.vue +101 -0
  532. package/src/base/ManageAppNav.vue +1190 -0
  533. package/src/base/ManageMenu.vue +935 -0
  534. package/src/base/ManageMenuItem.vue +399 -0
  535. package/src/base/NoInstallSystemList.vue +114 -0
  536. package/src/base/PageList.vue +47 -0
  537. package/src/base/PasswordFormItem.vue +94 -0
  538. package/src/base/ProcessFormItem.vue +129 -0
  539. package/src/base/PublishSystemApplyFormItem.vue +87 -0
  540. package/src/base/RequestLog.vue +198 -0
  541. package/src/base/RightRiskList.vue +212 -0
  542. package/src/base/RoleAccredit.vue +961 -0
  543. package/src/base/RoleRightList.vue +159 -0
  544. package/src/base/RoleUserManage.vue +186 -0
  545. package/src/base/ServiceAccredit.vue +956 -0
  546. package/src/base/ServiceMenu.vue +420 -0
  547. package/src/base/ServiceMenuFormItem.vue +22 -0
  548. package/src/base/ServiceOperate.vue +929 -0
  549. package/src/base/SystemHelpTreeFind.vue +50 -0
  550. package/src/base/aiPromptMode.js +153 -0
  551. package/src/base/data-check/DataChckDetail.vue +281 -0
  552. package/src/base/data-check/DataCheck.vue +261 -0
  553. package/src/base/data-check/DataCheckList.vue +327 -0
  554. package/src/base/data-check/DataCheckSubList.vue +160 -0
  555. package/src/base/entity-view/EntityViewFormItem.vue +170 -0
  556. package/src/base/entity-view/EntityViewSubList.vue +149 -0
  557. package/src/base/entity-view-config/BasicInfoDialog.vue +156 -0
  558. package/src/base/entity-view-config/FieldPanel.vue +742 -0
  559. package/src/base/entity-view-config/FieldPropForm.vue +687 -0
  560. package/src/base/entity-view-config/FormulaDialog.vue +153 -0
  561. package/src/base/entity-view-config/ObjectFieldDialog.vue +367 -0
  562. package/src/base/entity-view-config/RelationPanel.vue +951 -0
  563. package/src/base/entity-view-config/SourceManagerDialog.vue +428 -0
  564. package/src/base/entity-view-config/SqlPanel.vue +138 -0
  565. package/src/base/entity-view-config/UnionPanel.vue +1037 -0
  566. package/src/base/entity-view-config/ViewConfig.vue +661 -0
  567. package/src/base/entity-view-config/constants.js +139 -0
  568. package/src/base/user-type/UserTypeFormItem.vue +134 -0
  569. package/src/components/AddPageFormItem.vue +82 -0
  570. package/src/components/AddUsedInterface.vue +154 -0
  571. package/src/components/AiDocFormItem.vue +293 -0
  572. package/src/components/AiList.vue +132 -0
  573. package/src/components/AiPermissionAssistant.vue +304 -0
  574. package/src/components/AppList.vue +330 -0
  575. package/src/components/Apply/AIApplyIndex.vue +458 -0
  576. package/src/components/Apply/ApplyIndex.vue +358 -0
  577. package/src/components/AttributeList.vue +667 -0
  578. package/src/components/Banner.vue +24 -0
  579. package/src/components/BatchAddFieldDialog.vue +590 -0
  580. package/src/components/CardO.vue +112 -0
  581. package/src/components/CheckForm.vue +32 -0
  582. package/src/components/ClientAdminFormItem.vue +49 -0
  583. package/src/components/ClientAdminList.vue +434 -0
  584. package/src/components/ClientFormItem.vue +49 -0
  585. package/src/components/ClientList.vue +155 -0
  586. package/src/components/CodeDetail.vue +465 -0
  587. package/src/components/CodeManage.vue +1004 -0
  588. package/src/components/ComponentFind.vue +222 -0
  589. package/src/components/ComponentList.vue +526 -0
  590. package/src/components/ConfigParamFormItem.vue +383 -0
  591. package/src/components/CreatePage.vue +348 -0
  592. package/src/components/DashboardCreate.vue +73 -0
  593. package/src/components/DataLog.vue +181 -0
  594. package/src/components/DataLogTimeline.vue +202 -0
  595. package/src/components/DataSnapshot.vue +264 -0
  596. package/src/components/DataSnapshotList.vue +79 -0
  597. package/src/components/DataSyncInit.vue +97 -0
  598. package/src/components/DblogList.vue +163 -0
  599. package/src/components/DeptFind.vue +203 -0
  600. package/src/components/DynamicUserList.vue +72 -0
  601. package/src/components/EntityCheckboxFind.vue +90 -0
  602. package/src/components/EntityRelationAdd.vue +201 -0
  603. package/src/components/EntityRelationAddFormItem.vue +235 -0
  604. package/src/components/EntityRightFormItem.vue +618 -0
  605. package/src/components/EntityRightSubList.vue +740 -0
  606. package/src/components/EntityTagSubList.vue +72 -0
  607. package/src/components/EntityTreeManage.vue +988 -0
  608. package/src/components/ExportSystemConfig.vue +131 -0
  609. package/src/components/FieldTreeFind.vue +48 -0
  610. package/src/components/FormulaEditor.vue +1220 -0
  611. package/src/components/GenTestData.vue +787 -0
  612. package/src/components/HallNav.vue +539 -0
  613. package/src/components/HeaderNav.vue +447 -0
  614. package/src/components/IconCard.vue +158 -0
  615. package/src/components/IconFontLibrary.vue +61 -0
  616. package/src/components/IconFontList.vue +75 -0
  617. package/src/components/IdentifyList.vue +33 -0
  618. package/src/components/ImportSystemConfig.vue +234 -0
  619. package/src/components/InterfaceSubList.vue +295 -0
  620. package/src/components/JsPanel.vue +111 -0
  621. package/src/components/LanguageImportPage.vue +601 -0
  622. package/src/components/LanguageSetting.vue +451 -0
  623. package/src/components/List/LinkItem.vue +98 -0
  624. package/src/components/List/List.vue +17 -0
  625. package/src/components/List/ListItem.vue +52 -0
  626. package/src/components/MenuTreeFind.vue +128 -0
  627. package/src/components/MessageList.vue +198 -0
  628. package/src/components/MessageRuleFormItem.vue +60 -0
  629. package/src/components/MessageRuleReceiverFormItem.vue +179 -0
  630. package/src/components/MessageTemplate.vue +949 -0
  631. package/src/components/MetaList.vue +108 -0
  632. package/src/components/Nav.vue +604 -0
  633. package/src/components/NavFormCatalogItem.vue +9 -0
  634. package/src/components/NumList.vue +108 -0
  635. package/src/components/OperateLog.vue +168 -0
  636. package/src/components/PageCatalog.vue +458 -0
  637. package/src/components/PageChart.vue +339 -0
  638. package/src/components/PageSwipes.vue +234 -0
  639. package/src/components/PersonFormItem.vue +94 -0
  640. package/src/components/Popup.vue +393 -0
  641. package/src/components/PrintFormList.vue +529 -0
  642. package/src/components/PublishEntity.vue +87 -0
  643. package/src/components/RelyFieldTreeFind.vue +57 -0
  644. package/src/components/ReportFormList.vue +247 -0
  645. package/src/components/ReportList.vue +647 -0
  646. package/src/components/RightSubList.vue +256 -0
  647. package/src/components/RoleAddUser.vue +56 -0
  648. package/src/components/RoleApplicationCard.vue +299 -0
  649. package/src/components/RoleApplicationList.vue +766 -0
  650. package/src/components/RoleApplicationSet.vue +845 -0
  651. package/src/components/Search.vue +272 -0
  652. package/src/components/ServiceFormItem.vue +35 -0
  653. package/src/components/SnapshotDataList.vue +78 -0
  654. package/src/components/SystemAdminList.vue +497 -0
  655. package/src/components/SystemFormItem.vue +125 -0
  656. package/src/components/SystemNav.vue +29 -0
  657. package/src/components/TaskNumCard.vue +26 -0
  658. package/src/components/TimerRuleFormItem.vue +227 -0
  659. package/src/components/TodoList.vue +424 -0
  660. package/src/components/UpdateSystemConfig.vue +200 -0
  661. package/src/components/UserCard.vue +110 -0
  662. package/src/components/UserFind.vue +702 -0
  663. package/src/components/UserFormItem.vue +762 -0
  664. package/src/components/UserList.vue +19 -0
  665. package/src/components/UserManage.vue +758 -0
  666. package/src/components/UserRoleList.vue +497 -0
  667. package/src/components/ValidateRuleFormItem.vue +90 -0
  668. package/src/components/ViewFieldDefine.vue +703 -0
  669. package/src/components/WikiSpaceList.vue +270 -0
  670. package/src/components/WikiWorkbench.vue +717 -0
  671. package/src/components/authorization/AddApiPermiss.vue +179 -0
  672. package/src/components/authorization/AddAuthorization.vue +135 -0
  673. package/src/components/authorization/AddEntityFind.vue +68 -0
  674. package/src/components/authorization/AddNoApi.vue +143 -0
  675. package/src/components/authorization/AddRoleScope.vue +291 -0
  676. package/src/components/authorization/AiRolePlan.vue +751 -0
  677. package/src/components/authorization/ApiShareOtherList.vue +353 -0
  678. package/src/components/authorization/ApiSystemList.vue +314 -0
  679. package/src/components/authorization/AuthorizationInterface.vue +668 -0
  680. package/src/components/authorization/AuthorizationRoleSystem.vue +713 -0
  681. package/src/components/authorization/EntityConstraintFormItem.vue +257 -0
  682. package/src/components/authorization/OtherShareApiList.vue +248 -0
  683. package/src/components/authorization/PermissCommonRoleTabs.vue +122 -0
  684. package/src/components/authorization/PermissRoleAuthorization.vue +1097 -0
  685. package/src/components/authorization/PermissRoleTabs.vue +121 -0
  686. package/src/components/authorization/RoleLevel.vue +113 -0
  687. package/src/components/authorization/RoleLevelScope.vue +247 -0
  688. package/src/components/authorization/SystemAddNoApi.vue +139 -0
  689. package/src/components/card/CardList.vue +78 -0
  690. package/src/components/card/CardListItem.vue +147 -0
  691. package/src/components/card/Title.vue +38 -0
  692. package/src/components/custom-bpmn/CustomContextPad.js +58 -0
  693. package/src/components/custom-bpmn/CustomPalette.js +1 -0
  694. package/src/components/custom-bpmn/CustomRenderer.js +1 -0
  695. package/src/components/custom-bpmn/CustomRendererBpmn.js +84 -0
  696. package/src/components/custom-bpmn/PropertiesView.vue +7879 -0
  697. package/src/components/custom-bpmn/components/AiModel.vue +373 -0
  698. package/src/components/custom-bpmn/components/Api.vue +290 -0
  699. package/src/components/custom-bpmn/components/BatchOperation.vue +145 -0
  700. package/src/components/custom-bpmn/components/Copy.vue +440 -0
  701. package/src/components/custom-bpmn/components/DataTransform.vue +260 -0
  702. package/src/components/custom-bpmn/components/Demo.vue +64 -0
  703. package/src/components/custom-bpmn/components/EditDiv.vue +466 -0
  704. package/src/components/custom-bpmn/components/GenScope.vue +252 -0
  705. package/src/components/custom-bpmn/components/GlobalParamsTree.vue +61 -0
  706. package/src/components/custom-bpmn/components/Knowledges.vue +182 -0
  707. package/src/components/custom-bpmn/components/Login.vue +372 -0
  708. package/src/components/custom-bpmn/components/MessageQueue.vue +167 -0
  709. package/src/components/custom-bpmn/components/MetaSelect.vue +136 -0
  710. package/src/components/custom-bpmn/components/NumStatistic.vue +245 -0
  711. package/src/components/custom-bpmn/components/ObjectTransform.vue +454 -0
  712. package/src/components/custom-bpmn/components/OutPut.vue +412 -0
  713. package/src/components/custom-bpmn/components/ParamsMachining.vue +644 -0
  714. package/src/components/custom-bpmn/components/ParamsOutput.vue +130 -0
  715. package/src/components/custom-bpmn/components/ProcessAudit.vue +443 -0
  716. package/src/components/custom-bpmn/components/SingleMultipleFind.vue +637 -0
  717. package/src/components/custom-bpmn/components/TestDialog.vue +1068 -0
  718. package/src/components/custom-bpmn/img/chaxun.png +0 -0
  719. package/src/components/custom-bpmn/img/fasong.png +0 -0
  720. package/src/components/custom-bpmn/img/gengxin.png +0 -0
  721. package/src/components/custom-bpmn/img/jiagong.png +0 -0
  722. package/src/components/custom-bpmn/img/jiekou.png +0 -0
  723. package/src/components/custom-bpmn/img/shanchu.png +0 -0
  724. package/src/components/custom-bpmn/img/tongbu.png +0 -0
  725. package/src/components/custom-bpmn/img/xinzeng.png +0 -0
  726. package/src/components/custom-bpmn/img/xunhuanend.png +0 -0
  727. package/src/components/custom-bpmn/img/xunhuanstart.png +0 -0
  728. package/src/components/custom-bpmn/img/ywgz.png +0 -0
  729. package/src/components/custom-bpmn/index.js +1 -0
  730. package/src/components/custom-bpmn/palette.js +18 -0
  731. package/src/components/custom-bpmn/util.js +5 -0
  732. package/src/components/dashboard-create.js +17 -0
  733. package/src/components/entity-relation-diagram/Er.vue +360 -0
  734. package/src/components/entity-relation-diagram/renderErNode.js +32 -0
  735. package/src/components/expand/AddForm.vue +91 -0
  736. package/src/components/expand/AddFormItem.vue +150 -0
  737. package/src/components/filter/Filter.vue +739 -0
  738. package/src/components/filter/FilterItem.vue +516 -0
  739. package/src/components/hall/AppCollect.vue +190 -0
  740. package/src/components/hall/AppList.vue +513 -0
  741. package/src/components/hall/AppVisitRecord.vue +171 -0
  742. package/src/components/hall/Banner.vue +21 -0
  743. package/src/components/hall/ServiceCard.vue +204 -0
  744. package/src/components/hall/UserCard.vue +114 -0
  745. package/src/components/permiss/AddApi.vue +119 -0
  746. package/src/components/permiss/AddNoEntityApi.vue +131 -0
  747. package/src/components/permiss/AddSystemPermiss.vue +107 -0
  748. package/src/components/permiss/AllocateRole.vue +107 -0
  749. package/src/components/permiss/ApiSubList.vue +193 -0
  750. package/src/components/permiss/CommonRoleMenu.vue +631 -0
  751. package/src/components/permiss/FieldScope.vue +138 -0
  752. package/src/components/permiss/PermissManage.vue +96 -0
  753. package/src/components/permiss/RoleAppList.vue +52 -0
  754. package/src/components/permiss/RoleMenu.vue +547 -0
  755. package/src/components/permiss/RoleSubList.vue +263 -0
  756. package/src/components/permiss/jurisdiction.vue +425 -0
  757. package/src/components/process-healthcheck/HealthcheckChart.vue +529 -0
  758. package/src/components/process-healthcheck/HealthcheckRenderer.js +41 -0
  759. package/src/components/process-healthcheck/index.js +8 -0
  760. package/src/components/report/Config.vue +1654 -0
  761. package/src/components/report/Design.vue +3528 -0
  762. package/src/components/report/StatList.vue +234 -0
  763. package/src/components/right/EntityOtherSystemList.vue +73 -0
  764. package/src/components/right/SystemInterfaceList.vue +413 -0
  765. package/src/components/right/SystemList.vue +848 -0
  766. package/src/components/upLoad.vue +69 -0
  767. package/src/components/viewport/LookViewList.vue +28 -0
  768. package/src/components/viewport/ViewAddForm.vue +151 -0
  769. package/src/components/viewport/ViewDefineList.vue +53 -0
  770. package/src/components/viewport/ViewFiedList.vue +646 -0
  771. package/src/components/viewport/ViewScope.vue +112 -0
  772. package/src/components/wiki-workbench/WikiCites.vue +234 -0
  773. package/src/components/wiki-workbench/WikiIntake.vue +505 -0
  774. package/src/components/wiki-workbench/WikiJobs.vue +175 -0
  775. package/src/components/wiki-workbench/WikiRevisions.vue +208 -0
  776. package/src/components/wiki-workbench/WikiSpaceSettings.vue +137 -0
  777. package/src/components/wiki-workbench/codes.js +43 -0
  778. package/src/components/wiki-workbench/index.js +15 -0
  779. package/src/index.js +20 -0
  780. package/src/popup.js +86 -0
  781. package/src/public-components.js +8 -0
  782. package/src/remote.entry.js +42 -0
  783. package/src/route-components.js +8 -0
  784. package/src/system.component.index.js +3 -0
  785. package/src/system.component.js +46 -0
  786. package/src/system.component.lazy.js +68 -0
  787. package/src/system.component.visual.js +18 -0
  788. package/src/views/Add.vue +827 -0
  789. package/src/views/AiToolManager.vue +2372 -0
  790. package/src/views/App.vue +53 -0
  791. package/src/views/AppRoleSelect.vue +334 -0
  792. package/src/views/BatchEdit.vue +238 -0
  793. package/src/views/Bpmn.vue +1713 -0
  794. package/src/views/EntityCheckPage.vue +52 -0
  795. package/src/views/EntityDetailPage.vue +79 -0
  796. package/src/views/EntityEditPage.vue +13 -0
  797. package/src/views/EntitySubListPage.vue +44 -0
  798. package/src/views/EntityTreePage.vue +37 -0
  799. package/src/views/Error.vue +63 -0
  800. package/src/views/ExcelDesign.vue +3350 -0
  801. package/src/views/ExcelPreviewPage.vue +590 -0
  802. package/src/views/ExportFilePage.vue +19 -0
  803. package/src/views/ExportPage.vue +19 -0
  804. package/src/views/FormDesign.vue +2301 -0
  805. package/src/views/I18nWorkbench.vue +508 -0
  806. package/src/views/ImportFilePage.vue +19 -0
  807. package/src/views/ImportPage.vue +19 -0
  808. package/src/views/MEntityListPage.vue +83 -0
  809. package/src/views/MEntitySubListPage.vue +44 -0
  810. package/src/views/MinePage.vue +18 -0
  811. package/src/views/Module.vue +210 -0
  812. package/src/views/PageAttributeTreePage.vue +437 -0
  813. package/src/views/PageConfig.vue +259 -0
  814. package/src/views/Permission.vue +695 -0
  815. package/src/views/PersonalInfo.vue +693 -0
  816. package/src/views/QyWechat.vue +69 -0
  817. package/src/views/ReportFormListPage.vue +82 -0
  818. package/src/views/TaskPage.vue +199 -0
  819. package/src/views/WikiBinding.vue +740 -0
  820. package/src/views/client/AddForm.vue +64 -0
  821. package/src/views/client/AppMarket.vue +380 -0
  822. package/src/views/client/ClientIndex.vue +261 -0
  823. package/src/views/client/ClientModuleIndexPage.vue +35 -0
  824. package/src/views/client/CopySystem.vue +179 -0
  825. package/src/views/client/CreateAppFormItem.vue +285 -0
  826. package/src/views/client/CreateMethod.vue +114 -0
  827. package/src/views/client/InstallSystem.vue +295 -0
  828. package/src/views/client/ManageList.vue +178 -0
  829. package/src/views/client/OpenClientManage.vue +54 -0
  830. package/src/views/client/OpenSystemManage.vue +57 -0
  831. package/src/views/client/PageTabsCyclic.vue +121 -0
  832. package/src/views/client/SelfBuiltSystem.vue +497 -0
  833. package/src/views/client/StandardProduct.vue +325 -0
  834. package/src/views/client/SystemAppAccredit.vue +607 -0
  835. package/src/views/client/SystemAppManager.vue +967 -0
  836. package/src/views/client/SystemManager.vue +998 -0
  837. package/src/views/i18n/I18nAiTaskHistoryDialog.vue +173 -0
  838. package/src/views/i18n/I18nPublishDialog.vue +360 -0
  839. package/src/views/i18n/I18nTranslationList.vue +195 -0
  840. package/src/views/i18n/i18n-workbench-text.js +7 -0
  841. package/src/views/layout/CardList.vue +122 -0
  842. package/src/views/layout/Grid.vue +176 -0
  843. package/src/views/match/AddTargetField.vue +136 -0
  844. package/src/views/match/MatchAddFormItem.vue +87 -0
  845. package/src/views/match/conversion.vue +740 -0
  846. package/src/views/match/customize.vue +374 -0
  847. package/src/views/match/fieldMatch.vue +734 -0
  848. package/src/views/report/AddFormItem.vue +66 -0
  849. package/src/views/report/DesignReport.vue +1229 -0
  850. package/src/views/report/ReportTreeFind.vue +195 -0
  851. package/types/dept-find.d.ts +1 -0
  852. package/types/entity-tree-manage.d.ts +1 -0
  853. package/types/excel-preview-page.d.ts +1 -0
  854. package/types/header-nav.d.ts +1 -0
  855. package/types/index.d.ts +14 -0
  856. package/types/page-catalog.d.ts +1 -0
  857. package/types/popup.d.ts +2 -0
  858. package/types/report-form-list-page.d.ts +1 -0
  859. package/types/report-form-list.d.ts +1 -0
  860. package/types/route-components.d.ts +1 -0
  861. package/types/user-find.d.ts +1 -0
@@ -0,0 +1,3528 @@
1
+ <template>
2
+ <div class="container" ref="container" :style="$component.style">
3
+ <div class="report-header">
4
+ <div class="report-title">
5
+ <i class="report-back el-icon-arrow-left" @click="backPage"></i>
6
+ <span class="report-name">
7
+ <span v-if="!editName">{{reportInfo.NAME}}</span>
8
+ <el-input v-else v-model="reportInfo.NAME" size="small" @change="setReportName"></el-input>
9
+ <i v-if="!editName" class="el-icon-edit-outline" @click="editName=!editName"></i>
10
+ <i v-else class="el-icon-circle-check" @click="setReportName"></i>
11
+ </span>
12
+ <!-- <el-button type="primary" link icon="el-icon-setting">设置</el-button> -->
13
+ </div>
14
+ <div class="report-operate">
15
+ <el-button type="primary" link @click="globalSetting=true">全局设置</el-button>
16
+ <el-button size="default" @click="exportReport" :loading="exportLoading">{{exportLoading? '正在导出,请稍后...' : '导出'}}</el-button>
17
+ <el-button size="default" type="primary" @click="previewChart=!previewChart">预览</el-button>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="report-bar">
22
+ <span class="report-bar__item">
23
+ 统计对象:{{reportInfo['OBJECT#']}}
24
+ </span>
25
+ <span class="report-bar__item" v-if="reportInfo['OBJECT_VIEW#']">
26
+ 统计对象视图:{{reportInfo['OBJECT_VIEW#']}}
27
+ </span>
28
+ <span class="report-bar__item">
29
+ 报表类型:
30
+ <el-popover
31
+ placement="top-start"
32
+ title=""
33
+ width="280"
34
+ trigger="click"
35
+ >
36
+ <ul class="report-type__list">
37
+ <li :class="{'report-type__item': true, active: reportInfo.TYPE===reportType.type && reportInfo.CHART_TYPE===reportType.chartType}" v-for="reportType in reportTypeList" :key="reportType.chartType" @click="setReportType(reportType)">
38
+ <i :class="reportType.icon"></i>
39
+ <span>{{reportType.text}}</span>
40
+ </li>
41
+ </ul>
42
+ <template v-slot:reference><el-input class="reprot-bar__type" prefix-icon="el-icon-date" suffix-icon="el-icon-arrow-down" size="small" :model-value="reportInfo.TYPE==='1'? '统计表': reportInfo['CHART_TYPE#']" readonly></el-input></template>
43
+ </el-popover>
44
+ </span>
45
+ <span class="report-bar__item">
46
+ 统计范围:
47
+ <span class="report-scope__text" :title="scopeText">{{scopeText}}</span>
48
+ <el-button type="primary" link @click="filterDrawer=!filterDrawer">设置</el-button>
49
+ <epx-scope-drawer v-model:visible="filterDrawer" v-model="scopeParams" ref="filterDrawer" :modeType="['FIXED_VALUE', 'SYSTEM_VARIABLE', 'DYNAMIC_VALUE', 'DEFINED']" :metaId="reportInfo.OBJECT" />
50
+ </span>
51
+ </div>
52
+ <div class="report-design">
53
+ <div class="report-left-container" >
54
+ <i class="report-left__foldicon el-icon-s-unfold" v-show="foldFieldContainer" @click="foldFieldContainer=false"></i>
55
+ <div :class="['report-left__inner', { 'report-left__inner--fold': foldFieldContainer }]">
56
+ <div class="report-field" v-if="reportInfo.CHART_TYPE!=='scatter'">
57
+ <div class="report-field__title">
58
+ <span>字段</span>
59
+ <i class="report-left__foldicon el-icon-s-fold" @click="foldFieldContainer=true"></i>
60
+ </div>
61
+ <div class="report-field__container">
62
+ <el-button-group class="field-tab">
63
+ <el-button :type="showFieldType==='entity'? 'primary': 'default'" size="small" @click="showFieldType='entity'">对象字段</el-button>
64
+ <el-button :type="showFieldType==='custom'? 'primary': 'default'" size="small" @click="showFieldType='custom'">自定义字段</el-button>
65
+ </el-button-group>
66
+ <template v-if="showFieldType==='entity'">
67
+ <div class="report-entity-field" v-if="reportStatisFields.entityFields">
68
+ <div class="report-entity-field__inner">
69
+ <div class="report-field__header">
70
+ <el-input v-model="searchEntityFieldText" size="default" placeholder="请输入"></el-input>
71
+ </div>
72
+ <ul class="report-field__list">
73
+ <li :class="['report-field__item', {'report-field__item--meta': field.type==='meta', 'report-field__item--sub': field.relationType==='1' }]" v-for="field in showEntityFields" :key="field.id" @dragstart="dragstart(field)" :draggable="field.type!=='meta'? 'true' : 'false'">
74
+ <p class="report-field__name">
75
+ <i :class="['report-field__foldicon', {'report-field__foldicon--open':openField[field.code] },'el-icon-caret-right']" v-if="field.children && field.children.length>0" @click="openField[field.code] = !openField[field.code]"></i>
76
+ <span :title="field.text">{{field.text}}</span>
77
+ <i class="report-field__handler el-icon-rank"></i>
78
+ </p>
79
+ <ul class="report-field__list" v-show="openField[field.code]" v-if="field.children && field.children.length>0">
80
+ <li class="report-field__item report-field__subitem" v-for="child in field.children" :key="child.id" @dragstart.stop="dragstart(child)" :draggable="child.type!=='meta'? 'true' : 'false'">
81
+ <p class="report-field__name">
82
+ <i :class="['report-field__foldicon', {'report-field__foldicon--open':openField[child.code] },'el-icon-caret-right']" v-if="child.children && child.children.length>0" @click="openField[child.code] = !openField[child.code]"></i>
83
+ <span :title="child.text">{{child.text}}</span>
84
+ <i class="report-field__handler el-icon-rank"></i>
85
+ </p>
86
+ <ul class="report-field__list" v-show="openField[child.code]" v-if="child.children && child.children.length>0">
87
+ <li class="report-field__item report-field__subitem" v-for="child2 in child.children" :key="child2.id" @dragstart.stop="dragstart(child2)" :draggable="child2.type!=='meta'? 'true' : 'false'">
88
+ <p class="report-field__name">
89
+ <span :title="child2.text">{{child2.text}}</span>
90
+ <i class="report-field__handler el-icon-rank"></i>
91
+ </p>
92
+ </li>
93
+ </ul>
94
+ </li>
95
+ </ul>
96
+ </li>
97
+ </ul>
98
+ <div class="report-field__footer">
99
+ <el-checkbox v-model="showLogField">日志字段</el-checkbox>
100
+ <el-checkbox v-model="showSubField">子集字段</el-checkbox>
101
+ </div>
102
+ </div>
103
+ <!-- </draggable> -->
104
+ </div>
105
+ </template>
106
+ <template v-else>
107
+ <div class="report-custom-field">
108
+ <ul class="report-field__list">
109
+ <li class="report-field__item" v-for="field in reportStatisFields.customFields" :key="field.id" @dragstart="dragstart(field, 'custom')" draggable="true">
110
+ <p class="report-field__name">
111
+ <span :title="field.text">{{field.text }}</span>
112
+ <span class="report-stat__operate">
113
+ <el-button type="primary" link icon="el-icon-edit" @click="editCustomField(field)"></el-button>
114
+ <el-popconfirm
115
+ title="确认删除?"
116
+ @confirm="deleteCustomField(field)"
117
+ >
118
+ <template v-slot:reference><el-button class="delete-icon" type="primary" link icon="el-icon-delete"></el-button></template>
119
+ </el-popconfirm>
120
+ </span>
121
+ </p>
122
+
123
+ </li>
124
+ </ul>
125
+ <div class="report-field__operate">
126
+ <el-button type="primary" link @click="addFieldDialog=true; addFieldForm={}">添加自定义字段</el-button>
127
+ </div>
128
+ </div>
129
+ </template>
130
+ </div>
131
+ </div>
132
+ <div :class="['report-index', {'is-only': reportInfo.CHART_TYPE==='scatter'}]">
133
+ <div class="report-field__title">
134
+ <span>指标</span>
135
+ <i v-if="reportInfo.CHART_TYPE==='scatter'" class="report-left__foldicon el-icon-s-fold" @click="foldFieldContainer=true"></i>
136
+ </div>
137
+ <div class="report-index__content">
138
+ <template v-if="reportStatisFields.statisIndexFields">
139
+ <draggable
140
+ tag="ul"
141
+ class="report-field__list"
142
+ :list="reportStatisFields.statisIndexFields"
143
+ :sort="false"
144
+ :group="{ name: 'stat', pull: 'clone', put: false }"
145
+ :clone="el=>cloneField(el, '1')"
146
+ filter=".report-field__item--meta"
147
+ >
148
+ <li :class="['report-field__item', { 'report-field__item--meta': field.type==='meta', 'report-field__item--sub': field.relationType==='1' }]" v-for="field in reportStatisFields.statisIndexFields" :key="field.id" >
149
+ <p class="report-field__name">
150
+ <i :class="['report-field__foldicon', {'report-field__foldicon--open':openField['index-'+field.code] },'el-icon-caret-right']" v-if="field.children && field.children.length>0" @click="openField['index-' + field.code] = !openField['index-'+field.code]"></i>
151
+ <span :title="field.text">{{field.text}}</span>
152
+ <i class="report-field__handler el-icon-rank"></i>
153
+ </p>
154
+ <draggable
155
+ tag="ul"
156
+ class="report-field__list"
157
+ :list="field.children"
158
+ :sort="false"
159
+ :group="{ name: 'stat', pull: 'clone', put: false }"
160
+ :clone="el=>cloneField(el, '1')"
161
+ filter=".report-field__item--meta"
162
+ v-show="openField['index-'+field.code]"
163
+ >
164
+ <li :class="['report-field__item', 'report-field__subitem', { 'report-field__item--meta': child.dataType==='object'} ]" v-for="child in field.children" :key="child.id" >
165
+ <p class="report-field__name" >
166
+ <i :class="['report-field__foldicon', {'report-field__foldicon--open':openField['index-'+child.code] },'el-icon-caret-right']" v-if="child.children && child.children.length>0" @click="openField['index-' + child.code] = !openField['index-'+child.code]"></i>
167
+ <span :title="child.text">{{child.text}}</span>
168
+ <i class="report-field__handler el-icon-rank"></i>
169
+ </p>
170
+ <draggable
171
+ tag="ul"
172
+ class="report-field__list"
173
+ :list="child.children"
174
+ :sort="false"
175
+ :group="{ name: 'stat', pull: 'clone', put: false }"
176
+ :clone="el=>cloneField(el, '1')"
177
+ v-show="openField['index-'+child.code]"
178
+ >
179
+ <li :class="['report-field__item', 'report-field__subitem']" v-for="childItem in child.children" :key="childItem.id" >
180
+ <p class="report-field__name">
181
+ <span :title="childItem.text">{{childItem.text}}</span>
182
+ <i class="report-field__handler el-icon-rank"></i>
183
+ </p>
184
+ </li>
185
+ </draggable>
186
+ </li>
187
+ </draggable>
188
+ </li>
189
+ </draggable>
190
+ </template>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ <div class="report-stat">
196
+ <div class="report-stat-container" v-if="reportInfo.CHART_TYPE!=='scatter'">
197
+ <div class="report-stat__title">
198
+ <span>分类维度</span>
199
+ <el-button type="primary" link @click="showAddOptionDialog('1')">+ 添加统计项</el-button>
200
+ </div>
201
+ <div class="report-stat__content" ref="rowStat" v-if="rowList" @dragover="ev=>allowDrop(ev, '1')" @drop="ev=>drop(ev, '1')">
202
+ <epx-report-stat-list
203
+ v-model="rowList"
204
+ position="1"
205
+ :dropType="dropType"
206
+ :reportId="$query.id"
207
+ :dropElementId="dropElementId"
208
+ @change="refreshData"
209
+ @dragstart="dragStatItem"
210
+ @add="addStatItem" @edit="editStatItem" @delete="deleteStatItem" />
211
+ <div class="drop-indicator" @dragover.stop :style="{display: dropPosition && dropType==='1'? 'block': 'none' ,top: dropPosition + 'px' }"></div>
212
+ <div class="stat-null-data" v-if="rowList.length===0">
213
+ <i class="epx-icon-color-kong"></i>
214
+ <p>您可以从左侧列表拖拽所需的统计字段, 也可以手动添加统计项</p>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ <div class="report-stat-container" v-if="reportInfo.CHART_TYPE!=='pie' && reportInfo.CHART_TYPE!=='circularPie' && reportInfo.CHART_TYPE!=='funnel' && reportInfo.CHART_TYPE!=='wordcloud'">
219
+ <div class="report-stat__title" >
220
+ <span>统计维度</span>
221
+ <el-button type="primary" link @click="showAddOptionDialog('2')">+ 添加统计项</el-button>
222
+ </div>
223
+ <div class="report-stat__content" ref="columnStat" v-if="columnList" @dragover="e=>allowDrop(e, '2')" @drop="e=>drop(e, '2')">
224
+ <epx-report-stat-list
225
+ v-model="columnList"
226
+ :dropElementId="dropElementId"
227
+ position="2"
228
+ :dropType="dropType"
229
+ @dragstart="dragStatItem"
230
+ :reportId="$query.id"
231
+ @change="refreshData"
232
+ @add="addStatItem"
233
+ @edit="editStatItem"
234
+ @delete="deleteStatItem"
235
+ />
236
+ <div class="stat-null-data" v-if="columnList.length===0">
237
+ <i class="epx-icon-color-kong"></i>
238
+ <p>您可以从左侧列表拖拽所需的统计字段, 也可以手动添加统计项</p>
239
+ </div>
240
+ <div class="drop-indicator" :style="{display: dropPosition && dropType==='2'? 'block': 'none' ,top: dropPosition + 'px' }"></div>
241
+ </div>
242
+ </div>
243
+ <div class="report-stat-container report-stat-index" v-if="reportInfo.CHART_TYPE!=='scatter'">
244
+ <div class="report-stat__title">
245
+ <span>统计指标</span>
246
+ <el-button type="primary" link @click="openAddStatIndexDialog">+ 添加指标</el-button>
247
+ </div>
248
+ <div class="report-stat__content">
249
+ <draggable
250
+ tag="ul"
251
+ class="report-stat__list"
252
+ :list="statisIndexList"
253
+ :group="{ name: 'stat', pull: false }"
254
+ @change="changeStatIndex"
255
+ >
256
+ <li :class="['report-stat__item']" v-for="index in statisIndexList" :key="index.ID">
257
+ <p class="report-stat__name">
258
+ <span class="report-stat__text" :title="index.NAME || index.INDEX_NAME">{{index.NAME || index.INDEX_NAME}}</span>
259
+ <span class="report-stat__operate">
260
+ <el-button type="primary" link icon="el-icon-edit" @click="editStatIndex(index)"></el-button>
261
+ <el-popconfirm
262
+ title="确认删除?"
263
+ @confirm="deleteStatIndex(index)"
264
+ >
265
+ <template v-slot:reference><el-button class="delete-icon" type="primary" link icon="el-icon-delete"></el-button></template>
266
+ </el-popconfirm>
267
+ </span>
268
+ </p>
269
+ </li>
270
+ </draggable>
271
+ </div>
272
+ </div>
273
+ </div>
274
+ <div class="report-view">
275
+ <div class="null-data" v-if="rowList && columnList && rowList.length===0 && columnList.length===0 && statisIndexList.length===0">
276
+ <i class="epx-icon-color-kong"></i>
277
+ <span>请先设置统计维度</span>
278
+ </div>
279
+ <template v-else-if="chartComponent">
280
+ <!-- 统计图配置 -->
281
+ <epx-report-config v-if="reportInfo.TYPE==='2'" :report="reportInfo" @change="refreshChart"></epx-report-config>
282
+ <div class="report-view__chart" v-if="showChart">
283
+ <epx-page @refreshData="refreshData" @update="v=>updateCondition(v)" :designMode="true" metaId="FM_REPORT_BASE" :inline="true" :component="chartComponent" :reportInfo="reportInfo" :init-config='chartConfig'></epx-page>
284
+ </div>
285
+ </template>
286
+ </div>
287
+ </div>
288
+ <!-- 全局设置 -->
289
+ <el-drawer
290
+ title="全局设置"
291
+ :size="520"
292
+ v-model="globalSetting"
293
+ :append-to-body="true"
294
+ direction="rtl"
295
+ :with-header="false"
296
+ >
297
+ <div class="drawer__header">
298
+ <span>全局设置</span>
299
+ <i class="el-icon-close" @click="globalSetting=false"></i>
300
+ </div>
301
+ <div class="attribute-pane__content" v-if="globalSetting">
302
+ <epx-table-form class="form-content" ref="form" metaId="FM_REPORT_BASE" :fieldsConfigs="fieldsConfigs" :fieldRelation="fieldRelation" v-model="formData" :column="1" label-align="left"></epx-table-form>
303
+ <div :style="{textAlign: 'center'}">
304
+ <el-button @click="globalSetting=false">取消</el-button>
305
+ <el-button type="primary" @click="updateForm">确定</el-button>
306
+ </div>
307
+ </div>
308
+ </el-drawer>
309
+ <!-- 预览 -->
310
+ <el-dialog
311
+ title="报表预览"
312
+ v-model="previewChart"
313
+ :append-to-body="true"
314
+ width="80%"
315
+ >
316
+ <epx-page v-if="chartComponent && showChart" @refreshData="refreshData" @update="v=>updateCondition(v)" :designMode="true" :metaId="$metaId" :inline="true" :component="chartComponent" :reportInfo="reportInfo" :init-config='chartConfig'></epx-page>
317
+ </el-dialog>
318
+ <!-- 统计字段编辑 -->
319
+ <el-dialog
320
+ class="custom-dialog"
321
+ title="统计字段设置"
322
+ v-model="editEntityFieldDialog"
323
+ :append-to-body="true"
324
+ width="560px"
325
+ >
326
+ <div class="custom-dialog__content" v-if="editEntityFieldDialog">
327
+ <el-tabs v-model="statFieldTabs" :class="{'hide-tabs': editFieldForm.POSITION!=='2' }">
328
+ <el-tab-pane label="统计字段" name="stat">
329
+ <div class="add-field-item">
330
+ <label for="">统计字段:</label>
331
+ <div class="add-field-input">
332
+ <span>{{editFieldForm['NAME']}}</span>
333
+ <!-- 国际化设置 -->
334
+ <el-popover
335
+ placement="bottom"
336
+ width="330"
337
+ trigger="click"
338
+ >
339
+ <template v-slot:reference><i class="language-icon epx-icon-diqiu"></i></template>
340
+ <div class="language">
341
+ <div class="language-item" v-for="language in languageList" :key="language.id">
342
+ <label class="language-item__label" for="">{{language.name}}:</label>
343
+ <el-input class="language-item__input" size="default" :model-value="editFieldForm.NAME_I18N[language.id]" @update:model-value="v=>editFieldLanguage(language, v)" :placeholder="$t('please enter')"></el-input>
344
+ </div>
345
+ </div>
346
+ </el-popover>
347
+ </div>
348
+ </div>
349
+ <div class="add-field-item" v-if="reportInfo.TYPE==='1'">
350
+ <label for="">是否合计项:</label>
351
+ <div class="add-field-input">
352
+ <el-switch
353
+ v-model="editFieldForm.TOTAL_ITEM_FLAG"
354
+ active-value="1"
355
+ inactive-value="0"
356
+ >
357
+ </el-switch>
358
+ </div>
359
+ </div>
360
+ <div class="add-field-item" v-if="reportInfo.TYPE==='1' && editFieldForm.TOTAL_ITEM_FLAG==='1'">
361
+ <label for="">合计项位置:</label>
362
+ <div class="add-field-input">
363
+ <epx-radio v-model="editFieldForm.TOTAL_ITEM_POSITION" :fieldConfigs="{codeKey: 'TOTAL_ITEM_POSITION', state: 'EDIT'}"></epx-radio>
364
+ </div>
365
+ </div>
366
+ <div class="add-field-item" v-if="editFieldForm.POSITION==='2'">
367
+ <label class="add-field-item__label" for="">是否置空:</label>
368
+ <div class="add-field-input">
369
+ <el-switch
370
+ v-model="editFieldForm.IS_SET_NULL"
371
+ active-value="1"
372
+ inactive-value="0"
373
+ >
374
+ </el-switch>
375
+ </div>
376
+ </div>
377
+ <template v-if="editFieldForm.INDEX_FLAG==='1'">
378
+ <div class="add-field-item" >
379
+ <label class="is-required" for="">标题:</label>
380
+ <div class="add-field-input">
381
+ <el-input size="small" v-model="editFieldForm.NAME"></el-input>
382
+ </div>
383
+ </div>
384
+ <div class="add-field-item" >
385
+ <label for="">计算方式:</label>
386
+ <div class="add-field-input">
387
+ <epx-radio v-model="editFieldForm.MODE" :fieldConfigs="{codeKey: 'FM_REPORT_TIME_MODE', state: 'EDIT'}"></epx-radio>
388
+ </div>
389
+ </div>
390
+ </template>
391
+ <template v-else-if="statField">
392
+ <div class="add-field-item" v-if="statField.dataType==='object' || statField.dataType==='user' || statField.dataType==='dept'">
393
+ <label for="">排序方式:</label>
394
+ <div class="add-field-input add-field-input__flex">
395
+ <el-select class="add-field__order" v-model="editFieldForm.ORDER_FIELD" size="small" clearable>
396
+ <el-option v-for="item in getMetaFields(statField.relatedEntity)" :key="item.attriName" :label="item.attriLabel" :value="item.attriName"></el-option>
397
+ </el-select>
398
+ <el-select class="add-field__order" v-model="editFieldForm.ORDER_FIELD_SORT" size="small" clearable :style="{width: '100px'}">
399
+ <el-option label="升序" value="ASC"></el-option>
400
+ <el-option label="逆序" value="DESC"></el-option>
401
+ </el-select>
402
+ </div>
403
+ </div>
404
+ <div class="add-field-item" v-if="statField.dataType==='text' ">
405
+ <label for="">排序方式:</label>
406
+ <div class="add-field-input add-field-input__flex">
407
+ <el-select class="add-field__order" v-model="editFieldForm.ORDER_FIELD_SORT" size="small" clearable :style="{width: '100px'}">
408
+ <el-option label="升序" value="ASC"></el-option>
409
+ <el-option label="逆序" value="DESC"></el-option>
410
+ </el-select>
411
+ </div>
412
+ </div>
413
+ <div class="add-field-item" v-if="statField.dataType==='object' || statField.dataType==='user' || statField.dataType==='dept'">
414
+ <label for="">对象范围:</label>
415
+ <div class="add-field-input add-field-input__flex">
416
+ <epx-form-scope v-model="editFieldForm.OBJECT_FIELD_SCOPE" :metaId="statField.relatedEntity" :fieldConfigs="{attriName: statField.code, attriLabel: statField.text, state: 'EDIT'}"></epx-form-scope>
417
+ </div>
418
+ </div>
419
+ <div class="add-field-item" v-if="statField.dataType==='object' || statField.dataType==='user' || statField.dataType==='dept'">
420
+ <label for="">是否树形:</label>
421
+ <div class="add-field-input">
422
+ <el-switch
423
+ v-model="editFieldForm.IS_SHOW_TREE"
424
+ active-value="1"
425
+ inactive-value="0"
426
+ >
427
+ </el-switch>
428
+ </div>
429
+ </div>
430
+ <div class="add-field-item" v-else-if="statField.dataType==='date'">
431
+ <label for="">分组方式:</label>
432
+ <div class="add-field-input">
433
+ <epx-radio v-model="editFieldForm.DATE_GROUP_TYPE" :fieldConfigs="{codeKey: 'DATE_GROUP_TYPE', state: 'EDIT'}"></epx-radio>
434
+ </div>
435
+ </div>
436
+ <template v-else-if="statField.dataType==='list' && statField.optionType==='treeList'">
437
+ <div class="add-field-item" >
438
+ <label for="">统计层级:</label>
439
+ <epx-radio v-model="editFieldForm.STATIS_FIELD_LEVEL" :fieldConfigs="{codeKey: 'STATIS_FIELD_LEVEL', state: 'EDIT'}" @change="statFieldTreeOptionSelectAll = false; $nextTick(()=>statFieldTreeOptionSelectAll = true)"></epx-radio>
440
+ </div>
441
+ <div class="add-field-item" >
442
+ <label for="">统计选项:</label>
443
+ <div class="add-field-input">
444
+ <el-checkbox class="add-field__checkall" v-model="statFieldTreeOptionSelectAll" >全选</el-checkbox>
445
+ <el-tree v-if="editFieldForm.STATIS_FIELD_LEVEL==='all'" ref="fieldOptionTree" node-key="id" class="option-tree" :data="getTreeCodeById(statField.codeKey)" :check-strictly="true" @check-change="checkChange" show-checkbox :props="{label: 'name',children: 'children'}">
446
+ </el-tree>
447
+ <el-checkbox-group v-else class="add-field__checkgroup" v-model="editFieldForm.STATIS_CUSTOM_OPTIONS">
448
+ <el-checkbox v-for="option in statFieldTreeOptions" node-key="id" :label="option.id" :value="option.id" :key="option.id">{{option.name}}</el-checkbox>
449
+ </el-checkbox-group>
450
+ </div>
451
+ </div>
452
+ <div class="add-field-item" v-if="editFieldForm.POSITION==='2' && reportInfo.TYPE==='1' ">
453
+ <label for="">统计排序:</label>
454
+ <div class="add-field-input">
455
+ <el-popover
456
+ class="add-field__order"
457
+ trigger="click"
458
+ placement="bottom"
459
+ width="160"
460
+ >
461
+ <template v-slot:reference><el-input
462
+ size="small"
463
+ suffix-icon="el-icon-search"
464
+ :model-value="editFieldForm['STA_SORT_OPTION#']"
465
+ >
466
+ </el-input></template>
467
+ <el-tree ref="statFieldSortTree" node-key="id" class="option-tree" :data="getTreeCodeById(statField.codeKey)" :check-strictly="true" show-checkbox :props="{label: 'name',children: 'children',disabled: getNodeIsDiabled}" @check-change="checkStatFieldTreeChange"></el-tree>
468
+ </el-popover>
469
+ <el-select class="add-field__order" v-model="editFieldForm.SORT" clearable size="small" :style="{width: '100px'}">
470
+ <el-option label="升序" value="ASC"></el-option>
471
+ <el-option label="逆序" value="DESC"></el-option>
472
+ </el-select>
473
+ </div>
474
+ </div>
475
+ </template>
476
+ <template v-else-if="statField.dataType==='list'">
477
+ <div class="add-field-item" >
478
+ <label for="">统计选项:</label>
479
+ <div class="add-field-input">
480
+ <el-checkbox class="add-field__checkall" v-model="statFieldOptionSelectAll" >全选</el-checkbox>
481
+ <el-checkbox-group class="add-field__checkgroup" v-model="editFieldForm.STATIS_CUSTOM_OPTIONS" >
482
+ <el-checkbox v-for="option in statFieldOptions" :label="option.id" :value="option.id" :key="option.id">{{option.name}}</el-checkbox>
483
+ </el-checkbox-group>
484
+ </div>
485
+ </div>
486
+ <div class="add-field-item" v-if="editFieldForm.POSITION==='2' && reportInfo.TYPE==='1'">
487
+ <label for="">选项排序:</label>
488
+ <div class="add-field-input">
489
+ <el-select class="add-field__order" size="small" v-model="editFieldForm.STA_SORT_OPTION" clearable>
490
+ <el-option v-for="option in selectStatFieldOptions" :label="option.name" :value="option.id" :key="option.id"></el-option>
491
+ </el-select>
492
+ <el-select class="add-field__order" v-model="editFieldForm.SORT" size="small" clearable :style="{width: '100px'}">
493
+ <el-option label="升序" value="ASC"></el-option>
494
+ <el-option label="逆序" value="DESC"></el-option>
495
+ </el-select>
496
+ </div>
497
+ </div>
498
+ </template>
499
+ <div class="add-field-item" v-if="editFieldForm.POSITION === '2'&& reportInfo.CHART_TYPE === 'columnAndLine'">
500
+ <label for="">展示报表类型:</label>
501
+ <epx-radio v-model="editFieldForm.SHOW_REPORT_TYPE" :fieldConfigs="{codeKey: 'zzhhReportType', state: 'EDIT'}"></epx-radio>
502
+ </div>
503
+ </template>
504
+
505
+ </el-tab-pane>
506
+ <el-tab-pane label="统计指标" name="index">
507
+ <div class="add-field-item">
508
+ <label for="">指标类别:</label>
509
+ <div class="add-field-input">
510
+ <el-radio-group v-model="editFieldForm.STA_INDEX_TYPE">
511
+ <el-radio label="default" value="default">默认</el-radio>
512
+ <el-radio label="field" value="field">指标字段</el-radio>
513
+ <el-radio label="custom" value="custom">自定义</el-radio>
514
+ </el-radio-group>
515
+ </div>
516
+ </div>
517
+ <template v-if="editFieldForm.STA_INDEX_TYPE==='field'">
518
+ <div class="add-field-item">
519
+ <label for="">指标字段:</label>
520
+ <div class="add-field-input">
521
+ <el-popover
522
+ trigger="click"
523
+ placement="bottom"
524
+ width="160"
525
+ >
526
+ <template v-slot:reference><el-input
527
+ size="small"
528
+ placeholder="请输入内容"
529
+ suffix-icon="el-icon-search"
530
+ :model-value="getLabel(editFieldForm.STA_INDEX_FIELD, reportStatisFields.statisIndexFields)"
531
+ >
532
+ </el-input></template>
533
+ <el-tree class="field-tree" :data="reportStatisFields.statisIndexFields" :props="{label: 'text',value: 'id'}" @node-click="node=>{editFieldForm['STA_INDEX_FIELD'] = node.id; editFieldForm['STA_INDEX_FIELD_CODE'] = node.code}"></el-tree>
534
+ </el-popover>
535
+ </div>
536
+ </div>
537
+ <div class="add-field-item" >
538
+ <label class="add-field-item__label is-required" for="">计算方式:</label>
539
+ <div class="add-field-input">
540
+ <epx-radio v-model="editFieldForm.MODE" :fieldConfigs="{codeKey: 'FM_REPORT_TIME_MODE', state: 'EDIT'}"></epx-radio>
541
+ </div>
542
+ </div>
543
+ <div class="add-field-item" >
544
+ <label class="add-field-item__label" for="">数值单位:</label>
545
+ <div class="add-field-input">
546
+ <epx-radio v-model="editFieldForm.NUM_UNIT" :fieldConfigs="{codeKey: 'report_num_nuit', state: 'EDIT'}"></epx-radio>
547
+ </div>
548
+ </div>
549
+ <div class="add-field-item" >
550
+ <label class="add-field-item__label" for="">单位后缀:</label>
551
+ <div class="add-field-input">
552
+ <el-input size="small" v-model="editFieldForm.UNIT_SUFFIX"></el-input>
553
+ </div>
554
+ </div>
555
+ <div class="add-field-item" >
556
+ <label class="add-field-item__label" for="">小数点位数:</label>
557
+ <div class="add-field-input">
558
+ <epx-select v-model="editFieldForm.DECIMAL_LENGTH" :fieldConfigs="{attriLabel: '小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
559
+ </div>
560
+ </div>
561
+ <div class="add-field-item" >
562
+ <label class="add-field-item__label" for="">千分符标识:</label>
563
+ <div class="add-field-input">
564
+ <el-switch
565
+ v-model="editFieldForm.THOUSAND_CENTS_FLAG"
566
+ active-value="1"
567
+ inactive-value="0"
568
+ >
569
+ </el-switch>
570
+ </div>
571
+ </div>
572
+ </template>
573
+ <template v-else-if="editFieldForm.STA_INDEX_TYPE==='custom'">
574
+ <div class="add-field-item">
575
+ <label for="">计算公式:</label>
576
+ <div class="add-field-input">
577
+ <epx-rule v-model="editFieldForm.INDEX_FORMULA" :metaId="reportInfo.OBJECT" :fieldConfigs="{state: 'EDIT'}"></epx-rule>
578
+ </div>
579
+ </div>
580
+ </template>
581
+ <!-- 二次计算 -->
582
+ <hr />
583
+ <div class="add-field-item" >
584
+ <label class="add-field-item__label" for="">二次计算:</label>
585
+ <div class="add-field-input">
586
+ <epx-select v-model="editFieldForm.AGAIN_COMPUTE" :fieldConfigs="{attriLabel: '二次计算', codeKey: 'AGAIN_COMPUTE', state: 'EDIT'}"></epx-select>
587
+ </div>
588
+ </div>
589
+ <template v-if="editFieldForm.AGAIN_COMPUTE && editFieldForm.AGAIN_COMPUTE!=='no'">
590
+ <div class="add-field-item" >
591
+ <label class="add-field-item__label" for="">二次计算范围:</label>
592
+ <div class="add-field-input">
593
+ <epx-select v-model="editFieldForm.AGAIN_COMPUTE_SCOPE" :fieldConfigs="{attriLabel: '二次计算范围', codeKey: 'AGAIN_COMPUTE_SCOPE', state: 'EDIT'}"></epx-select>
594
+ </div>
595
+ </div>
596
+ <div class="add-field-item" >
597
+ <label class="add-field-item__label" for="">百分比小数点位数:</label>
598
+ <div class="add-field-input">
599
+ <epx-select v-model="editFieldForm.PER_RADIO_NUM" :fieldConfigs="{attriLabel: '百分比小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
600
+ </div>
601
+ </div>
602
+ </template>
603
+ </el-tab-pane>
604
+ </el-tabs>
605
+ </div>
606
+ <template v-slot:footer><div class="dialog-footer">
607
+ <el-button @click.stop="closeEntityFieldDialog">取 消</el-button>
608
+ <el-button type="primary" @click="saveEntityField">保 存</el-button>
609
+ </div></template>
610
+ </el-dialog>
611
+ <!-- 统计指标编辑 -->
612
+ <el-dialog
613
+ class="custom-dialog"
614
+ title="统计指标"
615
+ v-model="editStatIndexDialog"
616
+ :append-to-body="true"
617
+ destroy-on-close
618
+ width="560px"
619
+ >
620
+ <div class="custom-dialog__content">
621
+ <div class="add-field-item" >
622
+ <label class="add-field-item__label is-required" for="">指标标题:</label>
623
+ <div class="add-field-input">
624
+ <epx-table-form-item v-model="editStatIndexForm.INDEX_NAME" :i18nValue="editStatIndexForm.INDEX_NAME_I18N" @change-language="v=>(editStatIndexForm['INDEX_NAME_I18N'] = v)" :field-configs="{attriName: 'INDEX_NAME', dataType:'text', state: 'EDIT',attriLabel: '名称', attribute: { international: '1' }}"></epx-table-form-item>
625
+ </div>
626
+ </div>
627
+ <!-- <div class="add-field-item">
628
+ <label for="">指标类别:</label>
629
+ <div class="add-field-input">
630
+ <epx-radio v-model="editStatIndexForm.INDEX_TYPE" :fieldConfigs="{codeKey: 'STATIS_INDEX_TYPE', state: 'EDIT'}"></epx-radio>
631
+ </div>
632
+ </div> -->
633
+ <template v-if="editStatIndexForm.INDEX_TYPE==='field'">
634
+ <div class="add-field-item">
635
+ <label for="">指标字段:</label>
636
+ <div class="add-field-input">
637
+ <span>{{editFieldForm['INDEX_FIELD#'] || getLabel(editStatIndexForm.INDEX_FIELD, reportStatisFields.statisIndexFields)}}</span>
638
+ <!-- <el-popover
639
+ trigger="click"
640
+ placement="bottom"
641
+ width="160"
642
+ >
643
+ <el-input
644
+ size="small"
645
+ slot="reference"
646
+ placeholder="请输入内容"
647
+ suffix-icon="el-icon-search"
648
+ :model-value="getLabel(editStatIndexForm.INDEX_FIELD, reportStatisFields.statisIndexFields)"
649
+ >
650
+ </el-input>
651
+ <el-tree class="field-tree" :data="reportStatisFields.statisIndexFields" :props="{label: 'text',value: 'id'}" @node-click="node=>$set(editStatIndexForm,'INDEX_FIELD', node.id)"></el-tree>
652
+ </el-popover> -->
653
+ </div>
654
+ </div>
655
+ <div class="add-field-item" >
656
+ <label class="add-field-item__label is-required" for="">计算方式:</label>
657
+ <div class="add-field-input">
658
+ <epx-radio v-model="editStatIndexForm.INDEX_CALCULATE_METHOD" :fieldConfigs="{codeKey: 'FM_REPORT_TIME_MODE', state: 'EDIT'}"></epx-radio>
659
+ </div>
660
+ </div>
661
+ <div class="add-field-item" >
662
+ <label class="add-field-item__label" for="">数值单位:</label>
663
+ <div class="add-field-input">
664
+ <epx-radio v-model="editStatIndexForm.NUM_UNIT" :fieldConfigs="{codeKey: 'report_num_nuit', state: 'EDIT'}"></epx-radio>
665
+ </div>
666
+ </div>
667
+ <div class="add-field-item" >
668
+ <label class="add-field-item__label" for="">单位后缀:</label>
669
+ <div class="add-field-input">
670
+ <el-input size="small" v-model="editStatIndexForm.UNIT_SUFFIX"></el-input>
671
+ </div>
672
+ </div>
673
+ <div class="add-field-item" >
674
+ <label class="add-field-item__label" for="">小数点位数:</label>
675
+ <div class="add-field-input">
676
+ <epx-select v-model="editStatIndexForm.DECIMAL_LENGTH" :fieldConfigs="{attriLabel: '小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
677
+ </div>
678
+ </div>
679
+ <div class="add-field-item" >
680
+ <label class="add-field-item__label" for="">千分符标识:</label>
681
+ <div class="add-field-input">
682
+ <el-switch
683
+ v-model="editStatIndexForm.THOUSAND_CENTS_FLAG"
684
+ active-value="1"
685
+ inactive-value="0"
686
+ >
687
+ </el-switch>
688
+ </div>
689
+ </div>
690
+ </template>
691
+ <template v-else-if="editStatIndexForm.IS_RECORED_FLAG!=='1'">
692
+ <div class="add-field-item">
693
+ <label for="">计算公式:</label>
694
+ <div class="add-field-input">
695
+ <epx-rule v-model="editStatIndexForm.INDEX_FORMULA" :metaId="reportInfo.OBJECT" :fieldConfigs="{state: 'EDIT'}"></epx-rule>
696
+ </div>
697
+ </div>
698
+ </template>
699
+ <!-- 二次计算 -->
700
+ <hr />
701
+ <div class="add-field-item" >
702
+ <label class="add-field-item__label" for="">二次计算:</label>
703
+ <div class="add-field-input">
704
+ <epx-select v-model="editStatIndexForm.AGAIN_COMPUTE" :fieldConfigs="{attriLabel: '二次计算', codeKey: 'AGAIN_COMPUTE', state: 'EDIT'}"></epx-select>
705
+ </div>
706
+ </div>
707
+ <template v-if="editStatIndexForm.AGAIN_COMPUTE && editStatIndexForm.AGAIN_COMPUTE!=='no'">
708
+ <div class="add-field-item" >
709
+ <label class="add-field-item__label" for="">二次计算范围:</label>
710
+ <div class="add-field-input">
711
+ <epx-select v-model="editStatIndexForm.AGAIN_COMPUTE_SCOPE" :fieldConfigs="{attriLabel: '二次计算范围', codeKey: 'AGAIN_COMPUTE_SCOPE', state: 'EDIT'}"></epx-select>
712
+ </div>
713
+ </div>
714
+ <div class="add-field-item" >
715
+ <label class="add-field-item__label" for="">百分比小数点位数:</label>
716
+ <div class="add-field-input">
717
+ <epx-select v-model="editStatIndexForm.PER_RADIO_NUM" :fieldConfigs="{attriLabel: '百分比小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
718
+ </div>
719
+ </div>
720
+ </template>
721
+ <div class="add-field-item" v-if="reportInfo.CHART_TYPE==='column' || reportInfo.CHART_TYPE==='line'">
722
+ <label for="">排序方式:</label>
723
+ <div class="add-field-input">
724
+ <el-select v-model="editStatIndexForm.SORT" size="small" clearable>
725
+ <el-option label="升序" value="ASC"></el-option>
726
+ <el-option label="逆序" value="DESC"></el-option>
727
+ </el-select>
728
+ </div>
729
+ </div>
730
+ </div>
731
+ <template v-slot:footer><div class="dialog-footer">
732
+ <el-button @click="editStatIndexDialog = false">取 消</el-button>
733
+ <el-button type="primary" @click="saveStatIndex">保 存</el-button>
734
+ </div></template>
735
+ </el-dialog>
736
+ <el-dialog
737
+ class="custom-dialog"
738
+ title="新增编辑自定义字段"
739
+ v-model="addFieldDialog"
740
+ :append-to-body="true"
741
+ destroy-on-close
742
+ width="560px"
743
+ >
744
+ <div class="custom-dialog__content">
745
+ <div class="add-field-item">
746
+ <label class="is-required" for="">字段名称:</label>
747
+ <div class="add-field-input">
748
+ <epx-table-form-item v-model="addFieldForm.FIELD_NAME" :i18nValue="addFieldForm.FIELD_NAME_I18N" @change-language="v=>(addFieldForm['FIELD_NAME_I18N'] = v)" :field-configs="{attriName: 'FIELD_NAME', dataType:'text', state: 'EDIT',attriLabel: '名称', attribute: { international: '1' }}"></epx-table-form-item>
749
+ </div>
750
+ </div>
751
+ <div class="add-field-item">
752
+ <label class="is-required" for="">统计项:</label>
753
+ <div class="add-field-input">
754
+ <draggable
755
+ tag="ul"
756
+ class="field-option__list"
757
+ :list="addFieldForm.options"
758
+ >
759
+ <li class="field-option__item" v-for="(option, index) in addFieldForm.options" :key="option.ID || option.NAME">
760
+ <i class="report-field__handler el-icon-rank"></i>
761
+ <span>{{option.NAME}}</span>
762
+ <span class="report-stat__operate">
763
+ <el-button type="primary" link icon="el-icon-edit" @click="editFieldOption(option, index)"></el-button>
764
+ <el-popconfirm
765
+ title="确认删除?"
766
+ @confirm="addFieldForm.options.splice(index, 1)"
767
+ >
768
+ <template v-slot:reference><el-button class="delete-icon" type="primary" link icon="el-icon-delete"></el-button></template>
769
+ </el-popconfirm>
770
+ </span>
771
+ </li>
772
+ </draggable>
773
+ <el-button type="primary" link @click="showAddOptionToField">+ 添加</el-button>
774
+ </div>
775
+ </div>
776
+ <div class="add-field-item">
777
+ <label for="">设为常用:</label>
778
+ <div class="add-field-input">
779
+ <el-switch
780
+ v-model="addFieldForm.IS_FAVORITE"
781
+ active-value="1"
782
+ inactive-value="0"
783
+ >
784
+ </el-switch>
785
+ </div>
786
+ </div>
787
+ </div>
788
+ <template v-slot:footer><div class="dialog-footer">
789
+ <el-button @click="addFieldDialog = false">取 消</el-button>
790
+ <el-button type="primary" @click="addCustomField">确 定</el-button>
791
+ </div></template>
792
+ </el-dialog>
793
+ <!-- 自定义选项 -->
794
+ <el-dialog
795
+ class="custom-dialog"
796
+ title="新增自定义统计项"
797
+ v-model="addOptionDialog"
798
+ :append-to-body="true"
799
+ width="560px"
800
+ >
801
+ <div class="custom-dialog__content" v-if="addOptionDialog">
802
+ <el-tabs v-model="statFieldTabs" :class="{'hide-tabs': addOptionForm.POSITION!=='2' || addOptionForm.isToField }">
803
+ <el-tab-pane label="统计字段" name="stat">
804
+ <div class="add-field-item" v-if="addOptionForm.UP">
805
+ <label for="">上级:</label>
806
+ <div class="add-field-input">
807
+ <span>{{addOptionForm['UP#']}}</span>
808
+ </div>
809
+ </div>
810
+ <div class="add-field-item" v-if="addOptionForm.ID===undefined">
811
+ <label for="">添加方式:</label>
812
+ <div class="add-field-input">
813
+ <el-radio-group v-model="addOptionForm.ADD_TYPE">
814
+ <el-radio label="custom" value="custom">自定义</el-radio>
815
+ <el-radio label="field" value="field">字段选项</el-radio>
816
+ <el-radio label="favorite_item" value="favorite_item">常用统计项</el-radio>
817
+ </el-radio-group>
818
+ </div>
819
+ </div>
820
+ <template v-if="addOptionForm.INDEX_FLAG==='1'">
821
+ <div class="add-field-item">
822
+ <label class="is-required" for="">标题:</label>
823
+ <div class="add-field-input">
824
+ <epx-table-form-item v-model="addOptionForm.NAME" :i18nValue="addOptionForm.NAME_I18N" @change-language="v=>(addOptionForm['NAME_I18N'] = v)" :field-configs="{attriName: 'NAME', dataType:'text', state: 'EDIT',attriLabel: '名称', attribute: { international: '1' }}"></epx-table-form-item>
825
+ </div>
826
+ </div>
827
+ <div class="add-field-item" >
828
+ <label class="add-field-item__label is-required" for="">计算方式:</label>
829
+ <div class="add-field-input">
830
+ <epx-radio v-model="addOptionForm.MODE" :fieldConfigs="{codeKey: 'FM_REPORT_TIME_MODE', state: 'EDIT'}"></epx-radio>
831
+ </div>
832
+ </div>
833
+ <div class="add-field-item" >
834
+ <label class="add-field-item__label" for="">数值单位:</label>
835
+ <div class="add-field-input">
836
+ <epx-radio v-model="addOptionForm.NUM_UNIT" :fieldConfigs="{codeKey: 'report_num_nuit', state: 'EDIT'}"></epx-radio>
837
+ </div>
838
+ </div>
839
+ <div class="add-field-item" >
840
+ <label class="add-field-item__label" for="">单位后缀:</label>
841
+ <div class="add-field-input">
842
+ <el-input size="small" v-model="addOptionForm.UNIT_SUFFIX"></el-input>
843
+ </div>
844
+ </div>
845
+ <div class="add-field-item" >
846
+ <label class="add-field-item__label" for="">小数点位数:</label>
847
+ <div class="add-field-input">
848
+ <epx-select v-model="addOptionForm.DECIMAL_LENGTH" :fieldConfigs="{attriLabel: '小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
849
+ </div>
850
+ </div>
851
+ <div class="add-field-item" >
852
+ <label class="add-field-item__label" for="">千分符标识:</label>
853
+ <div class="add-field-input">
854
+ <el-switch
855
+ v-model="addOptionForm.THOUSAND_CENTS_FLAG"
856
+ active-value="1"
857
+ inactive-value="0"
858
+ >
859
+ </el-switch>
860
+ </div>
861
+ </div>
862
+ <div class="add-field-item" v-if="addOptionForm.IS_RECORED_FLAG!=='1'">
863
+ <label for="">统计范围:</label>
864
+ <div class="add-field-input">
865
+ <epx-form-scope v-if="addOptionDialog" v-model="addOptionForm.SCOPE" :metaId="reportInfo.OBJECT" :fieldConfigs="{state: 'EDIT'}" />
866
+ </div>
867
+ </div>
868
+ </template>
869
+ <template v-else-if="addOptionForm.ADD_TYPE==='custom'">
870
+ <div class="add-field-item">
871
+ <label class="is-required" for="">标题:</label>
872
+ <div class="add-field-input">
873
+ <epx-table-form-item v-model="addOptionForm.NAME" :i18nValue="addOptionForm.NAME_I18N" @change-language="v=>(addOptionForm['NAME_I18N'] = v)" :field-configs="{attriName: 'NAME', dataType:'text', state: 'EDIT',attriLabel: '名称', attribute: { international: '1' }}"></epx-table-form-item>
874
+ </div>
875
+ </div>
876
+ <div class="add-field-item" v-if="addOptionForm.IS_RECORED_FLAG!=='1'">
877
+ <label for="">统计范围:</label>
878
+ <div class="add-field-input">
879
+ <epx-form-scope v-if="addOptionDialog" v-model="addOptionForm.SCOPE" :metaId="reportInfo.OBJECT" :fieldConfigs="{state: 'EDIT'}" />
880
+ </div>
881
+ </div>
882
+ <div class="add-field-item" v-if="addOptionForm.POSITION==='2' && reportInfo.TYPE==='1'">
883
+ <label for="">排序方式:</label>
884
+ <div class="add-field-input">
885
+ <el-select v-model="addOptionForm.SORT" size="small" clearable>
886
+ <el-option label="升序" value="ASC"></el-option>
887
+ <el-option label="逆序" value="DESC"></el-option>
888
+ </el-select>
889
+ </div>
890
+ </div>
891
+ </template>
892
+ <template v-else-if="addOptionForm.ADD_TYPE==='field'">
893
+ <div class="add-field-item">
894
+ <label for="">统计字段:</label>
895
+ <el-popover
896
+ trigger="click"
897
+ placement="bottom"
898
+ width="160"
899
+ >
900
+ <template v-slot:reference><el-input
901
+ size="small"
902
+ placeholder="请输入内容"
903
+ suffix-icon="el-icon-search"
904
+ :model-value="getLabel(addOptionForm.STA_FIELD, reportStatisFields.entityFields)">
905
+ </el-input></template>
906
+ <el-tree class="field-tree" :data="entityListFields" :props="{label: 'text',value: 'id'}" @node-click="node=>{(node.dataType==='list' || node.dataType==='treeList' || node.dataType==='object'|| node.dataType==='user'|| node.dataType==='dept')? (addOptionForm['STA_FIELD'] = node.id): $message.error('请选择选项类型的字段')}"></el-tree>
907
+ </el-popover>
908
+ </div>
909
+ <template v-if="statOptionField">
910
+ <template v-if="statOptionField.dataType==='list' && statOptionField.optionType==='treeList'">
911
+ <div class="add-field-item" >
912
+ <label for="">统计层级:</label>
913
+ <epx-radio v-model="addOptionForm.STATIS_FIELD_LEVEL" :fieldConfigs="{codeKey: 'STATIS_FIELD_LEVEL', state: 'EDIT'}" @change="addOptionForm['STATIS_CUSTOM_OPTIONS'] = []"></epx-radio>
914
+ </div>
915
+ <div class="add-field-item" >
916
+ <label for="">统计选项:</label>
917
+ <div class="add-field-input">
918
+ <el-checkbox class="add-field__checkall" v-model="statOptionFieldTreeOptionSelectAll" >全选</el-checkbox>
919
+ <el-tree v-if="addOptionForm.STATIS_FIELD_LEVEL==='all'" ref="addOptionTree" node-key="id" class="option-tree" :data="getTreeCodeById(statOptionField.codeKey)" :check-strictly="true" @check-change="checkOptionChange" show-checkbox :props="{label: 'name',children: 'children'}">
920
+ </el-tree>
921
+ <el-checkbox-group v-else class="add-field__checkgroup" v-model="addOptionForm.STATIS_CUSTOM_OPTIONS">
922
+ <el-checkbox v-for="option in statOptionFieldTreeOptions" :label="option.id" :value="option.id" :key="option.id">{{option.name}}</el-checkbox>
923
+ </el-checkbox-group>
924
+ </div>
925
+ </div>
926
+ </template>
927
+ <div class="add-field-item" v-else-if="statOptionField.dataType==='list'">
928
+ <label for="">统计选项:</label>
929
+ <div class="add-field-input">
930
+ <el-checkbox class="add-field__checkall" v-model="statOptionFieldOptionSelectAll" >全选</el-checkbox>
931
+ <el-checkbox-group class="add-field__checkgroup" v-model="addOptionForm.STATIS_CUSTOM_OPTIONS" >
932
+ <el-checkbox v-for="option in statOptionFieldOptions" :label="option.id" :value="option.id" :key="option.id">{{option.name}}</el-checkbox>
933
+ </el-checkbox-group>
934
+ </div>
935
+ </div>
936
+ <template v-if="statOptionField.dataType==='object' || statOptionField.dataType==='user' || statOptionField.dataType==='dept'">
937
+ <div class="add-field-item" >
938
+ <label for="">统计范围:</label>
939
+ <div class="add-field-input">
940
+ <epx-form-scope v-model="addOptionForm.SCOPE" :metaId="statOptionField.relatedEntity" :fieldConfigs="{state: 'EDIT'}" />
941
+ </div>
942
+ </div>
943
+ <div class="add-field-item">
944
+ <label for="">统计选项:</label>
945
+ <div class="add-field-input">
946
+ <el-checkbox class="add-field__checkall" v-model="statOptionFieldOptionSelectAll" >全选</el-checkbox>
947
+ <el-checkbox-group class="add-field__checkgroup" v-model="addOptionForm.STATIS_CUSTOM_OPTIONS" >
948
+ <el-checkbox v-for="option in statOptionFieldData" :label="option.id" :value="option.id" :key="option.id">{{option.text}}</el-checkbox>
949
+ </el-checkbox-group>
950
+ </div>
951
+ </div>
952
+ </template>
953
+ </template>
954
+ </template>
955
+ <template v-else-if="addOptionForm.ADD_TYPE==='favorite_item'">
956
+ <div class="add-field-item">
957
+ <label for="">常用统计项:</label>
958
+ <div class="add-field-input" >
959
+ <ul class="common-field__list">
960
+ <li
961
+ :class="['common-field__item', { 'fold': foldCommonField[field.id] }]"
962
+ v-for="field in reportStatisFields.customFields"
963
+ :key="field.id"
964
+ >
965
+ <p class="common-field__name">
966
+ <el-checkbox v-model="checkfieldAllOptions[field.id]">{{field.text}}</el-checkbox>
967
+ <i class="common-field__fold el-icon-arrow-up" @click="foldCommonField[field.id] = !foldCommonField[field.id]"></i>
968
+ </p>
969
+ <el-checkbox-group class="common-field-option__checkboxgroup" v-show="!foldCommonField[field.id]" v-model="addOptionForm.FAVORITE_ITEM">
970
+ <el-checkbox v-for="option in field['children']" :label="option.id" :value="option.id" :key="option.id">{{option.text}}</el-checkbox>
971
+ </el-checkbox-group>
972
+ </li>
973
+ </ul>
974
+ </div>
975
+ </div>
976
+ </template>
977
+ <div class="add-field-item" v-if="(addOptionForm.ADD_TYPE==='custom' || addOptionForm.ADD_TYPE==='field') && (reportInfo.CHART_TYPE === 'column' || reportInfo.CHART_TYPE==='line')">
978
+ <label for="">显示方式:</label>
979
+ <epx-radio v-model="addOptionForm.LINE_SHOW_TYPE" :fieldConfigs="{codeKey: 'LINE_SHOW_TYPE', state: 'EDIT'}"></epx-radio>
980
+ </div>
981
+ <div class="add-field-item" v-if="(addOptionForm.ADD_TYPE==='custom' || addOptionForm.ADD_TYPE==='field') && addOptionForm.POSITION==='2'">
982
+ <label class="add-field-item__label" for="">是否置空:</label>
983
+ <div class="add-field-input">
984
+ <el-switch
985
+ v-model="addOptionForm.IS_SET_NULL"
986
+ active-value="1"
987
+ inactive-value="0"
988
+ >
989
+ </el-switch>
990
+ </div>
991
+ </div>
992
+ <div class="add-field-item" v-if="addOptionForm.POSITION === '2'&& reportInfo.CHART_TYPE === 'columnAndLine'">
993
+ <label for="">展示报表类型:</label>
994
+ <epx-radio v-model="addOptionForm.SHOW_REPORT_TYPE" :fieldConfigs="{codeKey: 'zzhhReportType', state: 'EDIT'}"></epx-radio>
995
+ </div>
996
+ </el-tab-pane>
997
+ <el-tab-pane label="统计指标" name="index">
998
+ <div class="add-field-item">
999
+ <label for="">指标类别:</label>
1000
+ <div class="add-field-input">
1001
+ <el-radio-group v-model="addOptionForm.STA_INDEX_TYPE">
1002
+ <el-radio label="default" value="default">默认</el-radio>
1003
+ <el-radio label="field" value="field">指标字段</el-radio>
1004
+ <el-radio label="custom" value="custom">自定义</el-radio>
1005
+ </el-radio-group>
1006
+ </div>
1007
+ </div>
1008
+ <template v-if="addOptionForm.STA_INDEX_TYPE==='field'">
1009
+ <div class="add-field-item">
1010
+ <label for="">指标字段:</label>
1011
+ <div class="add-field-input">
1012
+ <el-popover
1013
+ trigger="click"
1014
+ placement="bottom"
1015
+ width="160"
1016
+ >
1017
+ <template v-slot:reference><el-input
1018
+ size="small"
1019
+ placeholder="请输入内容"
1020
+ suffix-icon="el-icon-search"
1021
+ :model-value="getLabel(addOptionForm.STA_INDEX_FIELD, reportStatisFields.statisIndexFields)"
1022
+ >
1023
+ </el-input></template>
1024
+ <el-tree class="field-tree" :data="reportStatisFields.statisIndexFields" :props="{label: 'text',value: 'id'}" @node-click="node=>{addOptionForm['STA_INDEX_FIELD'] = node.id; addOptionForm['STA_INDEX_FIELD_CODE'] = node.code}"></el-tree>
1025
+ </el-popover>
1026
+ </div>
1027
+ </div>
1028
+ <div class="add-field-item" >
1029
+ <label class="add-field-item__label is-required" for="">计算方式:</label>
1030
+ <div class="add-field-input">
1031
+ <epx-radio v-model="addOptionForm.MODE" :fieldConfigs="{codeKey: 'FM_REPORT_TIME_MODE', state: 'EDIT'}"></epx-radio>
1032
+ </div>
1033
+ </div>
1034
+ <div class="add-field-item" >
1035
+ <label class="add-field-item__label" for="">数值单位:</label>
1036
+ <div class="add-field-input">
1037
+ <epx-radio v-model="addOptionForm.NUM_UNIT" :fieldConfigs="{codeKey: 'report_num_nuit', state: 'EDIT'}"></epx-radio>
1038
+ </div>
1039
+ </div>
1040
+ <div class="add-field-item" >
1041
+ <label class="add-field-item__label" for="">单位后缀:</label>
1042
+ <div class="add-field-input">
1043
+ <el-input size="small" v-model="addOptionForm.UNIT_SUFFIX"></el-input>
1044
+ </div>
1045
+ </div>
1046
+ <div class="add-field-item" >
1047
+ <label class="add-field-item__label" for="">小数点位数:</label>
1048
+ <div class="add-field-input">
1049
+ <epx-select v-model="addOptionForm.DECIMAL_LENGTH" :fieldConfigs="{attriLabel: '小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
1050
+ </div>
1051
+ </div>
1052
+ <div class="add-field-item" >
1053
+ <label class="add-field-item__label" for="">千分符标识:</label>
1054
+ <div class="add-field-input">
1055
+ <el-switch
1056
+ v-model="addOptionForm.THOUSAND_CENTS_FLAG"
1057
+ active-value="1"
1058
+ inactive-value="0"
1059
+ >
1060
+ </el-switch>
1061
+ </div>
1062
+ </div>
1063
+ </template>
1064
+ <template v-else-if="addOptionForm.STA_INDEX_TYPE==='custom'">
1065
+ <div class="add-field-item">
1066
+ <label for="">计算公式:</label>
1067
+ <div class="add-field-input">
1068
+ <epx-rule v-model="addOptionForm.INDEX_FORMULA" :metaId="reportInfo.OBJECT" :fieldConfigs="{state: 'EDIT'}"></epx-rule>
1069
+ </div>
1070
+ </div>
1071
+ </template>
1072
+ <!-- 二次计算 -->
1073
+ <hr />
1074
+ <div class="add-field-item" >
1075
+ <label class="add-field-item__label" for="">二次计算:</label>
1076
+ <div class="add-field-input">
1077
+ <epx-select v-model="addOptionForm.AGAIN_COMPUTE" :fieldConfigs="{attriLabel: '二次计算', codeKey: 'AGAIN_COMPUTE', state: 'EDIT'}"></epx-select>
1078
+ </div>
1079
+ </div>
1080
+ <template v-if="addOptionForm.AGAIN_COMPUTE && addOptionForm.AGAIN_COMPUTE!=='no'">
1081
+ <div class="add-field-item" >
1082
+ <label class="add-field-item__label" for="">二次计算范围:</label>
1083
+ <div class="add-field-input">
1084
+ <epx-select v-model="addOptionForm.AGAIN_COMPUTE_SCOPE" :fieldConfigs="{attriLabel: '二次计算范围', codeKey: 'AGAIN_COMPUTE_SCOPE', state: 'EDIT'}"></epx-select>
1085
+ </div>
1086
+ </div>
1087
+ <div class="add-field-item" >
1088
+ <label class="add-field-item__label" for="">百分比小数点位数:</label>
1089
+ <div class="add-field-input">
1090
+ <epx-select v-model="addOptionForm.PER_RADIO_NUM" :fieldConfigs="{attriLabel: '百分比小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
1091
+ </div>
1092
+ </div>
1093
+ </template>
1094
+ </el-tab-pane>
1095
+ </el-tabs>
1096
+ </div>
1097
+ <template v-slot:footer><div class="dialog-footer">
1098
+ <el-button @click="addOptionDialog = false">取 消</el-button>
1099
+ <el-button type="primary" @click="addStatOption">确 定</el-button>
1100
+ </div></template>
1101
+ </el-dialog>
1102
+ <!-- 维度-指标字段 -->
1103
+ <el-dialog
1104
+ class="custom-dialog"
1105
+ title="编辑指标"
1106
+ v-model="editIndexDialog"
1107
+ :append-to-body="true"
1108
+ destroy-on-close
1109
+ width="560px"
1110
+ >
1111
+ <div class="custom-dialog__content">
1112
+ <div class="add-field-item" v-if="addOptionForm.UP">
1113
+ <label for="">上级:</label>
1114
+ <div class="add-field-input">
1115
+ <span>{{addOptionForm['UP#']}}</span>
1116
+ </div>
1117
+ </div>
1118
+ <div class="add-field-item">
1119
+ <label class="is-required" for="">标题:</label>
1120
+ <div class="add-field-input">
1121
+ <el-input size="small" v-model="addOptionForm.NAME"></el-input>
1122
+ </div>
1123
+ </div>
1124
+ <div class="add-field-item" >
1125
+ <label class="add-field-item__label is-required" for="">计算方式:</label>
1126
+ <div class="add-field-input">
1127
+ <epx-radio v-model="addOptionForm.MODE" :fieldConfigs="{codeKey: 'FM_REPORT_TIME_MODE', state: 'EDIT'}"></epx-radio>
1128
+ </div>
1129
+ </div>
1130
+ <div class="add-field-item" >
1131
+ <label class="add-field-item__label" for="">数值单位:</label>
1132
+ <div class="add-field-input">
1133
+ <epx-radio v-model="addOptionForm.NUM_UNIT" :fieldConfigs="{codeKey: 'report_num_nuit', state: 'EDIT'}"></epx-radio>
1134
+ </div>
1135
+ </div>
1136
+ <div class="add-field-item" >
1137
+ <label class="add-field-item__label" for="">单位后缀:</label>
1138
+ <div class="add-field-input">
1139
+ <el-input size="small" v-model="addOptionForm.UNIT_SUFFIX"></el-input>
1140
+ </div>
1141
+ </div>
1142
+ <div class="add-field-item" >
1143
+ <label class="add-field-item__label" for="">小数点位数:</label>
1144
+ <div class="add-field-input">
1145
+ <epx-select v-model="addOptionForm.DECIMAL_LENGTH" :fieldConfigs="{attriLabel: '小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
1146
+ </div>
1147
+ </div>
1148
+ <div class="add-field-item" >
1149
+ <label class="add-field-item__label" for="">千分符标识:</label>
1150
+ <div class="add-field-input">
1151
+ <el-switch
1152
+ v-model="addOptionForm.THOUSAND_CENTS_FLAG"
1153
+ active-value="1"
1154
+ inactive-value="0"
1155
+ >
1156
+ </el-switch>
1157
+ </div>
1158
+ </div>
1159
+ <div class="add-field-item" v-if="addOptionForm.IS_RECORED_FLAG!=='1'">
1160
+ <label for="">统计范围:</label>
1161
+ <div class="add-field-input">
1162
+ <epx-form-scope v-if="editIndexDialog" v-model="addOptionForm.SCOPE" :metaId="reportInfo.OBJECT" :fieldConfigs="{state: 'EDIT'}" />
1163
+ </div>
1164
+ </div>
1165
+ <!-- 二次计算 -->
1166
+ <hr />
1167
+ <div class="add-field-item" >
1168
+ <label class="add-field-item__label" for="">二次计算:</label>
1169
+ <div class="add-field-input">
1170
+ <epx-select v-model="addOptionForm.AGAIN_COMPUTE" :fieldConfigs="{attriLabel: '二次计算', codeKey: 'AGAIN_COMPUTE', state: 'EDIT'}"></epx-select>
1171
+ </div>
1172
+ </div>
1173
+ <template v-if="addOptionForm.AGAIN_COMPUTE && addOptionForm.AGAIN_COMPUTE!=='no'">
1174
+ <div class="add-field-item" >
1175
+ <label class="add-field-item__label" for="">二次计算范围:</label>
1176
+ <div class="add-field-input">
1177
+ <epx-select v-model="addOptionForm.AGAIN_COMPUTE_SCOPE" :fieldConfigs="{attriLabel: '二次计算范围', codeKey: 'AGAIN_COMPUTE_SCOPE', state: 'EDIT'}"></epx-select>
1178
+ </div>
1179
+ </div>
1180
+ <div class="add-field-item" >
1181
+ <label class="add-field-item__label" for="">百分比小数点位数:</label>
1182
+ <div class="add-field-input">
1183
+ <epx-select v-model="addOptionForm.PER_RADIO_NUM" :fieldConfigs="{attriLabel: '百分比小数点位数', codeKey: 'REPORT_DECIMAL_LENGTH', state: 'EDIT'}"></epx-select>
1184
+ </div>
1185
+ </div>
1186
+ </template>
1187
+ <div class="add-field-item" v-if="reportInfo.CHART_TYPE==='column' || reportInfo.CHART_TYPE==='line'">
1188
+ <label for="">排序方式:</label>
1189
+ <div class="add-field-input">
1190
+ <el-select v-model="addOptionForm.SORT" size="small" clearable>
1191
+ <el-option label="升序" value="ASC"></el-option>
1192
+ <el-option label="逆序" value="DESC"></el-option>
1193
+ </el-select>
1194
+ </div>
1195
+ </div>
1196
+ </div>
1197
+ <template v-slot:footer><div class="dialog-footer">
1198
+ <el-button @click="editIndexDialog = false">取 消</el-button>
1199
+ <el-button type="primary" @click="addStatOption">确 定</el-button>
1200
+ </div></template>
1201
+ </el-dialog>
1202
+ </div>
1203
+ </template>
1204
+
1205
+ <script>
1206
+ /* eslint-disable no-eval */
1207
+ import { markRaw } from 'vue'
1208
+ import component from '@epxing/core/src/mixins/component'
1209
+ import draggable from '@epxing/core/src/components/draggable'
1210
+ import { mapState, mapGetters } from 'vuex'
1211
+ export default {
1212
+ name: 'epx-report-design',
1213
+ mixins: [component],
1214
+ components: {
1215
+ draggable
1216
+ },
1217
+ style: {
1218
+ margin: 0
1219
+ },
1220
+ data () {
1221
+ return {
1222
+ reportInfo: {},
1223
+ editName: false,
1224
+ reportTypeList: [
1225
+ { icon: 'epx-icon-tongjibiao', text: '统计表', type: '1', chartType: '' },
1226
+ { icon: 'epx-icon-bingzhuangtu', text: '饼状图', type: '2', chartType: 'pie' },
1227
+ // { icon: 'epx-icon-huanxingtu', text: '空心饼状图', type: '2', chartType: 'circularPie' },
1228
+ { icon: 'epx-icon-zhexiantu', text: '折线图', type: '2', chartType: 'line' },
1229
+ { icon: 'epx-icon-zhuzhuangtu', text: '柱状图', type: '2', chartType: 'column' },
1230
+ // { icon: 'epx-icon-tiaoxingtu', text: '横向柱状图', type: '2', chartType: 'horiColumn' },
1231
+ { icon: 'epx-icon-loudoutu', text: '漏斗图', type: '2', chartType: 'funnel' },
1232
+ { icon: 'epx-icon-ciyun', text: '词云', type: '2', chartType: 'wordcloud' },
1233
+ { icon: 'epx-icon-leidatu', text: '雷达图', type: '2', chartType: 'radar' },
1234
+ { icon: 'epx-icon-zhezhutu', text: '折柱混合', type: '2', chartType: 'columnAndLine' },
1235
+ { icon: 'epx-icon-sandiantu', text: '散点图', type: '2', chartType: 'scatter' },
1236
+ { icon: 'epx-icon-ditu', text: '地图', type: '2', chartType: 'map' }
1237
+ ],
1238
+ exportLoading: false,
1239
+ previewChart: false,
1240
+ filterDrawer: false,
1241
+ rowList: null,
1242
+ columnList: null,
1243
+ reportStatisFields: {},
1244
+ statisIndexList: [],
1245
+ openField: {},
1246
+ addFieldForm: {},
1247
+ editFieldForm: {},
1248
+ foldFieldContainer: false,
1249
+ showFieldType: 'entity',
1250
+ addFieldDialog: false,
1251
+ addOptionDialog: false,
1252
+ showStatScope: false,
1253
+ editEntityFieldDialog: false,
1254
+ addOptionForm: {
1255
+ ADD_TYPE: 'custom'
1256
+ },
1257
+ statOptionFieldData: [],
1258
+ editStatIndexDialog: false,
1259
+ editStatIndexForm: {},
1260
+ checkedOption: [],
1261
+ showChart: true,
1262
+ checkfieldAllOptions: {},
1263
+ dropPosition: {},
1264
+ dropType: null,
1265
+ dropElementId: null,
1266
+ foldCommonField: {},
1267
+ globalSetting: false,
1268
+ formData: {},
1269
+ fieldRelation: [],
1270
+ fieldsConfigs: [],
1271
+ editIndexDialog: false,
1272
+ statFieldTabs: 'stat',
1273
+ searchEntityFieldText: '',
1274
+ showLogField: false,
1275
+ showSubField: true
1276
+ }
1277
+ },
1278
+ computed: {
1279
+ ...mapState({
1280
+ showMenu: state => state.config.showMenu,
1281
+ showAppNav: state => state.config.showAppNav
1282
+ }),
1283
+ ...mapGetters([
1284
+ 'getCodeById',
1285
+ 'getTreeCodeById',
1286
+ 'getMeta'
1287
+ ]),
1288
+ languageList () {
1289
+ const { LANGUAGES: languages = '', 'LANGUAGES#': languageNames = '', LANGUAGE_DEFAULT: defaultLanguage } = this.clientConfig
1290
+ if (!languages) return []
1291
+ const languageIdList = languages.split(',')
1292
+ const languageNameList = languageNames.split(',')
1293
+ const languageList = languageIdList.map((item, index) => ({ id: item, name: languageNameList[index] }))
1294
+ return languageList.filter(item => item.id !== defaultLanguage)
1295
+ },
1296
+ scopeParams: {
1297
+ get () {
1298
+ const { SCOPE } = this.reportInfo
1299
+ if (SCOPE) {
1300
+ try {
1301
+ const scope = JSON.parse(SCOPE)
1302
+ return scope.scopeParams || []
1303
+ } catch (error) {
1304
+ return []
1305
+ }
1306
+ }
1307
+ return []
1308
+ },
1309
+ set (v) {
1310
+ this.setReportScope(v)
1311
+ }
1312
+ },
1313
+ scopeText () {
1314
+ const length = this.scopeParams.length
1315
+ if (length > 0) {
1316
+ return this.scopeParams.reduce((str, item, index) => str + item.text + (index === length - 1 ? '' : item.link === 'or' ? ' 或者 ' : ' 并且 '), '')
1317
+ } else {
1318
+ return '全部'
1319
+ }
1320
+ },
1321
+ allFieldsConfigs () {
1322
+ const meta = this.getMeta(this.reportInfo.OBJECT)
1323
+ if (meta) {
1324
+ return meta.getAllFieldConfigs()
1325
+ }
1326
+ return []
1327
+ },
1328
+ entityFields () {
1329
+ const { entityFields } = this.reportStatisFields
1330
+ return JSON.parse(JSON.stringify(entityFields || [])).map(item => {
1331
+ if (item.relationMeta) {
1332
+ item.children = item.relationMeta.children || []
1333
+ }
1334
+ return item
1335
+ })
1336
+ },
1337
+ showEntityFields () {
1338
+ const copyFields = this.$_.cloneDeep(this.reportStatisFields.entityFields)
1339
+ const formatData = (field = []) => {
1340
+ return field.filter(item => {
1341
+ if (!this.showLogField && ['ID', 'LOG_C_TIME', 'LOG_C_USER', 'LOG_U_TIME', 'LOG_U_USER'].includes(item.code)) {
1342
+ return false
1343
+ }
1344
+ if (!this.showSubField && item.relationType === '1') {
1345
+ return false
1346
+ }
1347
+ if (item.children) {
1348
+ item.children = formatData(item.children)
1349
+ }
1350
+ if (this.searchEntityFieldText && !item.text.includes(this.searchEntityFieldText) && (!item.children || item.children.length === 0)) {
1351
+ return false
1352
+ }
1353
+ return true
1354
+ })
1355
+ }
1356
+ return formatData(copyFields)
1357
+ },
1358
+ entityListFields () {
1359
+ const formatList = (arr) => {
1360
+ return arr.filter(item => {
1361
+ if (item.children) item.children = formatList(item.children)
1362
+ return item.dataType === 'list' || item.dataType === 'treeList' || item.dataType === 'object' || (item.children && item.children.length > 0)
1363
+ })
1364
+ }
1365
+ return formatList(this.$_.cloneDeep(this.entityFields))
1366
+ },
1367
+ getMetaFields () {
1368
+ return metaId => {
1369
+ if (metaId) {
1370
+ const meta = this.getMeta(metaId)
1371
+ if (!meta) {
1372
+ this.$store.dispatch({
1373
+ type: 'ADD_META',
1374
+ metaId
1375
+ })
1376
+ return []
1377
+ } else {
1378
+ return meta.getAllFieldConfigs()
1379
+ }
1380
+ }
1381
+ return []
1382
+ }
1383
+ },
1384
+ statField () {
1385
+ const { STA_FIELD } = this.editFieldForm
1386
+ if (STA_FIELD) {
1387
+ const field = this.findField(STA_FIELD, this.entityFields)
1388
+ return field
1389
+ }
1390
+ return null
1391
+ },
1392
+ statFieldOptions () {
1393
+ const { codeKey } = this.statField || {}
1394
+ if (!codeKey) return []
1395
+ return this.getCodeById(codeKey) || []
1396
+ },
1397
+ selectStatFieldOptions () {
1398
+ const { STATIS_CUSTOM_OPTIONS = [] } = this.editFieldForm
1399
+ return this.statFieldOptions.filter(item => STATIS_CUSTOM_OPTIONS.includes(item.id))
1400
+ },
1401
+ statFieldTreeOptions () {
1402
+ const { codeKey } = this.statField || {}
1403
+ const { STATIS_FIELD_LEVEL } = this.editFieldForm
1404
+ const limit = STATIS_FIELD_LEVEL === 'all' ? null : STATIS_FIELD_LEVEL
1405
+ if (!codeKey) return []
1406
+ const list = []
1407
+ const treeList = this.getTreeCodeById(codeKey) || []
1408
+ const getList = (treeList, level = 1) => {
1409
+ for (const item of treeList) {
1410
+ list.push(item)
1411
+ if (item.children) {
1412
+ if (!limit || level + 1 <= limit) {
1413
+ getList(item.children, level + 1)
1414
+ }
1415
+ }
1416
+ }
1417
+ }
1418
+ getList(treeList)
1419
+ return list
1420
+ },
1421
+ statFieldTreeOptionSelectAll: {
1422
+ get () {
1423
+ const { STATIS_CUSTOM_OPTIONS = [] } = this.editFieldForm
1424
+ return STATIS_CUSTOM_OPTIONS.length === this.statFieldTreeOptions.length
1425
+ },
1426
+ set (v) {
1427
+ const { STATIS_FIELD_LEVEL } = this.editFieldForm
1428
+ if (STATIS_FIELD_LEVEL === 'all') {
1429
+ this.$nextTick(() => {
1430
+ if (v) {
1431
+ this.$refs.fieldOptionTree.setCheckedKeys(this.statFieldTreeOptions.map(item => item.id))
1432
+ } else {
1433
+ this.$refs.fieldOptionTree.setCheckedKeys([])
1434
+ }
1435
+ })
1436
+ } else {
1437
+ if (v) {
1438
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = this.statFieldTreeOptions.map(item => item.id)
1439
+ } else {
1440
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = []
1441
+ }
1442
+ }
1443
+ }
1444
+ },
1445
+ statFieldOptionSelectAll: {
1446
+ get () {
1447
+ const { STATIS_CUSTOM_OPTIONS = [] } = this.editFieldForm
1448
+ return STATIS_CUSTOM_OPTIONS.length === this.statFieldOptions.length
1449
+ },
1450
+ set (v) {
1451
+ if (v) {
1452
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = this.statFieldOptions.map(item => item.id)
1453
+ } else {
1454
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = []
1455
+ }
1456
+ }
1457
+ },
1458
+ statOptionField () {
1459
+ const { STA_FIELD } = this.addOptionForm
1460
+ if (STA_FIELD) {
1461
+ const field = this.findField(STA_FIELD, this.entityFields)
1462
+ return field
1463
+ }
1464
+ return null
1465
+ },
1466
+ statOptionFieldOptions () {
1467
+ const { codeKey } = this.statOptionField || {}
1468
+ if (!codeKey) return []
1469
+ const codes = this.getCodeById(codeKey)
1470
+ if (!codes) {
1471
+ this.$store.dispatch({
1472
+ type: 'ADD_LIST',
1473
+ key: codeKey,
1474
+ dataType: 'list'
1475
+ })
1476
+ }
1477
+ return codes || []
1478
+ },
1479
+ statOptionFieldTreeOptions () {
1480
+ const { codeKey } = this.statOptionField || {}
1481
+ const { STATIS_FIELD_LEVEL } = this.addOptionForm
1482
+ const limit = STATIS_FIELD_LEVEL === 'all' ? null : STATIS_FIELD_LEVEL
1483
+ if (!codeKey) return []
1484
+ const list = []
1485
+ const treeList = this.getTreeCodeById(codeKey)
1486
+ if (!treeList) {
1487
+ this.$store.dispatch({
1488
+ type: 'ADD_LIST',
1489
+ key: codeKey,
1490
+ dataType: 'treeList'
1491
+ })
1492
+ }
1493
+ const getList = (treeList, level = 1) => {
1494
+ for (const item of treeList) {
1495
+ list.push(item)
1496
+ if (item.children) {
1497
+ if (!limit || level + 1 <= limit) {
1498
+ getList(item.children, level + 1)
1499
+ }
1500
+ }
1501
+ }
1502
+ }
1503
+ getList(treeList || [])
1504
+ return list
1505
+ },
1506
+ statOptionFieldTreeOptionSelectAll: {
1507
+ get () {
1508
+ const { STATIS_CUSTOM_OPTIONS = [] } = this.addOptionForm
1509
+ return STATIS_CUSTOM_OPTIONS.length === this.statOptionFieldTreeOptions.length
1510
+ },
1511
+ set (v) {
1512
+ const { STATIS_FIELD_LEVEL } = this.addOptionForm
1513
+ if (STATIS_FIELD_LEVEL === 'all') {
1514
+ this.$nextTick(() => {
1515
+ if (v) {
1516
+ this.$refs.addOptionTree.setCheckedKeys(this.statOptionFieldTreeOptions.map(item => item.id))
1517
+ this.addOptionForm.STATIS_OPTION = 'all'
1518
+ } else {
1519
+ this.$refs.addOptionTree.setCheckedKeys([])
1520
+ this.addOptionForm.STATIS_OPTION = 'custom'
1521
+ }
1522
+ })
1523
+ } else {
1524
+ if (v) {
1525
+ this.addOptionForm.STATIS_CUSTOM_OPTIONS = this.statOptionFieldTreeOptions.map(item => item.id)
1526
+ this.addOptionForm.STATIS_OPTION = 'all'
1527
+ } else {
1528
+ this.addOptionForm.STATIS_CUSTOM_OPTIONS = []
1529
+ this.addOptionForm.STATIS_OPTION = 'custom'
1530
+ }
1531
+ }
1532
+ }
1533
+ },
1534
+ statOptionFieldOptionSelectAll: {
1535
+ get () {
1536
+ const { dataType } = this.statOptionField || {}
1537
+ const data = (dataType === 'object' || dataType === 'user' || dataType === 'dept') ? this.statOptionFieldData : this.statOptionFieldOptions
1538
+ const { STATIS_CUSTOM_OPTIONS = [] } = this.addOptionForm
1539
+ return STATIS_CUSTOM_OPTIONS.length === data.length
1540
+ },
1541
+ set (v) {
1542
+ const { dataType } = this.statOptionField || {}
1543
+ const data = (dataType === 'object' || dataType === 'user' || dataType === 'dept') ? this.statOptionFieldData : this.statOptionFieldOptions
1544
+ if (v) {
1545
+ this.addOptionForm.STATIS_CUSTOM_OPTIONS = data.map(item => item.id)
1546
+ this.addOptionForm.STATIS_OPTION = 'all'
1547
+ } else {
1548
+ this.addOptionForm.STATIS_CUSTOM_OPTIONS = []
1549
+ this.addOptionForm.STATIS_OPTION = 'custom'
1550
+ }
1551
+ }
1552
+ },
1553
+ fieldOptions () {
1554
+ const { codeKey } = this.statOptionField || {}
1555
+ if (!codeKey) return []
1556
+ return this.getCodeById(codeKey) || []
1557
+ },
1558
+ fieldTreeOptions () {
1559
+ const { codeKey } = this.statOptionField || {}
1560
+ if (!codeKey) return []
1561
+ const list = []
1562
+ const treeList = this.getTreeCodeById(codeKey) || []
1563
+ const getList = (treeList) => {
1564
+ for (const item in treeList) {
1565
+ list.push(item)
1566
+ if (item.children) getList(item.chidlren)
1567
+ }
1568
+ }
1569
+ getList(treeList)
1570
+ return list
1571
+ },
1572
+ chartComponent () {
1573
+ const { TYPE, CHART_TYPE } = this.reportInfo
1574
+ if (TYPE === '1') {
1575
+ return 'design-chart-table'
1576
+ } else if (CHART_TYPE === 'pie' || CHART_TYPE === 'circularPie') {
1577
+ return 'design-chart-pie'
1578
+ } else if (CHART_TYPE === 'column' || CHART_TYPE === 'horiColumn') {
1579
+ return 'design-chart-column'
1580
+ } else if (CHART_TYPE === 'line') {
1581
+ return 'design-chart-line'
1582
+ } else if (CHART_TYPE === 'funnel') {
1583
+ return 'design-chart-funnel'
1584
+ } else if (CHART_TYPE === 'wordcloud') {
1585
+ return 'design-chart-wordcloud'
1586
+ } else if (CHART_TYPE === 'radar') {
1587
+ return 'design-chart-radar'
1588
+ } else if (CHART_TYPE === 'columnAndLine') {
1589
+ return 'design-chart-column-and-line'
1590
+ } else if (CHART_TYPE === 'scatter') {
1591
+ return 'design-chart-scatter'
1592
+ } else if (CHART_TYPE === 'map') {
1593
+ return 'design-chart-map'
1594
+ }
1595
+ return ''
1596
+ },
1597
+ chartConfig () {
1598
+ const { ID, TYPE, CHART_TYPE, OBJECT, NAME } = this.reportInfo
1599
+ return { ...this.$query, reportId: ID, reportType: TYPE, staObject: OBJECT, reportName: NAME, chartType: CHART_TYPE }
1600
+ },
1601
+ getLabel () {
1602
+ return (v, arr) => {
1603
+ const item = this.getItemById(v, arr)
1604
+ if (item) return item.text || v
1605
+ return v
1606
+ }
1607
+ }
1608
+ },
1609
+ watch: {
1610
+ 'addOptionForm.FAVORITE_ITEM' (v) {
1611
+ for (const field of this.reportStatisFields.customFields) {
1612
+ if (field.children) {
1613
+ const isCheckAll = field.children.every(item => v.includes(item.id))
1614
+ if (this.checkfieldAllOptions[field.id] !== isCheckAll) {
1615
+ this.checkfieldAllOptions[field.id] = isCheckAll
1616
+ }
1617
+ }
1618
+ }
1619
+ },
1620
+ checkfieldAllOptions: {
1621
+ handler (v) {
1622
+ const { FAVORITE_ITEM } = this.addOptionForm
1623
+ for (const key in v) {
1624
+ if (!this.lastCheckfieldAllOptions || v[key] !== this.lastCheckfieldAllOptions[key]) {
1625
+ // 更新字段选值
1626
+ const field = this.reportStatisFields.customFields.find(item => item.id === key)
1627
+ if (v[key]) {
1628
+ for (const option of field.children) {
1629
+ if (!FAVORITE_ITEM.includes(option.id)) FAVORITE_ITEM.push(option.id)
1630
+ }
1631
+ } else {
1632
+ for (const option of field.children) {
1633
+ const index = FAVORITE_ITEM.findIndex(id => id === option.id)
1634
+ if (index !== -1) {
1635
+ FAVORITE_ITEM.splice(index, 1)
1636
+ }
1637
+ }
1638
+ }
1639
+ }
1640
+ }
1641
+ this.lastCheckfieldAllOptions = { ...v }
1642
+ this.addOptionForm.FAVORITE_ITEM = FAVORITE_ITEM
1643
+ },
1644
+ deep: true
1645
+ },
1646
+ 'addOptionForm.STA_FIELD' (v) {
1647
+ const { dataType } = this.statOptionField
1648
+ if (dataType === 'object' || dataType === 'user' || dataType === 'dept') {
1649
+ this.getObjectDataById()
1650
+ }
1651
+ },
1652
+ 'addOptionForm.SCOPE' (v) {
1653
+ const { dataType } = this.statOptionField
1654
+ if (dataType === 'object' || dataType === 'user' || dataType === 'dept') {
1655
+ this.getObjectDataById()
1656
+ }
1657
+ }
1658
+ },
1659
+ methods: {
1660
+ getReportInfo () {
1661
+ this.$http.get({
1662
+ entityId: 'FM_REPORT_BASE',
1663
+ id: this.$query.id
1664
+ })
1665
+ .then(data => {
1666
+ this.reportInfo = data.data
1667
+ this.formData = { ...data.data }
1668
+ this.getEntityMeta()
1669
+ this.getReportStatisFields()
1670
+ this.getCommonReportStatisFields()
1671
+ })
1672
+ },
1673
+ getEntityMeta () {
1674
+ const { OBJECT } = this.reportInfo
1675
+ this.$store.dispatch({
1676
+ type: 'ADD_META',
1677
+ metaId: OBJECT
1678
+ })
1679
+ },
1680
+ getFieldRelation () {
1681
+ this.$http.get({
1682
+ action: 'getFieldRelation',
1683
+ entityId: 'FM_ATTRIBUTE_RELATION',
1684
+ metaId: 'FM_REPORT_BASE'
1685
+ })
1686
+ .then(data => {
1687
+ this.fieldRelation = data.field_relation
1688
+ })
1689
+ },
1690
+ getFieldConfigs () {
1691
+ this.$FieldFactory.createFields({
1692
+ metaId: 'FM_REPORT_BASE',
1693
+ pageType: 'EDIT',
1694
+ fields: ['PIVOT_TYPE', 'PIVOT_REPORT', { attriName: 'PIVOT_PAGE', addBtn: true, addPageFlag: 'page_add', detailPageFlag: 'page_config' }, 'PIVOT_PAGE_OPEN_MODE', 'SHOW_NULL', 'NULL_SHOW_POSITION', 'DATA_STATIS_TYPE']
1695
+ })
1696
+ .then(data => {
1697
+ this.fieldsConfigs = [...data]
1698
+ })
1699
+ },
1700
+ updateForm () {
1701
+ const params = {}
1702
+ for (const key in this.formData) {
1703
+ if (!key.includes('#')) {
1704
+ params[`bean.${key}`] = this.formData[key]
1705
+ }
1706
+ }
1707
+ this.$http.update({
1708
+ entityId: 'FM_REPORT_BASE',
1709
+ ...params
1710
+ })
1711
+ .then(() => {
1712
+ this.globalSetting = false
1713
+ this.$message.success('保存成功')
1714
+ this.refreshChart()
1715
+ })
1716
+ .catch(err => {
1717
+ this.$message.error(err.message)
1718
+ })
1719
+ },
1720
+ getItemById (id, arr) {
1721
+ let item = null;
1722
+ (function poll (arr, leval) {
1723
+ for (let i = 0; i < arr.length; i++) {
1724
+ if (arr[i].id === id) {
1725
+ item = arr[i]
1726
+ } else if (arr[i].id !== id && arr[i].children && arr[i].children.length > 0) {
1727
+ poll(arr[i].children, leval + 1)
1728
+ }
1729
+ }
1730
+ })(arr, 0)
1731
+ return item
1732
+ },
1733
+ getReportStatisFields () {
1734
+ this.$http.get({
1735
+ action: 'reportStatisFields',
1736
+ entityId: 'FM_REPORT_BASE',
1737
+ metaId: this.reportInfo.OBJECT,
1738
+ reportId: this.reportInfo.ID
1739
+ })
1740
+ .then(data => {
1741
+ let { customFields, entityFields = '{}', statisIndexFields = '{}' } = data
1742
+ customFields = eval(`(${customFields})`)
1743
+ entityFields = eval(`(${entityFields})`)
1744
+ statisIndexFields = eval(`(${statisIndexFields})`)
1745
+ const formatField = (arr) => {
1746
+ return arr.map(item => {
1747
+ if (item.linkCode) {
1748
+ item.code = item.linkCode.replace(/\|/g, '.')
1749
+ }
1750
+ if (item.children) {
1751
+ item.children = formatField(item.children)
1752
+ }
1753
+ return item
1754
+ })
1755
+ }
1756
+ if (entityFields) {
1757
+ if (entityFields[0]) this.openField[entityFields[0].code] = true
1758
+ }
1759
+ if (statisIndexFields) {
1760
+ if (statisIndexFields[0]) this.openField['index-' + statisIndexFields[0].code] = true
1761
+
1762
+ statisIndexFields.unshift({
1763
+ id: 'record',
1764
+ text: '记录数',
1765
+ isRecoredFlag: '1'
1766
+ })
1767
+ }
1768
+ // .filter(item => item.children.length > 0)
1769
+ this.reportStatisFields = {
1770
+ customFields: formatField(customFields),
1771
+ entityFields: formatField(entityFields),
1772
+ statisIndexFields: formatField(statisIndexFields)
1773
+ }
1774
+ })
1775
+ },
1776
+ getStatList () {
1777
+ const params = {
1778
+ entityId: 'FM_REPORT_ITEM',
1779
+ reportId: this.$query.id,
1780
+ up_field: 'UP',
1781
+ showEntity: '1',
1782
+ multiFlag: true,
1783
+ dir: 'ASC',
1784
+ mysort: 'ORDER_NUM',
1785
+ node: 'root'
1786
+ }
1787
+ this.$http.getTree({
1788
+ ...params,
1789
+ position: '1'
1790
+ })
1791
+ .then(data => {
1792
+ this.rowList = data
1793
+ })
1794
+ this.$http.getTree({
1795
+ ...params,
1796
+ position: '2'
1797
+ })
1798
+ .then(data => {
1799
+ this.columnList = data
1800
+ })
1801
+ },
1802
+ getStatisIndex () {
1803
+ this.$http.list({
1804
+ entityId: 'FM_REPORT_STATIS_INDEX',
1805
+ 'scope.REPORT': this.$query.id
1806
+ })
1807
+ .then(data => {
1808
+ this.statisIndexList = data.entitys
1809
+ })
1810
+ },
1811
+ getCommonReportStatisFields () {
1812
+ this.$http.get({
1813
+ action: 'reportStatisFields',
1814
+ entityId: 'FM_REPORT_BASE',
1815
+ metaId: this.reportInfo.OBJECT,
1816
+ onlyCustomFieldFlag: '1'
1817
+ })
1818
+ .then(data => {
1819
+ let { customFields } = data
1820
+ customFields = eval(`(${customFields})`)
1821
+ this.commonStatisFields = customFields
1822
+ })
1823
+ },
1824
+ checkChange (v, isCheck) {
1825
+ if (isCheck) {
1826
+ if (v.parent) this.$refs.fieldOptionTree.setChecked(v.parent, true)
1827
+ }
1828
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = this.$refs.fieldOptionTree.getCheckedKeys()
1829
+ },
1830
+ checkStatFieldTreeChange (v, isCheck) {
1831
+ if (isCheck) {
1832
+ this.$refs.statFieldSortTree.setCheckedKeys([v.id])
1833
+ this.editFieldForm.STA_SORT_OPTION = v.id
1834
+ this.editFieldForm['STA_SORT_OPTION#'] = v.name
1835
+ }
1836
+ },
1837
+ checkOptionChange (v, isCheck) {
1838
+ if (isCheck) {
1839
+ if (v.parent) this.$refs.addOptionTree.setChecked(v.parent, true)
1840
+ }
1841
+ this.addOptionForm.STATIS_CUSTOM_OPTIONS = this.$refs.addOptionTree.getCheckedKeys()
1842
+ },
1843
+ getNodeIsDiabled (data, node) {
1844
+ const { STATIS_CUSTOM_OPTIONS = [] } = this.editFieldForm
1845
+ if (!STATIS_CUSTOM_OPTIONS.includes(data.id)) {
1846
+ return true
1847
+ }
1848
+ const findSelectedChild = (arr = []) => {
1849
+ for (const item of arr) {
1850
+ if (STATIS_CUSTOM_OPTIONS.includes(item.id)) {
1851
+ return true
1852
+ } else if (item.children) {
1853
+ const flag = findSelectedChild(item.children)
1854
+ if (flag) return true
1855
+ }
1856
+ }
1857
+ }
1858
+ return findSelectedChild(data.children)
1859
+ },
1860
+ setReportName () {
1861
+ this.$http.update({
1862
+ entityId: 'FM_REPORT_BASE',
1863
+ 'bean.ID': this.reportInfo.ID,
1864
+ 'bean.NAME': this.reportInfo.NAME
1865
+ })
1866
+ .then(() => {
1867
+ this.editName = false
1868
+ })
1869
+ .catch(err => {
1870
+ this.$message.error(err.errorText)
1871
+ })
1872
+ },
1873
+ setReportScope (scopeParams) {
1874
+ const scope = JSON.stringify({ scopeParams })
1875
+ this.$http.update({
1876
+ entityId: 'FM_REPORT_BASE',
1877
+ 'bean.ID': this.reportInfo.ID,
1878
+ 'bean.SCOPE': scope
1879
+ })
1880
+ .then(() => {
1881
+ this.reportInfo.SCOPE = scope
1882
+ this.refreshData()
1883
+ })
1884
+ .catch(err => {
1885
+ this.$message.error(err.errorText)
1886
+ })
1887
+ },
1888
+ setReportType (reportType) {
1889
+ const { TYPE, CHART_TYPE } = this.reportInfo
1890
+ const setFn = () => {
1891
+ this.$http.update({
1892
+ entityId: 'FM_REPORT_BASE',
1893
+ 'bean.ID': this.reportInfo.ID,
1894
+ 'bean.TYPE': reportType.type,
1895
+ 'bean.CHART_TYPE': reportType.type === '1' ? '' : reportType.chartType
1896
+ })
1897
+ .then(data => {
1898
+ this.reportInfo.TYPE = reportType.type
1899
+ this.reportInfo.CHART_TYPE = reportType.chartType
1900
+ this.reportInfo['CHART_TYPE#'] = reportType.text
1901
+ this.refreshData()
1902
+ })
1903
+ .catch(err => {
1904
+ this.$message.error(err.errorText)
1905
+ })
1906
+ }
1907
+ if (TYPE !== reportType.type) {
1908
+ // 提示
1909
+ this.$confirm(`切换为${reportType.type === '1' ? '统计表' : '统计图'}将清空统计项,是否切换?`, this.$t('hint'), {
1910
+ confirmButtonText: this.$t('confirm'),
1911
+ cancelButtonText: this.$t('cancel'),
1912
+ type: 'warning'
1913
+ }).then(() => {
1914
+ this.$http.$post({
1915
+ action: 'removeReportItems',
1916
+ entityId: 'FM_REPORT_BASE',
1917
+ reportId: this.$query.id
1918
+ })
1919
+ setFn()
1920
+ })
1921
+ } else if (CHART_TYPE !== reportType.chartType) {
1922
+ setFn()
1923
+ }
1924
+ },
1925
+ exportReport () {
1926
+ const staObject = this.reportInfo.OBJECT
1927
+ this.exportLoading = true
1928
+ this.$http.$post({
1929
+ action: 'getReportData',
1930
+ entityId: staObject,
1931
+ reportId: this.reportInfo.ID,
1932
+ reportType: 'toExcel'
1933
+ }, {
1934
+ responseType: 'blob'
1935
+ })
1936
+ .then(({ blob, filename }) => {
1937
+ const objectUrl = URL.createObjectURL(blob)
1938
+ var a = document.createElement('a')
1939
+ document.body.appendChild(a)
1940
+ a.href = objectUrl
1941
+ a.download = filename || new Date().getTime() + '.xlsx'
1942
+ a.click()
1943
+ window.URL.revokeObjectURL(objectUrl)
1944
+ document.body.removeChild(a)
1945
+ this.exportLoading = false
1946
+ })
1947
+ .catch(err => {
1948
+ this.exportLoading = false
1949
+ this.$message.error(err.message)
1950
+ })
1951
+ },
1952
+ cloneField (el, INDEX_FLAG = '0') {
1953
+ if (el.isRecoredFlag) {
1954
+ return {
1955
+ NAME: el.text,
1956
+ IS_RECORED_FLAG: '1'
1957
+ }
1958
+ }
1959
+ const object = {
1960
+ NAME: el.text,
1961
+ REPORT: this.$query.id,
1962
+ STA_FIELD: el.id,
1963
+ 'STA_FIELD#': el.text,
1964
+ STA_FIELD_CODE: el.code,
1965
+ STATIS_FIELD_TYPE: 'field',
1966
+ STATIS_OPTION: 'all',
1967
+ STATIS_FIELD_LEVEL: 'all',
1968
+ TOTAL_ITEM_POSITION: 'end',
1969
+ MODEL: '2',
1970
+ INDEX_FLAG,
1971
+ IS_META: el.type !== 'field',
1972
+ children: []
1973
+ }
1974
+ if (INDEX_FLAG === '1') {
1975
+ object.MODE = 'SUM'
1976
+ object.MODEL = '1'
1977
+ this.dragEvt = {
1978
+ name: 'index',
1979
+ element: object
1980
+ }
1981
+ }
1982
+ if (el.dataType === 'object' || el.dataType === 'dept' || el.dataType === 'user') {
1983
+ object.IS_SHOW_TREE = '1'
1984
+ }
1985
+ return object
1986
+ },
1987
+ dragstart (field, type) {
1988
+ let element = null
1989
+ if (type === 'custom') {
1990
+ element = this.cloneCustomField(field)
1991
+ } else {
1992
+ element = this.cloneField(field)
1993
+ }
1994
+ this.dragEvt = {
1995
+ name: 'field',
1996
+ element
1997
+ }
1998
+ },
1999
+ allowDrop (ev, position) {
2000
+ if (!this.dragEvt) return
2001
+ const { element } = this.dragEvt
2002
+ if (position === '1' && element.INDEX_FLAG === '1') return
2003
+ let dropElem = ev.target
2004
+ while (dropElem && !(dropElem.className && (dropElem.className.includes('report-stat__list') || dropElem.className.includes('report-stat__item') || dropElem.className.includes('report-stat__content')))) {
2005
+ dropElem = dropElem.parentNode
2006
+ }
2007
+
2008
+ if (!dropElem) return
2009
+ this.dropType = position
2010
+ const el = position === '2' ? this.$refs.columnStat : this.$refs.rowStat
2011
+ const { top: elTop } = el.getBoundingClientRect()
2012
+ this.dropElementId = null
2013
+ const key = dropElem.getAttribute('data-key')
2014
+ const { top, bottom } = dropElem.getBoundingClientRect()
2015
+ if (ev.clientY < top + 8) {
2016
+ this.dropPosition = top - elTop
2017
+ this.dropData = {
2018
+ elem: dropElem,
2019
+ key,
2020
+ type: 'before'
2021
+ }
2022
+ } else if (ev.clientY > top + 24) {
2023
+ this.dropPosition = bottom - elTop
2024
+ this.dropData = {
2025
+ elem: dropElem,
2026
+ key,
2027
+ type: 'after'
2028
+ }
2029
+ } else {
2030
+ this.dropElementId = key
2031
+ this.dropPosition = null
2032
+ const indexFlag = dropElem.getAttribute('data-index-flag')
2033
+ if (indexFlag === '1') return
2034
+ this.dropData = {
2035
+ elem: dropElem,
2036
+ key,
2037
+ type: 'inner'
2038
+ }
2039
+ }
2040
+ // 获取插入元素位置
2041
+ // 如果是在li上 则添加到元素末尾 li高亮
2042
+ // 如果是在ul上 则添加到具体位置
2043
+ ev.preventDefault()
2044
+ },
2045
+
2046
+ dragStatItem (statItem) {
2047
+ this.dragEvt = {
2048
+ name: 'stat',
2049
+ element: statItem
2050
+ }
2051
+ },
2052
+ getStatItem (id, statList = []) {
2053
+ for (let i = 0; i < statList.length; i++) {
2054
+ const item = statList[i]
2055
+ if (item.id === id) {
2056
+ return { item, index: i, arr: statList }
2057
+ } else if (item.children) {
2058
+ const child = this.getStatItem(id, item.children)
2059
+ if (child) return child
2060
+ }
2061
+ }
2062
+ },
2063
+ drop (ev, position) {
2064
+ const { TYPE, CHART_TYPE } = this.reportInfo
2065
+
2066
+ // if (position === '2' && this.columnList.length > 0) {
2067
+ // this.$message.error('统计图统计维度不允许多层级')
2068
+ // return
2069
+ // }
2070
+ if (this.dragEvt) {
2071
+ const { key, type } = this.dropData
2072
+ const { element, name } = this.dragEvt
2073
+ if (position === '2' && TYPE !== '1') {
2074
+ if (this.statisIndexList.length > 1) {
2075
+ this.$message.error('统计图设置了多个统计维度不允许设置纵轴')
2076
+ return
2077
+ }
2078
+ if (this.reportInfo.CHART_TYPE === 'scatter') {
2079
+ if (name !== 'stat' && this.columnList.length >= 2) {
2080
+ this.$message.error('散点图只允许设置两个统计维度')
2081
+ return
2082
+ }
2083
+ }
2084
+ }
2085
+ if (element.IS_META) {
2086
+ this.$message.error('不允许拖拽对象')
2087
+ return
2088
+ }
2089
+ const { item: dropElem = {}, index, arr } = this.getStatItem(key, position === '2' ? this.columnList : this.rowList) || {}
2090
+ if (type === 'inner' && CHART_TYPE === 'funnel') {
2091
+ this.$message.error('漏斗图只允许设置一级维度')
2092
+ return
2093
+ }
2094
+ if (name === 'stat') {
2095
+ const evt = { element, type, dropElem, index, dropArr: [...arr] }
2096
+ this.moveStatItem(evt)
2097
+ } else if (name === 'field' || name === 'index') {
2098
+ this.addStatElement({ element, parent: type === 'inner' ? dropElem.id : dropElem.parent, position, newIndex: index })
2099
+ }
2100
+ }
2101
+ this.dragField = null
2102
+ this.dropData = null
2103
+ this.dropPosition = null
2104
+ this.dropElem = null
2105
+ this.dropElementId = null
2106
+ // ev.target.appendChild(document.getElementById(data))
2107
+ ev.preventDefault()
2108
+ },
2109
+ moveStatItem (moved) {
2110
+ const { element, dropElem, type, index, dropArr } = moved
2111
+ let str = ''; let parent = ''
2112
+ let arr = []
2113
+ if (type === 'inner') {
2114
+ arr = [...dropElem.children, { ...element, isNew: true }]
2115
+ parent = dropElem.id
2116
+ } else if (type === 'before') {
2117
+ arr = [...dropArr]
2118
+ arr.splice(index, 0, { ...element, isNew: true })
2119
+ parent = dropElem.parent
2120
+ } else if (type === 'after') {
2121
+ arr = [...dropArr]
2122
+ arr.splice(index + 1, 0, { ...element, isNew: true })
2123
+ parent = dropElem.parent
2124
+ }
2125
+ str = arr.filter(item => item.id !== element.id || item.isNew).reduce((str, item, index) => (str += item.id + ':' + index + ','), '')
2126
+ if (element.id === parent) return
2127
+ this.$http.$request({
2128
+ action: 'moveTree',
2129
+ entityId: 'FM_REPORT_ITEM',
2130
+ id: element.id,
2131
+ selfAttriName: 'ID',
2132
+ newParentId: parent || 'root',
2133
+ orderString: str,
2134
+ orderAtrriName: 'ORDER_NUM'
2135
+ })
2136
+ .then(data => {
2137
+ this.refreshData()
2138
+ })
2139
+ },
2140
+ addStatElement (added) {
2141
+ const { element, parent, position, newIndex } = added
2142
+ const formData = {
2143
+ 'bean.REPORT': this.reportId
2144
+ }
2145
+ for (const key in element) {
2146
+ if (key !== 'children') formData[`bean.${key}`] = element[key]
2147
+ }
2148
+ formData['bean.CLIENT'] = this.CLIENT
2149
+ formData['bean.SYSTEM'] = this.SYSTEM
2150
+ formData['bean.POSITION'] = position
2151
+ formData['bean.ORDER_NUM'] = newIndex
2152
+ if (parent) formData['bean.UP'] = parent
2153
+ this.$http.save({
2154
+ entityId: 'FM_REPORT_ITEM',
2155
+ ...formData
2156
+ })
2157
+ .then(data => {
2158
+ this.refreshData()
2159
+ })
2160
+ },
2161
+ cloneCustomField (el) {
2162
+ const object = {
2163
+ NAME: el.text,
2164
+ NAME_I18N: el.text_i18n,
2165
+ REPORT: this.$query.id,
2166
+ NEW_STA_FIELD: el.id,
2167
+ STATIS_FIELD_TYPE: 'custom',
2168
+ MODEL: '2',
2169
+ children: []
2170
+ }
2171
+ return object
2172
+ },
2173
+ singleAdd (position) {
2174
+ this.position = position
2175
+ this.singleDrawar = false
2176
+ this.$nextTick(() => {
2177
+ const timer = setTimeout(() => {
2178
+ this.singleDrawar = true
2179
+ clearTimeout(timer)
2180
+ }, 0)
2181
+ })
2182
+ this.singleInitCondition = []
2183
+ this.singleFilterFields = []
2184
+ this.singleSearchParams = []
2185
+ // this.$store.commit(SET_ROUTER_QUERY, { position: position })
2186
+ // this.$store.commit(SET_TAB_QUERY, { key: this.$tab.key, query: { position: position } })
2187
+ const obj = { POSITION: position }
2188
+ if (position === '1') {
2189
+ obj['POSITION#'] = '横向'
2190
+ } else if (position === '2') {
2191
+ obj['POSITION#'] = '纵向'
2192
+ }
2193
+ this.pageTypes = 'ADD'
2194
+ this.dialogSingleAddVisible = true
2195
+ this.defaultValue = { CLIENT: this.$tab.CLIENT, SYSTEM: this.$tab.SYSTEM, REPORT: this.reportId, 'REPORT#': this.reportData.NAME, MODE: 'SUM', 'MODE#': '求和', MODEL: '1', 'MODEL#': '固定', ...obj }
2196
+ },
2197
+ findField (id, fields) {
2198
+ for (const item of fields) {
2199
+ if (item.id === id) return item
2200
+ else if (item.children) {
2201
+ const child = this.findField(id, item.children)
2202
+ if (child) return child
2203
+ }
2204
+ }
2205
+ },
2206
+ selectOptionField (data) {
2207
+ this.addOptionForm.STA_FIELD = data.id
2208
+ this.addOptionForm['STA_FIELD#'] = data.text
2209
+ if (data.dataType === 'list') {
2210
+ this.$store.dispatch({
2211
+ type: 'ADD_LIST',
2212
+ key: data.codeKey,
2213
+ dataType: data.optionType || data.dataType
2214
+ })
2215
+ }
2216
+ },
2217
+ getObjectDataById () {
2218
+ const { SCOPE } = this.addOptionForm
2219
+ const scopeParams = JSON.parse(SCOPE || '{}').scopeParams || []
2220
+ const { relatedEntity } = this.statOptionField
2221
+ if (relatedEntity) {
2222
+ this.$http.$post({
2223
+ action: 'getTree',
2224
+ entityId: relatedEntity,
2225
+ scopeParams: JSON.stringify(scopeParams)
2226
+ })
2227
+ .then(data => {
2228
+ const list = []
2229
+ const getList = (treeList) => {
2230
+ for (const item of treeList) {
2231
+ list.push(item)
2232
+ if (item.children) {
2233
+ getList(item.children)
2234
+ }
2235
+ }
2236
+ }
2237
+ getList(data)
2238
+ // 只读树:markRaw 掐掉整棵树的深度响应式(省的是依赖收集,不是 Proxy 本身)。list 是树的
2239
+ // 展平副本,元素仍是原树节点,标外层数组即可覆盖整棵树。将来若要改里面某个节点并期望 UI
2240
+ // 跟着变,正确做法是重新赋一份新数组,而不是把 markRaw 摘掉。
2241
+ this.statOptionFieldData = markRaw(list)
2242
+ })
2243
+ }
2244
+ },
2245
+ refreshData () {
2246
+ this.getStatList()
2247
+ this.showChart = false
2248
+ this.$nextTick(() => {
2249
+ this.showChart = true
2250
+ })
2251
+ },
2252
+ refreshChart () {
2253
+ this.showChart = false
2254
+ this.$nextTick(() => {
2255
+ this.showChart = true
2256
+ })
2257
+ },
2258
+ addStatItem (position, item) {
2259
+ const { CHART_TYPE } = this.reportInfo
2260
+ if (CHART_TYPE === 'funnel') {
2261
+ this.$message.error('漏斗图只允许设置一级维度')
2262
+ return
2263
+ }
2264
+ this.addOptionForm = {
2265
+ ADD_TYPE: 'custom',
2266
+ REPORT: this.$query.id,
2267
+ MODEL: '1',
2268
+ STATIS_CUSTOM_OPTIONS: [],
2269
+ POSITION: position,
2270
+ UP: item.id,
2271
+ 'UP#': item.text,
2272
+ FAVORITE_ITEM: [],
2273
+ STA_INDEX_TYPE: 'default'
2274
+ }
2275
+ this.addOptionDialog = true
2276
+ this.statFieldTabs = 'stat'
2277
+ },
2278
+ async editStatItem (item) {
2279
+ this.$http.get({
2280
+ entityId: 'FM_REPORT_ITEM',
2281
+ id: item.id
2282
+ })
2283
+ .then(async data => {
2284
+ let { ID, NAME, NAME_I18N, INDEX_FLAG, MODEL, MODE, STATIS_FIELD_TYPE, NEW_STA_FIELD, STA_FIELD, 'STA_FIELD#': fieldName, TOTAL_ITEM_FLAG, ORDER_FIELD, OBJECT_FIELD_SCOPE, SORT, DATE_GROUP_TYPE, STATIS_OPTION, STATIS_FIELD_LEVEL, STATIS_CUSTOM_OPTIONS = '', SCOPE, IS_RECORED_FLAG, NUM_UNIT, UNIT_SUFFIX, DECIMAL_LENGTH, THOUSAND_CENTS_FLAG, STA_INDEX_TYPE = 'default', ...otherData } = data.data
2285
+ try {
2286
+ if (NAME_I18N) NAME_I18N = JSON.parse(NAME_I18N)
2287
+ } catch (err) {
2288
+ NAME_I18N = {}
2289
+ }
2290
+ if (MODEL === '2') {
2291
+ // 自定义字段
2292
+ if (STATIS_FIELD_TYPE === 'custom') {
2293
+ const field = this.reportStatisFields.customFields.find(item => item.id === NEW_STA_FIELD)
2294
+ this.editCustomField(field)
2295
+ return
2296
+ }
2297
+ if (STATIS_CUSTOM_OPTIONS) {
2298
+ STATIS_CUSTOM_OPTIONS = STATIS_CUSTOM_OPTIONS.split(',')
2299
+ } else {
2300
+ STATIS_CUSTOM_OPTIONS = []
2301
+ }
2302
+ console.log(NAME_I18N || {})
2303
+ this.editFieldForm = {
2304
+ ID,
2305
+ NAME,
2306
+ NAME_I18N: NAME_I18N || {},
2307
+ STA_FIELD,
2308
+ 'STA_FIELD#': fieldName,
2309
+ TOTAL_ITEM_FLAG,
2310
+ ORDER_FIELD,
2311
+ OBJECT_FIELD_SCOPE,
2312
+ SORT,
2313
+ DATE_GROUP_TYPE,
2314
+ STATIS_OPTION,
2315
+ STATIS_FIELD_LEVEL,
2316
+ STATIS_CUSTOM_OPTIONS,
2317
+ INDEX_FLAG,
2318
+ MODEL,
2319
+ MODE,
2320
+ IS_RECORED_FLAG,
2321
+ NUM_UNIT,
2322
+ UNIT_SUFFIX,
2323
+ DECIMAL_LENGTH,
2324
+ THOUSAND_CENTS_FLAG,
2325
+ STA_INDEX_TYPE: STA_INDEX_TYPE || 'default',
2326
+ ...otherData
2327
+ }
2328
+ this.editEntityFieldDialog = true
2329
+ const { codeKey, dataType, optionType } = this.statField || {}
2330
+ if (dataType === 'list') {
2331
+ if (this.statFieldOptions.length === 0) {
2332
+ await this.$store.dispatch({
2333
+ type: 'ADD_LIST',
2334
+ key: codeKey,
2335
+ dataType: optionType || dataType
2336
+ })
2337
+ }
2338
+ if (!STATIS_OPTION || STATIS_OPTION === 'all') {
2339
+ if ((optionType || dataType) === 'treeList') {
2340
+ if (STATIS_FIELD_LEVEL === 'all') {
2341
+ this.$nextTick(() => {
2342
+ this.$refs.fieldOptionTree.setCheckedKeys(this.statFieldTreeOptions.map(item => item.id))
2343
+ })
2344
+ } else {
2345
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = this.statFieldTreeOptions.map(item => item.id)
2346
+ }
2347
+ } else {
2348
+ this.editFieldForm.STATIS_CUSTOM_OPTIONS = this.statFieldOptions.map(item => item.id)
2349
+ }
2350
+ } else {
2351
+ this.$nextTick(() => {
2352
+ this.$refs.fieldOptionTree.setCheckedKeys(this.editFieldForm.STATIS_CUSTOM_OPTIONS)
2353
+ })
2354
+ }
2355
+ }
2356
+ } else {
2357
+ this.addOptionForm = {
2358
+ ADD_TYPE: 'custom',
2359
+ ID,
2360
+ NAME,
2361
+ NAME_I18N,
2362
+ SCOPE,
2363
+ INDEX_FLAG,
2364
+ IS_RECORED_FLAG,
2365
+ MODE,
2366
+ NUM_UNIT,
2367
+ UNIT_SUFFIX,
2368
+ DECIMAL_LENGTH,
2369
+ THOUSAND_CENTS_FLAG,
2370
+ FAVORITE_ITEM: [],
2371
+ STA_INDEX_TYPE: STA_INDEX_TYPE || 'default',
2372
+ SORT,
2373
+ ...otherData
2374
+ }
2375
+ if (INDEX_FLAG === '1') {
2376
+ this.editIndexDialog = true
2377
+ } else {
2378
+ this.addOptionDialog = true
2379
+ }
2380
+ }
2381
+ this.statFieldTabs = 'stat'
2382
+ })
2383
+ },
2384
+ deleteStatItem (item) {
2385
+ this.$http.removeMulti({
2386
+ entityId: 'FM_REPORT_ITEM',
2387
+ ids: item.id
2388
+ })
2389
+ .then(data => {
2390
+ this.$message.success('删除成功')
2391
+ this.refreshData()
2392
+ })
2393
+ .catch(err => {
2394
+ this.$message.error(err.errorText)
2395
+ })
2396
+ },
2397
+ closeEntityFieldDialog () {
2398
+ this.editEntityFieldDialog = false
2399
+ },
2400
+ editFieldLanguage (language, v) {
2401
+ const { NAME_I18N } = this.editFieldForm
2402
+ const nameI18n = { ...NAME_I18N }
2403
+ nameI18n[language.id] = v
2404
+ this.editFieldForm.NAME_I18N = nameI18n
2405
+ },
2406
+ saveEntityField () {
2407
+ const { dataType, optionType } = this.statField || {}
2408
+ const formData = {}
2409
+ for (const key in this.editFieldForm) {
2410
+ if (key === 'NAME_I18N' && this.editFieldForm[key]) {
2411
+ formData[`bean.${key}`] = JSON.stringify(this.editFieldForm[key])
2412
+ } else if (key === 'STATIS_CUSTOM_OPTIONS' && this.editFieldForm[key]) {
2413
+ formData[`bean.${key}`] = this.editFieldForm[key].join(',')
2414
+ } else if (!key.includes('#')) {
2415
+ formData[`bean.${key}`] = this.editFieldForm[key]
2416
+ }
2417
+ }
2418
+ if (dataType === 'list' || dataType === 'treeList') {
2419
+ if ((optionType || dataType) === 'treeList') {
2420
+ if (this.statFieldTreeOptionSelectAll) {
2421
+ formData['bean.STATIS_OPTION'] = 'all'
2422
+ formData['bean.STATIS_CUSTOM_OPTIONS'] = ''
2423
+ } else {
2424
+ formData['bean.STATIS_OPTION'] = 'custom'
2425
+ }
2426
+ } else {
2427
+ if (this.statFieldOptionSelectAll) {
2428
+ formData['bean.STATIS_OPTION'] = 'all'
2429
+ formData['bean.STATIS_CUSTOM_OPTIONS'] = ''
2430
+ } else {
2431
+ formData['bean.STATIS_OPTION'] = 'custom'
2432
+ }
2433
+ }
2434
+ }
2435
+ this.$http.update({
2436
+ entityId: 'FM_REPORT_ITEM',
2437
+ ...formData
2438
+ })
2439
+ .then(data => {
2440
+ this.$message.success('设置成功')
2441
+ this.editFieldForm = {}
2442
+ this.editEntityFieldDialog = false
2443
+ this.refreshData()
2444
+ })
2445
+ },
2446
+ changeStatIndex (evt) {
2447
+ if (evt.added) {
2448
+ const { TYPE, CHART_TYPE } = this.reportInfo
2449
+ if (TYPE !== '1') {
2450
+ if (this.statisIndexList.length > 1 && this.rowList.length > 1) {
2451
+ if (CHART_TYPE === 'pie' || CHART_TYPE === 'circularPie' || CHART_TYPE === 'funnel') {
2452
+ this.$message.error(`${CHART_TYPE === 'funnel' ? '漏斗图' : '饼图'}只允许设置一个统计维度`)
2453
+ return this.getStatisIndex()
2454
+ } else if (this.columnList.length > 0) {
2455
+ this.$message.error('统计图设置了纵轴不允许添加多个统计维度')
2456
+ return this.getStatisIndex()
2457
+ }
2458
+ }
2459
+ }
2460
+ this.addStatIndex(evt.added)
2461
+ } else if (evt.moved) {
2462
+ this.moveStatIndex(evt.moved)
2463
+ }
2464
+ },
2465
+ addStatIndex (added) {
2466
+ const { element, newIndex } = added
2467
+ let form = {
2468
+ 'bean.REPORT': this.$query.id,
2469
+ 'bean.INDEX_NAME': element.NAME,
2470
+ 'bean.INDEX_TYPE': 'field',
2471
+ 'bean.INDEX_FIELD': element.STA_FIELD,
2472
+ 'bean.INDEX_FIELD_CODE': element.STA_FIELD_CODE,
2473
+ 'bean.INDEX_CALCULATE_METHOD': 'SUM',
2474
+ 'bean.ORDER_NUM': newIndex + 1
2475
+
2476
+ }
2477
+ if (element.IS_RECORED_FLAG) {
2478
+ form = {
2479
+ 'bean.REPORT': this.$query.id,
2480
+ 'bean.INDEX_NAME': element.NAME,
2481
+ 'bean.IS_RECORED_FLAG': '1',
2482
+ 'bean.ORDER_NUM': newIndex + 1
2483
+ }
2484
+ }
2485
+
2486
+ this.$http.save({
2487
+ entityId: 'FM_REPORT_STATIS_INDEX',
2488
+ 'bean.CLIENT': this.CLIENT,
2489
+ 'bean.SYSTEM': this.SYSTEM,
2490
+ ...form
2491
+ })
2492
+ .then(() => {
2493
+ this.getStatisIndex()
2494
+ this.refreshData()
2495
+ })
2496
+ .catch(err => {
2497
+ this.$message.error(err.errorText)
2498
+ })
2499
+ },
2500
+ openAddStatIndexDialog () {
2501
+ this.editStatIndexDialog = true
2502
+ this.editStatIndexForm = {
2503
+ REPORT: this.$query.id,
2504
+ INDEX_TYPE: 'custom',
2505
+ ORDER_NUM: this.statisIndexList.length
2506
+ }
2507
+ },
2508
+ editStatIndex (index) {
2509
+ this.editStatIndexDialog = true
2510
+ if (index.INDEX_NAME_I18N) {
2511
+ this.editStatIndexForm = { ...index, INDEX_NAME_I18N: JSON.parse(index.INDEX_NAME_I18N) }
2512
+ } else {
2513
+ this.editStatIndexForm = index
2514
+ }
2515
+ },
2516
+ deleteStatIndex (index) {
2517
+ this.$http.removeMulti({
2518
+ entityId: 'FM_REPORT_STATIS_INDEX',
2519
+ ids: index.ID
2520
+ })
2521
+ .then(() => {
2522
+ this.$message.success('删除成功')
2523
+ this.getStatisIndex()
2524
+ this.refreshData()
2525
+ })
2526
+ .catch(err => {
2527
+ this.$message.error(err.errorText)
2528
+ })
2529
+ },
2530
+ saveStatIndex () {
2531
+ const params = {
2532
+ entityId: 'FM_REPORT_STATIS_INDEX'
2533
+ }
2534
+ if (this.editStatIndexForm.ID) {
2535
+ params.action = 'update'
2536
+ } else {
2537
+ const { TYPE, CHART_TYPE } = this.reportInfo
2538
+ if (TYPE !== '1') {
2539
+ if (this.statisIndexList.length > 0 && this.rowList.length > 1) {
2540
+ if (CHART_TYPE === 'pie' || CHART_TYPE === 'circularPie' || CHART_TYPE === 'funnel') {
2541
+ this.$message.error(`${CHART_TYPE === 'funnel' ? '漏斗图' : '饼图'}只允许设置一个统计维度`)
2542
+ return
2543
+ } else if (this.columnList.length > 0) {
2544
+ this.$message.error('统计图设置了纵轴不允许添加多个统计维度')
2545
+ return
2546
+ }
2547
+ }
2548
+ }
2549
+ }
2550
+ if (!this.editStatIndexForm.INDEX_NAME) {
2551
+ this.$message.error('请输入指标标题')
2552
+ return
2553
+ }
2554
+ for (const key in this.editStatIndexForm) {
2555
+ if (!key.includes('#')) params[`bean.${key}`] = typeof this.editStatIndexForm[key] === 'object' ? JSON.stringify(this.editStatIndexForm[key]) : this.editStatIndexForm[key]
2556
+ }
2557
+ const field = this.reportStatisFields.statisIndexFields.find(item => item.id === this.editStatIndexForm.INDEX_FIELD)
2558
+ if (field) {
2559
+ params['bean.INDEX_FIELD_CODE'] = field.code
2560
+ }
2561
+ if (this.isSaveStatIndex) return
2562
+ this.isSaveStatIndex = true
2563
+ this.$http.save({
2564
+ ...params
2565
+ })
2566
+ .then(data => {
2567
+ this.$message.success('修改成功')
2568
+ this.editStatIndexForm = {}
2569
+ this.editStatIndexDialog = false
2570
+ this.isSaveStatIndex = false
2571
+ this.getStatisIndex()
2572
+ this.refreshData()
2573
+ })
2574
+ .catch(err => {
2575
+ this.isSaveStatIndex = false
2576
+ this.$message.error(err.errorText)
2577
+ })
2578
+ },
2579
+ moveStatIndex (moved) {
2580
+ const { element } = moved
2581
+ const str = this.statisIndexList.reduce((str, item, index) => (str += item.ID + ':' + index + ','), '')
2582
+ this.$http.$request({
2583
+ action: 'moveTree',
2584
+ entityId: 'FM_REPORT_STATIS_INDEX',
2585
+ id: element.ID,
2586
+ selfAttriName: 'ID',
2587
+ newParentId: 'root',
2588
+ orderString: str,
2589
+ orderAtrriName: 'ORDER_NUM'
2590
+ })
2591
+ .then(data => {
2592
+ this.getStatisIndex()
2593
+ this.refreshData()
2594
+ })
2595
+ },
2596
+ showAddOptionDialog (POSITION) {
2597
+ if (this.reportInfo.CHART_TYPE === 'scatter') {
2598
+ if (this.columnList.length >= 2) {
2599
+ this.$message.error('散点图只允许设置两个统计维度')
2600
+ return
2601
+ }
2602
+ }
2603
+ this.addOptionForm = {
2604
+ ADD_TYPE: 'custom',
2605
+ REPORT: this.$query.id,
2606
+ MODEL: '1',
2607
+ STATIS_CUSTOM_OPTIONS: [],
2608
+ POSITION,
2609
+ FAVORITE_ITEM: [],
2610
+ STA_INDEX_TYPE: 'default'
2611
+ }
2612
+ this.addOptionDialog = true
2613
+ this.statFieldTabs = 'stat'
2614
+ },
2615
+ addStatOption () {
2616
+ const { isToField, UP, ADD_TYPE, STATIS_CUSTOM_OPTIONS, POSITION, FAVORITE_ITEM, ...otherForm } = this.addOptionForm
2617
+ if (isToField) {
2618
+ this.addOptionToField()
2619
+ return
2620
+ }
2621
+ const { TYPE } = this.reportInfo
2622
+ if (POSITION === '2' && TYPE !== '1') {
2623
+ if (this.statisIndexList.length > 1) {
2624
+ this.$message.error('统计图设置了多个统计维度不允许设置纵轴')
2625
+ return
2626
+ }
2627
+ }
2628
+ // if (POSITION === '2' && this.columnList.length > 0 && TYPE !== '1' && CHART_TYPE !== 'columnAndLine') {
2629
+ // this.$message.error('统计图统计维度不允许多层级')
2630
+ // return
2631
+ // }
2632
+ if (ADD_TYPE === 'field') {
2633
+ if (STATIS_CUSTOM_OPTIONS.length === 0) {
2634
+ this.$message.error('请选择统计选项')
2635
+ return
2636
+ }
2637
+ const form = {}
2638
+ const subForm = {}
2639
+ for (const key in otherForm) {
2640
+ if (key && !key.includes('#')) {
2641
+ form[`bean.${key}`] = otherForm[key]
2642
+ subForm[key] = otherForm[key]
2643
+ }
2644
+ }
2645
+ if (this.isSaveStatOption) return
2646
+ this.isSaveStatOption = true
2647
+ const codeList = []
2648
+ const { code, text, dataType, optionType } = this.statOptionField
2649
+ for (const item of STATIS_CUSTOM_OPTIONS) {
2650
+ let list = this.statOptionFieldOptions
2651
+ if ((optionType || dataType) === 'treeList') {
2652
+ list = this.statOptionFieldTreeOptions
2653
+ } else if (dataType === 'object' || dataType === 'user' || dataType === 'dept') {
2654
+ list = this.statOptionFieldData
2655
+ }
2656
+ const codeItem = list.find(option => option.id === item)
2657
+ codeList.push(codeItem)
2658
+ }
2659
+ this.$http.save({
2660
+ action: 'batchAddStaFieldItems',
2661
+ entityId: 'FM_REPORT_ITEM',
2662
+ reportId: this.$query.id,
2663
+ position: POSITION,
2664
+ itemDatas: JSON.stringify(codeList.map(codeItem => ({
2665
+ REPORT: this.$query.id,
2666
+ CLIENT: this.CLIENT,
2667
+ SYSTEM: this.SYSTEM,
2668
+ ADD_TYPE: 'custom',
2669
+ MODEL: '1',
2670
+ UP,
2671
+ POSITION,
2672
+ NAME: codeItem.name || codeItem.text,
2673
+ ...subForm,
2674
+ SCOPE: JSON.stringify({ scopeParams: [{ field: code.replace(/\./g, '|'), mode: 'equal', values: codeItem.code || codeItem.id, text: `${text} 等于 ${codeItem.name || codeItem.text}` }] })
2675
+ })))
2676
+ })
2677
+ .then(() => {
2678
+ this.addOptionForm = {}
2679
+ this.addOptionDialog = false
2680
+ this.refreshData()
2681
+ this.isSaveStatOption = false
2682
+ })
2683
+ .catch(err => {
2684
+ this.$message.error(err.message)
2685
+ this.isSaveStatOption = false
2686
+ })
2687
+ } else if (ADD_TYPE === 'favorite_item') {
2688
+ // 获取统计项
2689
+ const form = {}
2690
+ for (const key in otherForm) {
2691
+ if (key && !key.includes('#')) form[`bean.${key}`] = otherForm[key]
2692
+ }
2693
+ if (this.isSaveStatOption) return
2694
+ this.isSaveStatOption = true
2695
+ this.$http.save({
2696
+ action: 'saveCustomItem',
2697
+ entityId: 'FM_REPORT_ITEM',
2698
+ reportId: this.$query.id,
2699
+ position: POSITION,
2700
+ reportObject: this.reportInfo.OBJECT,
2701
+ upItemId: UP,
2702
+ 'bean.CLIENT': this.CLIENT,
2703
+ 'bean.SYSTEM': this.SYSTEM,
2704
+ 'bean.ADD_TYPE': ADD_TYPE,
2705
+ 'bean.FAVORITE_ITEM': FAVORITE_ITEM.join(','),
2706
+ ...form
2707
+ })
2708
+ .then(() => {
2709
+ this.$message.success('添加成功')
2710
+ this.addOptionForm = {}
2711
+ this.addOptionDialog = false
2712
+ this.refreshData()
2713
+ this.isSaveStatOption = false
2714
+ })
2715
+ .catch(err => {
2716
+ this.$message.error(err.message)
2717
+ this.isSaveStatOption = false
2718
+ })
2719
+ } else {
2720
+ if (!this.addOptionForm.NAME) {
2721
+ this.$message.error('请输入标题')
2722
+ return
2723
+ }
2724
+ const form = {}
2725
+ if (this.addOptionForm.ID) form.action = 'update'
2726
+ for (const key in otherForm) {
2727
+ if (!key.includes('#')) form[`bean.${key}`] = typeof otherForm[key] === 'object' ? JSON.stringify(otherForm[key]) : otherForm[key]
2728
+ }
2729
+ if (this.isSaveStatOption) return
2730
+ this.isSaveStatOption = true
2731
+ this.$http.save({
2732
+ entityId: 'FM_REPORT_ITEM',
2733
+ 'bean.CLIENT': this.CLIENT,
2734
+ 'bean.SYSTEM': this.SYSTEM,
2735
+ 'bean.REPORT': this.$query.id,
2736
+ 'bean.POSITION': POSITION,
2737
+ 'bean.UP': UP,
2738
+ ...form
2739
+ })
2740
+ .then(() => {
2741
+ this.$message.success(this.addOptionForm.ID ? '修改成功' : '添加成功')
2742
+ this.addOptionForm = {}
2743
+ this.addOptionDialog = false
2744
+ this.editIndexDialog = false
2745
+ this.isSaveStatOption = false
2746
+ this.refreshData()
2747
+ })
2748
+ .catch(err => {
2749
+ this.$message.error(err.message)
2750
+ this.isSaveStatOption = false
2751
+ })
2752
+ }
2753
+ },
2754
+ showAddOptionToField () {
2755
+ this.addOptionForm = {
2756
+ isToField: true,
2757
+ ADD_TYPE: 'custom',
2758
+ MODEL: '1',
2759
+ STATIS_CUSTOM_OPTIONS: [],
2760
+ FAVORITE_ITEM: []
2761
+ }
2762
+ this.addOptionDialog = true
2763
+ this.statFieldTabs = 'stat'
2764
+ },
2765
+ addOptionToField () {
2766
+ let { ID, ADD_TYPE, STATIS_CUSTOM_OPTIONS, FAVORITE_ITEM, NAME, NAME_I18N, SCOPE } = this.addOptionForm
2767
+ if (!this.addFieldForm.options) this.addFieldForm.options = []
2768
+ if (NAME_I18N) NAME_I18N = JSON.stringify(NAME_I18N)
2769
+ if (ID !== undefined) {
2770
+ this.addFieldForm.options.splice(ID, 1, { ADD_TYPE: 'custom', NAME, NAME_I18N, STATIS_SCOPE: SCOPE })
2771
+ } else {
2772
+ if (ADD_TYPE === 'field') {
2773
+ for (const item of STATIS_CUSTOM_OPTIONS) {
2774
+ const { code, text, dataType, optionType } = this.statOptionField
2775
+ let list = this.statOptionFieldOptions
2776
+ if ((optionType || dataType) === 'treeList') {
2777
+ list = this.statOptionFieldTreeOptions
2778
+ } else if (dataType === 'object' || dataType === 'user' || dataType === 'dept') {
2779
+ list = this.statOptionFieldData
2780
+ }
2781
+ const codeItem = list.find(option => option.id === item)
2782
+ this.addFieldForm.options.push({
2783
+ ADD_TYPE: 'custom',
2784
+ NAME: codeItem.name || codeItem.text,
2785
+ STATIS_SCOPE: JSON.stringify({ scopeParams: [{ field: code.replace(/\./g, '|'), mode: 'equal', values: codeItem.code || codeItem.id, text: `${text} 等于 ${codeItem.name || codeItem.text}` }] })
2786
+ })
2787
+ }
2788
+ } else if (ADD_TYPE === 'favorite_item') {
2789
+ const allOptions = this.reportStatisFields.customFields.reduce((arr, item) => [...arr, ...item.children], [])
2790
+ FAVORITE_ITEM.forEach(item => {
2791
+ const option = allOptions.find(option => option.id === item)
2792
+ this.addFieldForm.options.push({
2793
+ ADD_TYPE: 'custom',
2794
+ NAME: option.data.NAME,
2795
+ NAME_I18N: option.data.NAME_I18N,
2796
+ STATIS_SCOPE: option.data.STATIS_SCOPE
2797
+ })
2798
+ })
2799
+ } else {
2800
+ this.addFieldForm.options.push({
2801
+ ADD_TYPE: 'custom',
2802
+ NAME: NAME,
2803
+ NAME_I18N,
2804
+ STATIS_SCOPE: SCOPE
2805
+ })
2806
+ }
2807
+ }
2808
+
2809
+ this.addOptionDialog = false
2810
+ this.addOptionForm = {}
2811
+ },
2812
+ editFieldOption (option, index) {
2813
+ this.addOptionForm = {
2814
+ ID: index,
2815
+ isToField: true,
2816
+ ADD_TYPE: 'custom',
2817
+ NAME: option.NAME,
2818
+ NAME_I18N: option.NAME_I18N ? JSON.parse(option.NAME_I18N) : option.NAME_I18N,
2819
+ SCOPE: option.STATIS_SCOPE,
2820
+ FAVORITE_ITEM: []
2821
+ }
2822
+ this.addOptionDialog = true
2823
+ this.statFieldTabs = 'stat'
2824
+ },
2825
+ addCustomField () {
2826
+ const { ID, options, FIELD_NAME, FIELD_NAME_I18N, IS_FAVORITE } = this.addFieldForm
2827
+ if (!FIELD_NAME) {
2828
+ this.$message.error('请输入字段名称')
2829
+ return
2830
+ }
2831
+ if (!options || options.length === 0) {
2832
+ this.$message.error('请添加统计项')
2833
+ return
2834
+ }
2835
+ const form = {
2836
+ action: 'saveFavoriteField',
2837
+ entityId: 'FM_REPORT_FIELD_FAVORITE',
2838
+ 'bean.CLIENT': this.CLIENT,
2839
+ 'bean.SYSTEM': this.SYSTEM,
2840
+ 'bean.FIELD_NAME': FIELD_NAME,
2841
+ 'bean.IS_FAVORITE': IS_FAVORITE,
2842
+ 'bean.FIELD_NAME_I18N': FIELD_NAME_I18N ? JSON.stringify(FIELD_NAME_I18N) : null,
2843
+ staObject: this.reportInfo.OBJECT,
2844
+ subData: JSON.stringify(options.map((item, index) => ({ ...item, CLIENT: this.CLIENT, SYSTEM: this.SYSTEM, ORDER_NUM: index + 1 })))
2845
+ }
2846
+ if (ID) {
2847
+ form['bean.ID'] = ID
2848
+ }
2849
+ if (IS_FAVORITE) {
2850
+ form['bean.ENTITY_ID'] = this.reportInfo.OBJECT
2851
+ form['bean.REPORT'] = null
2852
+ } else {
2853
+ form['bean.ENTITY_ID'] = null
2854
+ form['bean.REPORT'] = this.$query.id
2855
+ }
2856
+ if (this.isSaveCustomField) return
2857
+ this.isSaveCustomField = true
2858
+ this.$http.$post(form)
2859
+ .then(() => {
2860
+ this.$message.success(ID ? '修改成功' : '添加成功')
2861
+ this.getReportStatisFields()
2862
+ this.addFieldForm = {}
2863
+ this.addFieldDialog = false
2864
+ this.isSaveCustomField = false
2865
+ })
2866
+ .catch(err => {
2867
+ this.isSaveCustomField = false
2868
+ this.$message.error(err.message)
2869
+ })
2870
+ },
2871
+ editCustomField (field) {
2872
+ this.addFieldForm = {
2873
+ ID: field.id,
2874
+ FIELD_NAME: field.text,
2875
+ FIELD_NAME_I18N: field.text_i18n ? JSON.parse(field.text_i18n) : null,
2876
+ IS_FAVORITE: field.isFavoriteFlag,
2877
+ options: field.children.map(item => ({ ADD_TYPE: item.data.ADD_TYPE, NAME: item.data.NAME, NAME_I18N: item.data.NAME_I18N, STATIS_SCOPE: item.data.STATIS_SCOPE }))
2878
+ }
2879
+ this.addFieldDialog = true
2880
+ },
2881
+ deleteCustomField (field) {
2882
+ this.$http.removeMulti({
2883
+ entityId: 'FM_REPORT_FIELD_FAVORITE',
2884
+ ids: field.id
2885
+ })
2886
+ .then(() => {
2887
+ this.$message.success('删除成功')
2888
+ this.getReportStatisFields()
2889
+ })
2890
+ .catch(err => {
2891
+ this.$message.error(err.message)
2892
+ })
2893
+ }
2894
+ },
2895
+ created () {
2896
+ if (this.showMenu) {
2897
+ this.changeMenuFlag = true
2898
+ this.$store.commit('SWITCH_MENU_SHOW', false)
2899
+ }
2900
+ if (this.showAppNav) {
2901
+ this.changeAppNavFlag = true
2902
+ this.$store.commit('SWITCH_APP_NAV_SHOW', false)
2903
+ }
2904
+ this.getReportInfo()
2905
+ this.getStatList()
2906
+ this.getStatisIndex()
2907
+ this.getFieldRelation()
2908
+ this.getFieldConfigs()
2909
+ },
2910
+ mounted () {
2911
+ const { openType } = this.$query
2912
+ if (openType === '2') {
2913
+ this.$refs.container.style.position = 'static'
2914
+ }
2915
+ },
2916
+ beforeUnmount () {
2917
+ if (this.changeMenuFlag) {
2918
+ this.$store.commit('SWITCH_MENU_SHOW', true)
2919
+ }
2920
+ if (this.changeAppNavFlag) {
2921
+ this.$store.commit('SWITCH_APP_NAV_SHOW', true)
2922
+ }
2923
+ }
2924
+ }
2925
+ </script>
2926
+
2927
+ <style lang="scss" scoped>
2928
+ .container {
2929
+ position: fixed;
2930
+ top: -0;
2931
+ left: -0;
2932
+ width: 100%;
2933
+ height: 100%;
2934
+ background: #F3F5FA;
2935
+ }
2936
+ .report-header {
2937
+ height: 56px;
2938
+ background: var(--epx-bg-card);
2939
+ padding: 0 20px;
2940
+ display: flex;
2941
+ align-items: center;
2942
+ justify-content: space-between;
2943
+ border-bottom: 1px solid var(--epx-border);
2944
+ }
2945
+ .report-title {
2946
+ display: flex;
2947
+ align-items: center;
2948
+ }
2949
+ .report-back {
2950
+ font-size: var(--epx-font-size-xl);
2951
+ cursor: pointer;
2952
+ position: relative;
2953
+ top: 1px
2954
+ }
2955
+ .report-name {
2956
+ color: var(--epx-text);
2957
+ font-size: var(--epx-font-size-l);
2958
+ margin: 0 12px 0 6px;
2959
+ display: flex;
2960
+ align-items: center;
2961
+ white-space: nowrap;
2962
+ i {
2963
+ font-size: 18px;
2964
+ color: #444;
2965
+ cursor: pointer;
2966
+ margin-left: 8px;
2967
+ }
2968
+ }
2969
+ .report-bar {
2970
+ padding: 4px 20px;
2971
+ box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.15);
2972
+ background: var(--epx-bg-card);
2973
+ margin-bottom: 2px;
2974
+ }
2975
+ .report-bar__item {
2976
+ margin-right: 40px;
2977
+ }
2978
+ .reprot-bar__type {
2979
+ width: 140px;
2980
+ cursor: pointer;
2981
+
2982
+ :deep(.el-input__inner) {
2983
+ cursor: pointer;
2984
+ }
2985
+
2986
+ }
2987
+ .report-type__list {
2988
+ width: 280px;
2989
+ display: flex;
2990
+ flex-wrap: wrap;
2991
+ }
2992
+ .report-type__item {
2993
+ width: 70px;
2994
+ height: 70px;
2995
+ display: flex;
2996
+ flex-direction: column;
2997
+ justify-content: center;
2998
+ align-items: center;
2999
+ cursor: pointer;
3000
+ line-height: 20px;
3001
+ &:hover {
3002
+ background: var(--epx-bg);
3003
+ border-radius: var(--epx-radius-base);
3004
+ }
3005
+ &.active {
3006
+ i, span {
3007
+ @include font_color_primary;
3008
+ }
3009
+ }
3010
+ i {
3011
+ font-size: 18px;
3012
+ color: var(--epx-text);
3013
+ margin-bottom: 8px;
3014
+ }
3015
+ span {
3016
+ font-size: var(--epx-font-size-s);
3017
+ color: #444
3018
+ }
3019
+ }
3020
+ .report-scope__text {
3021
+ display: inline-block;
3022
+ max-width: 500px;
3023
+ white-space: nowrap;
3024
+ overflow: hidden;
3025
+ text-overflow: ellipsis;
3026
+ position: relative;
3027
+ top: 6px;
3028
+ margin-right: 6px;
3029
+ }
3030
+ .report-design {
3031
+ display: flex;
3032
+ height: calc(100% - 107px);
3033
+ }
3034
+ .report-left-container {
3035
+ height: 100%;
3036
+ }
3037
+ .report-left__inner {
3038
+ width: 220px;
3039
+ height: 100%;
3040
+ overflow: hidden;
3041
+ }
3042
+ .report-left__inner--fold {
3043
+ width: 0
3044
+ }
3045
+
3046
+ .report-field {
3047
+ width: 220px;
3048
+ height: 70%;
3049
+ background: var(--epx-bg-card);
3050
+ }
3051
+ .report-field__title {
3052
+ height: 40px;
3053
+ background: var(--epx-bg);
3054
+ padding: 0 14px;
3055
+ display: flex;
3056
+ align-items: center;
3057
+ justify-content: space-between;
3058
+ span {
3059
+ color: var(--epx-text);
3060
+ }
3061
+ i {
3062
+ color: var(--epx-text-secondary);
3063
+ cursor: pointer;
3064
+ font-size: 18px;
3065
+ }
3066
+ }
3067
+ .report-left__foldicon {
3068
+ color: var(--epx-text-secondary);
3069
+ cursor: pointer;
3070
+ font-size: 18px;
3071
+ line-height: 40px;
3072
+ margin: 0 10px;
3073
+ }
3074
+ .report-field__container {
3075
+ height: 100%;
3076
+ }
3077
+ .report-field__container, .report-index {
3078
+ height: calc(100% - 40px);
3079
+ }
3080
+ .report-index {
3081
+ width: 220px;
3082
+ height: 30%;
3083
+ overflow: auto;
3084
+ background: var(--epx-bg-card);
3085
+ &.is-only {
3086
+ margin-top: 10px;
3087
+ height: 100%;
3088
+ }
3089
+ }
3090
+ .report-index__content {
3091
+ height: calc(100% - 40px);
3092
+ overflow: auto;
3093
+ }
3094
+ .field-tab {
3095
+ text-align: center;
3096
+ margin: 10px 0 10px 24px;
3097
+ }
3098
+
3099
+ .report-entity-field, .report-custom-field {
3100
+ height: calc(100% - 52px);
3101
+ overflow: auto;
3102
+ }
3103
+ .report-entity-field__inner {
3104
+ height: 100%;
3105
+ display: flex;
3106
+ flex-direction: column;
3107
+ overflow: hidden;
3108
+
3109
+ :deep(.el-input) {
3110
+ margin: 8px 10px;
3111
+ width: 200px;
3112
+ }
3113
+
3114
+ >.report-field__list {
3115
+ flex: 1;
3116
+ overflow: auto
3117
+ }
3118
+ }
3119
+
3120
+ .report-field__footer {
3121
+ padding: 8px;
3122
+ border-top: 1px solid var(--epx-border);
3123
+ }
3124
+
3125
+ .report-field__name {
3126
+ height: 32px;
3127
+ padding: 0 20px 0 30px;
3128
+ display: flex;
3129
+ align-items: center;
3130
+ justify-content: space-between;
3131
+ cursor: pointer;
3132
+ position: relative;
3133
+ >span:first-child {
3134
+ flex: 1;
3135
+ white-space: nowrap;
3136
+ overflow: hidden;
3137
+ text-overflow: ellipsis;
3138
+ }
3139
+ i {
3140
+ color: var(--epx-text-secondary);
3141
+ }
3142
+ &:hover {
3143
+ background: #E6F6FF;
3144
+ .report-field__handler {
3145
+ display: inline;
3146
+ }
3147
+ .report-stat__operate {
3148
+ display: inline;
3149
+ }
3150
+ }
3151
+ }
3152
+ .report-field__handler {
3153
+ display: none;
3154
+ }
3155
+ .report-field__subitem {
3156
+ .report-field__name {
3157
+ padding-left: 50px;
3158
+ }
3159
+ .report-field__foldicon {
3160
+ left: 30px;
3161
+ }
3162
+ .report-field__subitem {
3163
+ .report-field__name {
3164
+ padding-left: 70px;
3165
+ }
3166
+ }
3167
+ }
3168
+ .report-field__foldicon {
3169
+ position: absolute;
3170
+ left: 10px;
3171
+ transition: all .5s;
3172
+ }
3173
+ .report-field__foldicon--open {
3174
+ transform: rotate(90deg);
3175
+ }
3176
+ .report-custom-field {
3177
+ display: flex;
3178
+ flex-direction: column;
3179
+ .report-field__list {
3180
+ flex: 1;
3181
+ overflow: auto;
3182
+ }
3183
+ }
3184
+ .report-field__item--sub {
3185
+ >.report-field__name {
3186
+ color: red;
3187
+ }
3188
+ }
3189
+ .report-field__operate {
3190
+ text-align: center;
3191
+ height: 40px;
3192
+ line-height: 40px;
3193
+ border-top: 1px solid var(--epx-border);
3194
+ }
3195
+ .common-field-option__checkboxgroup {
3196
+ padding: 0 30px;
3197
+
3198
+ :deep(.el-checkbox) {
3199
+ display: block;
3200
+ }
3201
+
3202
+ }
3203
+ /***统计维度 */
3204
+ .report-stat {
3205
+ height: 100%;
3206
+ width: 280px;
3207
+ flex-shrink: 0;
3208
+ margin: 0 10px;
3209
+ display: flex;
3210
+ flex-direction: column;
3211
+ }
3212
+ .report-stat-container {
3213
+ flex: 2;
3214
+ background: var(--epx-bg-card);
3215
+ margin-top: 10px;
3216
+ overflow: hidden;
3217
+ }
3218
+ .report-stat__title {
3219
+ height: 40px;
3220
+ border-bottom: 1px solid var(--epx-border);
3221
+ padding: 0 12px;
3222
+ display: flex;
3223
+ align-items: center;
3224
+ justify-content: space-between;
3225
+ >span {
3226
+ color: var(--epx-text)
3227
+ }
3228
+ }
3229
+ .report-stat-index {
3230
+ flex: 1;
3231
+ margin-bottom: 10px;
3232
+ }
3233
+ .report-stat__content {
3234
+ height: calc(100% - 40px);
3235
+ position: relative
3236
+ }
3237
+ .drop-indicator {
3238
+ position: absolute;
3239
+ width: 100%;
3240
+ height: 2px;
3241
+ @include bg_color_primary;
3242
+ }
3243
+ .report-stat__list {
3244
+ height: 100%;
3245
+ overflow: auto;
3246
+ }
3247
+ .report-stat__item {
3248
+
3249
+ :deep(.ghost) {
3250
+ background: #E6F6FF;
3251
+ }
3252
+
3253
+ }
3254
+
3255
+ .report-stat__name {
3256
+ padding: 0 16px;
3257
+ height: 32px;
3258
+ display: flex;
3259
+ justify-content: space-between;
3260
+ align-items: center;
3261
+ cursor: pointer;
3262
+ .report-stat__text {
3263
+ flex: 1;
3264
+ white-space: nowrap;
3265
+ overflow: hidden;
3266
+ text-overflow: ellipsis;
3267
+ }
3268
+ &:hover {
3269
+ background: #E6F6FF;
3270
+ .report-stat__operate {
3271
+ display: inline;
3272
+ }
3273
+ }
3274
+ }
3275
+ .report-stat__operate {
3276
+ display: none;
3277
+ }
3278
+ .delete-icon {
3279
+ margin-left: 8px;
3280
+
3281
+ &.el-button--text {
3282
+ color: red;
3283
+ }
3284
+ &.is-link {
3285
+ color: red;
3286
+ }
3287
+
3288
+ }
3289
+
3290
+ /*** 显示区域 */
3291
+ .report-view {
3292
+ position: relative;
3293
+ margin: 10px;
3294
+ margin-left: 0;
3295
+ flex: 1;
3296
+ height: calc(100% - 20px);
3297
+ overflow: auto;
3298
+ }
3299
+ .null-data {
3300
+ background: var(--epx-bg-card);
3301
+ height: 100%;
3302
+ display: flex;
3303
+ flex-direction: column;
3304
+ align-items: center;
3305
+ >i {
3306
+ margin-top: 100px;
3307
+ font-size: 120px;
3308
+ }
3309
+ >span {
3310
+ color: var(--epx-text);
3311
+ }
3312
+ }
3313
+ /***新增字段弹窗 */
3314
+ .add-field-item {
3315
+ display: flex;
3316
+ align-items: center;
3317
+ margin: 24px 0;
3318
+
3319
+ :deep(.epx-form-item) {
3320
+ margin: 0;
3321
+ }
3322
+
3323
+ >label {
3324
+ width: 100px;
3325
+ margin-right: 8px;
3326
+ flex-shrink: 0;
3327
+ position: relative;
3328
+ &.is-required::before {
3329
+ position: absolute;
3330
+ left: -8px;
3331
+ content: '*';
3332
+ color: red
3333
+ }
3334
+ }
3335
+ }
3336
+ .add-field-input__flex {
3337
+ display: flex;
3338
+ }
3339
+ .add-field-input {
3340
+
3341
+ :deep(.el-input) {
3342
+ width: 200px;
3343
+ }
3344
+
3345
+ }
3346
+ .add-field__order {
3347
+
3348
+ :deep(.el-input) {
3349
+ width: 120px;
3350
+ margin-right: 8px;
3351
+ }
3352
+
3353
+ }
3354
+ .add-field__checkall {
3355
+
3356
+ &.el-checkbox {
3357
+ margin-right: 30px;
3358
+ }
3359
+
3360
+ }
3361
+ .add-field__checkgroup {
3362
+ display: inline;
3363
+ }
3364
+ .field-option__item {
3365
+ width: 300px;
3366
+ height: 32px;
3367
+ display: flex;
3368
+ justify-content: space-between;
3369
+ align-items: center;
3370
+ background: var(--epx-bg);
3371
+ margin-bottom: 10px;
3372
+ padding: 0 12px 0 6px;
3373
+ color: #444;
3374
+ cursor: pointer;
3375
+ &:hover {
3376
+ @include bg_color_primary(.1);
3377
+ .report-stat__operate {
3378
+ display: inline;
3379
+ }
3380
+ }
3381
+
3382
+ }
3383
+ .common-field__fold {
3384
+ display: inline-block;
3385
+ transition: all .5s;
3386
+ cursor: pointer;
3387
+ }
3388
+ .common-field__item {
3389
+ &.fold {
3390
+ .common-field__fold {
3391
+ transform: rotate(180deg);
3392
+ }
3393
+ }
3394
+ }
3395
+ .common-field__name {
3396
+ width: 300px;
3397
+ display: flex;
3398
+ justify-content: space-between;
3399
+ }
3400
+ .custom-dialog {
3401
+
3402
+ :deep(.el-dialog__footer) {
3403
+ text-align: center;
3404
+ border-top: 1px solid var(--epx-border);
3405
+ padding-bottom: 10px;
3406
+ }
3407
+
3408
+ }
3409
+ .custom-dialog__content {
3410
+ padding: 0 20px;
3411
+ }
3412
+ .stat-null-data {
3413
+ width: 100%;
3414
+ padding: 20px;
3415
+ box-sizing: border-box;
3416
+ position: absolute;
3417
+ top: 40%;
3418
+ left: 50%;
3419
+ transform: translate(-50%, -50%);
3420
+ text-align: center;
3421
+ >i {
3422
+ font-size: 80px;
3423
+ }
3424
+ >p {
3425
+ color: var(--epx-text);
3426
+ font-size: var(--epx-font-size-s);
3427
+ line-height: 20px;
3428
+ }
3429
+ }
3430
+ .field-tree {
3431
+ max-height: 400px;
3432
+ overflow: auto;
3433
+ }
3434
+ .drawer__header{
3435
+ display: flex;
3436
+ justify-content: space-between;
3437
+ align-items: center;
3438
+ height: 46px;
3439
+ padding: 0 16px;
3440
+ border-bottom: 1px solid var(--epx-border);
3441
+ >span {
3442
+ font-size: var(--epx-font-size-l);
3443
+ font-weight: 600px;
3444
+ border-left: 4px solid;
3445
+ @include border_color_primary;
3446
+ padding-left:6px;
3447
+ line-height: 1;
3448
+
3449
+ :deep(.el-checkbox) {
3450
+ margin-left: 20px;
3451
+ }
3452
+
3453
+ }
3454
+ >i {
3455
+ font-size: var(--epx-font-size-l);
3456
+ cursor: pointer;
3457
+ }
3458
+ }
3459
+ .attribute-pane__content {
3460
+ padding: 0 10px;
3461
+ height: calc(100% - 46px);
3462
+ box-sizing: border-box;
3463
+ }
3464
+ .form__label {
3465
+ margin: 10px 0;
3466
+ }
3467
+ .form-content {
3468
+ height: calc(100% - 76px);
3469
+ padding-bottom: 20px;
3470
+ overflow: auto;
3471
+
3472
+ :deep(.table-form-item__label) {
3473
+ width: 126px;
3474
+ padding-left: 0;
3475
+ }
3476
+ :deep(.table-form-item__content) {
3477
+ .el-input, .el-input-number--medium {
3478
+ width: 200px;
3479
+ }
3480
+ }
3481
+
3482
+ }
3483
+ .report-view__chart {
3484
+ height: calc(100% - 40px);
3485
+ background: var(--epx-bg-card);
3486
+ }
3487
+
3488
+ .hide-tabs {
3489
+
3490
+ :deep(.el-tabs__header) {
3491
+ display:none;
3492
+ }
3493
+
3494
+ }
3495
+ .language-icon {
3496
+ cursor: pointer;
3497
+ margin-left: 8px;
3498
+ position: relative;
3499
+ top: -2px;
3500
+ font-size: var(--epx-font-size-l);
3501
+ @include font_color_primary;
3502
+ }
3503
+
3504
+ .language {
3505
+ padding: 10px;
3506
+ }
3507
+
3508
+ .language-item {
3509
+ display: flex;
3510
+ align-items: center;
3511
+ &:not(:last-child) {
3512
+ margin-bottom: 20px;
3513
+ }
3514
+ }
3515
+ .language-item__label {
3516
+ width: 80px;
3517
+ margin-right: 10px;
3518
+ text-align: right;
3519
+ }
3520
+ .language-item__input {
3521
+ width: 220px;
3522
+
3523
+ :deep(.el-input__inner) {
3524
+ width: 220px;
3525
+ }
3526
+
3527
+ }
3528
+ </style>