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

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 +110 -0
  2. package/README.md +42 -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 +684 -0
  78. package/dist/src/base/AiPromptView.js +362 -0
  79. package/dist/src/base/AiSkillEditor.js +1028 -0
  80. package/dist/src/base/AiSkillEditor.vue.js +1176 -0
  81. package/dist/src/base/AppConfigFormItem.js +7 -0
  82. package/dist/src/base/AppConfigFormItem.vue.js +407 -0
  83. package/dist/src/base/AppMarket.js +211 -0
  84. package/dist/src/base/AppMarketList.js +7 -0
  85. package/dist/src/base/AppMarketList.vue.js +214 -0
  86. package/dist/src/base/AppMarketSystemDetail.js +292 -0
  87. package/dist/src/base/AttributeSubAdd.js +25 -0
  88. package/dist/src/base/ChooseApplication.js +131 -0
  89. package/dist/src/base/ClientAppItem.js +189 -0
  90. package/dist/src/base/ClientApplication.js +359 -0
  91. package/dist/src/base/ClientApplicationList.js +125 -0
  92. package/dist/src/base/ClientModule.js +118 -0
  93. package/dist/src/base/ClientModuleIndex.js +294 -0
  94. package/dist/src/base/ClientSystemDetail.js +202 -0
  95. package/dist/src/base/ClientSystemList.js +7 -0
  96. package/dist/src/base/ClientSystemList.vue.js +450 -0
  97. package/dist/src/base/CommonFieldList.js +10 -0
  98. package/dist/src/base/CommonFieldList.vue.js +530 -0
  99. package/dist/src/base/CommonSearchList.js +4 -0
  100. package/dist/src/base/CommonSearchList.vue.js +253 -0
  101. package/dist/src/base/CompayDetail.js +115 -0
  102. package/dist/src/base/ComponentGlobalSet.js +7 -0
  103. package/dist/src/base/ComponentGlobalSet.vue.js +722 -0
  104. package/dist/src/base/ComponentParamsTree.js +334 -0
  105. package/dist/src/base/ConfigModuleIndex.js +134 -0
  106. package/dist/src/base/CurrentClientApplication.js +53 -0
  107. package/dist/src/base/CurrentVersionInfo.js +97 -0
  108. package/dist/src/base/EntityMatchCompare.js +532 -0
  109. package/dist/src/base/FieldRelationFormItem.js +7 -0
  110. package/dist/src/base/FieldRelationFormItem.vue.js +272 -0
  111. package/dist/src/base/HelpDocSet.js +362 -0
  112. package/dist/src/base/HelpDocSet.vue.js +685 -0
  113. package/dist/src/base/IndexFormItem.js +4 -0
  114. package/dist/src/base/IndexFormItem.vue.js +230 -0
  115. package/dist/src/base/JobFormItem.js +7 -0
  116. package/dist/src/base/JobFormItem.vue.js +131 -0
  117. package/dist/src/base/ManageAppNav.js +8 -0
  118. package/dist/src/base/ManageAppNav.vue.js +1178 -0
  119. package/dist/src/base/ManageMenu.js +915 -0
  120. package/dist/src/base/ManageMenuItem.js +550 -0
  121. package/dist/src/base/NoInstallSystemList.js +4 -0
  122. package/dist/src/base/NoInstallSystemList.vue.js +159 -0
  123. package/dist/src/base/PageList.js +47 -0
  124. package/dist/src/base/PasswordFormItem.js +7 -0
  125. package/dist/src/base/PasswordFormItem.vue.js +125 -0
  126. package/dist/src/base/ProcessFormItem.js +147 -0
  127. package/dist/src/base/PublishSystemApplyFormItem.js +4 -0
  128. package/dist/src/base/PublishSystemApplyFormItem.vue.js +104 -0
  129. package/dist/src/base/RequestLog.js +169 -0
  130. package/dist/src/base/RightRiskList.js +7 -0
  131. package/dist/src/base/RightRiskList.vue.js +224 -0
  132. package/dist/src/base/RoleAccredit.js +1086 -0
  133. package/dist/src/base/RoleRightList.js +7 -0
  134. package/dist/src/base/RoleRightList.vue.js +118 -0
  135. package/dist/src/base/RoleUserManage.js +7 -0
  136. package/dist/src/base/RoleUserManage.vue.js +146 -0
  137. package/dist/src/base/ServiceAccredit.js +1074 -0
  138. package/dist/src/base/ServiceMenu.js +398 -0
  139. package/dist/src/base/ServiceMenuFormItem.js +19 -0
  140. package/dist/src/base/ServiceOperate.js +1002 -0
  141. package/dist/src/base/SystemHelpTreeFind.js +43 -0
  142. package/dist/src/base/aiPromptMode.js +144 -0
  143. package/dist/src/base/data-check/DataChckDetail.js +242 -0
  144. package/dist/src/base/data-check/DataCheck.js +307 -0
  145. package/dist/src/base/data-check/DataCheckList.js +363 -0
  146. package/dist/src/base/data-check/DataCheckSubList.js +5 -0
  147. package/dist/src/base/data-check/DataCheckSubList.vue.js +195 -0
  148. package/dist/src/base/entity-view/EntityViewFormItem.js +4 -0
  149. package/dist/src/base/entity-view/EntityViewFormItem.vue.js +229 -0
  150. package/dist/src/base/entity-view/EntityViewSubList.js +4 -0
  151. package/dist/src/base/entity-view/EntityViewSubList.vue.js +181 -0
  152. package/dist/src/base/entity-view-config/BasicInfoDialog.js +207 -0
  153. package/dist/src/base/entity-view-config/FieldPanel.js +691 -0
  154. package/dist/src/base/entity-view-config/FieldPropForm.js +785 -0
  155. package/dist/src/base/entity-view-config/FormulaDialog.js +142 -0
  156. package/dist/src/base/entity-view-config/ObjectFieldDialog.js +270 -0
  157. package/dist/src/base/entity-view-config/RelationPanel.js +778 -0
  158. package/dist/src/base/entity-view-config/SourceManagerDialog.js +657 -0
  159. package/dist/src/base/entity-view-config/SqlPanel.js +61 -0
  160. package/dist/src/base/entity-view-config/SqlPanel.vue.js +43 -0
  161. package/dist/src/base/entity-view-config/UnionPanel.js +1081 -0
  162. package/dist/src/base/entity-view-config/ViewConfig.js +585 -0
  163. package/dist/src/base/entity-view-config/constants.js +145 -0
  164. package/dist/src/base/user-type/UserTypeFormItem.js +4 -0
  165. package/dist/src/base/user-type/UserTypeFormItem.vue.js +183 -0
  166. package/dist/src/components/AddPageFormItem.js +4 -0
  167. package/dist/src/components/AddPageFormItem.vue.js +92 -0
  168. package/dist/src/components/AddUsedInterface.js +213 -0
  169. package/dist/src/components/AiDocFormItem.js +5 -0
  170. package/dist/src/components/AiDocFormItem.vue.js +271 -0
  171. package/dist/src/components/AiList.js +7 -0
  172. package/dist/src/components/AiList.vue.js +93 -0
  173. package/dist/src/components/AiPermissionAssistant.js +283 -0
  174. package/dist/src/components/AppList.js +413 -0
  175. package/dist/src/components/Apply/AIApplyIndex.js +178 -0
  176. package/dist/src/components/Apply/ApplyIndex.js +281 -0
  177. package/dist/src/components/AttributeList.js +869 -0
  178. package/dist/src/components/Banner.js +25 -0
  179. package/dist/src/components/BatchAddFieldDialog.js +424 -0
  180. package/dist/src/components/CardO.js +46 -0
  181. package/dist/src/components/CheckForm.js +33 -0
  182. package/dist/src/components/ClientAdminFormItem.js +46 -0
  183. package/dist/src/components/ClientAdminList.js +8 -0
  184. package/dist/src/components/ClientAdminList.vue.js +221 -0
  185. package/dist/src/components/ClientFormItem.js +47 -0
  186. package/dist/src/components/ClientList.js +5 -0
  187. package/dist/src/components/ClientList.vue.js +216 -0
  188. package/dist/src/components/CodeDetail.js +453 -0
  189. package/dist/src/components/CodeManage.js +1029 -0
  190. package/dist/src/components/ComponentFind.js +209 -0
  191. package/dist/src/components/ComponentList.js +498 -0
  192. package/dist/src/components/ConfigParamFormItem.js +7 -0
  193. package/dist/src/components/ConfigParamFormItem.vue.js +389 -0
  194. package/dist/src/components/CreatePage.js +297 -0
  195. package/dist/src/components/DashboardCreate.js +105 -0
  196. package/dist/src/components/DataLog.js +168 -0
  197. package/dist/src/components/DataLogTimeline.js +110 -0
  198. package/dist/src/components/DataSnapshot.js +206 -0
  199. package/dist/src/components/DataSnapshotList.js +74 -0
  200. package/dist/src/components/DataSyncInit.js +172 -0
  201. package/dist/src/components/DblogList.js +5 -0
  202. package/dist/src/components/DblogList.vue.js +143 -0
  203. package/dist/src/components/DeptFind.js +7 -0
  204. package/dist/src/components/DeptFind.vue.js +109 -0
  205. package/dist/src/components/DynamicUserList.js +4 -0
  206. package/dist/src/components/DynamicUserList.vue.js +89 -0
  207. package/dist/src/components/EntityCheckboxFind.js +4 -0
  208. package/dist/src/components/EntityCheckboxFind.vue.js +97 -0
  209. package/dist/src/components/EntityRelationAdd.js +387 -0
  210. package/dist/src/components/EntityRelationAddFormItem.js +4 -0
  211. package/dist/src/components/EntityRelationAddFormItem.vue.js +284 -0
  212. package/dist/src/components/EntityRightFormItem.js +9 -0
  213. package/dist/src/components/EntityRightFormItem.vue.js +401 -0
  214. package/dist/src/components/EntityRightSubList.js +639 -0
  215. package/dist/src/components/EntityTagSubList.js +4 -0
  216. package/dist/src/components/EntityTagSubList.vue.js +103 -0
  217. package/dist/src/components/EntityTreeManage.js +864 -0
  218. package/dist/src/components/ExportSystemConfig.js +166 -0
  219. package/dist/src/components/FieldTreeFind.js +40 -0
  220. package/dist/src/components/FormulaEditor.js +7 -0
  221. package/dist/src/components/FormulaEditor.vue.js +1235 -0
  222. package/dist/src/components/GenTestData.js +637 -0
  223. package/dist/src/components/HallNav.js +5 -0
  224. package/dist/src/components/HallNav.vue.js +156 -0
  225. package/dist/src/components/HeaderNav.js +368 -0
  226. package/dist/src/components/IconCard.js +97 -0
  227. package/dist/src/components/IconFontLibrary.js +4 -0
  228. package/dist/src/components/IconFontLibrary.vue.js +67 -0
  229. package/dist/src/components/IconFontList.js +4 -0
  230. package/dist/src/components/IconFontList.vue.js +79 -0
  231. package/dist/src/components/IdentifyList.js +32 -0
  232. package/dist/src/components/ImportSystemConfig.js +302 -0
  233. package/dist/src/components/InterfaceSubList.js +319 -0
  234. package/dist/src/components/JsPanel.js +100 -0
  235. package/dist/src/components/LanguageImportPage.js +589 -0
  236. package/dist/src/components/LanguageSetting.js +544 -0
  237. package/dist/src/components/List/LinkItem.js +112 -0
  238. package/dist/src/components/List/List.js +17 -0
  239. package/dist/src/components/List/ListItem.js +30 -0
  240. package/dist/src/components/MenuTreeFind.js +7 -0
  241. package/dist/src/components/MenuTreeFind.vue.js +81 -0
  242. package/dist/src/components/MessageList.js +7 -0
  243. package/dist/src/components/MessageList.vue.js +101 -0
  244. package/dist/src/components/MessageRuleFormItem.js +59 -0
  245. package/dist/src/components/MessageRuleReceiverFormItem.js +223 -0
  246. package/dist/src/components/MessageTemplate.js +394 -0
  247. package/dist/src/components/MessageTemplate.vue.js +693 -0
  248. package/dist/src/components/MetaList.js +4 -0
  249. package/dist/src/components/MetaList.vue.js +100 -0
  250. package/dist/src/components/Nav.js +495 -0
  251. package/dist/src/components/NavFormCatalogItem.js +6 -0
  252. package/dist/src/components/NumList.js +59 -0
  253. package/dist/src/components/OperateLog.js +132 -0
  254. package/dist/src/components/PageCatalog.js +7 -0
  255. package/dist/src/components/PageCatalog.vue.js +292 -0
  256. package/dist/src/components/PageChart.js +212 -0
  257. package/dist/src/components/PageSwipes.js +131 -0
  258. package/dist/src/components/PersonFormItem.js +4 -0
  259. package/dist/src/components/PersonFormItem.vue.js +96 -0
  260. package/dist/src/components/Popup.js +238 -0
  261. package/dist/src/components/PrintFormList.js +8 -0
  262. package/dist/src/components/PrintFormList.vue.js +203 -0
  263. package/dist/src/components/PublishEntity.js +113 -0
  264. package/dist/src/components/RelyFieldTreeFind.js +51 -0
  265. package/dist/src/components/ReportFormList.js +235 -0
  266. package/dist/src/components/ReportList.js +8 -0
  267. package/dist/src/components/ReportList.vue.js +248 -0
  268. package/dist/src/components/RightSubList.js +7 -0
  269. package/dist/src/components/RightSubList.vue.js +150 -0
  270. package/dist/src/components/RoleAddUser.js +54 -0
  271. package/dist/src/components/RoleApplicationCard.js +137 -0
  272. package/dist/src/components/RoleApplicationList.js +936 -0
  273. package/dist/src/components/RoleApplicationSet.js +1000 -0
  274. package/dist/src/components/Search.js +253 -0
  275. package/dist/src/components/ServiceFormItem.js +32 -0
  276. package/dist/src/components/SnapshotDataList.js +72 -0
  277. package/dist/src/components/SystemAdminList.js +7 -0
  278. package/dist/src/components/SystemAdminList.vue.js +198 -0
  279. package/dist/src/components/SystemFormItem.js +7 -0
  280. package/dist/src/components/SystemFormItem.vue.js +170 -0
  281. package/dist/src/components/SystemNav.js +29 -0
  282. package/dist/src/components/TaskNumCard.js +22 -0
  283. package/dist/src/components/TimerRuleFormItem.js +332 -0
  284. package/dist/src/components/TodoList.js +7 -0
  285. package/dist/src/components/TodoList.vue.js +327 -0
  286. package/dist/src/components/UpdateSystemConfig.js +240 -0
  287. package/dist/src/components/UserCard.js +82 -0
  288. package/dist/src/components/UserFind.js +5 -0
  289. package/dist/src/components/UserFind.vue.js +592 -0
  290. package/dist/src/components/UserFormItem.js +8 -0
  291. package/dist/src/components/UserFormItem.vue.js +609 -0
  292. package/dist/src/components/UserList.js +4 -0
  293. package/dist/src/components/UserList.vue.js +23 -0
  294. package/dist/src/components/UserManage.js +801 -0
  295. package/dist/src/components/UserRoleList.js +578 -0
  296. package/dist/src/components/ValidateRuleFormItem.js +108 -0
  297. package/dist/src/components/ViewFieldDefine.js +746 -0
  298. package/dist/src/components/WikiSpaceList.js +4 -0
  299. package/dist/src/components/WikiSpaceList.vue.js +330 -0
  300. package/dist/src/components/WikiWorkbench.js +646 -0
  301. package/dist/src/components/authorization/AddApiPermiss.js +230 -0
  302. package/dist/src/components/authorization/AddAuthorization.js +160 -0
  303. package/dist/src/components/authorization/AddEntityFind.js +61 -0
  304. package/dist/src/components/authorization/AddNoApi.js +190 -0
  305. package/dist/src/components/authorization/AddRoleScope.js +336 -0
  306. package/dist/src/components/authorization/AiRolePlan.js +671 -0
  307. package/dist/src/components/authorization/ApiShareOtherList.js +396 -0
  308. package/dist/src/components/authorization/ApiSystemList.js +241 -0
  309. package/dist/src/components/authorization/AuthorizationInterface.js +621 -0
  310. package/dist/src/components/authorization/AuthorizationRoleSystem.js +849 -0
  311. package/dist/src/components/authorization/EntityConstraintFormItem.js +283 -0
  312. package/dist/src/components/authorization/OtherShareApiList.js +246 -0
  313. package/dist/src/components/authorization/PermissCommonRoleTabs.js +113 -0
  314. package/dist/src/components/authorization/PermissRoleAuthorization.js +1285 -0
  315. package/dist/src/components/authorization/PermissRoleTabs.js +112 -0
  316. package/dist/src/components/authorization/RoleLevel.js +4 -0
  317. package/dist/src/components/authorization/RoleLevel.vue.js +110 -0
  318. package/dist/src/components/authorization/RoleLevelScope.js +269 -0
  319. package/dist/src/components/authorization/SystemAddNoApi.js +186 -0
  320. package/dist/src/components/card/CardList.js +64 -0
  321. package/dist/src/components/card/CardListItem.js +96 -0
  322. package/dist/src/components/card/Title.js +41 -0
  323. package/dist/src/components/custom-bpmn/CustomContextPad.js +53 -0
  324. package/dist/src/components/custom-bpmn/CustomPalette.js +4 -0
  325. package/dist/src/components/custom-bpmn/CustomRenderer.js +4 -0
  326. package/dist/src/components/custom-bpmn/CustomRendererBpmn.js +87 -0
  327. package/dist/src/components/custom-bpmn/PropertiesView.js +12559 -0
  328. package/dist/src/components/custom-bpmn/components/AiModel.js +352 -0
  329. package/dist/src/components/custom-bpmn/components/Api.js +375 -0
  330. package/dist/src/components/custom-bpmn/components/BatchOperation.js +208 -0
  331. package/dist/src/components/custom-bpmn/components/Copy.js +652 -0
  332. package/dist/src/components/custom-bpmn/components/DataTransform.js +441 -0
  333. package/dist/src/components/custom-bpmn/components/Demo.js +62 -0
  334. package/dist/src/components/custom-bpmn/components/EditDiv.js +357 -0
  335. package/dist/src/components/custom-bpmn/components/GenScope.js +258 -0
  336. package/dist/src/components/custom-bpmn/components/GlobalParamsTree.js +75 -0
  337. package/dist/src/components/custom-bpmn/components/Knowledges.js +237 -0
  338. package/dist/src/components/custom-bpmn/components/Login.js +590 -0
  339. package/dist/src/components/custom-bpmn/components/MessageQueue.js +220 -0
  340. package/dist/src/components/custom-bpmn/components/MetaSelect.js +159 -0
  341. package/dist/src/components/custom-bpmn/components/NumStatistic.js +407 -0
  342. package/dist/src/components/custom-bpmn/components/ObjectTransform.js +788 -0
  343. package/dist/src/components/custom-bpmn/components/OutPut.js +394 -0
  344. package/dist/src/components/custom-bpmn/components/ParamsMachining.js +888 -0
  345. package/dist/src/components/custom-bpmn/components/ParamsOutput.js +160 -0
  346. package/dist/src/components/custom-bpmn/components/ProcessAudit.js +795 -0
  347. package/dist/src/components/custom-bpmn/components/SingleMultipleFind.js +1039 -0
  348. package/dist/src/components/custom-bpmn/components/TestDialog.js +860 -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 +4 -0
  361. package/dist/src/components/custom-bpmn/palette.js +12 -0
  362. package/dist/src/components/custom-bpmn/util.js +6 -0
  363. package/dist/src/components/dashboard-create.js +19 -0
  364. package/dist/src/components/entity-relation-diagram/Er.js +339 -0
  365. package/dist/src/components/entity-relation-diagram/renderErNode.js +35 -0
  366. package/dist/src/components/expand/AddForm.js +85 -0
  367. package/dist/src/components/expand/AddFormItem.js +148 -0
  368. package/dist/src/components/filter/Filter.js +719 -0
  369. package/dist/src/components/filter/FilterItem.js +492 -0
  370. package/dist/src/components/hall/AppCollect.js +120 -0
  371. package/dist/src/components/hall/AppList.js +479 -0
  372. package/dist/src/components/hall/AppVisitRecord.js +112 -0
  373. package/dist/src/components/hall/Banner.js +32 -0
  374. package/dist/src/components/hall/ServiceCard.js +123 -0
  375. package/dist/src/components/hall/UserCard.js +80 -0
  376. package/dist/src/components/permiss/AddApi.js +142 -0
  377. package/dist/src/components/permiss/AddNoEntityApi.js +179 -0
  378. package/dist/src/components/permiss/AddSystemPermiss.js +130 -0
  379. package/dist/src/components/permiss/AllocateRole.js +130 -0
  380. package/dist/src/components/permiss/ApiSubList.js +150 -0
  381. package/dist/src/components/permiss/CommonRoleMenu.js +590 -0
  382. package/dist/src/components/permiss/FieldScope.js +199 -0
  383. package/dist/src/components/permiss/PermissManage.js +87 -0
  384. package/dist/src/components/permiss/RoleAppList.js +35 -0
  385. package/dist/src/components/permiss/RoleMenu.js +517 -0
  386. package/dist/src/components/permiss/RoleSubList.js +4 -0
  387. package/dist/src/components/permiss/RoleSubList.vue.js +300 -0
  388. package/dist/src/components/permiss/jurisdiction.js +358 -0
  389. package/dist/src/components/process-healthcheck/HealthcheckChart.js +233 -0
  390. package/dist/src/components/process-healthcheck/HealthcheckChart.vue.js +348 -0
  391. package/dist/src/components/process-healthcheck/HealthcheckRenderer.js +35 -0
  392. package/dist/src/components/process-healthcheck/index.js +7 -0
  393. package/dist/src/components/report/Config.js +1707 -0
  394. package/dist/src/components/report/Design.js +4631 -0
  395. package/dist/src/components/report/StatList.js +216 -0
  396. package/dist/src/components/right/EntityOtherSystemList.js +81 -0
  397. package/dist/src/components/right/SystemInterfaceList.js +417 -0
  398. package/dist/src/components/right/SystemList.js +1016 -0
  399. package/dist/src/components/upLoad.js +70 -0
  400. package/dist/src/components/viewport/LookViewList.js +21 -0
  401. package/dist/src/components/viewport/ViewAddForm.js +141 -0
  402. package/dist/src/components/viewport/ViewDefineList.js +49 -0
  403. package/dist/src/components/viewport/ViewFiedList.js +722 -0
  404. package/dist/src/components/viewport/ViewScope.js +115 -0
  405. package/dist/src/components/wiki-workbench/WikiCites.js +300 -0
  406. package/dist/src/components/wiki-workbench/WikiIntake.js +307 -0
  407. package/dist/src/components/wiki-workbench/WikiIntake.vue.js +309 -0
  408. package/dist/src/components/wiki-workbench/WikiJobs.js +194 -0
  409. package/dist/src/components/wiki-workbench/WikiRevisions.js +228 -0
  410. package/dist/src/components/wiki-workbench/WikiSpaceSettings.js +58 -0
  411. package/dist/src/components/wiki-workbench/WikiSpaceSettings.vue.js +127 -0
  412. package/dist/src/components/wiki-workbench/codes.js +26 -0
  413. package/dist/src/components/wiki-workbench/index.js +12 -0
  414. package/dist/src/index.js +41 -0
  415. package/dist/src/popup.js +67 -0
  416. package/dist/src/public-components.js +19 -0
  417. package/dist/src/remote.entry.js +30 -0
  418. package/dist/src/route-components.js +11 -0
  419. package/dist/src/system.component.index.js +4 -0
  420. package/dist/src/system.component.js +341 -0
  421. package/dist/src/system.component.lazy.js +49 -0
  422. package/dist/src/views/Add.js +7 -0
  423. package/dist/src/views/Add.vue.js +734 -0
  424. package/dist/src/views/AiToolManager.js +2529 -0
  425. package/dist/src/views/App.js +47 -0
  426. package/dist/src/views/AppRoleSelect.js +232 -0
  427. package/dist/src/views/BatchEdit.js +255 -0
  428. package/dist/src/views/Bpmn.js +318 -0
  429. package/dist/src/views/Bpmn.vue.js +1196 -0
  430. package/dist/src/views/EntityCheckPage.js +48 -0
  431. package/dist/src/views/EntityDetailPage.js +4 -0
  432. package/dist/src/views/EntityDetailPage.vue.js +73 -0
  433. package/dist/src/views/EntityEditPage.js +9 -0
  434. package/dist/src/views/EntitySubListPage.js +40 -0
  435. package/dist/src/views/EntityTreePage.js +31 -0
  436. package/dist/src/views/Error.js +209 -0
  437. package/dist/src/views/ExcelDesign.js +2729 -0
  438. package/dist/src/views/ExcelDesign.vue.js +2165 -0
  439. package/dist/src/views/ExcelPreviewPage.js +165 -0
  440. package/dist/src/views/ExcelPreviewPage.vue.js +572 -0
  441. package/dist/src/views/ExportFilePage.js +20 -0
  442. package/dist/src/views/ExportPage.js +20 -0
  443. package/dist/src/views/FormDesign.js +1032 -0
  444. package/dist/src/views/FormDesign.vue.js +1564 -0
  445. package/dist/src/views/I18nWorkbench.js +520 -0
  446. package/dist/src/views/ImportFilePage.js +20 -0
  447. package/dist/src/views/ImportPage.js +20 -0
  448. package/dist/src/views/MEntityListPage.js +65 -0
  449. package/dist/src/views/MEntitySubListPage.js +40 -0
  450. package/dist/src/views/MinePage.js +15 -0
  451. package/dist/src/views/Module.js +172 -0
  452. package/dist/src/views/PageAttributeTreePage.js +420 -0
  453. package/dist/src/views/PageConfig.js +176 -0
  454. package/dist/src/views/Permission.js +741 -0
  455. package/dist/src/views/PersonalInfo.js +791 -0
  456. package/dist/src/views/QyWechat.js +61 -0
  457. package/dist/src/views/ReportFormListPage.js +76 -0
  458. package/dist/src/views/TaskPage.js +179 -0
  459. package/dist/src/views/WikiBinding.js +613 -0
  460. package/dist/src/views/client/AddForm.js +54 -0
  461. package/dist/src/views/client/AppMarket.js +289 -0
  462. package/dist/src/views/client/ClientIndex.js +208 -0
  463. package/dist/src/views/client/ClientModuleIndexPage.js +4 -0
  464. package/dist/src/views/client/ClientModuleIndexPage.vue.js +30 -0
  465. package/dist/src/views/client/CopySystem.js +135 -0
  466. package/dist/src/views/client/CreateAppFormItem.js +7 -0
  467. package/dist/src/views/client/CreateAppFormItem.vue.js +232 -0
  468. package/dist/src/views/client/CreateMethod.js +75 -0
  469. package/dist/src/views/client/InstallSystem.js +308 -0
  470. package/dist/src/views/client/ManageList.js +4 -0
  471. package/dist/src/views/client/ManageList.vue.js +211 -0
  472. package/dist/src/views/client/OpenClientManage.js +50 -0
  473. package/dist/src/views/client/OpenSystemManage.js +55 -0
  474. package/dist/src/views/client/PageTabsCyclic.js +91 -0
  475. package/dist/src/views/client/SelfBuiltSystem.js +443 -0
  476. package/dist/src/views/client/StandardProduct.js +232 -0
  477. package/dist/src/views/client/SystemAppAccredit.js +560 -0
  478. package/dist/src/views/client/SystemAppManager.js +292 -0
  479. package/dist/src/views/client/SystemAppManager.vue.js +559 -0
  480. package/dist/src/views/client/SystemManager.js +451 -0
  481. package/dist/src/views/client/SystemManager.vue.js +522 -0
  482. package/dist/src/views/i18n/I18nAiTaskHistoryDialog.js +229 -0
  483. package/dist/src/views/i18n/I18nPublishDialog.js +450 -0
  484. package/dist/src/views/i18n/I18nTranslationList.js +7 -0
  485. package/dist/src/views/i18n/I18nTranslationList.vue.js +247 -0
  486. package/dist/src/views/i18n/i18n-workbench-text.js +10 -0
  487. package/dist/src/views/layout/CardList.js +95 -0
  488. package/dist/src/views/layout/Grid.js +137 -0
  489. package/dist/src/views/match/AddTargetField.js +7 -0
  490. package/dist/src/views/match/AddTargetField.vue.js +127 -0
  491. package/dist/src/views/match/MatchAddFormItem.js +4 -0
  492. package/dist/src/views/match/MatchAddFormItem.vue.js +84 -0
  493. package/dist/src/views/match/conversion.js +804 -0
  494. package/dist/src/views/match/customize.js +390 -0
  495. package/dist/src/views/match/fieldMatch.js +7 -0
  496. package/dist/src/views/match/fieldMatch.vue.js +610 -0
  497. package/dist/src/views/report/AddFormItem.js +59 -0
  498. package/dist/src/views/report/DesignReport.js +1391 -0
  499. package/dist/src/views/report/ReportTreeFind.js +7 -0
  500. package/dist/src/views/report/ReportTreeFind.vue.js +166 -0
  501. package/dist/style.css +33364 -0
  502. package/package.json +132 -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,3350 @@
