vue2-client 1.15.34 → 1.15.36

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 (691) hide show
  1. package/.cursorrules +19 -19
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.apply +19 -19
  5. package/.env.development +1 -1
  6. package/.env.gaslink +19 -19
  7. package/.env.his +19 -19
  8. package/.env.iot +19 -19
  9. package/.env.liuli +20 -20
  10. package/.env.message +19 -19
  11. package/.env.revenue +19 -19
  12. package/.env.runtime +19 -19
  13. package/.env.scada +19 -19
  14. package/.eslintrc.js +90 -90
  15. package/.eslintrc.json +5 -5
  16. package/CHANGELOG.md +824 -824
  17. package/CLAUDE.md +89 -89
  18. package/Components.md +60 -60
  19. package/README.md +65 -65
  20. package/babel.config.js +21 -21
  21. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +45 -45
  22. package/docs/LowCode/lowcode.md +155 -155
  23. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  24. package/docs/index.md +30 -30
  25. package/docs/notice.md +22 -22
  26. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +177 -177
  27. package/index.js +31 -31
  28. package/jest-transform-stub.js +8 -8
  29. package/jest.config.js +22 -22
  30. package/jest.setup.js +7 -7
  31. package/jsconfig.json +19 -19
  32. package/package.json +110 -110
  33. package/public/his/editor/editor.html +51 -51
  34. package/public/his/editor/mock/bind_data.html +779 -779
  35. package/public/his/editor/mock/data_table.html +40 -40
  36. package/public/his/editor/mock/sign.html +75 -75
  37. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  38. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  39. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  40. package/public/his/editor/vender/date97/calendar.js +4 -4
  41. package/public/his/editor/vender/date97/lang/en.js +13 -13
  42. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  43. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  44. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  45. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  46. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  47. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  48. package/public/his/editor/vender/diff.js +1627 -1627
  49. package/public/his/editor/vender/editor.js +1 -1
  50. package/public/his/editor/vender/fabric.js +31187 -31187
  51. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  52. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  53. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  54. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  55. package/public/his/editor/vender/mui/mui.min.css +4 -4
  56. package/public/his/editor/vender/mui/mui.min.js +5 -5
  57. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  58. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  59. package/public/his/editor/vender/qrcode.js +7 -7
  60. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  61. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  62. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  63. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  64. package/public/his/editor/vender/validator.js +5094 -5094
  65. package/public/his/editor/vender/weui/weui.css +5659 -5659
  66. package/public/his/editor/vender/weui/weui.min.css +4 -4
  67. package/public/his/editor/vender/weui/weui.min.js +11 -11
  68. package/public/index.html +27 -27
  69. package/src/App.vue +196 -196
  70. package/src/ReportView.js +13 -13
  71. package/src/assets/img/querySlotDemo.svg +15 -15
  72. package/src/assets/svg/badtwo.svg +1 -1
  73. package/src/assets/svg/goodtwo.svg +1 -1
  74. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  75. package/src/base-client/components/AI/demo.vue +31 -31
  76. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  77. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  78. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  79. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  80. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  81. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  82. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  83. package/src/base-client/components/common/CitySelect/CitySelect.vue +365 -365
  84. package/src/base-client/components/common/CitySelect/index.js +3 -3
  85. package/src/base-client/components/common/CitySelect/index.md +109 -109
  86. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  87. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  88. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  89. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  90. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  91. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  92. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  93. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  94. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  95. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  96. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  97. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  98. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  99. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  100. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  101. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  102. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  103. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  104. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  105. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  106. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  107. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  108. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  109. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  110. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  111. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  112. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  113. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  114. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  115. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  116. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  117. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  118. package/src/base-client/components/common/Recording/index.js +3 -3
  119. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  120. package/src/base-client/components/common/Tree/index.js +2 -2
  121. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  122. package/src/base-client/components/common/Upload/index.js +3 -3
  123. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  124. package/src/base-client/components/common/XAddForm/index.js +3 -3
  125. package/src/base-client/components/common/XAddForm/index.md +61 -61
  126. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  127. package/src/base-client/components/common/XAddNativeForm/demo.vue +40 -40
  128. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  129. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  130. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  131. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  132. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  133. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  134. package/src/base-client/components/common/XAddReport/index.js +3 -3
  135. package/src/base-client/components/common/XAddReport/index.md +56 -56
  136. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  137. package/src/base-client/components/common/XBadge/index.js +3 -3
  138. package/src/base-client/components/common/XBadge/index.md +39 -39
  139. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  140. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  141. package/src/base-client/components/common/XButtons/index.js +3 -3
  142. package/src/base-client/components/common/XButtons/index.md +61 -61
  143. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  144. package/src/base-client/components/common/XCalendar/index.md +284 -284
  145. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  146. package/src/base-client/components/common/XCard/index.js +3 -3
  147. package/src/base-client/components/common/XCard/index.md +43 -43
  148. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  149. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  150. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  151. package/src/base-client/components/common/XCollapse/XCollapse.vue +253 -253
  152. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  153. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  154. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  155. package/src/base-client/components/common/XDataCard/index.js +3 -3
  156. package/src/base-client/components/common/XDataCard/index.md +1 -1
  157. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  158. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  159. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  160. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  161. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  162. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  163. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  164. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  165. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  166. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  167. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  168. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  169. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  170. package/src/base-client/components/common/XForm/XFormItem.vue +1342 -1342
  171. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  172. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  173. package/src/base-client/components/common/XForm/demo.vue +105 -105
  174. package/src/base-client/components/common/XForm/index.js +3 -3
  175. package/src/base-client/components/common/XForm/index.md +178 -178
  176. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  177. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  178. package/src/base-client/components/common/XFormCol/index.js +3 -3
  179. package/src/base-client/components/common/XFormCol/index.md +35 -35
  180. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  181. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  182. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  183. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  184. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  185. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  186. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  187. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  188. package/src/base-client/components/common/XFormTable/index.js +3 -3
  189. package/src/base-client/components/common/XFormTable/index.md +92 -92
  190. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  191. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  192. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  193. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  194. package/src/base-client/components/common/XInput/index.js +3 -3
  195. package/src/base-client/components/common/XInput/index.md +97 -97
  196. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  197. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  198. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  199. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  200. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  201. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  202. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  203. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  204. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  205. package/src/base-client/components/common/XPrint/PrintBill.vue +304 -304
  206. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  207. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  208. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  209. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  210. package/src/base-client/components/common/XPrint/index.vue +97 -97
  211. package/src/base-client/components/common/XRate/demo.vue +102 -102
  212. package/src/base-client/components/common/XRate/index.vue +149 -149
  213. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  214. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  215. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  216. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  217. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  218. package/src/base-client/components/common/XReport/index.js +3 -3
  219. package/src/base-client/components/common/XReport/index.md +103 -103
  220. package/src/base-client/components/common/XReport/print.js +186 -186
  221. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  222. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  223. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  224. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  225. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  226. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +731 -731
  227. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  228. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  229. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  230. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  231. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  232. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  233. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  234. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  235. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  236. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  237. package/src/base-client/components/common/XStepView/index.js +3 -3
  238. package/src/base-client/components/common/XStepView/index.md +31 -31
  239. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  240. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  241. package/src/base-client/components/common/XTab/index.js +3 -3
  242. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  243. package/src/base-client/components/common/XTable/ExportExcel.vue +282 -282
  244. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  245. package/src/base-client/components/common/XTable/XTable.vue +1613 -1600
  246. package/src/base-client/components/common/XTable/XTableWrapper.vue +584 -584
  247. package/src/base-client/components/common/XTable/index.js +3 -3
  248. package/src/base-client/components/common/XTable/index.md +255 -255
  249. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  250. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  251. package/src/base-client/components/common/XTimeline/index.md +191 -191
  252. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  253. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  254. package/src/base-client/components/common/XTree/index.js +3 -3
  255. package/src/base-client/components/common/XTree/index.md +36 -36
  256. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  257. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  258. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  259. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  260. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  261. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  262. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  263. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  264. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  265. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  266. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  267. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +457 -457
  268. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  269. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  270. package/src/base-client/components/his/XList/XList.vue +306 -306
  271. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  272. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +89 -89
  273. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  274. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +252 -252
  275. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  276. package/src/base-client/components/his/XRadio/index.md +234 -234
  277. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  278. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  279. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  280. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  281. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  282. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  283. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  284. package/src/base-client/components/his/XTitle/README.md +113 -113
  285. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  286. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  287. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  288. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  289. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  290. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  291. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  292. package/src/base-client/components/index.js +51 -51
  293. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  294. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  295. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  296. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  297. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  298. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  299. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  300. package/src/base-client/components/layout/XPageView/index.js +2 -2
  301. package/src/base-client/components/layout/XPageView/index.md +96 -96
  302. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  303. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  304. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  305. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  306. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  307. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  308. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  309. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  310. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  311. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  312. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  313. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  314. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  315. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  316. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  317. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  318. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  319. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  320. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  321. package/src/base-client/plugins/AppData.js +126 -126
  322. package/src/base-client/plugins/Config.js +19 -19
  323. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  324. package/src/base-client/plugins/PagedList.js +177 -177
  325. package/src/base-client/plugins/Recording.js +258 -258
  326. package/src/base-client/plugins/authority-plugin.js +167 -167
  327. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  328. package/src/base-client/plugins/i18n-extend.js +32 -32
  329. package/src/base-client/plugins/index.js +23 -23
  330. package/src/base-client/plugins/moment.js +8 -8
  331. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  332. package/src/bootstrap.js +51 -51
  333. package/src/components/Charts/Bar.vue +62 -62
  334. package/src/components/Charts/ChartCard.vue +134 -134
  335. package/src/components/Charts/Liquid.vue +67 -67
  336. package/src/components/Charts/MiniArea.vue +39 -39
  337. package/src/components/Charts/MiniBar.vue +39 -39
  338. package/src/components/Charts/MiniProgress.vue +75 -75
  339. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  340. package/src/components/Charts/Radar.vue +68 -68
  341. package/src/components/Charts/RankList.vue +77 -77
  342. package/src/components/Charts/TagCloud.vue +113 -113
  343. package/src/components/Charts/TransferBar.vue +64 -64
  344. package/src/components/Charts/Trend.vue +82 -82
  345. package/src/components/Charts/chart.less +12 -12
  346. package/src/components/Charts/smooth.area.less +13 -13
  347. package/src/components/CodeMirror/inedx.vue +118 -118
  348. package/src/components/CodeMirror/setting.js +40 -40
  349. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  350. package/src/components/Ellipsis/index.js +3 -3
  351. package/src/components/Ellipsis/index.md +38 -38
  352. package/src/components/FileImageItem/FileItem.vue +305 -305
  353. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  354. package/src/components/FileImageItem/ImageItem.vue +107 -107
  355. package/src/components/FileImageItem/index.js +4 -4
  356. package/src/components/FilePreview/FilePreview.vue +181 -181
  357. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  358. package/src/components/FilePreview/index.js +3 -3
  359. package/src/components/HeightScanner/index.vue +615 -615
  360. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  361. package/src/components/NumberInfo/index.js +3 -3
  362. package/src/components/NumberInfo/index.less +54 -54
  363. package/src/components/NumberInfo/index.md +43 -43
  364. package/src/components/STable/README.md +341 -341
  365. package/src/components/STable/index.js +558 -558
  366. package/src/components/TableSetting/TableSetting.vue +143 -143
  367. package/src/components/TableSetting/index.js +3 -3
  368. package/src/components/Trend/Trend.vue +41 -41
  369. package/src/components/Trend/index.js +3 -3
  370. package/src/components/Trend/index.less +41 -41
  371. package/src/components/Trend/index.md +45 -45
  372. package/src/components/_util/util.js +46 -46
  373. package/src/components/cache/AKeepAlive.js +179 -179
  374. package/src/components/card/ChartCard.vue +79 -79
  375. package/src/components/chart/Bar.vue +60 -60
  376. package/src/components/chart/MiniArea.vue +67 -67
  377. package/src/components/chart/MiniBar.vue +59 -59
  378. package/src/components/chart/MiniProgress.vue +57 -57
  379. package/src/components/chart/Radar.vue +80 -80
  380. package/src/components/chart/RankingList.vue +60 -60
  381. package/src/components/chart/Trend.vue +79 -79
  382. package/src/components/chart/index.less +9 -9
  383. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  384. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  385. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  386. package/src/components/checkbox/index.js +9 -9
  387. package/src/components/exception/ExceptionPage.vue +70 -70
  388. package/src/components/exception/typeConfig.js +19 -19
  389. package/src/components/form/FormRow.vue +52 -52
  390. package/src/components/g2Charts/constants.js +202 -202
  391. package/src/components/g2Charts/demo.vue +808 -808
  392. package/src/components/g2Charts/designer.vue +228 -228
  393. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  394. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  395. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  396. package/src/components/g2Charts/index.vue +397 -397
  397. package/src/components/index.js +36 -36
  398. package/src/components/index.less +5 -5
  399. package/src/components/input/IInput.vue +66 -66
  400. package/src/components/menu/Contextmenu.vue +84 -84
  401. package/src/components/menu/SideMenu.vue +75 -75
  402. package/src/components/menu/index.less +38 -38
  403. package/src/components/menu/menu.js +273 -273
  404. package/src/components/page/header/PageHeader.vue +64 -64
  405. package/src/components/page/header/index.less +40 -40
  406. package/src/components/result/Result.vue +77 -77
  407. package/src/components/setting/Setting.vue +234 -234
  408. package/src/components/setting/SettingItem.vue +26 -26
  409. package/src/components/setting/i18n.js +117 -117
  410. package/src/components/table/StandardTable.vue +141 -141
  411. package/src/components/table/advance/ActionColumns.vue +158 -158
  412. package/src/components/table/advance/ActionSize.vue +45 -45
  413. package/src/components/table/advance/AdvanceTable.vue +275 -275
  414. package/src/components/table/advance/SearchArea.vue +355 -355
  415. package/src/components/table/advance/index.js +2 -2
  416. package/src/components/table/api/ApiTable.vue +50 -50
  417. package/src/components/task/TaskGroup.vue +80 -80
  418. package/src/components/task/TaskItem.vue +26 -26
  419. package/src/components/tool/AStepItem.vue +60 -60
  420. package/src/components/tool/AvatarList.vue +68 -68
  421. package/src/components/tool/DetailList.vue +157 -157
  422. package/src/components/tool/Drawer.vue +142 -142
  423. package/src/components/tool/FooterToolBar.vue +30 -30
  424. package/src/components/tool/HeadInfo.vue +35 -35
  425. package/src/components/tool/TagSelect.vue +83 -83
  426. package/src/components/tool/TagSelectOption.vue +33 -33
  427. package/src/components/transition/PageToggleTransition.vue +97 -97
  428. package/src/config/CreateQueryConfig.js +325 -325
  429. package/src/config/default/admin.config.js +18 -18
  430. package/src/config/default/animate.config.js +21 -21
  431. package/src/config/default/antd.config.js +89 -89
  432. package/src/config/default/index.js +6 -6
  433. package/src/config/default/setting.config.js +55 -55
  434. package/src/config/index.js +3 -3
  435. package/src/config/replacer/index.js +10 -10
  436. package/src/config/replacer/resolve.config.js +67 -67
  437. package/src/expression/ExpressionRunner.js +26 -26
  438. package/src/expression/TestExpression.js +509 -509
  439. package/src/expression/core/Delegate.js +115 -115
  440. package/src/expression/core/Expression.js +1358 -1358
  441. package/src/expression/core/Program.js +932 -932
  442. package/src/expression/core/Token.js +27 -27
  443. package/src/expression/enums/ExpressionType.js +81 -81
  444. package/src/expression/enums/TokenType.js +11 -11
  445. package/src/expression/exception/BreakWayException.js +2 -2
  446. package/src/expression/exception/ContinueWayException.js +2 -2
  447. package/src/expression/exception/ExpressionException.js +28 -28
  448. package/src/expression/exception/ReturnWayException.js +14 -14
  449. package/src/expression/exception/ServiceException.js +22 -22
  450. package/src/expression/instances/LogicConsole.js +44 -44
  451. package/src/expression/ts/ExpressionRunner.ts +28 -28
  452. package/src/expression/ts/TestExpression.ts +509 -509
  453. package/src/expression/ts/core/Delegate.ts +114 -114
  454. package/src/expression/ts/core/Expression.ts +1309 -1309
  455. package/src/expression/ts/core/Program.ts +950 -950
  456. package/src/expression/ts/core/Token.ts +29 -29
  457. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  458. package/src/expression/ts/enums/TokenType.ts +13 -13
  459. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  460. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  461. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  462. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  463. package/src/expression/ts/exception/ServiceException.ts +22 -22
  464. package/src/expression/ts/instances/JSONArray.ts +48 -48
  465. package/src/expression/ts/instances/JSONObject.ts +109 -109
  466. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  467. package/src/font-style/font.css +4 -4
  468. package/src/layouts/AdminLayout.vue +176 -174
  469. package/src/layouts/BlankView.vue +79 -79
  470. package/src/layouts/CommonLayout.vue +56 -56
  471. package/src/layouts/ComponentLayoutOne.vue +47 -47
  472. package/src/layouts/GridView.vue +43 -43
  473. package/src/layouts/PageLayout.vue +151 -151
  474. package/src/layouts/PageView.vue +55 -55
  475. package/src/layouts/SinglePageView.vue +136 -136
  476. package/src/layouts/footer/PageFooter.vue +49 -49
  477. package/src/layouts/header/AdminHeader.vue +132 -132
  478. package/src/layouts/header/HeaderAvatar.vue +64 -64
  479. package/src/layouts/header/HeaderNotice.vue +177 -177
  480. package/src/layouts/header/HeaderSearch.vue +67 -67
  481. package/src/layouts/header/InstitutionDetail.vue +181 -181
  482. package/src/layouts/header/index.less +92 -92
  483. package/src/layouts/tabs/TabsHead.vue +189 -189
  484. package/src/layouts/tabs/TabsView.vue +383 -389
  485. package/src/layouts/tabs/i18n.js +25 -25
  486. package/src/layouts/tabs/index.js +2 -2
  487. package/src/lib.js +1 -1
  488. package/src/logic/LogicRunner.js +62 -62
  489. package/src/logic/TestLogic.js +13 -13
  490. package/src/logic/plugins/common/DateTools.js +35 -35
  491. package/src/logic/plugins/common/VueTools.js +30 -30
  492. package/src/logic/plugins/index.js +7 -7
  493. package/src/logic/ts/LogicRunner.ts +67 -67
  494. package/src/logic/ts/TestLogic.ts +13 -13
  495. package/src/main.js +33 -33
  496. package/src/mixins/formValidationMixin.js +46 -46
  497. package/src/mock/common/activityData.js +32 -32
  498. package/src/mock/common/index.js +89 -89
  499. package/src/mock/common/reportData.js +20 -20
  500. package/src/mock/common/tableData.js +118 -118
  501. package/src/mock/extend/index.js +84 -84
  502. package/src/mock/goods/index.js +108 -108
  503. package/src/mock/index.js +12 -12
  504. package/src/mock/project/index.js +17 -17
  505. package/src/mock/user/current.js +13 -13
  506. package/src/mock/user/login.js +39 -39
  507. package/src/mock/user/routes.js +61 -61
  508. package/src/mock/workplace/index.js +15 -15
  509. package/src/pages/DefaultExample/index.vue +77 -77
  510. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  511. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  512. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  513. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  514. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  515. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  516. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  517. package/src/pages/DynamicStatistics/index.vue +282 -282
  518. package/src/pages/Example/childIndex.vue +15 -15
  519. package/src/pages/Example/index.vue +30 -30
  520. package/src/pages/LogicCallExample/index.vue +46 -46
  521. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  522. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  523. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  524. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  525. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  526. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  527. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  528. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  529. package/src/pages/Recording/index.vue +77 -77
  530. package/src/pages/ReportGrid/index.vue +76 -76
  531. package/src/pages/ReportView.vue +50 -50
  532. package/src/pages/ServiceReview/index.vue +284 -284
  533. package/src/pages/SubExample/index.vue +26 -26
  534. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  535. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  536. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -204
  537. package/src/pages/WorkflowDetail/WorkflowDetail.vue +379 -399
  538. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  539. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  540. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  541. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  542. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1757 -1757
  543. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  544. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  545. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +987 -987
  546. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  547. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  548. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  549. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  550. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  551. package/src/pages/XPageViewExample/index.vue +149 -149
  552. package/src/pages/XReportView/index.vue +64 -64
  553. package/src/pages/XTreeOneProExample/index.vue +67 -67
  554. package/src/pages/addressSelect/addressDemo.vue +24 -24
  555. package/src/pages/addressSelect/index.vue +270 -270
  556. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  557. package/src/pages/dashboard/workplace/i18n.js +40 -40
  558. package/src/pages/dashboard/workplace/index.js +2 -2
  559. package/src/pages/dashboard/workplace/index.less +59 -59
  560. package/src/pages/exception/403.vue +21 -21
  561. package/src/pages/exception/404.vue +24 -24
  562. package/src/pages/exception/500.vue +21 -21
  563. package/src/pages/login/Login.vue +378 -378
  564. package/src/pages/login/LoginV3.vue +389 -389
  565. package/src/pages/login/index.js +2 -2
  566. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  567. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  568. package/src/pages/report/ReportTable.js +124 -124
  569. package/src/pages/report/ReportTableHome.vue +28 -28
  570. package/src/pages/resourceManage/depListManage.vue +23 -23
  571. package/src/pages/resourceManage/funListManage.vue +23 -23
  572. package/src/pages/resourceManage/index.js +15 -15
  573. package/src/pages/resourceManage/orgListManage.vue +98 -98
  574. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  575. package/src/pages/resourceManage/roleListManage.vue +23 -23
  576. package/src/pages/resourceManage/staffListManage.vue +23 -23
  577. package/src/pages/system/dictionary/index.vue +44 -44
  578. package/src/pages/system/file/Info.vue +56 -56
  579. package/src/pages/system/file/index.vue +317 -317
  580. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  581. package/src/pages/system/monitor/operLog/index.vue +37 -37
  582. package/src/pages/system/settings/index.vue +126 -126
  583. package/src/pages/system/settings/modifyPassword.vue +117 -117
  584. package/src/pages/system/ticket/index.vue +480 -480
  585. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  586. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  587. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  588. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  589. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  590. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  591. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  592. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  593. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  594. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  595. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  596. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  597. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  598. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  599. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  600. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  601. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  602. package/src/pages/userInfoDetailManage/index.vue +290 -290
  603. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +120 -120
  604. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  605. package/src/plugins/EventLogPlugin.js +33 -33
  606. package/src/plugins/FindParentsData.js +17 -17
  607. package/src/plugins/HiPrintPlugin.js +164 -164
  608. package/src/router/async/config.async.js +35 -35
  609. package/src/router/async/router.map.js +126 -126
  610. package/src/router/guards.js +260 -260
  611. package/src/router/i18n.js +57 -57
  612. package/src/router/index.js +27 -27
  613. package/src/router.js +17 -17
  614. package/src/services/DataModel.js +30 -30
  615. package/src/services/LodopFuncs.js +137 -137
  616. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  617. package/src/services/api/LogDetailsViewApi.js +10 -10
  618. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  619. package/src/services/api/TicketDetailsViewApi.js +46 -46
  620. package/src/services/api/cas.js +79 -79
  621. package/src/services/api/common.js +346 -346
  622. package/src/services/api/entity.js +18 -18
  623. package/src/services/api/index.js +17 -17
  624. package/src/services/api/logininfor/index.js +6 -6
  625. package/src/services/api/manage.js +8 -8
  626. package/src/services/api/restTools.js +215 -215
  627. package/src/services/api/workFlow.js +57 -57
  628. package/src/services/apiService.js +16 -16
  629. package/src/services/dataSource.js +12 -12
  630. package/src/services/index.js +7 -7
  631. package/src/services/user.js +92 -92
  632. package/src/services/v3Api.js +116 -116
  633. package/src/store/index.js +5 -5
  634. package/src/store/modules/account.js +115 -115
  635. package/src/store/modules/index.js +5 -5
  636. package/src/store/modules/lowCode.js +33 -33
  637. package/src/store/modules/setting.js +119 -119
  638. package/src/store/mutation-types.js +4 -4
  639. package/src/theme/antd/ant-menu.less +2 -2
  640. package/src/theme/antd/ant-message.less +3 -3
  641. package/src/theme/antd/ant-table.less +22 -22
  642. package/src/theme/antd/ant-time-picker.less +3 -3
  643. package/src/theme/antd/index.less +3 -3
  644. package/src/theme/default/color.less +43 -43
  645. package/src/theme/default/index.less +3 -3
  646. package/src/theme/default/nprogress.less +76 -76
  647. package/src/theme/default/style.less +58 -58
  648. package/src/theme/global.less +271 -271
  649. package/src/theme/index.less +5 -5
  650. package/src/theme/reportTable.less +58 -58
  651. package/src/theme/theme.less +1 -1
  652. package/src/utils/EncryptUtil.js +75 -75
  653. package/src/utils/Objects.js +25 -25
  654. package/src/utils/authority-utils.js +85 -85
  655. package/src/utils/axios-interceptors.js +100 -100
  656. package/src/utils/colors.js +107 -107
  657. package/src/utils/common.js +10 -10
  658. package/src/utils/errorCode.js +6 -6
  659. package/src/utils/excel/Blob.js +180 -180
  660. package/src/utils/excel/Export2Excel.js +141 -141
  661. package/src/utils/filter.js +21 -21
  662. package/src/utils/formatter.js +74 -74
  663. package/src/utils/htmlToPDF.js +108 -108
  664. package/src/utils/htmlToPDFApi.js +5 -5
  665. package/src/utils/i18n.js +80 -80
  666. package/src/utils/indexedDB.js +549 -549
  667. package/src/utils/login.js +188 -188
  668. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  669. package/src/utils/lowcode/lowcodeLog.js +29 -29
  670. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  671. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  672. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  673. package/src/utils/map-utils.js +47 -47
  674. package/src/utils/microAppUtils.js +49 -49
  675. package/src/utils/reg.js +95 -95
  676. package/src/utils/request.js +383 -383
  677. package/src/utils/routerUtil.js +553 -553
  678. package/src/utils/runEvalFunction.js +14 -14
  679. package/src/utils/theme-color-replacer-extend.js +92 -92
  680. package/src/utils/themeUtil.js +100 -100
  681. package/src/utils/util.js +329 -329
  682. package/src/utils/waterMark.js +31 -31
  683. package/test/Tree.spec.js +168 -168
  684. package/test/myDialog.spec.js +47 -47
  685. package/test/request.test.js +17 -17
  686. package/test/util.test.js +53 -53
  687. package/test/v3Api.test.js +1984 -1984
  688. package/tests/unit/ReportTable.spec.js +16 -16
  689. package/vue.config.js +222 -222
  690. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  691. package/.claude/settings.local.json +0 -9
@@ -1,932 +1,932 @@
1
- import Token from './Token'
2
- import Expression from './Expression'
3
- import Delegate from './Delegate'
4
- import ExpressionType from '../enums/ExpressionType'
5
- import TokenType from '../enums/TokenType'
6
-
7
- /**
8
- * 表达式入口
9
- */
10
- export default class Program {
11
- // 源程序
12
- SOURCE
13
- SOURCE_LENGTH
14
- /**
15
- * Token队列,用于回退
16
- */
17
- tokens = []
18
- /**
19
- * 字符串处理环节堆栈,$进入字符串处理环节,“{}”中间部分脱离字符串处理环节
20
- */
21
- inStrings = []
22
-
23
- /**
24
- * 当前获取到的字符位置
25
- */
26
- pos = 0
27
-
28
- /**
29
- * 当前是否在字符串处理环节
30
- */
31
- inString = false
32
-
33
- constructor (source) {
34
- this.SOURCE = source
35
- this.SOURCE_LENGTH = this.SOURCE.length
36
- }
37
-
38
- /**
39
- * 调用解析过程
40
- */
41
- parse () {
42
- // 执行完以下方法后就已经诞生了一个完整的执行流程,也就是被翻译成了一套完整的指令集。
43
- return this.createDelegate(this.expression())
44
- }
45
-
46
- parseExpression (expression) {
47
- // 执行完以下方法后就已经诞生了一个完整的执行流程,也就是被翻译成了一套完整的指令集。
48
- return this.createDelegate(expression)
49
- }
50
-
51
- /**
52
- * 编译,产生可执行单元Delegate
53
- */
54
- createDelegate (expression) {
55
- return new Delegate(expression, this.SOURCE)
56
- }
57
-
58
- /**
59
- * 获取完整表达式
60
- */
61
- expression () {
62
- const expression = this.CommaExp()
63
- if (this.pos < this.SOURCE_LENGTH) {
64
- throw new Error(this.GetExceptionMessage('需要逗号结尾!'))
65
- }
66
- return expression
67
- }
68
-
69
- /**
70
- * 逗号表达式=赋值表达式(,赋值表达式)*
71
- */
72
- CommaExp () {
73
- const exps = []
74
-
75
- const first = this.AssignExp()
76
- exps.push(first)
77
-
78
- let t = this.GetToken()
79
-
80
- // 没有结束
81
- while (t.getType() === TokenType.Oper && (t.getValue() === ',' || t.getValue() === ';' || t.getValue() === '\n')) {
82
- const r = this.AssignExp()
83
- exps.push(r)
84
- t = this.GetToken()
85
- }
86
-
87
- this.tokens.push(t)
88
-
89
- return Expression.Comma(exps, this.pos)
90
- }
91
-
92
- /**
93
- * 赋值表达式=对象属性=一般表达式|一般表达式
94
- */
95
- AssignExp () {
96
- let t = this.GetToken()
97
-
98
- // 把第一个Token的位置记录下来,方便后面回退
99
- const firstPos = t.getStartPos()
100
-
101
- if (t.getType() !== TokenType.Identy) {
102
- this.pos = firstPos
103
- this.tokens.length = 0 // Clear the tokens array
104
- this.inString = false
105
- return this.Exp()
106
- }
107
-
108
- let objExp = Expression.Identity(t.getValue(), this.pos)
109
- objExp = this.ObjectPath(objExp)
110
-
111
- // 只能给对象属性或者变量赋值
112
- if (objExp.type !== ExpressionType.Property && objExp.type !== ExpressionType.Identity) {
113
- this.pos = firstPos
114
- this.tokens.length = 0
115
- this.inString = false
116
- return this.Exp()
117
- }
118
-
119
- t = this.GetToken()
120
- if (t.getType() !== TokenType.Oper || t.getValue() !== '=') {
121
- this.pos = firstPos
122
- this.tokens.length = 0
123
- this.inString = false
124
- return this.Exp()
125
- }
126
-
127
- const exp = this.Exp()
128
-
129
- // 如果是属性赋值
130
- if (objExp.type === ExpressionType.Property) {
131
- // 从属性Expression中获取对象及属性名
132
- const name = objExp.value
133
- objExp = objExp.children[0]
134
- return Expression.Assign(objExp, exp, name, this.pos)
135
- } else {
136
- // Identity 变量赋值
137
- return Expression.Assign(null, exp, objExp.value, this.pos)
138
- }
139
- }
140
-
141
- Exp () {
142
- const v = this.Logic()
143
-
144
- // 是':',表示条件,否则直接返回单结果
145
- let t = this.GetToken()
146
- if (t.getType() === TokenType.Oper && t.getValue() === ':') {
147
- // 第一项转换
148
- const result = this.Logic()
149
-
150
- // 下一个是",",继续读取下一个条件结果串,由于是右结合,只能采用递归
151
- t = this.GetToken()
152
- if (t.getType() === TokenType.Oper && t.getValue() === ',') {
153
- // 第二项转换
154
- const sExp = this.Exp()
155
- // 返回
156
- return Expression.Condition(v, result, sExp, this.SOURCE, this.pos)
157
- } else {
158
- throw new Error(this.GetExceptionMessage('必须有默认值!'))
159
- }
160
- } else {
161
- this.tokens.push(t) // Put the token back
162
- return v
163
- }
164
- }
165
-
166
- Logic () {
167
- let t = this.GetToken()
168
-
169
- // !表达式
170
- const hasNot = t.getType() === TokenType.Oper && t.getValue() === '!'
171
- if (!hasNot) {
172
- this.tokens.push(t) // Put the token back if it's not '!'
173
- }
174
-
175
- let v = this.Compare()
176
- if (hasNot) {
177
- v = Expression.Not(v, this.SOURCE, this.pos)
178
- }
179
-
180
- t = this.GetToken()
181
- while (t.getType() === TokenType.Oper && (t.getValue() === '&&' || t.getValue() === '||')) {
182
- // 第二项转换
183
- const exp = this.Logic()
184
-
185
- // 执行
186
- if (t.getValue() === '&&') {
187
- v = Expression.And(v, exp, this.SOURCE, this.pos)
188
- } else {
189
- v = Expression.Or(v, exp, this.SOURCE, this.pos)
190
- }
191
-
192
- t = this.GetToken()
193
- }
194
-
195
- this.tokens.push(t) // Put the token back
196
- return v
197
- }
198
-
199
- Compare () {
200
- const left = this.Math()
201
- const t = this.GetToken()
202
-
203
- if (t.getType() === TokenType.Oper && (
204
- t.getValue() === '>' || t.getValue() === '>=' ||
205
- t.getValue() === '<' || t.getValue() === '<=' || t.getValue() === '=>')) {
206
- if (t.getValue() === '=>') {
207
- this.tokens.push(t) // Push back the token for lambda handling
208
- return this.Lambda()
209
- }
210
-
211
- const rExp = this.Math()
212
-
213
- switch (t.getValue()) {
214
- case '>':
215
- return Expression.GreaterThan(left, rExp, this.SOURCE, this.pos)
216
- case '>=':
217
- return Expression.GreaterThanOrEqual(left, rExp, this.SOURCE, this.pos)
218
- case '<':
219
- return Expression.LessThan(left, rExp, this.SOURCE, this.pos)
220
- case '<=':
221
- return Expression.LessThanOrEqual(left, rExp, this.SOURCE, this.pos)
222
- }
223
- } else if (t.getType() === TokenType.Oper && (
224
- t.getValue() === '==' || t.getValue() === '!=')) {
225
- const rExp = this.Math()
226
-
227
- // 相等比较
228
- if (t.getValue() === '==') {
229
- return Expression.Equal(left, rExp, this.SOURCE, this.pos)
230
- } else {
231
- return Expression.NotEqual(left, rExp, this.SOURCE, this.pos)
232
- }
233
- }
234
-
235
- // 返回当前的表达式结果
236
- this.tokens.push(t) // Push the token back
237
- return left
238
- }
239
-
240
- Math () {
241
- let v = this.Mul()
242
- let t = this.GetToken()
243
-
244
- while (t.getType() === TokenType.Oper && (t.getValue() === '+' || t.getValue() === '-')) {
245
- // 转换操作数2为数字
246
- const r = this.Mul()
247
-
248
- // 开始运算
249
- if (t.getValue() === '+') {
250
- v = Expression.Add(v, r, this.SOURCE, this.pos)
251
- } else {
252
- v = Expression.Subtract(v, r, this.SOURCE, this.pos)
253
- }
254
-
255
- t = this.GetToken()
256
- }
257
-
258
- this.tokens.push(t) // Push the token back
259
- return v
260
- }
261
-
262
- Lambda () {
263
- let t = this.GetToken()
264
- if (t.getValue() !== '=>' || t.getValue() == null) {
265
- throw new Error(this.GetExceptionMessage('lambda必须以=>开始'))
266
- }
267
-
268
- t = this.GetToken()
269
- if (t.getValue() !== '{' || t.getValue() == null) {
270
- throw new Error(this.GetExceptionMessage('lambda必须以{开始'))
271
- }
272
-
273
- // 取lambda中的表达式
274
- const exp = this.CommaExp()
275
-
276
- t = this.GetToken()
277
- if (t.getValue() !== '}' || t.getValue() == null) {
278
- throw new Error(this.GetExceptionMessage('lambda必须以}结束'))
279
- }
280
-
281
- return Expression.Lambda(exp, this.pos)
282
- }
283
-
284
- Mul () {
285
- let v = this.UnarySub()
286
- let t = this.GetToken()
287
-
288
- while (t.getType() === TokenType.Oper && (t.getValue() === '*' || t.getValue() === '/' || t.getValue() === '%')) {
289
- // Convert the second operand to a number
290
- const r = this.UnarySub()
291
-
292
- // Perform the operation
293
- if (t.getValue() === '*') {
294
- v = Expression.Multiply(v, r, this.SOURCE, this.pos)
295
- } else if (t.getValue() === '/') {
296
- v = Expression.Divide(v, r, this.SOURCE, this.pos)
297
- } else {
298
- v = Expression.Modulo(v, r, this.SOURCE, this.pos)
299
- }
300
-
301
- t = this.GetToken()
302
- }
303
-
304
- this.tokens.push(t)
305
- return v
306
- }
307
-
308
- UnarySub () {
309
- const t = this.GetToken()
310
- if (t.getType() === TokenType.Oper && t.getValue() === '-') {
311
- const r = this.Item()
312
- return Expression.Subtract(Expression.Constant(0, this.pos), r, this.SOURCE, this.pos)
313
- }
314
- this.tokens.push(t) // Push the token back into the queue
315
- return this.Item()
316
- }
317
-
318
- Item () {
319
- const objName = ''
320
- // 获取对象表达式
321
- let objExp = this.ItemHead(objName)
322
- // 获取对象路径表达式
323
- objExp = this.ObjectPath(objExp)
324
- return objExp
325
- }
326
-
327
- ItemHead (name) {
328
- let t = this.GetToken()
329
-
330
- if (t.getType() === TokenType.Oper && t.getValue() === '(') {
331
- const result = this.CommaExp()
332
- t = this.GetToken()
333
- if (t.getType() !== TokenType.Oper || t.getValue() !== ')') {
334
- throw new Error(this.GetExceptionMessage('括号不匹配'))
335
- }
336
- return result
337
- } else if (t.getType() === TokenType.Oper && t.getValue() === '{') {
338
- // JSON object
339
- return this.Json()
340
- } else if (t.getType() === TokenType.Oper && t.getValue() === '[') {
341
- // JSON array
342
- return this.JsonArray()
343
- } else if (t.getType() === TokenType.Oper && (t.getValue() === '$' || t.getValue() === '"')) {
344
- // String concatenation sequence
345
- return this.StringUnion()
346
- } else if (t.getType() === TokenType.Int || t.getType() === TokenType.Double || t.getType() === TokenType.Bool) {
347
- return Expression.Constant(t.getValue(), this.pos)
348
- } else if (t.getType() === TokenType.Identy) {
349
- const objName = t.getValue()
350
-
351
- switch (objName) {
352
- case 'return':
353
- return Expression.Return(this.Exp(), this.pos)
354
- case 'try':
355
- this.tokens.push(t) // Revert the token back to the queue
356
- return this.Try()
357
- case 'throw':
358
- return Expression.Throw(this.Exp(), this.pos)
359
- case 'validate':
360
- return this.Validate()
361
- case 'assert':
362
- return Expression.Assert(this.Exp(), this.pos)
363
- case 'break':
364
- return Expression.Break(this.pos, undefined)
365
- case 'continue':
366
- return Expression.Continue(this.pos, undefined)
367
- }
368
-
369
- // Return the object name
370
- name += objName
371
- // Process the object name
372
- return this.ObjectName(objName)
373
- } else if (t.getType() === TokenType.Null) {
374
- return Expression.Constant(null, this.pos)
375
- }
376
-
377
- throw new Error(this.GetExceptionMessage('单词类型错误:' + t.getType()))
378
- }
379
-
380
- /**
381
- * TryCatch := try {expression} (catch(Exception类 名){表达式})* finally{表达式}?
382
- */
383
- Try () {
384
- let t = this.GetToken()
385
- if (t.getValue() !== 'try') {
386
- throw new Error(this.GetExceptionMessage('try-catch必须以try开始'))
387
- }
388
-
389
- t = this.GetToken()
390
- if (t.getValue() !== '{') {
391
- throw new Error(this.GetExceptionMessage('try块必须以{开始'))
392
- }
393
-
394
- // Get the expression inside the try block
395
- const tryExp = this.CommaExp()
396
-
397
- t = this.GetToken()
398
- if (t.getValue() !== '}') {
399
- throw new Error(this.GetExceptionMessage('try块必须以}结束'))
400
- }
401
-
402
- // Handle the catch part
403
- const catches = this.Catch()
404
-
405
- // Handle finally
406
- let finallyExp
407
- t = this.GetToken()
408
- if (t.getValue()) {
409
- if (t.getValue() === 'finally') {
410
- t = this.GetToken()
411
- if (t.getValue() !== '{') {
412
- throw new Error(this.GetExceptionMessage('finally块必须以{开始'))
413
- }
414
-
415
- // Get the expression inside the finally block
416
- finallyExp = this.CommaExp()
417
- t = this.GetToken()
418
- if (t.getValue() !== '}') {
419
- throw new Error(this.GetExceptionMessage('finally块必须以}结束'))
420
- }
421
- t = this.GetToken()
422
- }
423
- }
424
-
425
- this.tokens.push(t)
426
-
427
- // Return the exception handling expression
428
- return Expression.Try(tryExp, catches, this.pos, finallyExp)
429
- }
430
-
431
- /**
432
- * catch部分处理
433
- */
434
- Catch () {
435
- const result = []
436
- let t = this.GetToken()
437
-
438
- while (t.getValue() === 'catch') {
439
- t = this.GetToken()
440
- if (t.getValue() !== '(') {
441
- throw new Error(this.GetExceptionMessage('catch块参数必须以(开始'))
442
- }
443
-
444
- // Get the class name
445
- t = this.GetToken()
446
- const className = t.getValue()
447
-
448
- // Get the variable name
449
- t = this.GetToken()
450
- const varName = t.getValue()
451
-
452
- t = this.GetToken()
453
- if (t.getValue() !== ')') {
454
- throw new Error(this.GetExceptionMessage('catch块参数必须以)结束'))
455
- }
456
-
457
- // Get the opening curly brace
458
- t = this.GetToken()
459
- if (t.getValue() !== '{') {
460
- throw new Error(this.GetExceptionMessage('catch块必须以{开始'))
461
- }
462
-
463
- // Get the expression inside the catch block
464
- const catchExp = this.CommaExp()
465
- result.push(Expression.Catch(className, varName, catchExp, this.pos))
466
-
467
- // Get the closing curly brace
468
- t = this.GetToken()
469
- if (t.getValue() !== '}') {
470
- throw new Error(this.GetExceptionMessage('catch块必须以}结束'))
471
- }
472
-
473
- // Get the next token
474
- t = this.GetToken()
475
- }
476
-
477
- this.tokens.push(t)
478
- return result
479
- }
480
-
481
- /**
482
- * Validate block handling
483
- */
484
- Validate () {
485
- const t = this.GetToken()
486
- if (t.getValue() !== '{') {
487
- throw new Error(this.GetExceptionMessage('validate只接收Json对象'))
488
- }
489
-
490
- // Get the expression in the validate block
491
- const exp = this.Json()
492
-
493
- // Return Validate processing expression
494
- return Expression.Validate(exp, this.pos)
495
- }
496
-
497
- /**
498
- * JSON Object ::= {} | {propertyName: propertyValue, propertyName: propertyValue}
499
- */
500
- Json () {
501
- const children = []
502
-
503
- let t = this.GetToken()
504
- // Empty object, return directly
505
- if (t.getType() === TokenType.Oper && t.getValue() === '}') {
506
- return Expression.Json(children, this.pos)
507
- }
508
-
509
- this.tokens.push(t)
510
- children.push(this.Attr())
511
- t = this.GetToken()
512
-
513
- // If it's a comma, continue checking the next property
514
- while (t.getType() === TokenType.Oper && t.getValue() === ',') {
515
- const nextT = this.GetToken()
516
- if (nextT.getType() === TokenType.Oper && nextT.getValue() === '}') {
517
- t = nextT
518
- break
519
- }
520
- this.tokens.push(nextT)
521
- children.push(this.Attr())
522
- t = this.GetToken()
523
- }
524
-
525
- if (t.getType() !== TokenType.Oper || t.getValue() !== '}') {
526
- throw new Error(this.GetExceptionMessage('JSON对象构建错误'))
527
- }
528
-
529
- return Expression.Json(children, this.pos)
530
- }
531
-
532
- /**
533
- * JSON Array ::= []
534
- */
535
- JsonArray () {
536
- let t = this.GetToken()
537
- // Empty array, return directly
538
- if (t.getType() === TokenType.Oper && t.getValue() === ']') {
539
- // Return JSON array constant
540
- return Expression.Constant([], this.pos)
541
- }
542
-
543
- // Loop to get array contents
544
- this.tokens.push(t)
545
- const ps = this.Params()
546
- t = this.GetToken()
547
- if (t.getType() !== TokenType.Oper || t.getValue() !== ']') {
548
- throw new Error(this.GetExceptionMessage('JSON集合构建错误'))
549
- }
550
-
551
- return Expression.Array(ps, this.pos)
552
- }
553
-
554
- /**
555
- * Attribute-Value Pair ::= propertyName: propertyValue
556
- */
557
- Attr () {
558
- const name = this.GetToken()
559
- let value
560
- if (name.getType() === TokenType.Identy) {
561
- value = name.getValue()
562
- } else if (name.getType() === TokenType.Oper && (name.getValue() === '$' || name.getValue() === '"')) {
563
- const expression = this.StringUnion().children[1]
564
- value = expression.value
565
- } else {
566
- throw new Error(this.GetExceptionMessage('JSON对象的key必须是属性名或字符串'))
567
- }
568
-
569
- const t = this.GetToken()
570
- if (t.getType() !== TokenType.Oper || t.getValue() !== ':') {
571
- throw new Error(this.GetExceptionMessage('JSON构建错误'))
572
- }
573
-
574
- const exp = this.Exp()
575
- return Expression.Attr(value, exp, this.pos)
576
- }
577
-
578
- /**
579
- * Parse string concatenation sequence
580
- */
581
- StringUnion () {
582
- let exp = Expression.Constant('', this.pos)
583
- let t = this.GetToken()
584
- // Object sequence
585
- while ((t.getType() === TokenType.Oper && t.getValue() === '{') || t.getType() === TokenType.String) {
586
- // If it's a string, return the concatenated result
587
- if (t.getType() === TokenType.String) {
588
- exp = Expression.Concat(exp, Expression.Constant(t.getValue(), this.pos), this.SOURCE, this.pos)
589
- } else {
590
- // Handle content inside the {}
591
- const objExp = this.Exp()
592
- t = this.GetToken()
593
- if (t.getType() !== TokenType.Oper || t.getValue() !== '}') {
594
- throw new Error(this.GetExceptionMessage("缺少'}'"))
595
- }
596
- // String concatenation
597
- exp = Expression.Concat(exp, objExp, this.SOURCE, this.pos)
598
- }
599
- t = this.GetToken()
600
- }
601
- this.tokens.push(t)
602
- return exp
603
- }
604
-
605
- /**
606
- * Get object and object expression by name
607
- */
608
- ObjectName (objName) {
609
- return Expression.Identity(objName, this.pos)
610
- }
611
-
612
- /**
613
- * Object path parsing, handles method calls, properties, and array indices
614
- */
615
- ObjectPath (inExp) {
616
- let objExp = this.ArrayIndex(inExp)
617
- let t = this.GetToken()
618
- while (t.getType() === TokenType.Oper && t.getValue() === '.') {
619
- const nameToken = this.GetToken()
620
- const n = this.GetToken()
621
- if (n.getType() === TokenType.Oper && n.getValue() === '(') {
622
- const name = nameToken.getValue()
623
- if (name === 'each') {
624
- objExp = this.For(objExp)
625
- } else {
626
- objExp = this.MethodCall(name, objExp)
627
- }
628
- } else {
629
- this.tokens.push(n)
630
- const pi = nameToken.getValue()
631
- objExp = Expression.Property(objExp, pi, this.pos)
632
- objExp = this.ArrayIndex(objExp)
633
- }
634
- t = this.GetToken()
635
- }
636
- this.tokens.push(t)
637
-
638
- return objExp
639
- }
640
-
641
- /**
642
- * Array index parsing with optional condition
643
- */
644
- ArrayIndex (objExp) {
645
- let n = this.GetToken()
646
- if (n.getType() === TokenType.Oper && n.getValue() === '[') {
647
- const exp = this.Exp()
648
- n = this.GetToken()
649
- if (n.getType() !== TokenType.Oper || n.getValue() !== ']') {
650
- throw new Error(this.GetExceptionMessage("缺少']'"))
651
- }
652
- return Expression.ArrayIndex(objExp, exp, this.SOURCE, this.pos)
653
- }
654
- this.tokens.push(n)
655
- return objExp
656
- }
657
-
658
- /**
659
- * For loop handling
660
- */
661
- For (obj) {
662
- const exp = this.CommaExp()
663
- const t = this.GetToken()
664
- if (t.getType() !== TokenType.Oper || t.getValue() !== ')') {
665
- throw new Error(this.GetExceptionMessage('函数调用括号不匹配'))
666
- }
667
- return Expression.For(obj, exp, this.SOURCE, this.pos)
668
- }
669
-
670
- /**
671
- * Method call handling with parameters
672
- */
673
- MethodCall (name, obj) {
674
- let t = this.GetToken()
675
- if (t.getType() === TokenType.Oper && t.getValue() === ')') {
676
- const ps = []
677
- return Expression.Call(obj, name, ps, this.pos)
678
- }
679
-
680
- this.tokens.push(t)
681
- const ps = this.Params()
682
- t = this.GetToken()
683
- if (t.getType() !== TokenType.Oper || t.getValue() !== ')') {
684
- throw new Error(this.GetExceptionMessage('函数调用括号不匹配'))
685
- }
686
-
687
- return Expression.Call(obj, name, ps, this.pos)
688
- }
689
-
690
- /**
691
- * Function parameter list handling
692
- */
693
- Params () {
694
- const ps = []
695
- let name = this.paramName()
696
- let exp = this.Exp()
697
- this.procParam(ps, exp, name)
698
- let t = this.GetToken()
699
- while (t.getType() === TokenType.Oper && t.getValue() === ',') {
700
- name = this.paramName()
701
- exp = this.Exp()
702
- this.procParam(ps, exp, name)
703
- t = this.GetToken()
704
- }
705
- this.tokens.push(t)
706
- return ps
707
- }
708
-
709
- /**
710
- * Parse parameter name
711
- */
712
- paramName () {
713
- const t = this.GetToken()
714
- if (t.getType() === TokenType.Identy) {
715
- const t1 = this.GetToken()
716
- if (t1.getValue() === ':') {
717
- return t.getValue()
718
- } else {
719
- this.tokens.push(t)
720
- this.tokens.push(t1)
721
- return ''
722
- }
723
- } else {
724
- this.tokens.push(t)
725
- return ''
726
- }
727
- }
728
-
729
- /**
730
- * Process parameters, especially if it contains the "data" object
731
- */
732
- procParam (ps, exp, name) {
733
- const delegate = this.createDelegate(exp)
734
- if (delegate.containsKey('data')) {
735
- ps.push(Expression.Constant(delegate, this.pos))
736
- } else {
737
- ps.push(Expression.Param(exp, name, this.pos))
738
- }
739
- }
740
-
741
- /**
742
- * Get exception message with position information
743
- */
744
- GetExceptionMessage (msg) {
745
- const result = this.SOURCE.substring(0, this.pos) + ' <- ' + this.SOURCE.substring(this.pos)
746
- return `${msg}:\n${result}`
747
- }
748
-
749
- GetToken () {
750
- // If there are tokens in the queue, return the last one saved
751
- if (this.tokens.length > 0) {
752
- return this.tokens.shift()
753
- }
754
-
755
- const sPos = this.pos
756
- let hasKeyword = this.pos < this.SOURCE_LENGTH
757
- let value = null
758
-
759
- if (hasKeyword) {
760
- value = this.SOURCE.charAt(this.pos)
761
- }
762
-
763
- // If it's '{', save the previous state and change to non-string state
764
- if (hasKeyword && value === '{') {
765
- this.inStrings.push(this.inString)
766
- this.inString = false
767
- const str = this.SOURCE.substring(this.pos, this.pos + 1)
768
- this.pos += 1
769
- return new Token(TokenType.Oper, str, sPos)
770
- }
771
-
772
- // If in string state, process the string
773
- if (this.inString) {
774
- const startPos = this.pos
775
- while (hasKeyword && value !== '{' && value !== '}' && value !== '$' && value !== '\"') {
776
- if (value === '\\') {
777
- const nextStrValue = this.SOURCE.charAt(this.pos + 1)
778
- if (this.pos + 1 < this.SOURCE_LENGTH && ['{', '}', '\"', '$', '\\'].includes(nextStrValue)) {
779
- this.pos++
780
- } else {
781
- break
782
- }
783
- }
784
- this.pos++
785
- if (this.pos < this.SOURCE_LENGTH) {
786
- value = this.SOURCE.charAt(this.pos)
787
- } else {
788
- hasKeyword = false
789
- }
790
- }
791
- if (!(hasKeyword && value === '{')) {
792
- this.inString = this.inStrings.pop()
793
- }
794
- const t = new Token(TokenType.String, this.SOURCE.substring(startPos, this.pos)
795
- .replace('\\$', '$')
796
- .replace('\\{', '{')
797
- .replace('\\}', '}')
798
- .replace(/\\"/g, '"')
799
- .replace('\\\\', '\\'), sPos)
800
-
801
- if (hasKeyword && (value === '$' || value === '\"')) {
802
- this.pos++
803
- }
804
- return t
805
- }
806
-
807
- // Skip whitespace and comments
808
- while (hasKeyword && (value === ' ' || value === '\n' || value === '\t' || (this.pos < this.SOURCE_LENGTH - 2 && value === '/' && this.SOURCE.charAt(this.pos + 1) === '/'))) {
809
- if (value !== ' ' && value !== '\n' && value !== '\t') {
810
- this.pos += 2
811
- if (this.pos < this.SOURCE_LENGTH) {
812
- value = this.SOURCE.charAt(this.pos)
813
- } else {
814
- hasKeyword = false
815
- }
816
- while (hasKeyword && value !== '\n') {
817
- this.pos++
818
- if (this.pos < this.SOURCE_LENGTH) {
819
- value = this.SOURCE.charAt(this.pos)
820
- } else {
821
- hasKeyword = false
822
- }
823
- }
824
- }
825
- this.pos++
826
- if (this.pos < this.SOURCE_LENGTH) {
827
- value = this.SOURCE.charAt(this.pos)
828
- } else {
829
- hasKeyword = false
830
- }
831
- }
832
-
833
- // If we are at the end of the source, return an "End" token
834
- if (this.pos === this.SOURCE_LENGTH) {
835
- return new Token(TokenType.End, null, sPos)
836
- }
837
-
838
- if (value !== null) {
839
- // Handle number tokens
840
- if (value >= '0' && value <= '9') {
841
- const oldPos = this.pos
842
- while (hasKeyword && value >= '0' && value <= '9') {
843
- this.pos++
844
- if (this.pos < this.SOURCE_LENGTH) {
845
- value = this.SOURCE.charAt(this.pos)
846
- } else {
847
- hasKeyword = false
848
- }
849
- }
850
-
851
- if (hasKeyword && value === '.') {
852
- do {
853
- this.pos++
854
- if (this.pos < this.SOURCE_LENGTH) {
855
- value = this.SOURCE.charAt(this.pos)
856
- } else {
857
- hasKeyword = false
858
- }
859
- } while (hasKeyword && value >= '0' && value <= '9')
860
- const str = this.SOURCE.substring(oldPos, this.pos)
861
- return new Token(TokenType.Double, parseFloat(str), sPos)
862
- } else {
863
- const str = this.SOURCE.substring(oldPos, this.pos)
864
- return new Token(TokenType.Int, parseInt(str, 10), sPos)
865
- }
866
- } else if ((value >= 'a' && value <= 'z') || (value >= 'A' && value <= 'Z') || value === '_' || /[\u4e00-\u9fa5]/.test(value)) {
867
- const oldPos = this.pos
868
- while (hasKeyword && ((value >= 'a' && value <= 'z') || (value >= 'A' && value <= 'Z') || (value >= '0' && value <= '9') || value === '_' || /[\u4e00-\u9fa5]/.test(value))) {
869
- this.pos++
870
- if (this.pos < this.SOURCE_LENGTH) {
871
- value = this.SOURCE.charAt(this.pos)
872
- } else {
873
- hasKeyword = false
874
- }
875
- }
876
- const str = this.SOURCE.substring(oldPos, this.pos)
877
- switch (str) {
878
- case 'false':
879
- case 'true':
880
- return new Token(TokenType.Bool, Boolean(str), sPos)
881
- case 'null':
882
- return new Token(TokenType.Null, null, sPos)
883
- default:
884
- return new Token(TokenType.Identy, str, sPos)
885
- }
886
- } else if ((value === '&' && this.SOURCE.charAt(this.pos + 1) === '&') || (value === '|' && this.SOURCE.charAt(this.pos + 1) === '|')) {
887
- const str = this.SOURCE.substring(this.pos, this.pos + 2)
888
- this.pos += 2
889
- return new Token(TokenType.Oper, str, sPos)
890
- } else if (['+', '-', '*', '/', '%', '>', '<', '!'].includes(value)) {
891
- let str = ''
892
- if (this.SOURCE.charAt(this.pos + 1) === '=') {
893
- str = this.SOURCE.substring(this.pos, this.pos + 2)
894
- this.pos += 2
895
- } else {
896
- str = this.SOURCE.substring(this.pos, this.pos + 1)
897
- this.pos += 1
898
- }
899
- return new Token(TokenType.Oper, str, sPos)
900
- } else if (value === '=') {
901
- let str
902
- if (this.SOURCE.charAt(this.pos + 1) === '=' || this.SOURCE.charAt(this.pos + 1) === '>') {
903
- str = this.SOURCE.substring(this.pos, this.pos + 2)
904
- this.pos += 2
905
- } else {
906
- str = this.SOURCE.substring(this.pos, this.pos + 1)
907
- this.pos += 1
908
- }
909
- return new Token(TokenType.Oper, str, sPos)
910
- } else if ('()[],;.:@{}"$'.includes(value)) {
911
- if (value === '$' || value === '\"') {
912
- this.inStrings.push(false)
913
- this.inString = true
914
- } else if ((value === '{' || value === '}') && this.inStrings.length) {
915
- if (value === '{') {
916
- this.inStrings.push(false)
917
- this.inString = false
918
- } else {
919
- this.inString = this.inStrings.pop()
920
- }
921
- }
922
- const str = this.SOURCE.substring(this.pos, this.pos + 1)
923
- this.pos += 1
924
- return new Token(TokenType.Oper, str, sPos)
925
- } else {
926
- throw new Error(`Invalid token: '${value}'`)
927
- }
928
- }
929
-
930
- throw new Error('Unknown error while parsing.')
931
- }
932
- }
1
+ import Token from './Token'
2
+ import Expression from './Expression'
3
+ import Delegate from './Delegate'
4
+ import ExpressionType from '../enums/ExpressionType'
5
+ import TokenType from '../enums/TokenType'
6
+
7
+ /**
8
+ * 表达式入口
9
+ */
10
+ export default class Program {
11
+ // 源程序
12
+ SOURCE
13
+ SOURCE_LENGTH
14
+ /**
15
+ * Token队列,用于回退
16
+ */
17
+ tokens = []
18
+ /**
19
+ * 字符串处理环节堆栈,$进入字符串处理环节,“{}”中间部分脱离字符串处理环节
20
+ */
21
+ inStrings = []
22
+
23
+ /**
24
+ * 当前获取到的字符位置
25
+ */
26
+ pos = 0
27
+
28
+ /**
29
+ * 当前是否在字符串处理环节
30
+ */
31
+ inString = false
32
+
33
+ constructor (source) {
34
+ this.SOURCE = source
35
+ this.SOURCE_LENGTH = this.SOURCE.length
36
+ }
37
+
38
+ /**
39
+ * 调用解析过程
40
+ */
41
+ parse () {
42
+ // 执行完以下方法后就已经诞生了一个完整的执行流程,也就是被翻译成了一套完整的指令集。
43
+ return this.createDelegate(this.expression())
44
+ }
45
+
46
+ parseExpression (expression) {
47
+ // 执行完以下方法后就已经诞生了一个完整的执行流程,也就是被翻译成了一套完整的指令集。
48
+ return this.createDelegate(expression)
49
+ }
50
+
51
+ /**
52
+ * 编译,产生可执行单元Delegate
53
+ */
54
+ createDelegate (expression) {
55
+ return new Delegate(expression, this.SOURCE)
56
+ }
57
+
58
+ /**
59
+ * 获取完整表达式
60
+ */
61
+ expression () {
62
+ const expression = this.CommaExp()
63
+ if (this.pos < this.SOURCE_LENGTH) {
64
+ throw new Error(this.GetExceptionMessage('需要逗号结尾!'))
65
+ }
66
+ return expression
67
+ }
68
+
69
+ /**
70
+ * 逗号表达式=赋值表达式(,赋值表达式)*
71
+ */
72
+ CommaExp () {
73
+ const exps = []
74
+
75
+ const first = this.AssignExp()
76
+ exps.push(first)
77
+
78
+ let t = this.GetToken()
79
+
80
+ // 没有结束
81
+ while (t.getType() === TokenType.Oper && (t.getValue() === ',' || t.getValue() === ';' || t.getValue() === '\n')) {
82
+ const r = this.AssignExp()
83
+ exps.push(r)
84
+ t = this.GetToken()
85
+ }
86
+
87
+ this.tokens.push(t)
88
+
89
+ return Expression.Comma(exps, this.pos)
90
+ }
91
+
92
+ /**
93
+ * 赋值表达式=对象属性=一般表达式|一般表达式
94
+ */
95
+ AssignExp () {
96
+ let t = this.GetToken()
97
+
98
+ // 把第一个Token的位置记录下来,方便后面回退
99
+ const firstPos = t.getStartPos()
100
+
101
+ if (t.getType() !== TokenType.Identy) {
102
+ this.pos = firstPos
103
+ this.tokens.length = 0 // Clear the tokens array
104
+ this.inString = false
105
+ return this.Exp()
106
+ }
107
+
108
+ let objExp = Expression.Identity(t.getValue(), this.pos)
109
+ objExp = this.ObjectPath(objExp)
110
+
111
+ // 只能给对象属性或者变量赋值
112
+ if (objExp.type !== ExpressionType.Property && objExp.type !== ExpressionType.Identity) {
113
+ this.pos = firstPos
114
+ this.tokens.length = 0
115
+ this.inString = false
116
+ return this.Exp()
117
+ }
118
+
119
+ t = this.GetToken()
120
+ if (t.getType() !== TokenType.Oper || t.getValue() !== '=') {
121
+ this.pos = firstPos
122
+ this.tokens.length = 0
123
+ this.inString = false
124
+ return this.Exp()
125
+ }
126
+
127
+ const exp = this.Exp()
128
+
129
+ // 如果是属性赋值
130
+ if (objExp.type === ExpressionType.Property) {
131
+ // 从属性Expression中获取对象及属性名
132
+ const name = objExp.value
133
+ objExp = objExp.children[0]
134
+ return Expression.Assign(objExp, exp, name, this.pos)
135
+ } else {
136
+ // Identity 变量赋值
137
+ return Expression.Assign(null, exp, objExp.value, this.pos)
138
+ }
139
+ }
140
+
141
+ Exp () {
142
+ const v = this.Logic()
143
+
144
+ // 是':',表示条件,否则直接返回单结果
145
+ let t = this.GetToken()
146
+ if (t.getType() === TokenType.Oper && t.getValue() === ':') {
147
+ // 第一项转换
148
+ const result = this.Logic()
149
+
150
+ // 下一个是",",继续读取下一个条件结果串,由于是右结合,只能采用递归
151
+ t = this.GetToken()
152
+ if (t.getType() === TokenType.Oper && t.getValue() === ',') {
153
+ // 第二项转换
154
+ const sExp = this.Exp()
155
+ // 返回
156
+ return Expression.Condition(v, result, sExp, this.SOURCE, this.pos)
157
+ } else {
158
+ throw new Error(this.GetExceptionMessage('必须有默认值!'))
159
+ }
160
+ } else {
161
+ this.tokens.push(t) // Put the token back
162
+ return v
163
+ }
164
+ }
165
+
166
+ Logic () {
167
+ let t = this.GetToken()
168
+
169
+ // !表达式
170
+ const hasNot = t.getType() === TokenType.Oper && t.getValue() === '!'
171
+ if (!hasNot) {
172
+ this.tokens.push(t) // Put the token back if it's not '!'
173
+ }
174
+
175
+ let v = this.Compare()
176
+ if (hasNot) {
177
+ v = Expression.Not(v, this.SOURCE, this.pos)
178
+ }
179
+
180
+ t = this.GetToken()
181
+ while (t.getType() === TokenType.Oper && (t.getValue() === '&&' || t.getValue() === '||')) {
182
+ // 第二项转换
183
+ const exp = this.Logic()
184
+
185
+ // 执行
186
+ if (t.getValue() === '&&') {
187
+ v = Expression.And(v, exp, this.SOURCE, this.pos)
188
+ } else {
189
+ v = Expression.Or(v, exp, this.SOURCE, this.pos)
190
+ }
191
+
192
+ t = this.GetToken()
193
+ }
194
+
195
+ this.tokens.push(t) // Put the token back
196
+ return v
197
+ }
198
+
199
+ Compare () {
200
+ const left = this.Math()
201
+ const t = this.GetToken()
202
+
203
+ if (t.getType() === TokenType.Oper && (
204
+ t.getValue() === '>' || t.getValue() === '>=' ||
205
+ t.getValue() === '<' || t.getValue() === '<=' || t.getValue() === '=>')) {
206
+ if (t.getValue() === '=>') {
207
+ this.tokens.push(t) // Push back the token for lambda handling
208
+ return this.Lambda()
209
+ }
210
+
211
+ const rExp = this.Math()
212
+
213
+ switch (t.getValue()) {
214
+ case '>':
215
+ return Expression.GreaterThan(left, rExp, this.SOURCE, this.pos)
216
+ case '>=':
217
+ return Expression.GreaterThanOrEqual(left, rExp, this.SOURCE, this.pos)
218
+ case '<':
219
+ return Expression.LessThan(left, rExp, this.SOURCE, this.pos)
220
+ case '<=':
221
+ return Expression.LessThanOrEqual(left, rExp, this.SOURCE, this.pos)
222
+ }
223
+ } else if (t.getType() === TokenType.Oper && (
224
+ t.getValue() === '==' || t.getValue() === '!=')) {
225
+ const rExp = this.Math()
226
+
227
+ // 相等比较
228
+ if (t.getValue() === '==') {
229
+ return Expression.Equal(left, rExp, this.SOURCE, this.pos)
230
+ } else {
231
+ return Expression.NotEqual(left, rExp, this.SOURCE, this.pos)
232
+ }
233
+ }
234
+
235
+ // 返回当前的表达式结果
236
+ this.tokens.push(t) // Push the token back
237
+ return left
238
+ }
239
+
240
+ Math () {
241
+ let v = this.Mul()
242
+ let t = this.GetToken()
243
+
244
+ while (t.getType() === TokenType.Oper && (t.getValue() === '+' || t.getValue() === '-')) {
245
+ // 转换操作数2为数字
246
+ const r = this.Mul()
247
+
248
+ // 开始运算
249
+ if (t.getValue() === '+') {
250
+ v = Expression.Add(v, r, this.SOURCE, this.pos)
251
+ } else {
252
+ v = Expression.Subtract(v, r, this.SOURCE, this.pos)
253
+ }
254
+
255
+ t = this.GetToken()
256
+ }
257
+
258
+ this.tokens.push(t) // Push the token back
259
+ return v
260
+ }
261
+
262
+ Lambda () {
263
+ let t = this.GetToken()
264
+ if (t.getValue() !== '=>' || t.getValue() == null) {
265
+ throw new Error(this.GetExceptionMessage('lambda必须以=>开始'))
266
+ }
267
+
268
+ t = this.GetToken()
269
+ if (t.getValue() !== '{' || t.getValue() == null) {
270
+ throw new Error(this.GetExceptionMessage('lambda必须以{开始'))
271
+ }
272
+
273
+ // 取lambda中的表达式
274
+ const exp = this.CommaExp()
275
+
276
+ t = this.GetToken()
277
+ if (t.getValue() !== '}' || t.getValue() == null) {
278
+ throw new Error(this.GetExceptionMessage('lambda必须以}结束'))
279
+ }
280
+
281
+ return Expression.Lambda(exp, this.pos)
282
+ }
283
+
284
+ Mul () {
285
+ let v = this.UnarySub()
286
+ let t = this.GetToken()
287
+
288
+ while (t.getType() === TokenType.Oper && (t.getValue() === '*' || t.getValue() === '/' || t.getValue() === '%')) {
289
+ // Convert the second operand to a number
290
+ const r = this.UnarySub()
291
+
292
+ // Perform the operation
293
+ if (t.getValue() === '*') {
294
+ v = Expression.Multiply(v, r, this.SOURCE, this.pos)
295
+ } else if (t.getValue() === '/') {
296
+ v = Expression.Divide(v, r, this.SOURCE, this.pos)
297
+ } else {
298
+ v = Expression.Modulo(v, r, this.SOURCE, this.pos)
299
+ }
300
+
301
+ t = this.GetToken()
302
+ }
303
+
304
+ this.tokens.push(t)
305
+ return v
306
+ }
307
+
308
+ UnarySub () {
309
+ const t = this.GetToken()
310
+ if (t.getType() === TokenType.Oper && t.getValue() === '-') {
311
+ const r = this.Item()
312
+ return Expression.Subtract(Expression.Constant(0, this.pos), r, this.SOURCE, this.pos)
313
+ }
314
+ this.tokens.push(t) // Push the token back into the queue
315
+ return this.Item()
316
+ }
317
+
318
+ Item () {
319
+ const objName = ''
320
+ // 获取对象表达式
321
+ let objExp = this.ItemHead(objName)
322
+ // 获取对象路径表达式
323
+ objExp = this.ObjectPath(objExp)
324
+ return objExp
325
+ }
326
+
327
+ ItemHead (name) {
328
+ let t = this.GetToken()
329
+
330
+ if (t.getType() === TokenType.Oper && t.getValue() === '(') {
331
+ const result = this.CommaExp()
332
+ t = this.GetToken()
333
+ if (t.getType() !== TokenType.Oper || t.getValue() !== ')') {
334
+ throw new Error(this.GetExceptionMessage('括号不匹配'))
335
+ }
336
+ return result
337
+ } else if (t.getType() === TokenType.Oper && t.getValue() === '{') {
338
+ // JSON object
339
+ return this.Json()
340
+ } else if (t.getType() === TokenType.Oper && t.getValue() === '[') {
341
+ // JSON array
342
+ return this.JsonArray()
343
+ } else if (t.getType() === TokenType.Oper && (t.getValue() === '$' || t.getValue() === '"')) {
344
+ // String concatenation sequence
345
+ return this.StringUnion()
346
+ } else if (t.getType() === TokenType.Int || t.getType() === TokenType.Double || t.getType() === TokenType.Bool) {
347
+ return Expression.Constant(t.getValue(), this.pos)
348
+ } else if (t.getType() === TokenType.Identy) {
349
+ const objName = t.getValue()
350
+
351
+ switch (objName) {
352
+ case 'return':
353
+ return Expression.Return(this.Exp(), this.pos)
354
+ case 'try':
355
+ this.tokens.push(t) // Revert the token back to the queue
356
+ return this.Try()
357
+ case 'throw':
358
+ return Expression.Throw(this.Exp(), this.pos)
359
+ case 'validate':
360
+ return this.Validate()
361
+ case 'assert':
362
+ return Expression.Assert(this.Exp(), this.pos)
363
+ case 'break':
364
+ return Expression.Break(this.pos, undefined)
365
+ case 'continue':
366
+ return Expression.Continue(this.pos, undefined)
367
+ }
368
+
369
+ // Return the object name
370
+ name += objName
371
+ // Process the object name
372
+ return this.ObjectName(objName)
373
+ } else if (t.getType() === TokenType.Null) {
374
+ return Expression.Constant(null, this.pos)
375
+ }
376
+
377
+ throw new Error(this.GetExceptionMessage('单词类型错误:' + t.getType()))
378
+ }
379
+
380
+ /**
381
+ * TryCatch := try {expression} (catch(Exception类 名){表达式})* finally{表达式}?
382
+ */
383
+ Try () {
384
+ let t = this.GetToken()
385
+ if (t.getValue() !== 'try') {
386
+ throw new Error(this.GetExceptionMessage('try-catch必须以try开始'))
387
+ }
388
+
389
+ t = this.GetToken()
390
+ if (t.getValue() !== '{') {
391
+ throw new Error(this.GetExceptionMessage('try块必须以{开始'))
392
+ }
393
+
394
+ // Get the expression inside the try block
395
+ const tryExp = this.CommaExp()
396
+
397
+ t = this.GetToken()
398
+ if (t.getValue() !== '}') {
399
+ throw new Error(this.GetExceptionMessage('try块必须以}结束'))
400
+ }
401
+
402
+ // Handle the catch part
403
+ const catches = this.Catch()
404
+
405
+ // Handle finally
406
+ let finallyExp
407
+ t = this.GetToken()
408
+ if (t.getValue()) {
409
+ if (t.getValue() === 'finally') {
410
+ t = this.GetToken()
411
+ if (t.getValue() !== '{') {
412
+ throw new Error(this.GetExceptionMessage('finally块必须以{开始'))
413
+ }
414
+
415
+ // Get the expression inside the finally block
416
+ finallyExp = this.CommaExp()
417
+ t = this.GetToken()
418
+ if (t.getValue() !== '}') {
419
+ throw new Error(this.GetExceptionMessage('finally块必须以}结束'))
420
+ }
421
+ t = this.GetToken()
422
+ }
423
+ }
424
+
425
+ this.tokens.push(t)
426
+
427
+ // Return the exception handling expression
428
+ return Expression.Try(tryExp, catches, this.pos, finallyExp)
429
+ }
430
+
431
+ /**
432
+ * catch部分处理
433
+ */
434
+ Catch () {
435
+ const result = []
436
+ let t = this.GetToken()
437
+
438
+ while (t.getValue() === 'catch') {
439
+ t = this.GetToken()
440
+ if (t.getValue() !== '(') {
441
+ throw new Error(this.GetExceptionMessage('catch块参数必须以(开始'))
442
+ }
443
+
444
+ // Get the class name
445
+ t = this.GetToken()
446
+ const className = t.getValue()
447
+
448
+ // Get the variable name
449
+ t = this.GetToken()
450
+ const varName = t.getValue()
451
+
452
+ t = this.GetToken()
453
+ if (t.getValue() !== ')') {
454
+ throw new Error(this.GetExceptionMessage('catch块参数必须以)结束'))
455
+ }
456
+
457
+ // Get the opening curly brace
458
+ t = this.GetToken()
459
+ if (t.getValue() !== '{') {
460
+ throw new Error(this.GetExceptionMessage('catch块必须以{开始'))
461
+ }
462
+
463
+ // Get the expression inside the catch block
464
+ const catchExp = this.CommaExp()
465
+ result.push(Expression.Catch(className, varName, catchExp, this.pos))
466
+
467
+ // Get the closing curly brace
468
+ t = this.GetToken()
469
+ if (t.getValue() !== '}') {
470
+ throw new Error(this.GetExceptionMessage('catch块必须以}结束'))
471
+ }
472
+
473
+ // Get the next token
474
+ t = this.GetToken()
475
+ }
476
+
477
+ this.tokens.push(t)
478
+ return result
479
+ }
480
+
481
+ /**
482
+ * Validate block handling
483
+ */
484
+ Validate () {
485
+ const t = this.GetToken()
486
+ if (t.getValue() !== '{') {
487
+ throw new Error(this.GetExceptionMessage('validate只接收Json对象'))
488
+ }
489
+
490
+ // Get the expression in the validate block
491
+ const exp = this.Json()
492
+
493
+ // Return Validate processing expression
494
+ return Expression.Validate(exp, this.pos)
495
+ }
496
+
497
+ /**
498
+ * JSON Object ::= {} | {propertyName: propertyValue, propertyName: propertyValue}
499
+ */
500
+ Json () {
501
+ const children = []
502
+
503
+ let t = this.GetToken()
504
+ // Empty object, return directly
505
+ if (t.getType() === TokenType.Oper && t.getValue() === '}') {
506
+ return Expression.Json(children, this.pos)
507
+ }
508
+
509
+ this.tokens.push(t)
510
+ children.push(this.Attr())
511
+ t = this.GetToken()
512
+
513
+ // If it's a comma, continue checking the next property
514
+ while (t.getType() === TokenType.Oper && t.getValue() === ',') {
515
+ const nextT = this.GetToken()
516
+ if (nextT.getType() === TokenType.Oper && nextT.getValue() === '}') {
517
+ t = nextT
518
+ break
519
+ }
520
+ this.tokens.push(nextT)
521
+ children.push(this.Attr())
522
+ t = this.GetToken()
523
+ }
524
+
525
+ if (t.getType() !== TokenType.Oper || t.getValue() !== '}') {
526
+ throw new Error(this.GetExceptionMessage('JSON对象构建错误'))
527
+ }
528
+
529
+ return Expression.Json(children, this.pos)
530
+ }
531
+
532
+ /**
533
+ * JSON Array ::= []
534
+ */
535
+ JsonArray () {
536
+ let t = this.GetToken()
537
+ // Empty array, return directly
538
+ if (t.getType() === TokenType.Oper && t.getValue() === ']') {
539
+ // Return JSON array constant
540
+ return Expression.Constant([], this.pos)
541
+ }
542
+
543
+ // Loop to get array contents
544
+ this.tokens.push(t)
545
+ const ps = this.Params()
546
+ t = this.GetToken()
547
+ if (t.getType() !== TokenType.Oper || t.getValue() !== ']') {
548
+ throw new Error(this.GetExceptionMessage('JSON集合构建错误'))
549
+ }
550
+
551
+ return Expression.Array(ps, this.pos)
552
+ }
553
+
554
+ /**
555
+ * Attribute-Value Pair ::= propertyName: propertyValue
556
+ */
557
+ Attr () {
558
+ const name = this.GetToken()
559
+ let value
560
+ if (name.getType() === TokenType.Identy) {
561
+ value = name.getValue()
562
+ } else if (name.getType() === TokenType.Oper && (name.getValue() === '$' || name.getValue() === '"')) {
563
+ const expression = this.StringUnion().children[1]
564
+ value = expression.value
565
+ } else {
566
+ throw new Error(this.GetExceptionMessage('JSON对象的key必须是属性名或字符串'))
567
+ }
568
+
569
+ const t = this.GetToken()
570
+ if (t.getType() !== TokenType.Oper || t.getValue() !== ':') {
571
+ throw new Error(this.GetExceptionMessage('JSON构建错误'))
572
+ }
573
+
574
+ const exp = this.Exp()
575
+ return Expression.Attr(value, exp, this.pos)
576
+ }
577
+
578
+ /**
579
+ * Parse string concatenation sequence
580
+ */
581
+ StringUnion () {
582
+ let exp = Expression.Constant('', this.pos)
583
+ let t = this.GetToken()
584
+ // Object sequence
585
+ while ((t.getType() === TokenType.Oper && t.getValue() === '{') || t.getType() === TokenType.String) {
586
+ // If it's a string, return the concatenated result
587
+ if (t.getType() === TokenType.String) {
588
+ exp = Expression.Concat(exp, Expression.Constant(t.getValue(), this.pos), this.SOURCE, this.pos)
589
+ } else {
590
+ // Handle content inside the {}
591
+ const objExp = this.Exp()
592
+ t = this.GetToken()
593
+ if (t.getType() !== TokenType.Oper || t.getValue() !== '}') {
594
+ throw new Error(this.GetExceptionMessage("缺少'}'"))
595
+ }
596
+ // String concatenation
597
+ exp = Expression.Concat(exp, objExp, this.SOURCE, this.pos)
598
+ }
599
+ t = this.GetToken()
600
+ }
601
+ this.tokens.push(t)
602
+ return exp
603
+ }
604
+
605
+ /**
606
+ * Get object and object expression by name
607
+ */
608
+ ObjectName (objName) {
609
+ return Expression.Identity(objName, this.pos)
610
+ }
611
+
612
+ /**
613
+ * Object path parsing, handles method calls, properties, and array indices
614
+ */
615
+ ObjectPath (inExp) {
616
+ let objExp = this.ArrayIndex(inExp)
617
+ let t = this.GetToken()
618
+ while (t.getType() === TokenType.Oper && t.getValue() === '.') {
619
+ const nameToken = this.GetToken()
620
+ const n = this.GetToken()
621
+ if (n.getType() === TokenType.Oper && n.getValue() === '(') {
622
+ const name = nameToken.getValue()
623
+ if (name === 'each') {
624
+ objExp = this.For(objExp)
625
+ } else {
626
+ objExp = this.MethodCall(name, objExp)
627
+ }
628
+ } else {
629
+ this.tokens.push(n)
630
+ const pi = nameToken.getValue()
631
+ objExp = Expression.Property(objExp, pi, this.pos)
632
+ objExp = this.ArrayIndex(objExp)
633
+ }
634
+ t = this.GetToken()
635
+ }
636
+ this.tokens.push(t)
637
+
638
+ return objExp
639
+ }
640
+
641
+ /**
642
+ * Array index parsing with optional condition
643
+ */
644
+ ArrayIndex (objExp) {
645
+ let n = this.GetToken()
646
+ if (n.getType() === TokenType.Oper && n.getValue() === '[') {
647
+ const exp = this.Exp()
648
+ n = this.GetToken()
649
+ if (n.getType() !== TokenType.Oper || n.getValue() !== ']') {
650
+ throw new Error(this.GetExceptionMessage("缺少']'"))
651
+ }
652
+ return Expression.ArrayIndex(objExp, exp, this.SOURCE, this.pos)
653
+ }
654
+ this.tokens.push(n)
655
+ return objExp
656
+ }
657
+
658
+ /**
659
+ * For loop handling
660
+ */
661
+ For (obj) {
662
+ const exp = this.CommaExp()
663
+ const t = this.GetToken()
664
+ if (t.getType() !== TokenType.Oper || t.getValue() !== ')') {
665
+ throw new Error(this.GetExceptionMessage('函数调用括号不匹配'))
666
+ }
667
+ return Expression.For(obj, exp, this.SOURCE, this.pos)
668
+ }
669
+
670
+ /**
671
+ * Method call handling with parameters
672
+ */
673
+ MethodCall (name, obj) {
674
+ let t = this.GetToken()
675
+ if (t.getType() === TokenType.Oper && t.getValue() === ')') {
676
+ const ps = []
677
+ return Expression.Call(obj, name, ps, this.pos)
678
+ }
679
+
680
+ this.tokens.push(t)
681
+ const ps = this.Params()
682
+ t = this.GetToken()
683
+ if (t.getType() !== TokenType.Oper || t.getValue() !== ')') {
684
+ throw new Error(this.GetExceptionMessage('函数调用括号不匹配'))
685
+ }
686
+
687
+ return Expression.Call(obj, name, ps, this.pos)
688
+ }
689
+
690
+ /**
691
+ * Function parameter list handling
692
+ */
693
+ Params () {
694
+ const ps = []
695
+ let name = this.paramName()
696
+ let exp = this.Exp()
697
+ this.procParam(ps, exp, name)
698
+ let t = this.GetToken()
699
+ while (t.getType() === TokenType.Oper && t.getValue() === ',') {
700
+ name = this.paramName()
701
+ exp = this.Exp()
702
+ this.procParam(ps, exp, name)
703
+ t = this.GetToken()
704
+ }
705
+ this.tokens.push(t)
706
+ return ps
707
+ }
708
+
709
+ /**
710
+ * Parse parameter name
711
+ */
712
+ paramName () {
713
+ const t = this.GetToken()
714
+ if (t.getType() === TokenType.Identy) {
715
+ const t1 = this.GetToken()
716
+ if (t1.getValue() === ':') {
717
+ return t.getValue()
718
+ } else {
719
+ this.tokens.push(t)
720
+ this.tokens.push(t1)
721
+ return ''
722
+ }
723
+ } else {
724
+ this.tokens.push(t)
725
+ return ''
726
+ }
727
+ }
728
+
729
+ /**
730
+ * Process parameters, especially if it contains the "data" object
731
+ */
732
+ procParam (ps, exp, name) {
733
+ const delegate = this.createDelegate(exp)
734
+ if (delegate.containsKey('data')) {
735
+ ps.push(Expression.Constant(delegate, this.pos))
736
+ } else {
737
+ ps.push(Expression.Param(exp, name, this.pos))
738
+ }
739
+ }
740
+
741
+ /**
742
+ * Get exception message with position information
743
+ */
744
+ GetExceptionMessage (msg) {
745
+ const result = this.SOURCE.substring(0, this.pos) + ' <- ' + this.SOURCE.substring(this.pos)
746
+ return `${msg}:\n${result}`
747
+ }
748
+
749
+ GetToken () {
750
+ // If there are tokens in the queue, return the last one saved
751
+ if (this.tokens.length > 0) {
752
+ return this.tokens.shift()
753
+ }
754
+
755
+ const sPos = this.pos
756
+ let hasKeyword = this.pos < this.SOURCE_LENGTH
757
+ let value = null
758
+
759
+ if (hasKeyword) {
760
+ value = this.SOURCE.charAt(this.pos)
761
+ }
762
+
763
+ // If it's '{', save the previous state and change to non-string state
764
+ if (hasKeyword && value === '{') {
765
+ this.inStrings.push(this.inString)
766
+ this.inString = false
767
+ const str = this.SOURCE.substring(this.pos, this.pos + 1)
768
+ this.pos += 1
769
+ return new Token(TokenType.Oper, str, sPos)
770
+ }
771
+
772
+ // If in string state, process the string
773
+ if (this.inString) {
774
+ const startPos = this.pos
775
+ while (hasKeyword && value !== '{' && value !== '}' && value !== '$' && value !== '\"') {
776
+ if (value === '\\') {
777
+ const nextStrValue = this.SOURCE.charAt(this.pos + 1)
778
+ if (this.pos + 1 < this.SOURCE_LENGTH && ['{', '}', '\"', '$', '\\'].includes(nextStrValue)) {
779
+ this.pos++
780
+ } else {
781
+ break
782
+ }
783
+ }
784
+ this.pos++
785
+ if (this.pos < this.SOURCE_LENGTH) {
786
+ value = this.SOURCE.charAt(this.pos)
787
+ } else {
788
+ hasKeyword = false
789
+ }
790
+ }
791
+ if (!(hasKeyword && value === '{')) {
792
+ this.inString = this.inStrings.pop()
793
+ }
794
+ const t = new Token(TokenType.String, this.SOURCE.substring(startPos, this.pos)
795
+ .replace('\\$', '$')
796
+ .replace('\\{', '{')
797
+ .replace('\\}', '}')
798
+ .replace(/\\"/g, '"')
799
+ .replace('\\\\', '\\'), sPos)
800
+
801
+ if (hasKeyword && (value === '$' || value === '\"')) {
802
+ this.pos++
803
+ }
804
+ return t
805
+ }
806
+
807
+ // Skip whitespace and comments
808
+ while (hasKeyword && (value === ' ' || value === '\n' || value === '\t' || (this.pos < this.SOURCE_LENGTH - 2 && value === '/' && this.SOURCE.charAt(this.pos + 1) === '/'))) {
809
+ if (value !== ' ' && value !== '\n' && value !== '\t') {
810
+ this.pos += 2
811
+ if (this.pos < this.SOURCE_LENGTH) {
812
+ value = this.SOURCE.charAt(this.pos)
813
+ } else {
814
+ hasKeyword = false
815
+ }
816
+ while (hasKeyword && value !== '\n') {
817
+ this.pos++
818
+ if (this.pos < this.SOURCE_LENGTH) {
819
+ value = this.SOURCE.charAt(this.pos)
820
+ } else {
821
+ hasKeyword = false
822
+ }
823
+ }
824
+ }
825
+ this.pos++
826
+ if (this.pos < this.SOURCE_LENGTH) {
827
+ value = this.SOURCE.charAt(this.pos)
828
+ } else {
829
+ hasKeyword = false
830
+ }
831
+ }
832
+
833
+ // If we are at the end of the source, return an "End" token
834
+ if (this.pos === this.SOURCE_LENGTH) {
835
+ return new Token(TokenType.End, null, sPos)
836
+ }
837
+
838
+ if (value !== null) {
839
+ // Handle number tokens
840
+ if (value >= '0' && value <= '9') {
841
+ const oldPos = this.pos
842
+ while (hasKeyword && value >= '0' && value <= '9') {
843
+ this.pos++
844
+ if (this.pos < this.SOURCE_LENGTH) {
845
+ value = this.SOURCE.charAt(this.pos)
846
+ } else {
847
+ hasKeyword = false
848
+ }
849
+ }
850
+
851
+ if (hasKeyword && value === '.') {
852
+ do {
853
+ this.pos++
854
+ if (this.pos < this.SOURCE_LENGTH) {
855
+ value = this.SOURCE.charAt(this.pos)
856
+ } else {
857
+ hasKeyword = false
858
+ }
859
+ } while (hasKeyword && value >= '0' && value <= '9')
860
+ const str = this.SOURCE.substring(oldPos, this.pos)
861
+ return new Token(TokenType.Double, parseFloat(str), sPos)
862
+ } else {
863
+ const str = this.SOURCE.substring(oldPos, this.pos)
864
+ return new Token(TokenType.Int, parseInt(str, 10), sPos)
865
+ }
866
+ } else if ((value >= 'a' && value <= 'z') || (value >= 'A' && value <= 'Z') || value === '_' || /[\u4e00-\u9fa5]/.test(value)) {
867
+ const oldPos = this.pos
868
+ while (hasKeyword && ((value >= 'a' && value <= 'z') || (value >= 'A' && value <= 'Z') || (value >= '0' && value <= '9') || value === '_' || /[\u4e00-\u9fa5]/.test(value))) {
869
+ this.pos++
870
+ if (this.pos < this.SOURCE_LENGTH) {
871
+ value = this.SOURCE.charAt(this.pos)
872
+ } else {
873
+ hasKeyword = false
874
+ }
875
+ }
876
+ const str = this.SOURCE.substring(oldPos, this.pos)
877
+ switch (str) {
878
+ case 'false':
879
+ case 'true':
880
+ return new Token(TokenType.Bool, Boolean(str), sPos)
881
+ case 'null':
882
+ return new Token(TokenType.Null, null, sPos)
883
+ default:
884
+ return new Token(TokenType.Identy, str, sPos)
885
+ }
886
+ } else if ((value === '&' && this.SOURCE.charAt(this.pos + 1) === '&') || (value === '|' && this.SOURCE.charAt(this.pos + 1) === '|')) {
887
+ const str = this.SOURCE.substring(this.pos, this.pos + 2)
888
+ this.pos += 2
889
+ return new Token(TokenType.Oper, str, sPos)
890
+ } else if (['+', '-', '*', '/', '%', '>', '<', '!'].includes(value)) {
891
+ let str = ''
892
+ if (this.SOURCE.charAt(this.pos + 1) === '=') {
893
+ str = this.SOURCE.substring(this.pos, this.pos + 2)
894
+ this.pos += 2
895
+ } else {
896
+ str = this.SOURCE.substring(this.pos, this.pos + 1)
897
+ this.pos += 1
898
+ }
899
+ return new Token(TokenType.Oper, str, sPos)
900
+ } else if (value === '=') {
901
+ let str
902
+ if (this.SOURCE.charAt(this.pos + 1) === '=' || this.SOURCE.charAt(this.pos + 1) === '>') {
903
+ str = this.SOURCE.substring(this.pos, this.pos + 2)
904
+ this.pos += 2
905
+ } else {
906
+ str = this.SOURCE.substring(this.pos, this.pos + 1)
907
+ this.pos += 1
908
+ }
909
+ return new Token(TokenType.Oper, str, sPos)
910
+ } else if ('()[],;.:@{}"$'.includes(value)) {
911
+ if (value === '$' || value === '\"') {
912
+ this.inStrings.push(false)
913
+ this.inString = true
914
+ } else if ((value === '{' || value === '}') && this.inStrings.length) {
915
+ if (value === '{') {
916
+ this.inStrings.push(false)
917
+ this.inString = false
918
+ } else {
919
+ this.inString = this.inStrings.pop()
920
+ }
921
+ }
922
+ const str = this.SOURCE.substring(this.pos, this.pos + 1)
923
+ this.pos += 1
924
+ return new Token(TokenType.Oper, str, sPos)
925
+ } else {
926
+ throw new Error(`Invalid token: '${value}'`)
927
+ }
928
+ }
929
+
930
+ throw new Error('Unknown error while parsing.')
931
+ }
932
+ }