1
+ <template>
2
+ <div class="container">
3
+ <hr title="打印线" class="ureport-right-hr-for-print" style="height: calc(100% - 45px);width: 0px;border-left: 1px dashed rgb(153, 153, 153);position: absolute;left: 700pt;top: 35px;z-index: 10;">
4
+ <div class="report-header">
5
+ <div class="report-title">
6
+ <i class="report-back el-icon-arrow-left" @click="backConfirm"></i>
7
+ <span class="report-name">
8
+ <span v-if="!editName">{{excelInfo.NAME}}</span>
9
+ <el-input v-else v-model="excelInfo.NAME" size="small" @change="setFormName"></el-input>
10
+ <i v-if="!editName" class="el-icon-edit-outline" @click="editName=!editName"></i>
11
+ <i v-else class="el-icon-circle-check" @click="setFormName"></i>
12
+ </span>
13
+ <!-- <el-button type="primary" link icon="el-icon-setting">设置</el-button> -->
14
+ </div>
15
+ <div class="report-operate">
16
+ <el-dropdown v-if="languageFlag === '1'" @command="switchLanguage">
17
+ <el-button class="language__switch" type="small" plain>
18
+ <i class="language-icon epx-icon-diqiu"></i>
19
+ <span class="language-name">国际化({{ currentLanguageName }}) </span>
20
+ <i class="el-icon-arrow-down el-icon--right"></i>
21
+ </el-button>
22
+ <template v-slot:dropdown><el-dropdown-menu>
23
+ <el-dropdown-item v-for="language in languageList" :class="['language-item', {'is-active': language.id === currentLanguage}]" :key="language.id" :command="language.id"> {{ language.name }}</el-dropdown-item>
24
+ </el-dropdown-menu></template>
25
+ </el-dropdown>
26
+ <el-button type="primary" link @click="globalSetting=true" :style="{marginRight: '12px'}">全局设置</el-button>
27
+ <el-upload class="import-btn" action="" :show-file-list="false" :http-request="importExcel">
28
+ <el-button size="default" :loading="isImportExcel">导入</el-button>
29
+ </el-upload>
30
+ <el-button size="default" @click="showFormParamsDialog= true">预览</el-button>
31
+ <el-button size="default" type="primary" @click="saveExcelData()">保存</el-button>
32
+ </div>
33
+ </div>
34
+ <div class="content">
35
+ <div class="data-source">
36
+ <el-tabs type="border-card">
37
+ <el-tab-pane label="数据源">
38
+ <div class="module-header">
39
+ <el-button size="small" type="primary" @click="addDataSource">新增</el-button>
40
+ <el-button size="small" type="primary" @click="editDataSource">编辑</el-button>
41
+ <el-button size="small" type="primary" @click="deleteDataSource">删除</el-button>
42
+ </div>
43
+ <div class="data-source__header">
44
+ <el-input v-model="searchText" size="default" placeholder="请输入"></el-input>
45
+ <div class="data-source-operate__footer">
46
+ <el-checkbox v-model="showLogField">日志字段</el-checkbox>
47
+ <el-checkbox v-model="showSubField">子集字段</el-checkbox>
48
+ </div>
49
+ </div>
50
+ <el-tree
51
+ class="data-source-tree"
52
+ ref="fieldTree"
53
+ :data="showDataSource"
54
+ :props="{label: 'name', children: 'children'}"
55
+ node-key="key"
56
+ :auto-expand-parent="false"
57
+ :expand-on-click-node="false"
58
+ :filter-node-method="filterNode"
59
+ render-after-expand
60
+ :check-on-click-node="true"
61
+ :highlight-current="true"
62
+ draggable
63
+ @node-drag-start="dragDataSource"
64
+ @node-drop="dropDataSource"
65
+ :allow-drop="allowDrop"
66
+ @node-click="clickDataSource"
67
+ >
68
+ <template v-slot="{ node, data }">
69
+ <span :style="{color: data.type==='meta' && data.relationType==='1' ? 'red' : '', 'user-select': 'none'}">
70
+ <i v-if="data.load" class="el-icon-loading" />
71
+ {{node.label}}
72
+ </span>
73
+ </template>
74
+ </el-tree>
75
+ <el-dialog title="添加数据源" v-model="dataSourceModal" width="70%">
76
+ <div class="add" v-if="dataSourceModal">
77
+ <li class="data-source-modal-item">
78
+ <p class="data-source-modal-header">数据源</p>
79
+ <div class="data-souce-modal-content data-souce-modal-content__base">
80
+ <div class="form-item">
81
+ <label>名称:</label>
82
+ <epx-table-form-item
83
+ v-model="dataSourceInfo.NAME"
84
+ :fieldConfigs="{attriName: 'NAME',dataType: 'text',attriLabel: '名称', state:'EDIT'}">
85
+ </epx-table-form-item>
86
+ </div>
87
+ <div class="form-item">
88
+ <label>对象:</label>
89
+ <epx-table-form-item :value="{id: dataSourceInfo.ENTITY, name: dataSourceInfo['ENTITY#']}" @change="v=> {
90
+ dataSourceInfo['ENTITY'] = v?v.id:''
91
+ dataSourceInfo['ENTITY#']=v?v.name: ''
92
+ }"
93
+ :fieldConfigs="{attriName: 'ENTITY',dataType: 'object',attriLabel: '对象', codeKey: 'FM_ENTITY', state:'EDIT',flag: 'process_entity_find'}">
94
+ </epx-table-form-item>
95
+ </div>
96
+ <div class="form-item">
97
+ <label>对象视图:</label>
98
+ <epx-table-form-item :value="{id: dataSourceInfo.ENTITY_VIEW, name: dataSourceInfo['ENTITY_VIEW#']}" @change="v=> {
99
+ dataSourceInfo['ENTITY_VIEW'] = v?v.id: ''
100
+ dataSourceInfo['ENTITY_VIEW#']=v?v.name: ''
101
+ }"
102
+ :fieldConfigs="{attriName: 'ENTITY_VIEW',dataType: 'object',attriLabel: '对象视图', codeKey: 'FM_ENTITY_VIEW', state:'EDIT', scopeParams: [{field: 'ENTITY', values: dataSourceInfo.ENTITY}],flag: 'process_entity_view_find'}">
103
+ </epx-table-form-item>
104
+ </div>
105
+ <div class="form-item">
106
+ <label>关联对象:</label>
107
+ <div class="link-entity-trigger">
108
+ <el-popover trigger="click" placement="bottom-start" width="320" popper-class="link-entity-popper">
109
+ <template v-slot:reference><el-input :model-value="linkEntityLabel" placeholder="请选择" readonly suffix-icon="el-icon-arrow-down" size="default"></el-input></template>
110
+ <div v-if="linkEntityTree.length" class="link-entity-tree">
111
+ <el-tree
112
+ ref="linkEntityTree"
113
+ :data="linkEntityTree"
114
+ show-checkbox
115
+ check-strictly
116
+ node-key="flag"
117
+ :props="{label: 'title', children: 'childrens'}"
118
+ :default-checked-keys="linkEntityCheckedKeys"
119
+ @check="onLinkEntityCheck"
120
+ ></el-tree>
121
+ </div>
122
+ <div v-else class="link-entity-empty">{{ dataSourceInfo.ENTITY ? '无可选数据' : '请先选择对象' }}</div>
123
+ </el-popover>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </li>
128
+ <li class="data-source-modal-item">
129
+ <p class="data-source-modal-header">数据范围</p>
130
+ <div class="data-souce-modal-content">
131
+ <div class="data-source__scope">
132
+ <epx-form-scope v-model="dataSourceInfo.DATA_SCOPE" :metaId="dataSourceInfo.ENTITY" :metaViewId="dataSourceInfo.ENTITY_VIEW" :fieldConfigs="{ attriName: 'DATA_SCOPE', attriLabel: '数据范围', state: 'EDIT', modeType: ['FIXED_VALUE', 'SYSTEM_VARIABLE', 'DEFINED_DYNAMIC', 'DEFINED'], defineDynamicParams }"></epx-form-scope>
133
+ </div>
134
+ </div>
135
+ </li>
136
+ <li class="data-source-modal-item">
137
+ <p class="data-source-modal-header">排序方式</p>
138
+ <div class="data-souce-modal-content">
139
+ <div class="sort-field" v-for="item in sortFields" :key="item.code">
140
+ {{item.text}}
141
+ <span class="sort-icon" @click="changeSort(item)">
142
+ <i :class="['el-icon-sort-down', {'active':item.sort==='desc'}]"></i>
143
+ <i :class="['el-icon-sort-up', , {'active':item.sort==='asc'}]"></i>
144
+ </span>
145
+ <i class="el-icon-close" @click="deleteSort(item)"></i>
146
+ </div>
147
+ <div class="sort-opera">
148
+ <el-popover ref="popover" trigger="click" :tabindex="1" popper-class="sort-opera-popover">
149
+ <template v-slot:reference><span class="sort-opera-item">
150
+ <i class="el-icon-plus"></i>
151
+ <font>添加排序字段</font>
152
+ </span></template>
153
+ <div class="filter-condition-opera__popper">
154
+ <epx-meta-field-library :metaId="dataSource.ENTITY" :fields="allFields" @select="addSortField"></epx-meta-field-library>
155
+ </div>
156
+ </el-popover>
157
+ </div>
158
+ </div>
159
+ </li>
160
+ <li class="data-source-modal-item">
161
+ <p class="data-source-modal-header">分组排序字段</p>
162
+ <div class="data-souce-modal-content">
163
+ <div class="sort-field" v-if="this.groupSortFields">
164
+ {{getText(this.groupSortFields)}}
165
+ <i class="el-icon-close" @click="deleteGroupSort(item)"></i>
166
+ </div>
167
+ <div class="sort-opera">
168
+ <el-popover ref="popover" trigger="click" :tabindex="1" popper-class="sort-opera-popover">
169
+ <template v-slot:reference><span class="sort-opera-item">
170
+ <i class="el-icon-plus"></i>
171
+ <font>添加分组排序字段</font>
172
+ </span></template>
173
+ <div class="filter-condition-opera__popper">
174
+ <epx-meta-field-library :metaId="dataSource.ENTITY" :fields="allFields" @select="addGroupSortField"></epx-meta-field-library>
175
+ </div>
176
+ </el-popover>
177
+ </div>
178
+ </div>
179
+ </li>
180
+ <li class="data-source-modal-item">
181
+ <p class="data-source-modal-header">主数据源</p>
182
+ <div class="data-souce-modal-content">
183
+ <div class="data-source__scope">
184
+ <el-switch v-model="dataSourceInfo.IS_MAIN_SOUCE" active-value='1' inactive-value='0'></el-switch>
185
+ </div>
186
+ </div>
187
+ </li>
188
+ <li class="data-source-modal-item">
189
+ <p class="data-source-modal-header">是否加载关联对象</p>
190
+ <div class="data-souce-modal-content">
191
+ <div class="data-source__scope">
192
+ <el-switch v-model="loadRelationEntity" active-value='1' inactive-value='0'></el-switch>
193
+ </div>
194
+ </div>
195
+ </li>
196
+ <li class="data-source-modal-item">
197
+ <p class="data-source-modal-header">数据源最大条数</p>
198
+ <div class="data-souce-modal-content">
199
+ <div class="data-source__scope">
200
+ <epx-table-form-item
201
+ v-model="dataSourceInfo.DATA_LIMIT"
202
+ :fieldConfigs="{attriName: 'DATA_LIMIT',dataType: 'num',attriLabel: '数据源最大条数', state:'EDIT'}">
203
+ </epx-table-form-item>
204
+ </div>
205
+ </div>
206
+ </li>
207
+ </div>
208
+ <template v-slot:footer><span class="dialog-footer">
209
+ <el-button @click="dataSourceModal = false">取 消</el-button>
210
+ <el-button type="primary" @click.stop="submitDataSource">确 定</el-button>
211
+ </span></template>
212
+ </el-dialog>
213
+ </el-tab-pane>
214
+ <el-tab-pane label="参数">
215
+ <div class="module-header">
216
+ <el-button size="small" type="primary" @click="addFormParam">新增</el-button>
217
+ </div>
218
+ <el-tree class="params-tree" :data="variableTree" :props="{label: 'name'}" node-key="value" :default-expanded-keys="['customParams', 'systemVariable', 'processParams']" :style="{overflow:'auto'}">
219
+ <template v-slot="{ node, data }">
220
+ <div class="params">
221
+ <span :draggable="data.type==='variable' || data.type==='process' ?'true': 'false'" @dragstart="e=>(data.type==='variable'?dragVariableFn(e, data, node):dragProcessParamFn(e, data, node))">{{node.label}}</span>
222
+ <span class="params-icon" v-if="data.type!=='folder' && data.type!=='variable' && data.type!=='process' && data.value!=='id'">
223
+ <i class="el-icon-edit" @click="editFormParam(data)"></i>
224
+ <i class="el-icon-close" @click="deleteFormParam(data)"></i>
225
+ </span>
226
+ </div>
227
+ </template>
228
+ </el-tree>
229
+ <el-dialog title="添加表单参数" v-model="formParamModal" width="400px">
230
+ <div class="data-souce-modal-content data-souce-modal-content__base">
231
+ <div class="form-item">
232
+ <label class="table-form-item-label">编号:</label>
233
+ <epx-table-form-item v-model="formParam.CODE"
234
+ :fieldConfigs="{attriName: 'CODE', attriLabel: '编号', dataType: 'text', state:'EDIT'}">
235
+ </epx-table-form-item>
236
+ </div>
237
+ <div class="form-item">
238
+ <label class="table-form-item-label">名称:</label>
239
+ <epx-table-form-item v-model="formParam.NAME"
240
+ :fieldConfigs="{attriName: 'NAME', attriLabel: '名称', dataType: 'text', state:'EDIT'}">
241
+ </epx-table-form-item>
242
+ </div>
243
+ </div>
244
+ <template v-slot:footer><span class="dialog-footer">
245
+ <el-button @click="formParamModal = false">取 消</el-button>
246
+ <el-button type="primary" @click.stop="saveFormParam">确 定</el-button>
247
+ </span></template>
248
+ </el-dialog>
249
+ </el-tab-pane>
250
+ </el-tabs>
251
+ </div>
252
+ <!-- luckysheet.destroy() 会清空容器,加列按钮必须放在容器外层 -->
253
+ <div class="sheet-area">
254
+ <div class="luckysheet-container" ref="luckysheet">
255
+
256
+ </div>
257
+ <el-popover placement="left" width="230" trigger="click" v-model:visible="addColumnVisible">
258
+ <div class="add-column__pop">
259
+ <span class="add-column__pop-text">添加</span>
260
+ <el-input-number v-model="addColumnNum" size="small" controls-position="right" :min="1" :max="200"></el-input-number>
261
+ <span class="add-column__pop-text">列</span>
262
+ <el-button size="small" type="primary" @click="addColumns">确定</el-button>
263
+ </div>
264
+ <template v-slot:reference><div class="add-column" title="在表格末尾添加列">
265
+ <i class="el-icon-plus"></i>
266
+ <span class="add-column__text">列</span>
267
+ </div></template>
268
+ </el-popover>
269
+ </div>
270
+ <div class="attribute-pane">
271
+ <div class="attribute-pane__header">
272
+ <span>{{globalSetting ? '全局设置': '基础配置'}}</span>
273
+ </div>
274
+ <div class="attribute-pane__content" v-if="globalSetting">
275
+ <p class="form__label" for="">文件名</p>
276
+ <textarea v-show="globalSetting" ref="titleEditor" class="title-editor"></textarea>
277
+ <p class="form__label" for="">打印纸张设置</p>
278
+ <epx-table-form class="form-content" ref="form" :fieldsConfigs="fieldsConfigs" v-model="formData" :column="1" label-align="left"></epx-table-form>
279
+ <p class="form__label" for="">水印设置</p>
280
+ <epx-table-form class="form-content" ref="form" :fieldsConfigs="watermarkFieldsConfigs" v-model="formData" :column="1" label-align="left" :metaId="$metaId" :fieldRelation="fieldRelation">
281
+ <template v-slot:default="{showLabel, fieldConfigs, metaId, ruleMetaId }">
282
+ <epx-table-form-item
283
+ v-if="fieldConfigs.attriName==='WATER_MARK_TEXT'"
284
+ :show-label="showLabel"
285
+ :label="fieldConfigs.attriLabel"
286
+ :metaId="metaId"
287
+ :ruleMetaId="ruleMetaId"
288
+ :fieldConfigs="fieldConfigs"
289
+ :rules="[{
290
+ required: fieldConfigs.isRequired==='1' && fieldConfigs.state!=='SEARCH',
291
+ message: `${fieldConfigs.attriLabel}不能为空`
292
+ }]"
293
+ >
294
+ <textarea v-show="globalSetting" ref="watermarkEditor" class="title-editor"></textarea>
295
+ </epx-table-form-item>
296
+ <epx-table-form-item
297
+ v-else
298
+ :show-label="showLabel"
299
+ :label="fieldConfigs.attriLabel"
300
+ :metaId="metaId"
301
+ :ruleMetaId="ruleMetaId"
302
+ :fieldConfigs="fieldConfigs"
303
+ :rules="[{
304
+ required: fieldConfigs.isRequired==='1' && fieldConfigs.state!=='SEARCH',
305
+ message: `${fieldConfigs.attriLabel}不能为空`
306
+ }]">
307
+ </epx-table-form-item>
308
+ </template>
309
+ </epx-table-form>
310
+ <p class="form__label" for="">其他设置</p>
311
+ <epx-table-form class="form-content" ref="form" :fieldsConfigs="otherFieldsConfigs" v-model="formData" :column="1" label-align="left" ></epx-table-form>
312
+
313
+ <div class="print-check">
314
+ <div class="print-check__head">
315
+ <p class="form__label print-check__title">自定义校验</p>
316
+ <el-button type="text" icon="el-icon-plus" @click="openCheckRule(-1)">新增</el-button>
317
+ </div>
318
+ <div class="print-check__hint">
319
+ <i class="el-icon-info"></i>
320
+ <span>任选数据源字段构建校验,所有<b>启用</b>的规则需同时返回 true 才允许打印。</span>
321
+ </div>
322
+ <div v-if="!printChecks.length" class="print-check__empty">暂无自定义校验,点击「新增」创建。</div>
323
+ <div v-else class="print-check__list">
324
+ <div v-for="(rule, index) in printChecks" :key="index" class="print-check__rule">
325
+ <div class="print-check__rule-top">
326
+ <el-switch v-model="rule.enable" @change="syncPrintCheck"></el-switch>
327
+ <span class="print-check__rule-name" :title="rule.name">{{ rule.name }}</span>
328
+ <i class="el-icon-edit print-check__act" title="编辑" @click="openCheckRule(index)"></i>
329
+ <i class="el-icon-delete print-check__act print-check__act--danger" title="删除" @click="deleteCheckRule(index)"></i>
330
+ </div>
331
+ <div class="print-check__rule-expr">{{ exprPreview(rule.expression) || '(空表达式)' }}</div>
332
+ </div>
333
+ </div>
334
+ </div>
335
+
336
+ <div :style="{marginTop: '30PX'}">
337
+ <div :style="{textAlign: 'center', position: 'fixed',bottom:0,width:'400px',zIndex:99,backgroundColor: '#fff'}">
338
+ <el-button size="default" @click="globalSettingCancel">取消</el-button>
339
+ <el-button type="primary" size="default" @click="updateForm">保存</el-button>
340
+ </div>
341
+ </div>
342
+ </div>
343
+ <div class="attribute-pane__content" v-else-if="activeCell">
344
+ <div class="attribute-item">
345
+ <label for="">坐标</label>
346
+ <span class="attribute-item__content">{{excelCoord(activeCell.rowIndex+ 1, activeCell.columnIndex )}}</span>
347
+ </div>
348
+ <div class="attribute-item">
349
+ <label for="">斜线表头</label>
350
+ <div class="attribute-item__content">
351
+ <el-switch v-model="activeCell.diagonalHeader"></el-switch>
352
+ </div>
353
+ </div>
354
+ <template v-if="activeCell.diagonalHeader">
355
+ <div class="attribute-item">
356
+ <label for="">左下文本</label>
357
+ <div class="attribute-item__content">
358
+ <el-input size="default" v-model="activeCell.diagonalHeaderLbText" placeholder=""></el-input>
359
+ </div>
360
+ </div>
361
+ <div class="attribute-item">
362
+ <label for="">右上文本</label>
363
+ <div class="attribute-item__content">
364
+ <el-input size="default" v-model="activeCell.diagonalHeaderRtText" placeholder=""></el-input>
365
+ </div>
366
+ </div>
367
+ </template>
368
+ <div class="attribute-item">
369
+ <label for="">左父格</label>
370
+ <div class="attribute-item__content">
371
+ <el-radio-group v-model="leftCellWay">
372
+ <el-radio label="default" value="default" @change="defaultLeftCell">默认</el-radio>
373
+ <br />
374
+ <el-radio label="custom" value="custom">
375
+ <span>自定义</span>
376
+ <el-select class="cell-select" v-model="leftCellColumn" filterable allow-create size="default" placeholder="">
377
+ <el-option label="无" value="root">无</el-option>
378
+ <el-option v-for="item in columnList" :key="item" :label="item" :value="item"></el-option>
379
+ </el-select>
380
+ <el-select class="cell-select" v-model="leftCellRow" filterable allow-create size="default" placeholder="">
381
+ <el-option v-for="item in rowList" :key="item" :label="item" :value="item"></el-option>
382
+ </el-select>
383
+ </el-radio>
384
+ </el-radio-group>
385
+ </div>
386
+ </div>
387
+ <div class="attribute-item">
388
+ <label for="">上父格</label>
389
+ <el-radio-group v-model="topCellWay">
390
+ <el-radio label="default" value="default" @change="defaultTopCell">默认</el-radio>
391
+ <br />
392
+ <el-radio label="custom" value="custom">
393
+ <span>自定义</span>
394
+ <el-select class="cell-select" v-model="topCellColumn" filterable allow-create default-first-option size="default" placeholder="">
395
+ <el-option label="无" key='root' value="root"></el-option>
396
+ <el-option v-for="item in columnList" :key="item" :label="item" :value="item"></el-option>
397
+ </el-select>
398
+ <el-select class="cell-select" v-model="topCellRow" filterable allow-create default-first-option size="default" placeholder="">
399
+ <el-option v-for="item in rowList" :key="item" :label="item" :value="item"></el-option>
400
+ </el-select>
401
+ </el-radio>
402
+ </el-radio-group>
403
+ </div>
404
+ <div class="attribute-item">
405
+ <label for="">单元格类型</label>
406
+ <div class="attribute-item__content">
407
+ <el-select size="default" v-model="activeCell.cellType" placeholder="请选择">
408
+ <el-option value="simple" label="普通文本"></el-option>
409
+ <el-option value="dataset" label="数据集"></el-option>
410
+ <el-option value="system-variable" label="系统变量"></el-option>
411
+ <el-option value="expression" label="表达式"></el-option>
412
+ <el-option value="image" label="图片"></el-option>
413
+ <el-option value="process-variable" label="流程参数"></el-option>
414
+ </el-select>
415
+ </div>
416
+ </div>
417
+ <template v-if="activeCell.cellType==='image' || activeCell.cellType==='process-variable'">
418
+ <div class="attribute-item">
419
+ <label for="">图片高度</label>
420
+ <div class="attribute-item__content">
421
+ <el-input v-model="activeCell.imageHeight"></el-input>
422
+ </div>
423
+ </div>
424
+ <div class="attribute-item">
425
+ <label for="">图片宽度</label>
426
+ <div class="attribute-item__content">
427
+ <el-input v-model="activeCell.imageWidth"></el-input>
428
+ </div>
429
+ </div>
430
+ </template>
431
+
432
+ <template v-if="activeCell.cellType==='expression'">
433
+ <div class="attribute-item">
434
+ <label for="">表达式</label>
435
+ <epx-rule
436
+ :key="activeCell"
437
+ formulaType='report'
438
+ v-model="activeCellExpression"
439
+ :variableList="ruleVariableTree"
440
+ :fieldConfigs="{state: 'EDIT', functionType: 'report' }"
441
+ >
442
+ </epx-rule>
443
+ </div>
444
+ </template>
445
+ <template v-if="activeCell.cellType==='dataset' || activeCell.cellType==='process-variable' || activeCell.cellType==='expression'">
446
+ <div class="attribute-item">
447
+ <label for="">过滤条件</label>
448
+ <div class="attribute-item__content">
449
+ <ul class="filter-condition__list" v-if="activeCell.filterCondition">
450
+ <li class="filter-condition__item" v-for="(item, index) in activeCell.filterCondition" :key="item.propertyId">
451
+ {{item.text}}
452
+ <span class="filter-condition__operates">
453
+ <i class="el-icon-edit" @click="editFilterCondition(item, index)"></i>
454
+ <el-popconfirm title="确认删除?" @confirm="deleteFilterCondition(index)">
455
+ <template v-slot:reference><i class="el-icon-close"></i></template>
456
+ </el-popconfirm>
457
+ </span>
458
+ </li>
459
+ </ul>
460
+ <el-button type="primary" size="small" @click="addFilterCondition">添加条件</el-button>
461
+ </div>
462
+ </div>
463
+ </template>
464
+ <template v-if="activeCell.cellType==='dataset' || activeCell.cellType==='expression'">
465
+ <div class="attribute-item">
466
+ <label for="">依赖单元格</label>
467
+ <div class="attribute-item__content">
468
+ <el-radio-group v-model="relyCellWay">
469
+ <el-radio label="default" value="default" @change="defaultLeftCell">默认</el-radio>
470
+ <br />
471
+ <el-radio label="custom" value="custom">
472
+ <span>自定义</span>
473
+ <el-select class="cell-select" v-model="relyCellColumn" size="default" filterable allow-create placeholder="">
474
+ <el-option label="无" value="root">无</el-option>
475
+ <el-option v-for="item in columnList" :key="item" :label="item" :value="item"></el-option>
476
+ </el-select>
477
+ <el-select class="cell-select" v-model="relyCellRow" size="default" filterable allow-create placeholder="">
478
+ <el-option v-for="item in rowList" :key="item" :label="item" :value="item"></el-option>
479
+ </el-select>
480
+ </el-radio>
481
+ </el-radio-group>
482
+ </div>
483
+ </div>
484
+ </template>
485
+ <div class="attribute-item">
486
+ <label for="">聚合方式</label>
487
+ <div class="attribute-item__content">
488
+ <el-radio-group v-model="activeCell.aggregate">
489
+ <el-radio label="select" value="select">列表</el-radio>
490
+ <el-radio label="group" value="group">分组</el-radio>
491
+ </el-radio-group>
492
+ </div>
493
+ </div>
494
+ <div class="attribute-item">
495
+ <label for="">数据展开方向</label>
496
+ <div class="attribute-item__content">
497
+ <el-radio-group v-model="activeCell.expand">
498
+ <el-radio label="Down" value="Down">向下</el-radio>
499
+ <el-radio label="Right" value="Right">向右</el-radio>
500
+ <el-radio label="group" value="group">分组</el-radio>
501
+ <el-radio label="None" value="None">不展开</el-radio>
502
+ <el-radio label="Left" value="Left">合并</el-radio>
503
+ </el-radio-group>
504
+ </div>
505
+ </div>
506
+ <div class="attribute-item">
507
+ <label for="">分页方式</label>
508
+ <div class="attribute-item__content">
509
+ <el-radio-group v-model="activeCell.pagePosition">
510
+ <el-radio label="before" value="before">行前分页</el-radio>
511
+ <el-radio label="after" value="after">行后分页</el-radio>
512
+ <el-radio label="none" value="none">不分页</el-radio>
513
+ </el-radio-group>
514
+ </div>
515
+ </div>
516
+ <div class="attribute-item">
517
+ <label for="">自动换行</label>
518
+ <div class="attribute-item__content">
519
+ <el-radio-group v-model="activeCell.wrapCompute">
520
+ <el-radio label="1" value="1">打开</el-radio>
521
+ <el-radio label="0" value="0">关闭</el-radio>
522
+ </el-radio-group>
523
+ </div>
524
+ </div>
525
+ <div class="attribute-item">
526
+ <label for="">分页时不断开:</label>
527
+ <div class="attribute-item__content">
528
+ <el-checkbox v-model="activeCell.breakOnPaginate"></el-checkbox>
529
+ </div>
530
+ </div>
531
+ <div class="attribute-item">
532
+ <label for="">高度自适应</label>
533
+ <div class="attribute-item__content">
534
+ <el-radio-group v-model="activeCell.heightAuto">
535
+ <el-radio label="1" value="1">打开</el-radio>
536
+ <el-radio label="0" value="0">关闭</el-radio>
537
+ </el-radio-group>
538
+ </div>
539
+ </div>
540
+ <div class="attribute-item">
541
+ <label for="">行高</label>
542
+ <div class="attribute-item__content">
543
+ <el-input size="default" v-model="activeCell.lineHeight" placeholder="默认高度1.2"></el-input>
544
+ </div>
545
+ </div>
546
+ <div class="attribute-item">
547
+ <label for="">补充空白行倍数:</label>
548
+ <div class="attribute-item__content">
549
+ <el-input size="default" v-model="activeCell.fillBlankRowsMultiple" placeholder=""></el-input>
550
+ </div>
551
+ </div>
552
+ <div class="attribute-item">
553
+ <label for="">补充固定空白行数:</label>
554
+ <div class="attribute-item__content">
555
+ <el-input size="default" v-model="activeCell.fillFixedBlankRowsNum" placeholder=""></el-input>
556
+ </div>
557
+ </div>
558
+ <div class="attribute-item">
559
+ <label for="">填充预设空白行数:</label>
560
+ <div class="attribute-item__content">
561
+ <el-input size="default" v-model="activeCell.fillDefaultBlandRowNum" placeholder=""></el-input>
562
+ </div>
563
+ </div>
564
+ <div class="attribute-item">
565
+ <label for="">行距(磅):</label>
566
+ <div class="attribute-item__content">
567
+ <el-input size="default" v-model="activeCell.singleLineSpacing" placeholder="导出word生效"></el-input>
568
+ </div>
569
+ </div>
570
+ <div class="attribute-item">
571
+ <label for="">格式化:</label>
572
+ <div class="attribute-item__content">
573
+ <el-input size="default" v-model="activeCell.format" placeholder=""></el-input>
574
+ </div>
575
+ </div>
576
+ <div class="attribute-item">
577
+ <label for="">多值设置:</label>
578
+ <div class="attribute-item__content">
579
+ <el-button type="primary" size="small" @click="showMultiValueDialog=true">设置</el-button>
580
+ </div>
581
+ </div>
582
+ <div class="attribute-item">
583
+ <label for="">条件属性</label>
584
+ <div class="attribute-item__content">
585
+ <span v-for="(item,index) in activeCell.conditionPropertyItems" :key="item.guid">
586
+ {{item.name+(index==activeCell.conditionPropertyItems.length-1?'':'、')}}
587
+ </span>
588
+ <br/>
589
+ <el-button type="primary" size="small" @click="addConditionPropertyItem">添加条件属性</el-button>
590
+ </div>
591
+ </div>
592
+ </div>
593
+ </div>
594
+ </div>
595
+ <el-dialog v-if="showFormParamsDialog" title="提交表单参数" width="520px" v-model="showFormParamsDialog">
596
+ <div>
597
+ <div class="input-params" v-for="param in formParams" :key="param.ID">
598
+ <label>{{param.NAME}}:</label>
599
+ <el-input type="middle" require="true" v-model="previewParams[param.CODE]"></el-input>
600
+ </div>
601
+ </div>
602
+ <el-button class="preview-btn" type="primary" @click="preview">预 览</el-button>
603
+ </el-dialog>
604
+ <el-dialog v-if="showMultiValueDialog" title="多值设置弹窗" width="520px" v-model="showMultiValueDialog">
605
+ <div class="attribute-item">
606
+ <label for="">截断数:</label>
607
+ <div class="attribute-item__content">
608
+ <el-input-number size="default" v-model="activeCell.multiValueCutNumber" placeholder=""></el-input-number>
609
+ </div>
610
+ </div>
611
+ <div class="attribute-item">
612
+ <label for="">分隔符:</label>
613
+ <div class="attribute-item__content">
614
+ <el-input size="default" v-model="activeCell.multiValueCutSep" placeholder=""></el-input>
615
+ </div>
616
+ </div>
617
+ <div class="attribute-item">
618
+ <label for="">行间距倍数:</label>
619
+ <div class="attribute-item__content">
620
+ <el-input-number size="default" v-model="activeCell.multiValueLineNum" placeholder=""></el-input-number>
621
+ </div>
622
+ </div>
623
+ <div class="attribute-item">
624
+ <label for="">换行标识:</label>
625
+ <div class="attribute-item__content">
626
+ <el-input size="default" v-model="activeCell.multiValueFeedLineFlag" placeholder=""></el-input>
627
+ </div>
628
+ </div>
629
+ </el-dialog>
630
+ <el-dialog v-if="showFilterConditionDialog" title="过滤条件" width="520px" v-model="showFilterConditionDialog">
631
+ <div class="input-params" v-if="(activeCell.filterCondition && activeCell.filterCondition.length>0) && ((!editFilterConditionIndex && editFilterConditionIndex!=0) || editFilterConditionIndex > 0)">
632
+ <label>与上一条件关系:</label>
633
+ <el-select size="default" v-model="filterConditionForm.join" placeholder="请选择">
634
+ <el-option value="and" label="并且"></el-option>
635
+ <el-option value="or" label="或者"></el-option>
636
+ </el-select>
637
+ </div>
638
+ <div class="input-params" >
639
+ <label>属性名:</label>
640
+ <el-input size="middle" :style="{width: '200px'}" v-if="activeCell.cellType==='process-variable'" v-model="filterConditionForm.propertyId"></el-input>
641
+ <el-select v-else size="default" allow-create filterable v-model="filterConditionForm.propertyId" placeholder="请选择">
642
+ <el-option v-for="item in objectFieldList" :key="item.code" :value="item.code" :label="item.text" ></el-option>
643
+ </el-select>
644
+ </div>
645
+ <div class="input-params" >
646
+ <label>操作符:</label>
647
+ <el-select size="default" v-model="filterConditionForm.op" placeholder="请选择">
648
+ <el-option value=">" label="大于"></el-option>
649
+ <el-option value=">=" label="大于等于"></el-option>
650
+ <el-option value="<" label="小于"></el-option>
651
+ <el-option value="<=" label="小于等于"></el-option>
652
+ <el-option value="==" label="等于"></el-option>
653
+ <el-option value="!=" label="不等于"></el-option>
654
+ <el-option value="in" label="在集合中"></el-option>
655
+ <el-option value="not in" label="不在集合中"></el-option>
656
+ <el-option value="like" label="相似"></el-option>
657
+ </el-select>
658
+ </div>
659
+ <div class="input-params">
660
+ <label>值表达式:</label>
661
+ <el-input size="middle" :style="{width: '200px'}" v-model="filterConditionForm.condition"></el-input>
662
+ </div>
663
+ <div class="filter-condition__btn">
664
+ <el-button size="default" @click="showFilterConditionDialog=false">取消</el-button>
665
+ <el-button type="primary" @click="saveFilterCondition">确定</el-button>
666
+ </div>
667
+ </el-dialog>
668
+ <el-dialog v-if="showConditionPropertyItemDialog" title="条件属性" width="1100px" v-model="showConditionPropertyItemDialog">
669
+ <div style="height: 500px;">
670
+ <el-row :gutter="15">
671
+ <el-col :span="7">
672
+ <el-card class="box-card" shadow="never">
673
+ <template v-slot:header><div class="clearfix">
674
+ <el-row>
675
+ <el-col :span="10">
676
+ <span>条件项配置</span>
677
+ </el-col>
678
+ <el-col :span="14">
679
+ <el-button-group>
680
+ <el-button type="primary" icon="el-icon-circle-plus-outline" size="small" @click="showConditionPropertyItemNameDialog=true"></el-button>
681
+ </el-button-group>
682
+ </el-col>
683
+ </el-row>
684
+ </div></template>
685
+ <div>
686
+ <ul class="filter-condition__list" v-if="activeCell.conditionPropertyItems">
687
+ <li :class="currentConditionPropertyItem && item.uid == currentConditionPropertyItem.uid ? 'condition-property-item-active' : 'condition-property-item'" v-for="(item) in activeCell.conditionPropertyItems" :key="item.guid" @click="clickConditionPropertyItem(item)">
688
+ {{item.name}}
689
+ <span class="filter-condition__operates">
690
+ <i class="el-icon-edit" @click="editConditionPropertyItem()"></i>
691
+ <el-popconfirm title="确认删除?" @confirm="deleteConditionPropertyItem(item)">
692
+ <template v-slot:reference><i class="el-icon-close"></i></template>
693
+ </el-popconfirm>
694
+ </span>
695
+ </li>
696
+ </ul>
697
+ </div>
698
+ </el-card>
699
+ </el-col>
700
+ <el-col :span="7">
701
+ <el-card class="box-card" shadow="never">
702
+ <template v-slot:header><div class="clearfix">
703
+ <el-row>
704
+ <el-col :span="10">
705
+ <span>条件配置</span>
706
+ </el-col>
707
+ <el-col :span="14">
708
+ <el-button-group>
709
+ <el-button type="primary" icon="el-icon-circle-plus-outline" size="small" @click="showConditionPropertyItemConditionDialog=true;conditionPropertyItemConditionForm={}"></el-button>
710
+ </el-button-group>
711
+ </el-col>
712
+ </el-row>
713
+ </div></template>
714
+ <div>
715
+ <ul class="filter-condition__list" v-if="currentConditionPropertyItem.conditions">
716
+ <li :class="conditionPropertyItemConditionForm && item.uid == conditionPropertyItemConditionForm.uid ? 'condition-property-item-active' : 'condition-property-item'" v-for="(item) in currentConditionPropertyItem.conditions" :key="item.guid">
717
+ {{getConditionOpText(item.join)}} {{item.type=='current'?'当前值':'表达式'}} {{item.type=='expression'?item.left:''}} {{getConditionOpText(item.op)}} {{item.condition}}
718
+ <span class="filter-condition__operates">
719
+ <i class="el-icon-edit" @click="editConditionPropertyCondition(item)"></i>
720
+ <el-popconfirm title="确认删除?" @confirm="deleteConditionPropertyCondition(item)">
721
+ <template v-slot:reference><i class="el-icon-close"></i></template>
722
+ </el-popconfirm>
723
+ </span>
724
+ </li>
725
+ </ul>
726
+ </div>
727
+ </el-card>
728
+ </el-col>
729
+ <el-col :span="10">
730
+ <el-card class="box-card" shadow="never">
731
+ <template v-slot:header><div class="clearfix">
732
+ <span>属性配置</span>
733
+ </div></template>
734
+ <div v-if="this.conditionPropertyItems.length>0">
735
+ <el-row :gutter="20">
736
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.newValueFlag">新值</el-checkbox></el-col>
737
+ <el-col :span="12" v-if="currentConditionPropertyItem.newValueFlag"><el-input class="mb-3" type="textarea" v-model="currentConditionPropertyItem.newValue" placeholder="请输入内容"></el-input></el-col>
738
+ </el-row>
739
+ <el-row :gutter="20">
740
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.rowHeightFlag">行高</el-checkbox></el-col>
741
+ <el-col :span="12" v-if="currentConditionPropertyItem.rowHeightFlag"><el-input class="mb-3" v-model="currentConditionPropertyItem.rowHeight" placeholder="请输入内容"></el-input></el-col>
742
+ </el-row>
743
+ <el-row :gutter="20">
744
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.colWidthFlag">列宽</el-checkbox></el-col>
745
+ <el-col :span="12" v-if="currentConditionPropertyItem.colWidthFlag"><el-input class="mb-3" v-model="currentConditionPropertyItem.colWidth" placeholder="请输入内容"></el-input></el-col>
746
+ </el-row>
747
+ <el-row :gutter="20">
748
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.pagingFlag">分页</el-checkbox></el-col>
749
+ <el-col :span="12" v-if="currentConditionPropertyItem.pagingFlag">
750
+ <el-select class="mb-3" size="default" v-model="currentConditionPropertyItem.position" placeholder="请选择">
751
+ <el-option value="before" label="当前行前"></el-option>
752
+ <el-option value="after" label="当前行后"></el-option>
753
+ </el-select>
754
+ </el-col>
755
+ </el-row>
756
+ <el-row :gutter="20">
757
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.bgcolorFlag">背景颜色</el-checkbox></el-col>
758
+ <el-col :span="12" v-if="currentConditionPropertyItem.bgcolorFlag">
759
+ <el-color-picker class="mb-3" v-model="currentConditionPropertyItem.bgcolor" show-alpha></el-color-picker>
760
+ </el-col>
761
+ </el-row>
762
+ <el-row :gutter="20">
763
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.forecolorFlag">字体颜色</el-checkbox></el-col>
764
+ <el-col :span="12" v-if="currentConditionPropertyItem.forecolorFlag">
765
+ <el-color-picker class="mb-3" v-model="currentConditionPropertyItem.forecolor" show-alpha></el-color-picker>
766
+ </el-col>
767
+ </el-row>
768
+ <el-row :gutter="20">
769
+ <el-col :span="6"><el-checkbox class="property-item-condition" v-model="currentConditionPropertyItem.boldFlag">加粗</el-checkbox></el-col>
770
+ </el-row>
771
+ </div>
772
+ </el-card>
773
+ </el-col>
774
+ </el-row>
775
+ </div>
776
+ <div class="filter-condition__btn">
777
+ <el-button @click="showConditionPropertyItemDialog=false">取消</el-button>
778
+ <el-button type="primary" @click="saveConditionPropertyItem">确定</el-button>
779
+ </div>
780
+ </el-dialog>
781
+
782
+ <el-dialog v-if="showConditionPropertyItemNameDialog" width="520px" v-model="showConditionPropertyItemNameDialog">
783
+ <div>
784
+ <div class="input-params" v-for="param in formParams" :key="param.ID">
785
+ <label>{{param.NAME}}:</label>
786
+ <el-input type="middle" require="true" v-model="previewParams[param.CODE]"></el-input>
787
+ </div>
788
+ </div>
789
+ <el-button class="preview-btn" type="primary" @click="preview">预 览</el-button>
790
+ </el-dialog>
791
+ <el-dialog v-if="showConditionPropertyItemNameDialog" title="条件项名称" width="520px" v-model="showConditionPropertyItemNameDialog">
792
+ <div class="input-params">
793
+ <label>条件项名称:</label>
794
+ <el-input size="middle" :style="{width: '200px'}" v-model="conditionPropertyItemNameForm.name"></el-input>
795
+ </div>
796
+ <div class="filter-condition__btn">
797
+ <el-button size="default" @click="showConditionPropertyItemNameDialog=false">取消</el-button>
798
+ <el-button type="primary" @click="saveConditionPropertyItemName">确定</el-button>
799
+ </div>
800
+ </el-dialog>
801
+
802
+ <el-dialog v-if="showConditionPropertyItemConditionDialog" title="过滤条件" width="600px" v-model="showConditionPropertyItemConditionDialog">
803
+ <input hidden v-model="conditionPropertyItemConditionForm.uid">
804
+ <div class="input-params" v-if="(this.currentConditionPropertyItem.conditions && this.currentConditionPropertyItem.conditions.length>0 && this.conditionPropertyItemConditionForm.index!=0)">
805
+ <label>与上一条件关系:</label>
806
+ <el-select size="default" v-model="conditionPropertyItemConditionForm.join" placeholder="请选择">
807
+ <el-option value="and" label="并且"></el-option>
808
+ <el-option value="or" label="或者"></el-option>
809
+ </el-select>
810
+ </div>
811
+ <div class="input-params" >
812
+ <label>条件左值:</label>
813
+ <el-select size="default" v-model="conditionPropertyItemConditionForm.type" placeholder="请选择">
814
+ <el-option value="current" label="当前值"></el-option>
815
+ <el-option value="expression" label="表达式"></el-option>
816
+ </el-select>
817
+ </div>
818
+ <div v-if="conditionPropertyItemConditionForm.type == 'expression'" class="input-params" >
819
+ <label>表达式:</label>
820
+ <epx-rule
821
+ formulaType='report'
822
+ v-model="conditionPropertyItemConditionFormLeft"
823
+ :variableList="ruleVariableTree"
824
+ :fieldConfigs="{state: 'EDIT', functionType: 'report' }"
825
+ >
826
+ </epx-rule>
827
+ </div>
828
+ <div class="input-params" >
829
+ <label>操作符:</label>
830
+ <el-select size="default" v-model="conditionPropertyItemConditionForm.op" placeholder="请选择">
831
+ <el-option value=">" label="大于"></el-option>
832
+ <el-option value=">=" label="大于等于"></el-option>
833
+ <el-option value="<" label="小于"></el-option>
834
+ <el-option value="<=" label="小于等于"></el-option>
835
+ <el-option value="==" label="等于"></el-option>
836
+ <el-option value="!=" label="不等于"></el-option>
837
+ <el-option value="in" label="在集合中"></el-option>
838
+ <el-option value="not in" label="不在集合中"></el-option>
839
+ <el-option value="like" label="相似"></el-option>
840
+ <el-option value="not like" label="不相似"></el-option>
841
+ </el-select>
842
+ </div>
843
+ <div class="input-params">
844
+ <label>值表达式:</label>
845
+ <el-input size="middle" :style="{width: '200px'}" v-model="conditionPropertyItemConditionForm.condition"></el-input>
846
+ </div>
847
+ <div class="filter-condition__btn">
848
+ <el-button size="default" @click="showConditionPropertyItemConditionDialog=false">取消</el-button>
849
+ <el-button type="primary" @click="saveConditionPropertyItemCondition">确定</el-button>
850
+ </div>
851
+ </el-dialog>
852
+
853
+ <!-- 自定义校验:规则表单弹窗 -->
854
+ <el-dialog
855
+ :title="editingCheckIndex >= 0 ? '编辑自定义校验' : '新增自定义校验'"
856
+ v-model="checkRuleDialog"
857
+ width="480px"
858
+ :close-on-click-modal="false">
859
+ <div class="check-rule-form" v-if="checkRuleDialog">
860
+ <div class="check-rule-form__item">
861
+ <label class="check-rule-form__label is-required">规则名</label>
862
+ <el-input v-model="checkRuleForm.name" placeholder="如:未过期校验"></el-input>
863
+ </div>
864
+ <div class="check-rule-form__item">
865
+ <label class="check-rule-form__label is-required">表达式</label>
866
+ <div class="check-rule-form__expr" :class="{'is-empty': !checkRuleForm.expression}" @click="openFormulaDialog">
867
+ <span class="check-rule-form__expr-text">{{ exprPreview(checkRuleForm.expression) || '点击进入公式编辑器配置…' }}</span>
868
+ <i class="el-icon-edit-outline"></i>
869
+ </div>
870
+ <div class="check-rule-form__tip">点击上方区域打开公式编辑器,表达式需最终返回 true / false。</div>
871
+ </div>
872
+ <div class="check-rule-form__item">
873
+ <label class="check-rule-form__label">错误信息</label>
874
+ <el-input type="textarea" :rows="2" v-model="checkRuleForm.errorInfo" placeholder="校验不通过时的提示,如:单据已过期,禁止打印"></el-input>
875
+ </div>
876
+ </div>
877
+ <template v-slot:footer><span class="dialog-footer">
878
+ <el-button @click="checkRuleDialog=false">取 消</el-button>
879
+ <el-button type="primary" @click="confirmCheckRule">确 定</el-button>
880
+ </span></template>
881
+ </el-dialog>
882
+
883
+ <!-- 自定义校验:公式编辑器弹窗 -->
884
+ <el-dialog
885
+ v-model="formulaDialog"
886
+ fullscreen
887
+ append-to-body
888
+ :close-on-click-modal="false"
889
+ :show-close="false"
890
+ class="formula-editor-dialog">
891
+ <epx-formula-editor
892
+ v-if="formulaDialog"
893
+ :value="{ el: checkRuleForm.expression || '' }"
894
+ :param-list="checkParamList"
895
+ show-header
896
+ @confirm="confirmFormula"
897
+ @cancel="formulaDialog=false">
898
+ </epx-formula-editor>
899
+ </el-dialog>
900
+
901
+ </div>
902
+ </template>
903
+
904
+ <script>
905
+ /* eslint-disable no-undef */
906
+ import { mapState, mapGetters } from 'vuex'
907
+ const ADD_META = 'ADD_META'
908
+ const letterToNumber = (str) => {
909
+ let result = 0
910
+ for (let i = 0; i < str.length; i++) {
911
+ const charCode = str.charCodeAt(i) - 65
912
+ result = result * 26 + charCode
913
+ }
914
+ return result
915
+ }
916
+ // luckysheet 默认行列数
917
+ const DEFAULT_ROW_NUM = 84
918
+ const DEFAULT_COLUMN_NUM = 60
919
+ // 行列数可调整的上限,避免误输入导致渲染卡死
920
+ const MAX_ROW_NUM = 5000
921
+ const MAX_COLUMN_NUM = 1000
922
+ const NumberToLetter = (num) => {
923
+ let result = ''
924
+ while (num > 0) {
925
+ const remainder = num % 26
926
+ result = String.fromCharCode(65 + remainder) + result
927
+ num = Math.floor(num / 26)
928
+ }
929
+ return result
930
+ }
931
+ export default {
932
+ name: 'epx-excel-design',
933
+ navConfigs: {
934
+ flag: false
935
+ },
936
+ data () {
937
+ return {
938
+ editName: false,
939
+ globalSetting: false,
940
+ formData: {},
941
+ activeCell: null,
942
+ // 表格行列数(与 luckysheet 当前 sheet 保持同步,随内容一起存入 CONTENT)
943
+ gridSize: { row: DEFAULT_ROW_NUM, column: DEFAULT_COLUMN_NUM },
944
+ // 右侧快捷加列
945
+ addColumnVisible: false,
946
+ addColumnNum: 10,
947
+ leftCellWay: 'default',
948
+ topCellWay: 'default',
949
+ relyCellWay: 'default',
950
+ excelInfo: {},
951
+ dataSource: [],
952
+ dataSourceModal: false,
953
+ setting: {
954
+ height: 500
955
+ },
956
+ dataSourceInfo: {},
957
+ linkEntityTree: [],
958
+ allFields: [],
959
+ fields: [],
960
+ defaultExpandKey: [],
961
+ defaultProps: {
962
+ children: 'children',
963
+ label: 'text'
964
+ },
965
+ initCondition: [],
966
+ searchParams: [],
967
+ formParam: {},
968
+ formParams: [],
969
+ formParamModal: false,
970
+ editFormParamId: '',
971
+ showFormParamsDialog: false,
972
+ previewParams: {},
973
+ isImportExcel: false,
974
+ showFilterConditionDialog: false,
975
+ filterConditionForm: {},
976
+ editFilterConditionIndex: null,
977
+ showConditionPropertyItemDialog: false,
978
+ conditionPropertyItems: [],
979
+ showConditionPropertyItemNameDialog: false,
980
+ conditionPropertyItemNameForm: {},
981
+ currentConditionPropertyItem: {},
982
+ showConditionPropertyItemConditionDialog: false,
983
+ conditionPropertyItemConditionForm: {},
984
+ fieldRelation: [],
985
+ watermarkFieldsConfigs: [],
986
+ otherFieldsConfigs: [],
987
+ processParams: [],
988
+ searchText: '',
989
+ showLogField: false,
990
+ showSubField: true,
991
+ currentLanguage: this.defaultLanguage,
992
+ languageContent: {},
993
+ showMultiValueDialog: false,
994
+ entityDataMap: {},
995
+ printChecks: [],
996
+ checkRuleDialog: false,
997
+ editingCheckIndex: -1,
998
+ checkRuleForm: { name: '', expression: '', errorInfo: '', enable: true },
999
+ formulaDialog: false
1000
+ }
1001
+ },
1002
+ computed: {
1003
+ ...mapState({
1004
+ systemVariableList: state => state.config.systemVariableList, // 当前导航菜单
1005
+ showMenu: state => state.config.showMenu,
1006
+ showAppNav: state => state.config.showAppNav
1007
+ }),
1008
+ ...mapGetters([
1009
+ 'getMetaViewFields'
1010
+ ]),
1011
+ // 父格/依赖格下拉的列名,跟随表格实际列数
1012
+ columnList () {
1013
+ const len = Math.max(this.gridSize.column || 0, DEFAULT_COLUMN_NUM)
1014
+ return new Array(len).fill(0).map((item, index) => this.NumToString(index + 1))
1015
+ },
1016
+ // 父格/依赖格下拉的行号,跟随表格实际行数
1017
+ rowList () {
1018
+ const len = Math.max(this.gridSize.row || 0, 500)
1019
+ return new Array(len).fill(0).map((item, index) => index + 1 + '')
1020
+ },
1021
+ variableTree () {
1022
+ return [
1023
+ {
1024
+ value: 'customParams',
1025
+ type: 'folder',
1026
+ name: '自定义参数',
1027
+ children: this.formParams.map(item => ({ ...item, name: item.NAME, value: item.CODE }))
1028
+ },
1029
+ {
1030
+ value: 'systemVariable',
1031
+ type: 'folder',
1032
+ name: '系统变量',
1033
+ children: this.systemVariableList
1034
+ },
1035
+ {
1036
+ value: 'processParams',
1037
+ type: 'folder',
1038
+ name: '流程参数',
1039
+ children: this.processParams
1040
+ }
1041
+ ]
1042
+ },
1043
+ conditionPropertyItemConditionFormLeft: {
1044
+ get () {
1045
+ return this.conditionPropertyItemConditionForm.left ? JSON.stringify({ el: `#{${this.conditionPropertyItemConditionForm.left}}`, elText: this.conditionPropertyItemConditionForm.left }) : ''
1046
+ },
1047
+ set (v) {
1048
+ if (v) {
1049
+ const regExp = /#\{(.+)\}/g
1050
+ const el = JSON.parse(v).el
1051
+ const expression = regExp.exec(el)[1]
1052
+ this.conditionPropertyItemConditionForm.left = expression
1053
+ } else {
1054
+ this.conditionPropertyItemConditionForm.left = ''
1055
+ }
1056
+ }
1057
+ },
1058
+ activeCellExpression: {
1059
+ get () {
1060
+ return this.activeCell.v ? JSON.stringify({ el: `#{${this.activeCell.v}}`, elText: this.activeCell.v }) : ''
1061
+ },
1062
+ set (v) {
1063
+ if (v) {
1064
+ const regExp = /#\{(.+)\}/g
1065
+ const el = JSON.parse(v).el
1066
+ const expression = regExp.exec(el)[1]
1067
+ this.activeCell.v = expression
1068
+ } else {
1069
+ this.activeCell.v = ''
1070
+ }
1071
+ }
1072
+ },
1073
+ ruleVariableTree () {
1074
+ return [
1075
+ {
1076
+ value: 'datasoure',
1077
+ type: 'folder',
1078
+ text: '表单数据源',
1079
+ children: this.dataSource.map(item => ({ ...item, text: item.name }))
1080
+ }
1081
+ ]
1082
+ },
1083
+ leftCellColumn: {
1084
+ get () {
1085
+ const { leftCell } = this.activeCell
1086
+ if (leftCell === 'root') {
1087
+ return '无'
1088
+ }
1089
+ if (leftCell) {
1090
+ const arr = /^([A-Z]*)(\d*)$/.exec(leftCell)
1091
+ return arr[1] || ''
1092
+ }
1093
+ return ''
1094
+ },
1095
+ set (v) {
1096
+ if (v === 'root') {
1097
+ this.activeCell.leftCell = v
1098
+ } else {
1099
+ this.activeCell.leftCell = v + this.leftCellRow
1100
+ }
1101
+ }
1102
+ },
1103
+ leftCellRow: {
1104
+ get () {
1105
+ const { leftCell } = this.activeCell
1106
+ if (leftCell && leftCell !== 'root') {
1107
+ const arr = /^([A-Z]*)(\d*)$/.exec(leftCell)
1108
+ return arr[2] || ''
1109
+ }
1110
+ return ''
1111
+ },
1112
+ set (v) {
1113
+ this.activeCell.leftCell = this.leftCellColumn + v
1114
+ this.activeCell.leftCell = this.leftCellColumn + v
1115
+ }
1116
+ },
1117
+ topCellColumn: {
1118
+ get () {
1119
+ const { topCell } = this.activeCell
1120
+ if (topCell === 'root') {
1121
+ return '无'
1122
+ }
1123
+ if (topCell && topCell !== 'root') {
1124
+ const arr = /^([A-Z]*)(\d*)$/.exec(topCell)
1125
+ return arr[1] || ''
1126
+ }
1127
+ return ''
1128
+ },
1129
+ set (v) {
1130
+ if (v === 'root') {
1131
+ this.activeCell.topCell = v
1132
+ } else {
1133
+ this.activeCell.topCell = v + this.topCellRow
1134
+ }
1135
+ }
1136
+ },
1137
+ topCellRow: {
1138
+ get () {
1139
+ const { topCell } = this.activeCell
1140
+ if (topCell && topCell !== 'root') {
1141
+ const arr = /^([A-Z]*)(\d*)$/.exec(topCell)
1142
+ return arr[2] || ''
1143
+ }
1144
+ return ''
1145
+ },
1146
+ set (v) {
1147
+ this.activeCell.topCell = this.topCellColumn + v
1148
+ }
1149
+ },
1150
+ relyCellColumn: {
1151
+ get () {
1152
+ const { relyCell } = this.activeCell
1153
+ if (relyCell === 'root') {
1154
+ return '无'
1155
+ }
1156
+ if (relyCell && relyCell !== 'root') {
1157
+ const arr = /^([A-Z]*)(\d*)$/.exec(relyCell)
1158
+ return arr[1] || ''
1159
+ }
1160
+ return ''
1161
+ },
1162
+ set (v) {
1163
+ if (v === 'root') {
1164
+ this.activeCell.relyCell = v
1165
+ } else {
1166
+ this.activeCell.relyCell = v + this.relyCellRow
1167
+ }
1168
+ }
1169
+ },
1170
+ relyCellRow: {
1171
+ get () {
1172
+ const { relyCell } = this.activeCell
1173
+ if (relyCell && relyCell !== 'root') {
1174
+ const arr = /^([A-Z]*)(\d*)$/.exec(relyCell)
1175
+ return arr[2] || ''
1176
+ }
1177
+ return ''
1178
+ },
1179
+ set (v) {
1180
+ this.activeCell.relyCell = this.relyCellColumn + v
1181
+ }
1182
+ },
1183
+ objectFieldList () {
1184
+ const { dataSource } = this.activeCell || {}
1185
+ if (dataSource) {
1186
+ const item = this.dataSource.find(item => item.id === dataSource) || {}
1187
+ if (item && item.children[0]) {
1188
+ return item.children[0].children
1189
+ }
1190
+ }
1191
+ return []
1192
+ },
1193
+ defineDynamicParams () {
1194
+ return this.formParams.map(item => ({ id: '${' + item.CODE + '}', name: item.NAME }))
1195
+ },
1196
+ sortFields: {
1197
+ get () {
1198
+ let { SORT = '[]' } = this.dataSourceInfo
1199
+ if (SORT === 'undefined' || SORT === '' || SORT === null) SORT = '[]'
1200
+ return JSON.parse(SORT)
1201
+ },
1202
+ set (v) {
1203
+ this.dataSourceInfo.SORT = JSON.stringify(v)
1204
+ }
1205
+ },
1206
+ groupSortFields: {
1207
+ get () {
1208
+ let { GROUP_ORDER_FIELD = '' } = this.dataSourceInfo
1209
+ if (GROUP_ORDER_FIELD === 'undefined' || GROUP_ORDER_FIELD === '' || GROUP_ORDER_FIELD === null) GROUP_ORDER_FIELD = ''
1210
+ return GROUP_ORDER_FIELD
1211
+ },
1212
+ set (v) {
1213
+ this.dataSourceInfo.GROUP_ORDER_FIELD = v
1214
+ }
1215
+ },
1216
+ loadRelationEntity: {
1217
+ get () {
1218
+ return this.dataSourceInfo.LOAD_RELATION_ENTITY || '1'
1219
+ },
1220
+ set (v) {
1221
+ this.dataSourceInfo.LOAD_RELATION_ENTITY = v
1222
+ }
1223
+ },
1224
+ linkEntityCheckedKeys () {
1225
+ const flags = this.dataSourceInfo.LINK_ENTITY
1226
+ return flags ? flags.split(',').filter(Boolean) : []
1227
+ },
1228
+ linkEntityLabel () {
1229
+ const keys = this.linkEntityCheckedKeys
1230
+ if (!keys.length) return ''
1231
+ const titles = []
1232
+ const walk = (nodes) => {
1233
+ if (!nodes) return
1234
+ nodes.forEach(node => {
1235
+ if (keys.includes(node.flag)) titles.push(node.title)
1236
+ if (node.childrens) walk(node.childrens)
1237
+ })
1238
+ }
1239
+ walk(this.linkEntityTree)
1240
+ // 关联对象树异步加载,未就绪时回退到已保存的名称
1241
+ return titles.length ? titles.join(',') : (this.dataSourceInfo['LINK_ENTITY#'] || '')
1242
+ },
1243
+ showDataSource () {
1244
+ const formatFields = (fields) => {
1245
+ return fields.filter(item => {
1246
+ if (!this.showLogField && ['ID', 'LOG_C_TIME', 'LOG_C_USER', 'LOG_U_TIME', 'LOG_U_USER'].includes(item.code)) {
1247
+ return false
1248
+ }
1249
+ if (!this.showSubField && (item.relationType === '1' || item.isSub)) {
1250
+ return false
1251
+ }
1252
+ if (item.children) {
1253
+ item.children = formatFields(item.children)
1254
+ }
1255
+ return true
1256
+ })
1257
+ }
1258
+ return this.dataSource.map(item => {
1259
+ if (this.entityDataMap[item.id]) {
1260
+ const fields = this.$_.cloneDeep(this.entityDataMap[item.id])
1261
+ item.children = formatFields(fields)
1262
+ }
1263
+ return item
1264
+ })
1265
+ },
1266
+ languageFlag () {
1267
+ const { LANGUAGE_FLAG: languageFlag } = this.clientConfig
1268
+ return languageFlag
1269
+ },
1270
+ defaultLanguage () {
1271
+ const { LANGUAGE_DEFAULT: defaultLanguage } = this.clientConfig
1272
+ return defaultLanguage
1273
+ },
1274
+ currentLanguageName () {
1275
+ const language = this.languageList.find(item => item.id === this.currentLanguage) || {}
1276
+ return language.name || '默认'
1277
+ },
1278
+ languageList () {
1279
+ const { LANGUAGES: languages = '', 'LANGUAGES#': languageNames = '' } = this.clientConfig
1280
+ // 获取当前语言
1281
+ if (!languages) return []
1282
+ const languageIdList = languages.split(',')
1283
+ const languageNameList = languageNames.split(',')
1284
+ const languageList = languageIdList.map((item, index) => ({ id: item, name: languageNameList[index] }))
1285
+ return languageList
1286
+ },
1287
+ getText () {
1288
+ return field => {
1289
+ // 查寻字段名
1290
+ const getLabel = (arr) => {
1291
+ for (const item of arr) {
1292
+ if ((item.linkCode || item.code) === field) return item.text
1293
+ if (item.children) {
1294
+ const label = getLabel(item.children)
1295
+ if (label) return label
1296
+ }
1297
+ }
1298
+ }
1299
+ return getLabel(this.allFields) || field
1300
+ }
1301
+ },
1302
+ // 自定义校验公式编辑器的参数库:只取主数据源(无主则取第一个),按 数据源 → 对象 → 字段 组织成树。
1303
+ // getEntityMetaView 返回的 children 是一层 type==='meta' 节点的扁平数组:
1304
+ // 无 linkFlag 的 meta 节点为主对象(其 children 即主对象字段),有 linkFlag 的为关联对象。
1305
+ // 变量规则:主对象字段 token = 字段编号;关联对象字段 token = 关联标识符大写_字段编号。
1306
+ checkParamList () {
1307
+ const source = this.dataSource.find(item => item.isMain) || this.dataSource[0]
1308
+ if (!source || !source.children || !source.children.length) return []
1309
+ // 去掉可能存在的链路前缀(如 ROLE|USER_ID 取 USER_ID)
1310
+ const bare = (v) => String(v == null ? '' : v).split('|').pop()
1311
+ const toField = (f, prefix) => ({
1312
+ code: prefix ? `${prefix}_${bare(f.code)}` : bare(f.code),
1313
+ text: f.text || f.name,
1314
+ type: f.dataType || 'string'
1315
+ })
1316
+ const objects = []
1317
+ source.children.forEach(node => {
1318
+ if (node.type !== 'meta') return
1319
+ const flag = bare(node.linkFlag || node.flag).toUpperCase()
1320
+ // 只取字段叶子(排除嵌套的更深层关联 meta 节点)
1321
+ const leaves = (node.children || []).filter(f => f.type !== 'meta' && bare(f.code))
1322
+ if (!leaves.length) return
1323
+ // type:'object' 让编辑器把对象渲染为可展开的嵌套节点
1324
+ if (flag) {
1325
+ objects.push({ code: flag, text: node.text || node.name, type: 'object', children: leaves.map(f => toField(f, flag)) })
1326
+ } else {
1327
+ // 主对象置于最前
1328
+ objects.unshift({ code: node.code || 'MAIN', text: node.text || node.name, type: 'object', children: leaves.map(f => toField(f, '')) })
1329
+ }
1330
+ })
1331
+ if (!objects.length) return []
1332
+ return [{ code: source.sourceId || source.key, text: source.name, children: objects }]
1333
+ }
1334
+ },
1335
+ watch: {
1336
+ activeCell: {
1337
+ handler: function (v, oldVal) {
1338
+ const { rowIndex, columnIndex, ...props } = v
1339
+ if (this.leftCellWay === 'default') props.leftCell = ''
1340
+ if (this.topCellWay === 'default') props.topCell = ''
1341
+ if (this.relyCellWay === 'default') props.relyCell = ''
1342
+ if (props.cellType && props.cellType === 'expression') {
1343
+ props.m = props.v
1344
+ }
1345
+ luckysheet.setCellValue(rowIndex, columnIndex, props)
1346
+ },
1347
+ deep: true
1348
+ },
1349
+ globalSetting (v) {
1350
+ if (v) {
1351
+ this.$nextTick(() => {
1352
+ this.initTitleEditor()
1353
+ setTimeout(() => {
1354
+ this.initWatermarkEditor()
1355
+ }, 500)
1356
+ })
1357
+ }
1358
+ },
1359
+ 'dataSourceInfo.ENTITY': {
1360
+ handler (v) {
1361
+ if (v) {
1362
+ const meta = this.metas[v]
1363
+ if (!meta) {
1364
+ this.$store.dispatch({ // 加回调
1365
+ type: ADD_META,
1366
+ metaId: v
1367
+ })
1368
+ .then(data => {
1369
+ if (data) {
1370
+ const relations = data.getRelations()
1371
+ this.getAllFields(relations)
1372
+ }
1373
+ })
1374
+ } else {
1375
+ const relations = meta.getRelations()
1376
+ this.getAllFields(relations)
1377
+ }
1378
+ this.getLinkEntityTree(v)
1379
+ } else {
1380
+ this.linkEntityTree = []
1381
+ }
1382
+ },
1383
+ deep: true
1384
+ },
1385
+ 'formData.WATER_MARK_TYPE' (v) {
1386
+ if (v === 'text') {
1387
+ this.$nextTick(() => {
1388
+ this.initWatermarkEditor()
1389
+ })
1390
+ }
1391
+ },
1392
+ searchText (v) {
1393
+ if (this.timer) {
1394
+ this.timer = null
1395
+ clearTimeout(this.timer)
1396
+ }
1397
+ this.timer = setTimeout(() => {
1398
+ this.$refs.fieldTree.filter(this.searchText)
1399
+ clearTimeout(this.timer)
1400
+ this.timer = null
1401
+ }, 200)
1402
+ },
1403
+ showLogField () {
1404
+ this.$nextTick(() => {
1405
+ this.$refs.fieldTree.filter(this.searchText)
1406
+ })
1407
+ },
1408
+ showSubField () {
1409
+ this.$nextTick(() => {
1410
+ this.$refs.fieldTree.filter(this.searchText)
1411
+ })
1412
+ }
1413
+ },
1414
+ methods: {
1415
+ backConfirm () {
1416
+ this.saveContent()
1417
+
1418
+ let changeFlag = this.content !== this.initContent
1419
+ if (this.content && this.initContent) {
1420
+ const content = JSON.parse(this.content)[0]
1421
+ const initContent = JSON.parse(this.initContent)[0]
1422
+ changeFlag = !this.$_.isEqual(content.celldata, initContent.celldata) ||
1423
+ content.row !== initContent.row || content.column !== initContent.column
1424
+ }
1425
+ if (!changeFlag) {
1426
+ for (const key in this.languageContent) {
1427
+ const content = this.languageContent[key] ? JSON.parse(this.languageContent[key])[0].celldata : null
1428
+ const initContent = this.initLanguageContent[key] ? JSON.parse(this.initLanguageContent[key])[0].celldata : null
1429
+ if (!this.$_.isEqual(content, initContent)) {
1430
+ changeFlag = true
1431
+ break
1432
+ }
1433
+ }
1434
+ }
1435
+ if (changeFlag) {
1436
+ this.$confirm('检测到您当前的报表配置还未进行保存操作,点击保存按钮即可执行保存操作', '操作提示', {
1437
+ confirmButtonText: '保存',
1438
+ cancelButtonText: '不保存',
1439
+ type: 'warning'
1440
+ }).then(() => {
1441
+ this.saveExcelData(this.backPage)
1442
+ })
1443
+ .catch(() => {
1444
+ this.backPage()
1445
+ })
1446
+ } else {
1447
+ this.backPage()
1448
+ }
1449
+ },
1450
+ switchLanguage (v) {
1451
+ if (this.currentLanguage === v) return
1452
+ this.$confirm('切换语种后,进入该语种报表内容配置页面,当前页面的配置内容可通过切换再次展示,继续操作请点击确认。', '操作提示', {
1453
+ confirmButtonText: '确定',
1454
+ cancelButtonText: '取消',
1455
+ type: 'warning'
1456
+ }).then(() => {
1457
+ this.saveContent()
1458
+ this.currentLanguage = v
1459
+ const content = v === this.defaultLanguage ? this.content : this.languageContent[v]
1460
+ const nullSheet = [
1461
+ {
1462
+ name: 'Sheet1',
1463
+ index: 0,
1464
+ order: 0,
1465
+ status: 1,
1466
+ celldata: []
1467
+ }
1468
+ ]
1469
+ luckysheet.destroy()
1470
+ this.createExcel(content ? JSON.parse(content) : nullSheet)
1471
+ })
1472
+ },
1473
+ saveContent () {
1474
+ const sheets = luckysheet.getluckysheetfile()
1475
+ sheets[0].celldata = luckysheet.transToCellData(sheets[0].data)
1476
+ const content = JSON.stringify(sheets)
1477
+ if (!this.currentLanguage || this.currentLanguage === this.defaultLanguage) {
1478
+ this.content = content
1479
+ } else {
1480
+ this.languageContent[this.currentLanguage] = content
1481
+ }
1482
+ },
1483
+ filterNode (value, data) {
1484
+ if (!value) return true
1485
+ return data.text && data.text.indexOf(value) !== -1
1486
+ },
1487
+ $refeshData () {
1488
+ this.createExcel()
1489
+ },
1490
+ getData () {
1491
+ this.$http.get({
1492
+ entityId: 'FM_FORM',
1493
+ id: this.$query.id
1494
+ })
1495
+ .then(data => {
1496
+ this.excelInfo = data.data
1497
+ this.formData = { ...data.data }
1498
+ const defaultValue = {
1499
+ WATER_MARK_TYPE: 'none',
1500
+ WATER_MARK_LEAN: 40,
1501
+ WATER_MARK_DENSITY: '2'
1502
+ }
1503
+ for (const key in defaultValue) {
1504
+ if (!this.formData[key]) {
1505
+ this.formData[key] = defaultValue[key]
1506
+ }
1507
+ }
1508
+ this.oldFormData = { ...this.formData }
1509
+ this.parsePrintCheck()
1510
+ this.content = data.data.CONTENT
1511
+ this.languageContent = data.data.LANGUAGE_PARAM ? data.data.LANGUAGE_PARAM.CONTENT || {} : {}
1512
+ this.initContent = data.data.CONTENT
1513
+ this.initLanguageContent = this.$_.cloneDeep(this.languageContent)
1514
+ this.createExcel()
1515
+ })
1516
+ },
1517
+ getFieldRelation () {
1518
+ this.$http.$post({
1519
+ action: 'getFieldRelation',
1520
+ entityId: 'FM_ATTRIBUTE_RELATION',
1521
+ metaId: this.$metaId
1522
+ })
1523
+ .then(data => {
1524
+ this.fieldRelation = data.field_relation
1525
+ })
1526
+ },
1527
+ getFieldConfigs () {
1528
+ this.$FieldFactory.createFields({
1529
+ meta: this.$meta,
1530
+ metaId: this.$metaId,
1531
+ pageType: 'EDIT',
1532
+ fields: ['PRINT_PAGE_SIZE', 'PRINT_PAGE_DIRECTION', 'LEFT_MARGIN', 'RIGHT_MARGIN', 'TOP_MARGIN', 'BOTTOM_MARGIN', 'IS_PAGE_NUMBER', 'PAGE_NUMBER_FORMAT', 'PAGE_NUMBER_TOP', 'PAGE_NUMBER_START', 'PAGE_NUMBER_ALIGN']
1533
+ })
1534
+ .then(data => {
1535
+ this.fieldsConfigs = [...data]
1536
+ })
1537
+ this.$FieldFactory.createFields({
1538
+ meta: this.$meta,
1539
+ metaId: this.$metaId,
1540
+ pageType: 'EDIT',
1541
+ defaultFieldConfigs: {
1542
+ WATER_MARK_TYPE: {
1543
+ value: 'none'
1544
+ },
1545
+ WATER_MARK_LEAN: {
1546
+ value: 40
1547
+ },
1548
+ WATER_MARK_DENSITY: {
1549
+ value: '2'
1550
+ }
1551
+ },
1552
+ fields: [{ attriName: 'WATER_MARK_TYPE', value: 'none' }, 'WATER_MARK_PICTURE', 'WATER_MARK_PIC_HEIGHT', 'WATER_MARK_PIC_WIDTH', 'WATER_MARK_TEXT', 'WATER_MARK_FONT_SIZE', 'WATER_MARK_FONT_COLOR', 'WATER_MARK_FONT_BLOD', 'WATER_MARK_LEAN', 'WATER_MARK_SPARENCY', 'WATER_MARK_DENSITY']
1553
+ })
1554
+ .then(data => {
1555
+ this.watermarkFieldsConfigs = [...data]
1556
+ })
1557
+ this.$FieldFactory.createFields({
1558
+ meta: this.$meta,
1559
+ metaId: this.$metaId,
1560
+ pageType: 'EDIT',
1561
+ fields: [{ attriName: 'PROCESS', scopeParams: [{ field: 'CATEGORY', values: '1' }] }, 'BUSINESS_KEY']
1562
+ })
1563
+ .then(data => {
1564
+ this.otherFieldsConfigs = [...data]
1565
+ })
1566
+ },
1567
+ excelCoord (row, column) {
1568
+ return this.NumToString(column + 1) + row
1569
+ },
1570
+ async initTitleEditor () {
1571
+ const that = this
1572
+ if (this.titleEditor) this.titleEditor.remove()
1573
+ const editor = this.$refs.titleEditor
1574
+ await this.$util.usePlugin('tinymce')
1575
+ globalThis.tinymce.init({
1576
+ target: editor,
1577
+ height: 80,
1578
+ autoresize_min_height: 80,
1579
+ plugins: 'data',
1580
+ menubar: false,
1581
+ toolbar: false,
1582
+ contextmenu: 'data',
1583
+ language: 'zh_CN',
1584
+ dataSource: this.dataSource,
1585
+ statusbar: false,
1586
+ content_style: 'p {margin: 2px 0}',
1587
+ promotion: false
1588
+ })
1589
+ .then(editors => {
1590
+ this.titleEditor = editors[0]
1591
+ if (this.titleEditor) {
1592
+ const frame = this.titleEditor.iframeElement.contentWindow
1593
+ const editorContainer = frame.document.querySelector('body')
1594
+ editorContainer.ondragover = (e) => {
1595
+ e.preventDefault()
1596
+ }
1597
+ editorContainer.ondrop = (e) => {
1598
+ const type = e.dataTransfer.getData('type')
1599
+ if (type === 'variable' || type === 'process') {
1600
+ const variableCode = e.dataTransfer.getData('variableCode')
1601
+ const variableName = e.dataTransfer.getData('variableName')
1602
+ const span = document.createElement('span')
1603
+ span.contentEditable = 'false'
1604
+ span.setAttribute('data-name', 'variable')
1605
+ span.setAttribute('data-value', variableCode)
1606
+ span.innerHTML = `<label>{${variableName}}</label>`
1607
+ if (e.target.innerHTML === '<br data-mce-bogus="1">') {
1608
+ e.target.innerHTML = ''
1609
+ }
1610
+ e.target.appendChild(span)
1611
+ } else {
1612
+ const fieldId = e.dataTransfer.getData('fieldId')
1613
+ const sourceName = e.dataTransfer.getData('sourceName') || ''
1614
+ const fieldName = e.dataTransfer.getData('fieldName')
1615
+ if (fieldId) {
1616
+ const span = document.createElement('span')
1617
+ span.contentEditable = 'false'
1618
+ span.setAttribute('data-name', 'datasource')
1619
+ span.setAttribute('data-datasource', sourceName)
1620
+ span.setAttribute('data-field', fieldId)
1621
+ span.innerHTML = `<label>{${sourceName}.${fieldName}}</label>`
1622
+ if (e.target.innerHTML === '<br data-mce-bogus="1">') {
1623
+ e.target.innerHTML = ''
1624
+ }
1625
+ e.target.appendChild(span)
1626
+ const value = this.titleEditor.getContent()
1627
+ that.formData = { ...that.formData, TITLE: value }
1628
+ } else {
1629
+ return true
1630
+ }
1631
+ }
1632
+ }
1633
+ this.titleEditor.setContent(this.formData.TITLE || '')
1634
+ }
1635
+ })
1636
+ },
1637
+ async initWatermarkEditor () {
1638
+ const that = this
1639
+ const editor = this.$refs.watermarkEditor
1640
+ if (!editor) return
1641
+ if (this.watermarkEditor) this.watermarkEditor.remove()
1642
+ await this.$util.usePlugin('tinymce')
1643
+ globalThis.tinymce.init({
1644
+ target: editor,
1645
+ height: 80,
1646
+ autoresize_min_height: 80,
1647
+ plugins: 'data',
1648
+ menubar: false,
1649
+ toolbar: false,
1650
+ contextmenu: 'data',
1651
+ language: 'zh_CN',
1652
+ dataSource: [...this.dataSource, {
1653
+ type: 'variable',
1654
+ name: '系统变量',
1655
+ children: this.systemVariableList
1656
+ }],
1657
+ statusbar: false,
1658
+ content_style: 'p {margin: 2px 0}',
1659
+ promotion: false
1660
+ })
1661
+ .then(editors => {
1662
+ this.watermarkEditor = editors[0]
1663
+ if (this.watermarkEditor) {
1664
+ const frame = this.titleEditor.iframeElement.contentWindow
1665
+ const editorContainer = frame.document.querySelector('body')
1666
+ editorContainer.ondragover = (e) => {
1667
+ e.preventDefault()
1668
+ }
1669
+ editorContainer.ondrop = (e) => {
1670
+ const type = e.dataTransfer.getData('type')
1671
+ if (type === 'variable' || type === 'process') {
1672
+ const variableCode = e.dataTransfer.getData('variableCode')
1673
+ const variableName = e.dataTransfer.getData('variableName')
1674
+ const span = document.createElement('span')
1675
+ span.contentEditable = 'false'
1676
+ span.setAttribute('data-name', 'variable')
1677
+ span.setAttribute('data-value', variableCode)
1678
+ span.innerHTML = `<label>{${variableName}}</label>`
1679
+ if (e.target.innerHTML === '<br data-mce-bogus="1">') {
1680
+ e.target.innerHTML = ''
1681
+ }
1682
+ e.target.appendChild(span)
1683
+ } else {
1684
+ const fieldId = e.dataTransfer.getData('fieldId')
1685
+ const sourceName = e.dataTransfer.getData('sourceName') || ''
1686
+ const fieldName = e.dataTransfer.getData('fieldName')
1687
+ if (fieldId) {
1688
+ const span = document.createElement('span')
1689
+ span.contentEditable = 'false'
1690
+ span.setAttribute('data-name', 'datasource')
1691
+ span.setAttribute('data-datasource', sourceName)
1692
+ span.setAttribute('data-field', fieldId)
1693
+ span.innerHTML = `<label>{${sourceName}.${fieldName}}</label>`
1694
+ if (e.target.innerHTML === '<br data-mce-bogus="1">') {
1695
+ e.target.innerHTML = ''
1696
+ }
1697
+ e.target.appendChild(span)
1698
+ const value = this.watermarkEditor.getContent()
1699
+ that.formData = { ...that.formData, WATER_MARK_TEXT: value }
1700
+ } else {
1701
+ return true
1702
+ }
1703
+ }
1704
+ }
1705
+ this.watermarkEditor.setContent(this.formData.WATER_MARK_TEXT || '')
1706
+ }
1707
+ })
1708
+ },
1709
+ NumToString (i) {
1710
+ var s = 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
1711
+ var sArray = s.split(' ')
1712
+ if (i < 1) return ''
1713
+
1714
+ if (parseInt((i / 26) + '') === 0) return sArray[i % 26 - 1]
1715
+ else {
1716
+ if (i % 26 === 0) return (this.NumToString(parseInt((i / 26) + '') - 1)) + sArray[26 - 1]
1717
+ else return sArray[parseInt((i / 26) + '') - 1] + sArray[i % 26 - 1]
1718
+ }
1719
+ },
1720
+ getDataSource () {
1721
+ const { id } = this.$query
1722
+ this.$http.list({
1723
+ entityId: 'FM_FORM_SOURCE',
1724
+ 'scope.FORM': id
1725
+ })
1726
+ .then(async data => {
1727
+ this.dataSource = data.entitys.map(item => ({ key: item.ID, id: item.ENTITY, name: item.NAME, loadRelationEntity: item.LOAD_RELATION_ENTITY, isMain: item.IS_MAIN_SOUCE === '1', root: true, sourceId: item.ID }))
1728
+ for (let index = 0; index < data.entitys.length; index++) {
1729
+ const item = data.entitys[index]
1730
+ // 获取对应的metaId
1731
+ if (item.ENTITY) {
1732
+ if (!this.entityDataMap[item.ID]) {
1733
+ this.$store.dispatch({ type: ADD_META, metaId: item.ENTITY })
1734
+ this.dataSource[index] = { ...this.dataSource[index], load: true }
1735
+ const entityData = await this.getAttribute(item, { id: item.ENTITY, name: item.NAME, root: true, sourceId: item.ID })
1736
+ this.entityDataMap[item.ID] = entityData
1737
+ this.dataSource[index] = { ...this.dataSource[index], children: entityData, load: false }
1738
+ }
1739
+ } else {
1740
+ this.dataSource[index] = { ...this.dataSource[index], children: this.entityDataMap[item.ID] }
1741
+ }
1742
+ }
1743
+ })
1744
+ },
1745
+ getAttribute (item, source) {
1746
+ const { ENTITY, ENTITY_VIEW, LOAD_RELATION_ENTITY } = item
1747
+ return this.$http.get({
1748
+ action: 'getEntityMetaView',
1749
+ entityId: 'FM_ENTITY_VIEW',
1750
+ metaId: ENTITY,
1751
+ metaViewId: ENTITY_VIEW,
1752
+ allSub: LOAD_RELATION_ENTITY !== '0'
1753
+ })
1754
+ .then(data => {
1755
+ if (data[0]) data[0].isMain = true
1756
+ const formatData = (arr) => {
1757
+ arr.forEach(item => {
1758
+ if (item.type === 'folder') item.isMain = true
1759
+ item.field = item.linkCode || item.code
1760
+ item.relationSort = item.relationType
1761
+ if (!item.codeKey) item.codeKey = item.relatedEntity
1762
+ item.id = item.field
1763
+ item.name = item.text
1764
+ item.meta = item.meta ? item.meta.id : ''
1765
+ if (item.type === 'meta' && item.relationType === '1') item.isSub = true
1766
+ if (item.children) formatData(item.children)
1767
+ })
1768
+ }
1769
+ formatData(data)
1770
+ return data
1771
+ })
1772
+ },
1773
+ setFormName () {
1774
+ this.$http.update({
1775
+ entityId: 'FM_FORM',
1776
+ 'bean.ID': this.excelInfo.ID,
1777
+ 'bean.NAME': this.excelInfo.NAME
1778
+ })
1779
+ .then(() => {
1780
+ this.editName = false
1781
+ })
1782
+ .catch(err => {
1783
+ this.$message.error(err.errorText)
1784
+ })
1785
+ },
1786
+ updateForm () {
1787
+ const params = {}
1788
+ this.syncPrintCheck()
1789
+ this.formData.TITLE = this.titleEditor.getContent()
1790
+ if (this.watermarkEditor) this.formData.WATER_MARK_TEXT = this.watermarkEditor.getContent()
1791
+ for (const key in this.formData) {
1792
+ if (!key.includes('#')) {
1793
+ params[`bean.${key}`] = this.formData[key]
1794
+ }
1795
+ }
1796
+ delete params['bean.CONTENT']
1797
+ this.$http.update({
1798
+ entityId: 'FM_FORM',
1799
+ 'bean.ID': this.excelInfo.ID,
1800
+ ...params
1801
+ })
1802
+ .then(() => {
1803
+ this.globalSetting = false
1804
+ this.$message.success('保存成功')
1805
+ this.titleEditor.remove()
1806
+ if (this.oldFormData.PROCESS !== this.formData.PROCESS) {
1807
+ this.getProcessParams()
1808
+ }
1809
+ this.oldFormData = { ...this.formData }
1810
+ })
1811
+ .catch(err => {
1812
+ this.$message.error(err.errorText)
1813
+ this.titleEditor.remove()
1814
+ })
1815
+ },
1816
+ globalSettingCancel () {
1817
+ this.globalSetting = false
1818
+ this.titleEditor.remove()
1819
+ },
1820
+ // 从 formData.PRINT_CHECK 解析出规则列表
1821
+ parsePrintCheck () {
1822
+ const raw = this.formData.PRINT_CHECK
1823
+ let list = []
1824
+ if (raw) {
1825
+ try {
1826
+ const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw
1827
+ if (Array.isArray(parsed)) {
1828
+ list = parsed.map(item => ({
1829
+ name: item.name || '',
1830
+ expression: item.expression || '',
1831
+ errorInfo: item.errorInfo || '',
1832
+ enable: item.enable !== false
1833
+ }))
1834
+ }
1835
+ } catch (e) {
1836
+ list = []
1837
+ }
1838
+ }
1839
+ this.printChecks = list
1840
+ },
1841
+ // 把规则列表同步回 formData.PRINT_CHECK(随全局设置一起保存)
1842
+ syncPrintCheck () {
1843
+ this.formData.PRINT_CHECK = JSON.stringify(this.printChecks)
1844
+ },
1845
+ // 表达式预览:去掉 #{...} 外层包裹
1846
+ exprPreview (expr) {
1847
+ if (!expr) return ''
1848
+ return String(expr).replace(/^#\{([\s\S]*)\}$/, '$1')
1849
+ },
1850
+ // 打开规则表单弹窗(index < 0 为新增)
1851
+ openCheckRule (index) {
1852
+ this.editingCheckIndex = index
1853
+ if (index >= 0) {
1854
+ const r = this.printChecks[index]
1855
+ this.checkRuleForm = { name: r.name, expression: r.expression, errorInfo: r.errorInfo, enable: r.enable }
1856
+ } else {
1857
+ this.checkRuleForm = { name: '自定义校验 ' + (this.printChecks.length + 1), expression: '', errorInfo: '', enable: true }
1858
+ }
1859
+ this.checkRuleDialog = true
1860
+ },
1861
+ // 确定规则表单
1862
+ confirmCheckRule () {
1863
+ const { name, expression } = this.checkRuleForm
1864
+ if (!name || !name.trim()) {
1865
+ this.$message.warning('请输入规则名')
1866
+ return
1867
+ }
1868
+ if (!expression || !expression.trim()) {
1869
+ this.$message.warning('请配置校验表达式')
1870
+ return
1871
+ }
1872
+ const rule = {
1873
+ name: name.trim(),
1874
+ expression: expression.trim(),
1875
+ errorInfo: (this.checkRuleForm.errorInfo || '').trim(),
1876
+ enable: this.checkRuleForm.enable !== false
1877
+ }
1878
+ if (this.editingCheckIndex >= 0) {
1879
+ this.printChecks.splice(this.editingCheckIndex, 1, rule)
1880
+ } else {
1881
+ this.printChecks.push(rule)
1882
+ }
1883
+ this.syncPrintCheck()
1884
+ this.checkRuleDialog = false
1885
+ },
1886
+ // 删除规则
1887
+ deleteCheckRule (index) {
1888
+ this.$confirm('确定删除该校验规则?', '提示', { type: 'warning' })
1889
+ .then(() => {
1890
+ this.printChecks.splice(index, 1)
1891
+ this.syncPrintCheck()
1892
+ })
1893
+ .catch(() => {})
1894
+ },
1895
+ // 打开公式编辑器
1896
+ openFormulaDialog () {
1897
+ this.formulaDialog = true
1898
+ },
1899
+ // 公式编辑器确定回填表达式
1900
+ confirmFormula (payload) {
1901
+ if (payload && payload.el) {
1902
+ this.checkRuleForm.expression = payload.el
1903
+ }
1904
+ this.formulaDialog = false
1905
+ },
1906
+ openAddDataSourceModal () {
1907
+
1908
+ },
1909
+ updateDataSourceInfo (v) {
1910
+ this.dataSourceInfo = { ...this.dataSourceInfo, ...v }
1911
+ },
1912
+ updateFormParam (v) {
1913
+ this.formParam = { ...this.formParam, ...v }
1914
+ },
1915
+ getAllFields (relations) {
1916
+ // const flags = relations.map(item => item.flag)
1917
+ const fields = this.getMetaViewFields(this.dataSourceInfo.ENTITY)
1918
+ if (fields) {
1919
+ this.allFields = fields
1920
+ this.defaultExpandKey = [fields[0].code]
1921
+ } else {
1922
+ this.$store.dispatch({
1923
+ type: 'ADD_META_VIEW_FIELDS',
1924
+ metaId: this.dataSourceInfo.ENTITY
1925
+ })
1926
+ .then((fields) => {
1927
+ this.allFields = fields.filter(item => item.relationType !== '1')
1928
+ this.defaultExpandKey = [fields[0].code]
1929
+ })
1930
+ }
1931
+ },
1932
+ addSortField (field) {
1933
+ if (!field.leaf) return
1934
+ const code = field.linkCode || field.code
1935
+ const sortField = this.sortFields.find(item => item.code === code)
1936
+ if (!sortField) {
1937
+ this.sortFields = [...this.sortFields, { code, text: field.text, sort: 'asc' }]
1938
+ }
1939
+ },
1940
+ addGroupSortField (field) {
1941
+ if (!field.leaf) return
1942
+ const code = field.linkCode || field.code
1943
+ this.groupSortFields = code
1944
+ },
1945
+ changeSort (field) {
1946
+ const sortFieldIndex = this.sortFields.findIndex(item => item.code === field.code)
1947
+ if (sortFieldIndex !== -1) {
1948
+ const sortField = this.sortFields.find(item => item.code === field.code)
1949
+ const sortFields = [...this.sortFields]
1950
+ sortFields.splice(sortFieldIndex, 1, { ...sortField, sort: sortField.sort === 'asc' ? 'desc' : 'asc' })
1951
+ this.sortFields = [...sortFields]
1952
+ }
1953
+ },
1954
+ deleteSort (field) {
1955
+ const sortFieldIndex = this.sortFields.findIndex(item => item.code === field.code)
1956
+ if (sortFieldIndex !== -1) {
1957
+ const sortFields = [...this.sortFields]
1958
+ sortFields.splice(sortFieldIndex, 1)
1959
+ this.sortFields = [...sortFields]
1960
+ }
1961
+ },
1962
+ deleteGroupSort (field) {
1963
+ this.groupSortFields = ''
1964
+ },
1965
+ getLinkEntityTree (mainEntity) {
1966
+ this.$http.$get({
1967
+ entityId: 'FM_ENTITY_RELATION',
1968
+ action: 'getAllEntityRelationTree',
1969
+ mainEntity
1970
+ })
1971
+ .then(data => {
1972
+ this.linkEntityTree = Array.isArray(data) ? data : (data && data.data ? data.data : [])
1973
+ })
1974
+ .catch(() => {
1975
+ this.linkEntityTree = []
1976
+ })
1977
+ },
1978
+ onLinkEntityCheck () {
1979
+ const tree = this.$refs.linkEntityTree
1980
+ if (!tree) return
1981
+ const checked = tree.getCheckedNodes()
1982
+ this.dataSourceInfo.LINK_ENTITY = checked.map(item => item.flag).join(',')
1983
+ this.dataSourceInfo['LINK_ENTITY#'] = checked.map(item => item.title).join(',')
1984
+ },
1985
+ formatSearchParams () {
1986
+ const params = {}
1987
+ this.searchParams.map((item, i) => {
1988
+ if (i < this.searchParams.length - 1) {
1989
+ params[`search.link${i + 1}`] = item.link || 'and'
1990
+ }
1991
+ params[`search.leftBrace${i + 1}`] = item.leftBrace || ''
1992
+ params[`search.field${i + 1}`] = ''
1993
+ params[`search.value${i + 1}`] = item.value
1994
+ if (item.dateType) params[`search.dateType${i + 1}`] = item.dateType
1995
+ params[`search.attriName${i + 1}`] = (item.field || item.attriName).replace('#', '').replace(/\|/g, '.')
1996
+ params[`search.relation${i + 1}`] = item.relation
1997
+ params[`search.realRelation${i + 1}`] = item.relation
1998
+ params[`search.realValue${i + 1}`] = item.realValue || item.value
1999
+ params[`search.rightBrace${i + 1}`] = item.rightBrace || ''
2000
+ params[`search.metaId${i + 1}`] = this.$metaId
2001
+ params[`search.inputMode${i + 1}`] = item.inputMode || ''
2002
+ })
2003
+ params.size = this.searchParams.length
2004
+ return params
2005
+ },
2006
+ dropDataSource (node, current, type, event) {
2007
+ const str = this.showDataSource.reduce((str, item, index) => (str += (item.sourceId) + ':' + index + ','), '')
2008
+ const params = {
2009
+ action: 'moveList',
2010
+ entityId: 'FM_FORM_SOURCE',
2011
+ orderString: str
2012
+ }
2013
+ this.$http.$post(params)
2014
+ .then(data => {})
2015
+ },
2016
+ allowDrop (draggingNode, dropNode, type) {
2017
+ return draggingNode.data.root && dropNode.data.root && type !== 'inner'
2018
+ },
2019
+ submitDataSource () {
2020
+ const { id } = this.$query
2021
+ const { ENTITY, ENTITY_VIEW, LINK_ENTITY, NAME, SORT, GROUP_ORDER_FIELD, IS_MAIN_SOUCE, SUB_SOURCE, DATA_SCOPE, LOAD_RELATION_ENTITY } = this.dataSourceInfo
2022
+ this.$http.save({
2023
+ action: this.editDataSourceId ? 'update' : 'save',
2024
+ entityId: 'FM_FORM_SOURCE',
2025
+ 'bean.ID': this.editDataSourceId ? this.editDataSourceId : '',
2026
+ 'bean.FORM': id || '',
2027
+ 'bean.ENTITY': ENTITY || '',
2028
+ 'bean.ENTITY_VIEW': ENTITY_VIEW || '',
2029
+ 'bean.LINK_ENTITY': LINK_ENTITY || '',
2030
+ 'bean.NAME': NAME || '',
2031
+ 'bean.SORT': SORT || '',
2032
+ 'bean.GROUP_ORDER_FIELD': GROUP_ORDER_FIELD || '',
2033
+ 'bean.SUB_SOURCE': SUB_SOURCE || '',
2034
+ 'bean.DATA_SCOPE': DATA_SCOPE || '',
2035
+ 'bean.IS_MAIN_SOUCE': IS_MAIN_SOUCE || '0',
2036
+ 'bean.LOAD_RELATION_ENTITY': LOAD_RELATION_ENTITY || '1',
2037
+ 'bean.CLIENT': this.excelInfo.CLIENT,
2038
+ 'bean.SYSTEM': this.excelInfo.SYSTEM
2039
+ })
2040
+ .then((data) => {
2041
+ this.dataSourceModal = false
2042
+ this.searchParams = []
2043
+ this.dataSourceInfo = {}
2044
+ const sourceId = this.editDataSourceId || data
2045
+ let index = -1
2046
+ if (!this.editDataSourceId) {
2047
+ this.dataSource.push({ key: data, id: ENTITY, name: NAME, loadRelationEntity: LOAD_RELATION_ENTITY, root: true, sourceId: data })
2048
+ index = this.dataSource.length - 1
2049
+ } else {
2050
+ index = this.dataSource.findIndex(item => item.sourceId === this.editDataSourceId)
2051
+ if (index !== -1) {
2052
+ if (NAME !== this.dataSource[index].name) {
2053
+ this.dataSource.splice(index, 1, { ...this.dataSource[index], name: NAME })
2054
+ }
2055
+ if (LOAD_RELATION_ENTITY !== this.dataSource[index].loadRelationEntity) {
2056
+ this.getAttribute({ ENTITY, ENTITY_VIEW, LOAD_RELATION_ENTITY })
2057
+ .then(entityData => {
2058
+ this.entityDataMap[sourceId] = entityData
2059
+ this.dataSource[index] = { ...this.dataSource[index], loadRelationEntity: LOAD_RELATION_ENTITY, children: entityData }
2060
+ })
2061
+ }
2062
+ }
2063
+ }
2064
+ if (ENTITY) {
2065
+ if (!this.entityDataMap[sourceId]) {
2066
+ this.$store.dispatch({ type: ADD_META, metaId: ENTITY })
2067
+ this.getAttribute({ ENTITY, ENTITY_VIEW, LOAD_RELATION_ENTITY })
2068
+ .then(entityData => {
2069
+ this.entityDataMap[sourceId] = entityData
2070
+ this.dataSource[index] = { ...this.dataSource[index], children: entityData }
2071
+ })
2072
+ }
2073
+ }
2074
+ this.editDataSourceId = ''
2075
+ })
2076
+ .catch(err => {
2077
+ this.$message.error(err.message)
2078
+ })
2079
+ },
2080
+ clickDataSource (data) {
2081
+ if (data.root) {
2082
+ this.editDataSourceId = data.sourceId
2083
+ }
2084
+ },
2085
+ addDataSource () {
2086
+ this.editDataSourceId = ''
2087
+ this.searchParams = []
2088
+ this.dataSourceInfo = {}
2089
+ this.fields = []
2090
+ this.dataSourceModal = true
2091
+ },
2092
+ editDataSource (data) {
2093
+ this.$http.get({
2094
+ entityId: 'FM_FORM_SOURCE',
2095
+ id: this.editDataSourceId
2096
+ })
2097
+ .then(data => {
2098
+ if (data && data.data) {
2099
+ this.dataSourceInfo = { ...data.data }
2100
+ }
2101
+ this.dataSourceModal = true
2102
+ })
2103
+ .catch(() => {
2104
+ this.dataSourceModal = true
2105
+ })
2106
+ // this.dataSourceModal = this.editDataSourceId
2107
+ },
2108
+ deleteDataSource () {
2109
+ if (!this.editDataSourceId) {
2110
+ this.$message.error('请选择要删除的数据源')
2111
+ return
2112
+ }
2113
+ this.$http.removeMulti({
2114
+ entityId: 'FM_FORM_SOURCE',
2115
+ ids: this.editDataSourceId
2116
+ })
2117
+ .then(data => {
2118
+ if (data !== false) {
2119
+ this.$message.success('删除成功')
2120
+ const index = this.dataSource.findIndex(item => item.sourceId === this.editDataSourceId)
2121
+ if (index !== -1) {
2122
+ this.dataSource.splice(index, 1)
2123
+ }
2124
+ } else {
2125
+ this.$message.err('删除失败')
2126
+ }
2127
+ })
2128
+ },
2129
+ getFormParams () {
2130
+ const { id } = this.$query
2131
+ this.$http.list({
2132
+ entityId: 'FM_FORM_PARAM',
2133
+ 'scope.FORM': id
2134
+ })
2135
+ .then(data => {
2136
+ this.formParams = [...data.entitys]
2137
+ })
2138
+ if (this.systemVariableList.length === 0) {
2139
+ this.$store.dispatch('GET_SYSTEM_VARIABLE')
2140
+ }
2141
+ this.getProcessParams()
2142
+ },
2143
+ getProcessParams () {
2144
+ const { id } = this.$query
2145
+ this.$http.list({
2146
+ action: 'getProcessParam',
2147
+ entityId: 'FM_FORM',
2148
+ id: id
2149
+ })
2150
+ .then(data => {
2151
+ this.processParams = data.map(item => {
2152
+ if (item.childrens) item.children = item.childrens
2153
+ delete item.childrens
2154
+ return item
2155
+ })
2156
+ })
2157
+ },
2158
+ saveFormParam () {
2159
+ const { id } = this.$query
2160
+ const { CODE, NAME } = this.formParam
2161
+ this.$http.save({
2162
+ action: this.editFormParamId ? 'update' : 'save',
2163
+ entityId: 'FM_FORM_PARAM',
2164
+ 'bean.ID': this.editFormParamId ? this.editFormParamId : '',
2165
+ 'bean.FORM': id,
2166
+ 'bean.CODE': CODE,
2167
+ 'bean.CLIENT': this.excelInfo.CLIENT,
2168
+ 'bean.SYSTEM': this.excelInfo.SYSTEM,
2169
+ 'bean.NAME': NAME
2170
+ })
2171
+ .then(() => {
2172
+ this.formParamModal = false
2173
+ this.editFormParamId = ''
2174
+ this.formParam = {}
2175
+ this.getFormParams()
2176
+ })
2177
+ .catch(err => {
2178
+ this.$message.error(err.message || err.msg || '处理失败')
2179
+ })
2180
+ },
2181
+ addFormParam () {
2182
+ this.editFormParamId = ''
2183
+ this.formParam = {}
2184
+ this.formParamModal = true
2185
+ },
2186
+ editFormParam (param) {
2187
+ this.editFormParamId = param.ID
2188
+ this.formParamModal = true
2189
+ this.formParam = { ...param }
2190
+ },
2191
+ deleteFormParam (param) {
2192
+ this.$http.removeMulti({
2193
+ entityId: 'FM_FORM_PARAM',
2194
+ ids: param.ID
2195
+ }).then(data => {
2196
+ this.$message.success('删除成功')
2197
+ this.getFormParams()
2198
+ })
2199
+ },
2200
+ drag (e, data, node) {
2201
+ if (node.parent) {
2202
+ let parent = node.parent
2203
+ let nodeText = ''
2204
+ while (parent.parent && parent.data.root !== true) {
2205
+ if (!parent.data.isMain) {
2206
+ nodeText = parent.data.text + '.' + nodeText
2207
+ }
2208
+ parent = parent.parent
2209
+ }
2210
+ const field = {
2211
+ sourceId: parent.data.id,
2212
+ sourceName: parent.data.name,
2213
+ fieldId: node.data.id,
2214
+ fieldName: nodeText ? nodeText + node.data.text : node.data.text
2215
+ }
2216
+ for (const key in field) {
2217
+ e.dataTransfer.setData(key, field[key])
2218
+ e.dataTransfer.dropEffect = 'copy'
2219
+ e.dataTransfer.effectAllowed = 'copy'
2220
+ }
2221
+ this.dragField = field
2222
+ }
2223
+ },
2224
+ dragDataSource (node, e) {
2225
+ if (node.data.root || node.data.type === 'meta') return
2226
+ if (node.parent) {
2227
+ let parent = node.parent
2228
+ let nodeText = ''
2229
+ while (parent.parent && parent.data.root !== true) {
2230
+ if (!parent.data.isMain) {
2231
+ nodeText = parent.data.text + '.' + nodeText
2232
+ }
2233
+ parent = parent.parent
2234
+ }
2235
+ const field = {
2236
+ sourceId: parent.data.id,
2237
+ sourceName: parent.data.name,
2238
+ fieldId: node.data.id,
2239
+ fieldName: nodeText ? nodeText + node.data.text : node.data.text
2240
+ }
2241
+ for (const key in field) {
2242
+ e.dataTransfer.setData(key, field[key])
2243
+ e.dataTransfer.dropEffect = 'copy'
2244
+ e.dataTransfer.effectAllowed = 'copy'
2245
+ }
2246
+ this.dragField = field
2247
+ }
2248
+ },
2249
+ dragVariableFn (e, data, node) {
2250
+ e.dataTransfer.setData('type', data.type)
2251
+ e.dataTransfer.setData('variableName', data.name)
2252
+ e.dataTransfer.setData('variableCode', data.code)
2253
+ e.dataTransfer.dropEffect = 'copy'
2254
+ e.dataTransfer.effectAllowed = 'copy'
2255
+ this.dragVariable = {
2256
+ value: data.value,
2257
+ name: data.name
2258
+ }
2259
+ },
2260
+ dragProcessParamFn (e, data, node) {
2261
+ e.dataTransfer.setData('type', data.type)
2262
+ e.dataTransfer.setData('variableName', data.name)
2263
+ e.dataTransfer.setData('variableCode', data.code)
2264
+ e.dataTransfer.dropEffect = 'copy'
2265
+ e.dataTransfer.effectAllowed = 'copy'
2266
+ this.dragProcessParam = {
2267
+ value: data.value,
2268
+ name: data.name
2269
+ }
2270
+ },
2271
+ async createExcel (content) {
2272
+ const that = this
2273
+ const { CONTENT } = this.excelInfo
2274
+ let data = null
2275
+ if (CONTENT) {
2276
+ data = JSON.parse(CONTENT)
2277
+ }
2278
+ const { FORM_EXTEND_FONTS = '' } = this.clientConfig
2279
+ await this.$util.usePlugin('luckysheet')
2280
+ const fontList = [
2281
+ {
2282
+ fontName: '方正小标宋简体'
2283
+ }
2284
+ ]
2285
+ if (FORM_EXTEND_FONTS) {
2286
+ fontList.push(...FORM_EXTEND_FONTS.split(';').map(item => ({
2287
+ fontName: item
2288
+ })))
2289
+ }
2290
+ // 加载luckysheet
2291
+ luckysheet.create({
2292
+ container: 'luckysheetEl', // 设定DOM容器的id
2293
+ title: 'Luckysheet Demo', // 设定表格名称
2294
+ lang: 'zh', // 设定表格语言
2295
+ plugins: ['chart'],
2296
+ data: content !== undefined ? content : data,
2297
+ // sheet 自身未记录行列数时(如新建报表)使用当前设置的行列数
2298
+ row: this.gridSize.row,
2299
+ column: this.gridSize.column,
2300
+ showsheetbar: false,
2301
+ fontList: fontList,
2302
+ hook: {
2303
+ cellMousedown: function (cell, position, sheetFile, ctx) {
2304
+ if (cell && cell.leftCell) {
2305
+ that.leftCellWay = 'custom'
2306
+ } else {
2307
+ that.leftCellWay = 'default'
2308
+ }
2309
+ if (cell && cell.topCell) {
2310
+ that.topCellWay = 'custom'
2311
+ } else {
2312
+ that.topCellWay = 'default'
2313
+ }
2314
+ if (cell && cell.relyCell) {
2315
+ that.relyCellWay = 'custom'
2316
+ } else {
2317
+ that.relyCellWay = 'default'
2318
+ }
2319
+ const { r, c } = position
2320
+ that.activeCell = { rowIndex: r, columnIndex: c, wrapCompute: '1', heightAuto: '1', ...(cell || {}) }
2321
+ that.globalSetting = false
2322
+ },
2323
+ cellDragStop: function (cell, position, sheetFile, ctx) {
2324
+ const { r, c } = position
2325
+ if (that.dragField) {
2326
+ const { sourceName, fieldName, sourceId, fieldId } = that.dragField
2327
+ luckysheet.setCellValue(r, c, { v: `{${sourceName}.${fieldName}}`, cellType: 'dataset', dataSource: sourceId, field: fieldId, aggregate: 'select', expand: 'Down' })
2328
+ that.dragField = null
2329
+ } else if (that.dragVariable) {
2330
+ const { name, value } = that.dragVariable
2331
+ luckysheet.setCellValue(r, c, { v: `{${name}}`, cellType: 'system-variable', variable: value })
2332
+ that.dragVariable = null
2333
+ } else if (that.dragProcessParam) {
2334
+ const { name, value } = that.dragProcessParam
2335
+ luckysheet.setCellValue(r, c, { v: `{${name}}`, cellType: 'process-variable', variable: value })
2336
+ that.dragProcessParam = null
2337
+ }
2338
+ },
2339
+ cellEditBefore: function (range, position, sheetFile, ctx) {
2340
+ const selects = luckysheet.getRangeValuesWithFlatte()
2341
+ const cell = selects[0]
2342
+ if (cell && (cell.cellType === 'dataset' || cell.cellType === 'system-variable')) {
2343
+ that.$message.warning(cell.cellType === 'system-variable' ? '系统变量不允许编辑' : '数据源不允许编辑')
2344
+ const functionInput = document.querySelectorAll('.luckysheet-functionbox-cell-input')
2345
+ const cellInput = document.querySelectorAll('.luckysheet-cell-input')
2346
+ const inputList = [...functionInput, ...cellInput]
2347
+ const timer = setTimeout(() => {
2348
+ inputList.map(input => input.blur())
2349
+ clearTimeout(timer)
2350
+ }, 80)
2351
+ }
2352
+ return false
2353
+ },
2354
+ cellUpdated (v) {
2355
+ // luckysheet.setCellValue(r, c, { v: `{${sourceName}.${fieldName}}`, dataSource: sourceId, field: fieldId, cellType: 'dataset' })
2356
+ },
2357
+ updated (operate) {
2358
+ if (operate.type === 'delRC' || operate.type === 'deleteCell' || operate.type === 'addRC') {
2359
+ const sheet = luckysheet.getSheet()
2360
+ const { data } = sheet
2361
+ const celldata = luckysheet.transToCellData(data)
2362
+ const updateRelyCell = (cell, prop) => {
2363
+ const relyCell = cell.v[prop]
2364
+ if (!relyCell || !relyCell.match(/\d+/g)) return
2365
+ const row = Number(relyCell.match(/\d+/g)[0])
2366
+ const columnName = relyCell.match(/[A-Z]+/g)[0]
2367
+ const column = letterToNumber(columnName)
2368
+ if (operate.type === 'delRC') {
2369
+ const { rc, index } = operate.ctrlValue
2370
+ if (rc === 'r') {
2371
+ // 删除行
2372
+ if (row >= index + 1) {
2373
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: row === index + 1 ? '' : `${columnName}${row - 1}` })
2374
+ }
2375
+ } else if (operate.ctrlValue.rc === 'c') {
2376
+ // 删除列
2377
+ if (column >= index) {
2378
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: column === index ? '' : `${NumberToLetter(column - 1)}${row}` })
2379
+ }
2380
+ }
2381
+ } else if (operate.type === 'deleteCell') {
2382
+ const { type, stc, str, edc, edr } = operate.ctrl
2383
+ if (row >= str + 1 && row <= edr + 1 && column >= stc && column <= edc) {
2384
+ if (column >= stc && column <= edc) {
2385
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: '' })
2386
+ }
2387
+ } else if (column > edc && row >= str + 1 && row <= edr + 1 && type === 'moveLeft') {
2388
+ const newColumn = column - 1 - (edc - stc)
2389
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: `${NumberToLetter(newColumn)}${row}` })
2390
+ } else if (row > edr + 1 && column >= stc && column <= edc && type === 'moveUp') {
2391
+ const newRow = row - 1 - (edr - str)
2392
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: `${columnName}${newRow}` })
2393
+ }
2394
+ } else if (operate.type === 'addRC') {
2395
+ const { index, len, direction, rc } = operate.ctrlValue
2396
+ if (rc === 'c') {
2397
+ if (column > index || (column === index && direction === 'lefttop')) {
2398
+ const newColumn = column + len
2399
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: `${NumberToLetter(newColumn)}${row}` })
2400
+ }
2401
+ } else if (rc === 'r') {
2402
+ if (row > index + 1 || (row === index + 1 && direction === 'lefttop')) {
2403
+ const newRow = row + len
2404
+ luckysheet.setCellValue(cell.r, cell.c, { [prop]: `${columnName}${newRow}` })
2405
+ }
2406
+ }
2407
+ }
2408
+ }
2409
+ for (const cell of celldata) {
2410
+ if (cell.v?.leftCell) {
2411
+ updateRelyCell(cell, 'leftCell')
2412
+ }
2413
+ if (cell.v?.topCell) {
2414
+ updateRelyCell(cell, 'topCell')
2415
+ }
2416
+ }
2417
+ // 右键插入/删除行列后同步行列数
2418
+ that.syncGridSize()
2419
+ }
2420
+ }
2421
+ }
2422
+
2423
+ })
2424
+ const luckysheetCell = document.getElementsByClassName('luckysheet-cell-flow-col')[0]
2425
+ for (let i = 0; i < 10; i++) {
2426
+ const hr = document.createElement('hr')
2427
+ hr.style = `width:100% ;height: 0px;border-top: 1px dashed rgb(153, 153, 153);position: absolute;left: 0;top: ${(i + 1) * 840.51}pt;z-index: 10;`
2428
+ luckysheetCell.appendChild(hr)
2429
+ }
2430
+ this.syncGridSize()
2431
+ },
2432
+ // 从 luckysheet 读取当前 sheet 的行列数
2433
+ syncGridSize () {
2434
+ let sheet = null
2435
+ try {
2436
+ sheet = typeof luckysheet === 'undefined' ? null : luckysheet.getSheet()
2437
+ } catch (e) {
2438
+ sheet = null
2439
+ }
2440
+ if (!sheet) return
2441
+ // 右键插入行列时 luckysheet 只扩 data 不改 sheet.row/column,实际尺寸以 data 为准
2442
+ const data = sheet.data
2443
+ this.gridSize = {
2444
+ row: data && data.length ? data.length : (sheet.row || DEFAULT_ROW_NUM),
2445
+ column: data && data.length && data[0] ? data[0].length : (sheet.column || DEFAULT_COLUMN_NUM)
2446
+ }
2447
+ },
2448
+ // 统计已使用到的最大行列(含合并单元格、自定义行高列宽),避免缩小行列时丢配置
2449
+ getUsedGridSize (sheet, celldata) {
2450
+ let row = 1
2451
+ let column = 1
2452
+ celldata.forEach(cell => {
2453
+ if (cell.v === null || cell.v === undefined) return
2454
+ row = Math.max(row, cell.r + 1)
2455
+ column = Math.max(column, cell.c + 1)
2456
+ })
2457
+ const config = sheet.config || {}
2458
+ const merge = config.merge || {}
2459
+ for (const key in merge) {
2460
+ const { r, c, rs = 1, cs = 1 } = merge[key]
2461
+ row = Math.max(row, r + rs)
2462
+ column = Math.max(column, c + cs)
2463
+ }
2464
+ for (const key in (config.rowlen || {})) {
2465
+ row = Math.max(row, Number(key) + 1)
2466
+ }
2467
+ for (const key in (config.columnlen || {})) {
2468
+ column = Math.max(column, Number(key) + 1)
2469
+ }
2470
+ return { row, column }
2471
+ },
2472
+ // 右侧「+ 列」:在表格末尾追加列
2473
+ async addColumns () {
2474
+ const num = Number(this.addColumnNum)
2475
+ if (!num || num < 1) {
2476
+ this.$message.warning('请输入要添加的列数')
2477
+ return
2478
+ }
2479
+ const column = this.gridSize.column + num
2480
+ if (column > MAX_COLUMN_NUM) {
2481
+ this.$message.warning(`最多支持 ${MAX_COLUMN_NUM} 列,当前 ${this.gridSize.column} 列`)
2482
+ return
2483
+ }
2484
+ this.addColumnVisible = false
2485
+ const ok = await this.resizeGrid(this.gridSize.row, column)
2486
+ if (ok) {
2487
+ this.$message.success(`已添加 ${num} 列,当前共 ${column} 列(末列 ${this.NumToString(column)}),点击右上角「保存」生效`)
2488
+ }
2489
+ },
2490
+ // 按新行列数重建整表,成功返回 true
2491
+ async resizeGrid (row, column) {
2492
+ if (!row || !column || row < 1 || column < 1 || row > MAX_ROW_NUM || column > MAX_COLUMN_NUM) {
2493
+ this.$message.warning(`行数取值 1~${MAX_ROW_NUM},列数取值 1~${MAX_COLUMN_NUM}`)
2494
+ return false
2495
+ }
2496
+ const sheets = luckysheet.getluckysheetfile()
2497
+ // 用 celldata 重建,data 是旧尺寸的二维数组,必须丢弃
2498
+ const content = sheets.map(item => {
2499
+ const { data, ...props } = item
2500
+ return { ...props, celldata: data ? luckysheet.transToCellData(data) : (item.celldata || []) }
2501
+ })
2502
+ const used = this.getUsedGridSize(sheets[0], content[0].celldata)
2503
+ if (row < used.row || column < used.column) {
2504
+ this.$message.warning(`当前表格已使用到第 ${used.row} 行、${this.NumToString(used.column)} 列,行列数不能小于该范围`)
2505
+ return false
2506
+ }
2507
+ content[0].row = row
2508
+ content[0].column = column
2509
+ // 先脱离 luckysheet 内部引用再销毁
2510
+ const newContent = JSON.parse(JSON.stringify(content))
2511
+ this.gridSize = { row, column }
2512
+ luckysheet.destroy()
2513
+ await this.createExcel(newContent)
2514
+ this.saveContent()
2515
+ return true
2516
+ },
2517
+ deleteCell (evt) {
2518
+ console.log(evt)
2519
+ },
2520
+ importExcel (props) {
2521
+ const file = props.file || props
2522
+ this.isImportExcel = true
2523
+ this.$http.$post({
2524
+ action: 'upload',
2525
+ file
2526
+ }, {
2527
+ requestType: 'formData'
2528
+
2529
+ })
2530
+ .then(data => {
2531
+ if (data) {
2532
+ if (data.bean) {
2533
+ this.getExcelDataByFile(data.bean)
2534
+ } else if (data.fileCheck) {
2535
+ this.$message.error(data.fileCheck.checkResult)
2536
+ this.isImportExcel = false
2537
+ }
2538
+ }
2539
+ })
2540
+ .catch(err => {
2541
+ this.$message.error(err.message)
2542
+ this.isImportExcel = false
2543
+ })
2544
+ },
2545
+ getExcelDataByFile (fileId) {
2546
+ this.$http.save({
2547
+ action: 'importExcel',
2548
+ entityId: 'FM_FORM',
2549
+ fileId
2550
+ })
2551
+ .then(data => {
2552
+ const sheets = JSON.parse(data) || []
2553
+ const { celldata } = sheets[0] || {}
2554
+ sheets[0].data = luckysheet.transToData(celldata)
2555
+ luckysheet.destroy()
2556
+ this.createExcel(sheets)
2557
+ this.isImportExcel = false
2558
+ })
2559
+ .catch(err => {
2560
+ this.$message.error(err.message)
2561
+ this.isImportExcel = false
2562
+ })
2563
+ },
2564
+ saveExcelData (cb) {
2565
+ this.saveContent()
2566
+ this.$http.update({
2567
+ entityId: 'FM_FORM',
2568
+ 'bean.ID': this.$query.id,
2569
+ 'bean.CONTENT': this.content,
2570
+ 'bean.LANGUAGE_PARAM': {
2571
+ CONTENT: this.languageContent
2572
+ }
2573
+ })
2574
+ .then(data => {
2575
+ this.$message.success('保存成功')
2576
+ this.initContent = this.content
2577
+ this.initLanguageContent = this.$_.cloneDeep(this.languageContent)
2578
+ cb && cb()
2579
+ })
2580
+ },
2581
+ preview () {
2582
+ this.showFormParamsDialog = false
2583
+ this.$createPage({
2584
+ component: 'excel-preview-page',
2585
+ name: this.excelInfo.NAME,
2586
+ code: this.excelInfo.CODE,
2587
+ params: this.previewParams
2588
+ })
2589
+ },
2590
+ defaultLeftCell () {
2591
+ this.activeCell.leftCell = ''
2592
+ },
2593
+ defaultTopCell () {
2594
+ this.activeCell.topCell = ''
2595
+ },
2596
+ defaultRelyCell () {
2597
+ this.activeCell.relyCell = ''
2598
+ },
2599
+ addFilterCondition () {
2600
+ this.showFilterConditionDialog = true
2601
+ },
2602
+ editFilterCondition (item, index) {
2603
+ this.filterConditionForm = { ...item }
2604
+ this.editFilterConditionIndex = index
2605
+ this.showFilterConditionDialog = true
2606
+ },
2607
+ deleteFilterCondition (index) {
2608
+ const { filterCondition } = this.activeCell
2609
+ filterCondition.splice(index, 1)
2610
+ this.activeCell[index] = filterCondition
2611
+ },
2612
+ saveFilterCondition () {
2613
+ let { filterCondition } = this.activeCell
2614
+ if (!filterCondition) filterCondition = []
2615
+ if (!this.filterConditionForm.propertyId) {
2616
+ this.$message.error('请填写属性id')
2617
+ return
2618
+ }
2619
+ if (!this.filterConditionForm.op) {
2620
+ this.$message.error('请填写操作符')
2621
+ return
2622
+ }
2623
+ if (!this.filterConditionForm.condition) {
2624
+ this.$message.error('请填写值表达式')
2625
+ return
2626
+ }
2627
+ const item = this.objectFieldList.find(item => item.code === this.filterConditionForm.propertyId) || {
2628
+ text: this.filterConditionForm.propertyId
2629
+ }
2630
+ const condition = { ...this.filterConditionForm, propertyName: item.text, text: `${(this.editFilterConditionIndex > 0 || filterCondition.length > 0) ? this.getConditionOpText(this.filterConditionForm.join) || '' : ''} ${item.text} ${this.getConditionOpText(this.filterConditionForm.op)} ${this.filterConditionForm.condition}` }
2631
+ if (this.editFilterConditionIndex !== null) {
2632
+ filterCondition.splice(this.editFilterConditionIndex, 1, condition)
2633
+ this.editFilterConditionIndex = null
2634
+ } else {
2635
+ filterCondition.push(condition)
2636
+ }
2637
+ this.activeCell.filterCondition = filterCondition
2638
+ this.showFilterConditionDialog = false
2639
+ this.filterConditionForm = {}
2640
+ },
2641
+ addConditionPropertyItem () {
2642
+ this.currentConditionPropertyItem = {}
2643
+ this.showConditionPropertyItemDialog = true
2644
+ const { conditionPropertyItems } = this.activeCell
2645
+ if (conditionPropertyItems && conditionPropertyItems.length) {
2646
+ this.conditionPropertyItems = conditionPropertyItems
2647
+ this.currentConditionPropertyItem = conditionPropertyItems[0]
2648
+ }
2649
+ },
2650
+ saveConditionPropertyItemName () {
2651
+ let { conditionPropertyItems } = this.activeCell
2652
+ if (!conditionPropertyItems) conditionPropertyItems = []
2653
+ if (!this.conditionPropertyItemNameForm.name) {
2654
+ this.$message.error('请输入条件项名称')
2655
+ return
2656
+ }
2657
+ let item = null
2658
+ if (this.conditionPropertyItemNameForm.uid) {
2659
+ item = this.conditionPropertyItems.find(i => i.uid === this.conditionPropertyItemNameForm.uid)
2660
+ item.name = this.conditionPropertyItemNameForm.name
2661
+ } else {
2662
+ const guid = new Date().getTime().toString(32)
2663
+ item = {
2664
+ uid: guid,
2665
+ name: this.conditionPropertyItemNameForm.name,
2666
+ conditions: [],
2667
+ cellStyle: {},
2668
+ newValueFlag: false,
2669
+ newValue: ''
2670
+ }
2671
+ this.conditionPropertyItems.push(item)
2672
+ }
2673
+ this.activeCell.conditionPropertyItems = this.conditionPropertyItems
2674
+ this.showConditionPropertyItemNameDialog = false
2675
+ this.conditionPropertyItemNameForm = {}
2676
+ this.currentConditionPropertyItem = item
2677
+ },
2678
+ saveConditionPropertyItemCondition () {
2679
+ if (!this.conditionPropertyItemConditionForm.type) {
2680
+ this.$message.error('请选择条件左值')
2681
+ return
2682
+ }
2683
+ if (!this.conditionPropertyItemConditionForm.op) {
2684
+ this.$message.error('请选择操作符')
2685
+ return
2686
+ }
2687
+ if (!this.conditionPropertyItemConditionForm.condition) {
2688
+ this.$message.error('请输入值表达式')
2689
+ return
2690
+ }
2691
+ if (this.conditionPropertyItemConditionForm.uid) {
2692
+ const c = this.currentConditionPropertyItem.conditions.find(i => i.uid === this.conditionPropertyItemConditionForm.uid)
2693
+ c.type = this.conditionPropertyItemConditionForm.type
2694
+ c.op = this.conditionPropertyItemConditionForm.op
2695
+ c.join = this.conditionPropertyItemConditionForm.join
2696
+ c.condition = this.conditionPropertyItemConditionForm.condition
2697
+ c.left = this.conditionPropertyItemConditionForm.left
2698
+ } else {
2699
+ const guid = new Date().getTime().toString(32)
2700
+ const item = {
2701
+ uid: guid,
2702
+ type: this.conditionPropertyItemConditionForm.type,
2703
+ op: this.conditionPropertyItemConditionForm.op,
2704
+ join: this.conditionPropertyItemConditionForm.join,
2705
+ condition: this.conditionPropertyItemConditionForm.condition,
2706
+ left: this.conditionPropertyItemConditionForm.left
2707
+ }
2708
+ if (!this.currentConditionPropertyItem.conditions) this.currentConditionPropertyItem.conditions = []
2709
+ this.currentConditionPropertyItem.conditions.push(item)
2710
+ }
2711
+ this.activeCell.conditionPropertyItems = this.conditionPropertyItems
2712
+ this.showConditionPropertyItemConditionDialog = false
2713
+ this.conditionPropertyItemConditionForm = {}
2714
+ },
2715
+ saveConditionPropertyItem () {
2716
+ this.activeCell.conditionPropertyItems = this.conditionPropertyItems
2717
+ this.showConditionPropertyItemDialog = false
2718
+ this.currentConditionPropertyItem = {}
2719
+ this.conditionPropertyItems = []
2720
+ },
2721
+ clickConditionPropertyItem (item) {
2722
+ this.currentConditionPropertyItem = item
2723
+ },
2724
+ deleteConditionPropertyItem (item) {
2725
+ const { conditionPropertyItems } = this.activeCell
2726
+ this.conditionPropertyItems = conditionPropertyItems.filter(i => i.uid !== item.uid)
2727
+ this.activeCell.conditionPropertyItems = this.conditionPropertyItems
2728
+ this.currentConditionPropertyItem = {}
2729
+ },
2730
+ editConditionPropertyItem () {
2731
+ this.conditionPropertyItemNameForm = { ...this.currentConditionPropertyItem }
2732
+ this.showConditionPropertyItemNameDialog = true
2733
+ },
2734
+ deleteConditionPropertyCondition (item) {
2735
+ this.currentConditionPropertyItem.conditions = this.currentConditionPropertyItem.conditions.filter(i => i.uid !== item.uid)
2736
+ },
2737
+ editConditionPropertyCondition (item) {
2738
+ this.conditionPropertyItemConditionForm = { ...item }
2739
+ this.conditionPropertyItemConditionForm.index = this.currentConditionPropertyItem.conditions.indexOf(item)
2740
+ this.showConditionPropertyItemConditionDialog = true
2741
+ },
2742
+ getConditionOpText (p) {
2743
+ let text = ''
2744
+ switch (p) {
2745
+ case '==':
2746
+ text = '等于'
2747
+ break
2748
+ case '>':
2749
+ text = '大于'
2750
+ break
2751
+ case '>=':
2752
+ text = '大于等于'
2753
+ break
2754
+ case '<':
2755
+ text = '小于'
2756
+ break
2757
+ case '<=':
2758
+ text = '小于等于'
2759
+ break
2760
+ case '!=':
2761
+ text = '不等于'
2762
+ break
2763
+ case 'in':
2764
+ text = '在集合中'
2765
+ break
2766
+ case 'not in':
2767
+ text = '不在集合中'
2768
+ break
2769
+ case 'like':
2770
+ text = '相似'
2771
+ break
2772
+ case 'not like':
2773
+ text = '不相似'
2774
+ break
2775
+ case 'and':
2776
+ text = '并且'
2777
+ break
2778
+ case 'or':
2779
+ text = '或者'
2780
+ break
2781
+ }
2782
+ return text
2783
+ }
2784
+ },
2785
+ mounted () {
2786
+ this.$refs.luckysheet.setAttribute('id', 'luckysheetEl')
2787
+ this.getData()
2788
+ },
2789
+ created () {
2790
+ this.currentLanguage = this.defaultLanguage
2791
+ if (this.showMenu) {
2792
+ this.changeMenuFlag = true
2793
+ this.$store.commit('SWITCH_MENU_SHOW', false)
2794
+ }
2795
+ if (this.showAppNav) {
2796
+ this.changeAppNavFlag = true
2797
+ this.$store.commit('SWITCH_APP_NAV_SHOW', false)
2798
+ }
2799
+ this.getDataSource()
2800
+ this.getFormParams()
2801
+ this.getFieldRelation()
2802
+ this.getFieldConfigs()
2803
+ },
2804
+ beforeUnmount () {
2805
+ if (this.changeMenuFlag) {
2806
+ this.$store.commit('SWITCH_MENU_SHOW', true)
2807
+ }
2808
+ if (this.changeAppNavFlag) {
2809
+ this.$store.commit('SWITCH_APP_NAV_SHOW', true)
2810
+ }
2811
+ // 移除luckysheet
2812
+ this.$refs.luckysheet.removeAttribute('id')
2813
+ const morebtn = document.getElementById('luckysheet-icon-morebtn-div')
2814
+ if (morebtn) {
2815
+ morebtn.style = 'none'
2816
+ }
2817
+ luckysheet.destroy()
2818
+ }
2819
+ }
2820
+ </script>
2821
+
2822
+ <style lang="scss" scoped>
2823
+ .container {
2824
+ position: absolute;
2825
+ left: 0;
2826
+ top: 0;
2827
+ width: 100%;
2828
+ height: 100%;
2829
+ }
2830
+ .report-header {
2831
+ height: 56px;
2832
+ background: var(--epx-bg-card);
2833
+ padding: 0 20px;
2834
+ display: flex;
2835
+ align-items: center;
2836
+ justify-content: space-between;
2837
+ border-bottom: 1px solid var(--epx-border);
2838
+ }
2839
+ .report-title {
2840
+ display: flex;
2841
+ }
2842
+ .report-back {
2843
+ font-size: var(--epx-font-size-xl);
2844
+ cursor: pointer;
2845
+ position: relative;
2846
+ top: 1px;
2847
+ }
2848
+
2849
+ .report-name {
2850
+ color: var(--epx-text);
2851
+ font-size: var(--epx-font-size-l);
2852
+ margin: 0 12px 0 6px;
2853
+ display: flex;
2854
+ align-items: center;
2855
+ white-space: nowrap;
2856
+ i {
2857
+ font-size: 18px;
2858
+ color: #444;
2859
+ cursor: pointer;
2860
+ margin-left: 8px;
2861
+ }
2862
+ }
2863
+ .report-operate {
2864
+ display: flex;
2865
+ }
2866
+ .import-btn {
2867
+ margin-right: 10px;
2868
+ }
2869
+ .content {
2870
+ width: 100%;
2871
+ height: calc(100% - 59px);
2872
+ display: flex;
2873
+ }
2874
+ .data-source {
2875
+ width: 240px;
2876
+ margin-right: 16px;
2877
+ flex-shrink: 0;
2878
+ height: 100%;
2879
+
2880
+ :deep(.el-tabs) {
2881
+ height: 100%;
2882
+ display: flex;
2883
+ flex-direction: column;
2884
+ }
2885
+ :deep(.el-tabs__content) {
2886
+ flex: 1;
2887
+ overflow: hidden;
2888
+ }
2889
+ :deep(.el-tab-pane) {
2890
+ height: 100%;
2891
+ display: flex;
2892
+ flex-direction: column;
2893
+ }
2894
+
2895
+ }
2896
+ .data-source-modal-header {
2897
+ font-size: var(--epx-font-size-l);
2898
+ font-weight: 600;
2899
+ }
2900
+ .data-souce-modal-content__base {
2901
+ padding-left: 16px;
2902
+ }
2903
+ .data-source__scope {
2904
+ padding: 16px;
2905
+ }
2906
+ .data-source-tree {
2907
+ margin-top: 16px;
2908
+ flex: 1;
2909
+ overflow: auto;
2910
+ }
2911
+ .form-item {
2912
+ display: flex;
2913
+ align-items: center;
2914
+ margin: 12px 0;
2915
+ label {
2916
+ width: 100px;
2917
+ flex-shrink: 0;
2918
+ }
2919
+
2920
+ :deep(.el-input__suffix) {
2921
+ line-height:36px;
2922
+ }
2923
+
2924
+ }
2925
+ .link-entity-trigger {
2926
+ width: 220px;
2927
+ .el-input {
2928
+ width: 100%;
2929
+ }
2930
+ }
2931
+ .link-entity-tree {
2932
+ max-height: 320px;
2933
+ overflow: auto;
2934
+ }
2935
+ .link-entity-empty {
2936
+ padding: 8px;
2937
+ color: #909399;
2938
+ text-align: center;
2939
+ }
2940
+ .sort-field {
2941
+ padding-left: 16px;
2942
+ line-height: 50px;
2943
+ .active {
2944
+ @include font_color_primary;
2945
+ }
2946
+ .sort-icon {
2947
+ font-size: var(--epx-font-size-l);
2948
+ }
2949
+ .el-icon-sort-down {
2950
+ position: relative;
2951
+ right: -9px;
2952
+ cursor: pointer;
2953
+ }
2954
+ .el-icon-close {
2955
+ float: right;
2956
+ cursor: pointer;
2957
+ line-height: 50px;
2958
+ font-size: 18px;
2959
+ &:hover {
2960
+ @include font_color_primary;
2961
+ }
2962
+ }
2963
+ }
2964
+ .sort-opera {
2965
+ cursor: pointer;
2966
+ @include font_color_primary;
2967
+ margin-left: 16px;
2968
+ padding: 24px 0;
2969
+ }
2970
+ .sheet-area {
2971
+ position: relative;
2972
+ width: calc(100% - 600px);
2973
+ height: 100%;
2974
+ }
2975
+ .luckysheet-container {
2976
+ width: 100%;
2977
+ height: 100%;
2978
+ overflow: auto;
2979
+
2980
+ :deep(.luckysheet_info_detail) {
2981
+ display: none !important;
2982
+ }
2983
+
2984
+ }
2985
+ // 悬浮在表格右侧的加列入口
2986
+ .add-column {
2987
+ position: absolute;
2988
+ // 让开 luckysheet 的纵向滚动条
2989
+ right: 18px;
2990
+ top: 50%;
2991
+ transform: translateY(-50%);
2992
+ z-index: 1000;
2993
+ width: 28px;
2994
+ padding: 10px 0;
2995
+ display: flex;
2996
+ flex-direction: column;
2997
+ align-items: center;
2998
+ gap: 3px;
2999
+ cursor: pointer;
3000
+ background: var(--epx-bg-card);
3001
+ border: 1px solid var(--epx-border);
3002
+ border-radius: var(--epx-radius-base);
3003
+ box-shadow: 0 2px 8px rgba(0, 0, 0, .08);
3004
+ color: var(--color-text-secondary);
3005
+ font-size: var(--epx-font-size-s);
3006
+ user-select: none;
3007
+ transition: color .2s, border-color .2s, box-shadow .2s;
3008
+ i {
3009
+ font-size: 14px;
3010
+ }
3011
+ &:hover {
3012
+ @include font_color_primary;
3013
+ @include border_color_primary;
3014
+ box-shadow: 0 4px 12px rgba(0, 0, 0, .12);
3015
+ }
3016
+ &__text {
3017
+ line-height: 1;
3018
+ }
3019
+ &__pop {
3020
+ display: flex;
3021
+ align-items: center;
3022
+ .el-input-number {
3023
+ width: 90px;
3024
+ margin: 0 6px;
3025
+ }
3026
+ }
3027
+ &__pop-text {
3028
+ font-size: var(--epx-font-size-s);
3029
+ color: var(--color-text-primary);
3030
+ }
3031
+ }
3032
+ .attribute-pane {
3033
+ width: 360px;
3034
+ height: 100%;
3035
+ background: var(--epx-bg-card);
3036
+ }
3037
+ .attribute-pane__header {
3038
+ padding: 16px;
3039
+ border-bottom: 1px solid var(--epx-border);
3040
+ > span {
3041
+ padding-left: 8px;
3042
+ border-left: 4px solid;
3043
+ @include border_color_primary;
3044
+ line-height: 20px;
3045
+ font-size: var(--epx-font-size-l);
3046
+ color: var(--epx-text);
3047
+ }
3048
+ }
3049
+ .attribute-pane__content {
3050
+ padding: 0 10px;
3051
+ height: calc(100% - 54px);
3052
+ overflow: auto;
3053
+ }
3054
+
3055
+ .attribute-item {
3056
+ display: flex;
3057
+ padding: 6px 0;
3058
+ > label {
3059
+ padding: 6px 0;
3060
+ display: inline-block;
3061
+ width: 84px;
3062
+ margin-right: 14px;
3063
+ line-height: 24px;
3064
+ color: #444;
3065
+ flex-shrink: 0;
3066
+ }
3067
+ }
3068
+
3069
+ .attribute-item__content {
3070
+ line-height: 36px;
3071
+ color: #444;
3072
+ }
3073
+ .params-tree {
3074
+ margin-top: 10px;
3075
+ }
3076
+
3077
+ .params {
3078
+ width: 100%;
3079
+ line-height: 40px;
3080
+ &:hover {
3081
+ .params-icon {
3082
+ display: block;
3083
+ }
3084
+ }
3085
+ }
3086
+ .params-icon {
3087
+ display: none;
3088
+ float: right;
3089
+ i {
3090
+ padding: 0 8px;
3091
+ border-right: 1px solid var(--epx-border);
3092
+ &:last-child {
3093
+ border: 0;
3094
+ }
3095
+ &:hover {
3096
+ cursor: pointer;
3097
+ @include font_color_primary;
3098
+ }
3099
+ }
3100
+ }
3101
+ .input-params {
3102
+ display: flex;
3103
+ align-items: center;
3104
+ padding: 10px 0;
3105
+ label {
3106
+ width: 100px;
3107
+ white-space: pre-wrap;
3108
+ }
3109
+ }
3110
+ .preview-btn {
3111
+ display: block;
3112
+ margin: 0 auto;
3113
+ }
3114
+ .form__label {
3115
+ margin: 10px 0;
3116
+ }
3117
+ .cell-select {
3118
+ width: 68px;
3119
+ margin-left: 8px;
3120
+ }
3121
+ .form-content {
3122
+
3123
+ :deep(.table-form-item__label) {
3124
+ width: 80px;
3125
+ padding-left: 0;
3126
+ }
3127
+ :deep(.table-form-item__content) {
3128
+ .el-input, .el-input-number--medium {
3129
+ width: 200px;
3130
+ }
3131
+ }
3132
+
3133
+ }
3134
+ .filter-condition__btn {
3135
+ text-align: center;
3136
+ margin: 10px 0;
3137
+ }
3138
+ .filter-condition__operates {
3139
+ color: var(--epx-text);
3140
+ i {
3141
+ cursor: pointer;
3142
+ color: red;
3143
+ margin: 0 4px;
3144
+ &:first-child {
3145
+ @include font_color_primary
3146
+ }
3147
+ }
3148
+ }
3149
+ .filter-condition-opera__popper {
3150
+ // max-height: 400px;
3151
+ overflow: auto;
3152
+ }
3153
+ .table-form-item-label::before {
3154
+ content: '*';
3155
+ color: #F56C6C;
3156
+ margin-right: 4px;
3157
+ }
3158
+ .property-item-condition{
3159
+ height: 40px;
3160
+ align-items: center;
3161
+ display: flex;
3162
+ }
3163
+
3164
+ .condition-property-item{
3165
+ padding: 4px 0;
3166
+ }
3167
+
3168
+ .condition-property-item-active{
3169
+ padding: 4px 0;
3170
+ color: #0874e7;
3171
+ }
3172
+ .data-source__header {
3173
+ margin-top: 10px;
3174
+ }
3175
+ .data-source-operate__footer {
3176
+ margin-top: 10px;
3177
+ }
3178
+ .language__switch {
3179
+ height: 28px;
3180
+ line-height: 28px;
3181
+ background: var(--epx-bg);
3182
+ border-radius: 14px;
3183
+ display: flex;
3184
+ align-items: center;
3185
+ margin-right: 12px;
3186
+ margin-top: 6px;
3187
+ .language-name {
3188
+ padding: 0 16px 0 10px;
3189
+ }
3190
+ }
3191
+ .language-item {
3192
+ width: 100px;
3193
+ &.is-active {
3194
+ @include bg_color_primary(.1);
3195
+ @include font_color_primary;
3196
+ }
3197
+ }
3198
+ .print-check {
3199
+ margin-top: 10px;
3200
+ margin-bottom: 60px;
3201
+ &__head {
3202
+ display: flex;
3203
+ align-items: center;
3204
+ justify-content: space-between;
3205
+ }
3206
+ &__title {
3207
+ margin: 10px 0;
3208
+ }
3209
+ &__hint {
3210
+ display: flex;
3211
+ align-items: flex-start;
3212
+ font-size: 12px;
3213
+ color: #888;
3214
+ line-height: 18px;
3215
+ margin-bottom: 10px;
3216
+ i {
3217
+ margin-top: 1px;
3218
+ margin-right: 6px;
3219
+ color: #aaa;
3220
+ }
3221
+ b {
3222
+ color: #222;
3223
+ font-weight: 600;
3224
+ }
3225
+ }
3226
+ &__empty {
3227
+ border: 1px dashed #dcdfe6;
3228
+ border-radius: 4px;
3229
+ padding: 20px;
3230
+ text-align: center;
3231
+ color: #888;
3232
+ font-size: 12px;
3233
+ }
3234
+ &__list {
3235
+ display: flex;
3236
+ flex-direction: column;
3237
+ gap: 8px;
3238
+ }
3239
+ &__rule {
3240
+ border: 1px solid #dcdfe6;
3241
+ border-radius: 4px;
3242
+ padding: 10px 12px;
3243
+ background: #fff;
3244
+ }
3245
+ &__rule-top {
3246
+ display: flex;
3247
+ align-items: center;
3248
+ }
3249
+ &__rule-name {
3250
+ flex: 1;
3251
+ min-width: 0;
3252
+ margin: 0 8px;
3253
+ font-weight: 600;
3254
+ color: #222;
3255
+ overflow: hidden;
3256
+ text-overflow: ellipsis;
3257
+ white-space: nowrap;
3258
+ }
3259
+ &__act {
3260
+ cursor: pointer;
3261
+ color: #888;
3262
+ font-size: 16px;
3263
+ margin-left: 8px;
3264
+ &:hover {
3265
+ @include font_color_primary;
3266
+ }
3267
+ &--danger:hover {
3268
+ color: #f56c6c;
3269
+ }
3270
+ }
3271
+ &__rule-expr {
3272
+ margin-top: 6px;
3273
+ font-size: 12px;
3274
+ color: #888;
3275
+ font-family: Consolas, Monaco, monospace;
3276
+ background: #f5f7fa;
3277
+ border-radius: 2px;
3278
+ padding: 6px 8px;
3279
+ word-break: break-all;
3280
+ }
3281
+ }
3282
+ .check-rule-form {
3283
+ &__item {
3284
+ margin-bottom: 16px;
3285
+ &:last-child {
3286
+ margin-bottom: 0;
3287
+ }
3288
+ }
3289
+ &__label {
3290
+ display: block;
3291
+ margin-bottom: 6px;
3292
+ color: #444;
3293
+ font-size: 14px;
3294
+ &.is-required::before {
3295
+ content: '*';
3296
+ color: #f56c6c;
3297
+ margin-right: 4px;
3298
+ }
3299
+ }
3300
+ &__expr {
3301
+ display: flex;
3302
+ align-items: center;
3303
+ border: 1px solid #dcdfe6;
3304
+ border-radius: 4px;
3305
+ padding: 8px 10px;
3306
+ min-height: 38px;
3307
+ box-sizing: border-box;
3308
+ cursor: pointer;
3309
+ background: #fff;
3310
+ &:hover {
3311
+ @include border_color_primary;
3312
+ }
3313
+ &.is-empty .check-rule-form__expr-text {
3314
+ color: #c0c4cc;
3315
+ font-family: inherit;
3316
+ }
3317
+ i {
3318
+ margin-left: 8px;
3319
+ @include font_color_primary;
3320
+ }
3321
+ }
3322
+ &__expr-text {
3323
+ flex: 1;
3324
+ min-width: 0;
3325
+ font-family: Consolas, Monaco, monospace;
3326
+ font-size: 13px;
3327
+ color: #222;
3328
+ word-break: break-all;
3329
+ }
3330
+ &__tip {
3331
+ margin-top: 6px;
3332
+ font-size: 12px;
3333
+ color: #888;
3334
+ }
3335
+ }
3336
+ </style>
3337
+ <style>
3338
+ /* 全屏公式编辑器弹窗(append-to-body,需全局样式) */
3339
+ .formula-editor-dialog .el-dialog__header {
3340
+ display: none;
3341
+ }
3342
+ .formula-editor-dialog .el-dialog__body {
3343
+ padding: 0;
3344
+ height: 100vh;
3345
+ overflow: hidden;
3346
+ }
3347
+ .formula-editor-dialog .formula-editor-container {
3348
+ height: 100%;
3349
+ }
3350
+ </style>