vue2-client 1.16.28 → 1.16.30

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 (321) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.apply +19 -19
  3. package/.env.gaslink +19 -19
  4. package/.env.his +19 -19
  5. package/.env.liuli +20 -20
  6. package/.env.scada +19 -19
  7. package/.eslintrc.js +90 -90
  8. package/CHANGELOG.md +824 -824
  9. package/Components.md +60 -60
  10. package/docs/LowCode/lowcode.md +155 -155
  11. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  12. package/docs/index.md +30 -30
  13. package/index.js +31 -31
  14. package/jest-transform-stub.js +8 -8
  15. package/jest.setup.js +7 -7
  16. package/jsconfig.json +19 -19
  17. package/package.json +1 -1
  18. package/public/his/editor/editor.html +51 -51
  19. package/public/his/editor/mock/bind_data.html +779 -779
  20. package/public/his/editor/mock/data_table.html +40 -40
  21. package/public/his/editor/mock/sign.html +75 -75
  22. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  23. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  24. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  25. package/public/his/editor/vender/date97/calendar.js +4 -4
  26. package/public/his/editor/vender/date97/lang/en.js +13 -13
  27. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  28. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  29. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  30. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  31. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  32. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  33. package/public/his/editor/vender/diff.js +1627 -1627
  34. package/public/his/editor/vender/editor.js +1 -1
  35. package/public/his/editor/vender/fabric.js +31187 -31187
  36. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  37. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  38. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  39. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  40. package/public/his/editor/vender/mui/mui.min.css +4 -4
  41. package/public/his/editor/vender/mui/mui.min.js +5 -5
  42. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  43. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  44. package/public/his/editor/vender/qrcode.js +7 -7
  45. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  46. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  47. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  48. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  49. package/public/his/editor/vender/validator.js +5094 -5094
  50. package/public/his/editor/vender/weui/weui.css +5659 -5659
  51. package/public/his/editor/vender/weui/weui.min.css +4 -4
  52. package/public/his/editor/vender/weui/weui.min.js +11 -11
  53. package/src/assets/img/querySlotDemo.svg +15 -15
  54. package/src/assets/svg/badtwo.svg +1 -1
  55. package/src/assets/svg/goodtwo.svg +1 -1
  56. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  57. package/src/base-client/components/AI/demo.vue +31 -31
  58. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  59. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  60. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  61. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  62. package/src/base-client/components/common/CitySelect/index.js +3 -3
  63. package/src/base-client/components/common/CitySelect/index.md +109 -109
  64. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  65. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  66. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  67. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  68. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  69. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  70. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  71. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  72. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  73. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  74. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  75. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  76. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  77. package/src/base-client/components/common/HIS/HForm/HForm.vue +1 -1
  78. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  79. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  80. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  81. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  82. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  83. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  84. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  85. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  86. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  87. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  88. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  89. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  90. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  91. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  92. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  93. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  94. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  95. package/src/base-client/components/common/Recording/index.js +3 -3
  96. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  97. package/src/base-client/components/common/Tree/index.js +2 -2
  98. package/src/base-client/components/common/Upload/index.js +3 -3
  99. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  100. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  101. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  102. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  103. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  104. package/src/base-client/components/common/XAddReport/index.js +3 -3
  105. package/src/base-client/components/common/XAddReport/index.md +56 -56
  106. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  107. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  108. package/src/base-client/components/common/XButtons/index.js +3 -3
  109. package/src/base-client/components/common/XButtons/index.md +61 -61
  110. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  111. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  112. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  113. package/src/base-client/components/common/XDataCard/index.js +3 -3
  114. package/src/base-client/components/common/XDataCard/index.md +1 -1
  115. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  116. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  117. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  118. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  119. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  120. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  121. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  122. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  123. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  124. package/src/base-client/components/common/XForm/index.md +178 -178
  125. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  126. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  127. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  128. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  129. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  130. package/src/base-client/components/common/XFormTable/index.md +92 -92
  131. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  132. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  133. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  134. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  135. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  136. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  137. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  138. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  139. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  140. package/src/base-client/components/common/XPrint/index.vue +97 -97
  141. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  142. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  143. package/src/base-client/components/common/XReport/index.js +3 -3
  144. package/src/base-client/components/common/XReport/print.js +186 -186
  145. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  146. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +8 -3
  147. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  148. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  149. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  150. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  151. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  152. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  153. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  154. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  155. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  156. package/src/base-client/components/common/XStepView/index.js +3 -3
  157. package/src/base-client/components/common/XStepView/index.md +31 -31
  158. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  159. package/src/base-client/components/common/XTab/index.js +3 -3
  160. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  161. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  162. package/src/base-client/components/common/XTable/index.md +255 -255
  163. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  164. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  165. package/src/base-client/components/common/XTree/index.js +3 -3
  166. package/src/base-client/components/common/XTree/index.md +36 -36
  167. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  168. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  169. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  170. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  171. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  172. package/src/base-client/components/index.js +51 -51
  173. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  174. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  175. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  176. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  177. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  178. package/src/base-client/plugins/Config.js +19 -19
  179. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  180. package/src/base-client/plugins/Recording.js +258 -258
  181. package/src/base-client/plugins/index.js +23 -23
  182. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  183. package/src/components/Charts/Bar.vue +62 -62
  184. package/src/components/Charts/ChartCard.vue +134 -134
  185. package/src/components/Charts/Liquid.vue +67 -67
  186. package/src/components/Charts/MiniArea.vue +39 -39
  187. package/src/components/Charts/MiniBar.vue +39 -39
  188. package/src/components/Charts/MiniProgress.vue +75 -75
  189. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  190. package/src/components/Charts/Radar.vue +68 -68
  191. package/src/components/Charts/RankList.vue +77 -77
  192. package/src/components/Charts/TagCloud.vue +113 -113
  193. package/src/components/Charts/TransferBar.vue +64 -64
  194. package/src/components/Charts/Trend.vue +82 -82
  195. package/src/components/Charts/chart.less +12 -12
  196. package/src/components/Charts/smooth.area.less +13 -13
  197. package/src/components/CodeMirror/inedx.vue +118 -118
  198. package/src/components/CodeMirror/setting.js +40 -40
  199. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  200. package/src/components/NumberInfo/index.js +3 -3
  201. package/src/components/NumberInfo/index.less +54 -54
  202. package/src/components/NumberInfo/index.md +43 -43
  203. package/src/components/card/ChartCard.vue +79 -79
  204. package/src/components/chart/Bar.vue +60 -60
  205. package/src/components/chart/MiniArea.vue +67 -67
  206. package/src/components/chart/MiniBar.vue +59 -59
  207. package/src/components/chart/MiniProgress.vue +57 -57
  208. package/src/components/chart/Radar.vue +80 -80
  209. package/src/components/chart/RankingList.vue +60 -60
  210. package/src/components/chart/Trend.vue +79 -79
  211. package/src/components/chart/index.less +9 -9
  212. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  213. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  214. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  215. package/src/components/checkbox/index.js +9 -9
  216. package/src/components/exception/ExceptionPage.vue +70 -70
  217. package/src/components/g2Charts/constants.js +202 -202
  218. package/src/components/g2Charts/demo.vue +808 -808
  219. package/src/components/g2Charts/designer.vue +228 -228
  220. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  221. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  222. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  223. package/src/components/g2Charts/index.vue +397 -397
  224. package/src/components/index.js +36 -36
  225. package/src/components/input/IInput.vue +66 -66
  226. package/src/components/menu/SideMenu.vue +75 -75
  227. package/src/components/menu/menu.js +273 -273
  228. package/src/components/setting/Setting.vue +234 -234
  229. package/src/components/tool/AStepItem.vue +60 -60
  230. package/src/config/CreateQueryConfig.js +325 -325
  231. package/src/config/default/antd.config.js +89 -89
  232. package/src/config/default/setting.config.js +55 -55
  233. package/src/font-style/font.css +60 -60
  234. package/src/layouts/CommonLayout.vue +56 -56
  235. package/src/layouts/PageLayout.vue +151 -151
  236. package/src/layouts/SinglePageView.vue +136 -136
  237. package/src/layouts/header/AdminHeader.vue +132 -132
  238. package/src/layouts/header/HeaderNotice.vue +177 -177
  239. package/src/layouts/header/InstitutionDetail.vue +181 -181
  240. package/src/layouts/tabs/TabsHead.vue +189 -189
  241. package/src/lib.js +1 -1
  242. package/src/mock/extend/index.js +84 -84
  243. package/src/mock/goods/index.js +108 -108
  244. package/src/pages/DefaultExample/index.vue +77 -77
  245. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  246. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  247. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  248. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  249. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  250. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  251. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  252. package/src/pages/DynamicStatistics/index.vue +282 -282
  253. package/src/pages/Example/childIndex.vue +15 -15
  254. package/src/pages/Example/index.vue +30 -30
  255. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  256. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  257. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  258. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  259. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  260. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  261. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  262. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  263. package/src/pages/Recording/index.vue +77 -77
  264. package/src/pages/ServiceReview/index.vue +284 -284
  265. package/src/pages/SubExample/index.vue +26 -26
  266. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  267. package/src/pages/XReportView/index.vue +64 -64
  268. package/src/pages/XTreeOneProExample/index.vue +67 -67
  269. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  270. package/src/pages/login/Login.vue +379 -379
  271. package/src/pages/login/LoginV3.vue +389 -389
  272. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  273. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  274. package/src/pages/report/ReportTable.js +124 -124
  275. package/src/pages/resourceManage/orgListManage.vue +98 -98
  276. package/src/pages/system/dictionary/index.vue +44 -44
  277. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  278. package/src/pages/system/monitor/operLog/index.vue +37 -37
  279. package/src/pages/system/settings/modifyPassword.vue +117 -117
  280. package/src/pages/system/ticket/index.vue +480 -480
  281. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  282. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  283. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  284. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  285. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  286. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  287. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  288. package/src/plugins/EventLogPlugin.js +33 -33
  289. package/src/plugins/FindParentsData.js +17 -17
  290. package/src/router/async/config.async.js +35 -35
  291. package/src/router/index.js +27 -27
  292. package/src/services/DataModel.js +30 -30
  293. package/src/services/LodopFuncs.js +137 -137
  294. package/src/services/api/TicketDetailsViewApi.js +46 -46
  295. package/src/services/api/cas.js +79 -79
  296. package/src/services/api/common.js +350 -346
  297. package/src/services/api/entity.js +18 -18
  298. package/src/services/api/index.js +17 -17
  299. package/src/store/modules/account.js +115 -115
  300. package/src/store/modules/index.js +5 -5
  301. package/src/store/modules/lowCode.js +33 -33
  302. package/src/store/modules/setting.js +119 -119
  303. package/src/theme/default/style.less +58 -58
  304. package/src/utils/authority-utils.js +85 -85
  305. package/src/utils/errorCode.js +6 -6
  306. package/src/utils/formatter.js +74 -74
  307. package/src/utils/htmlToPDF.js +108 -108
  308. package/src/utils/htmlToPDFApi.js +5 -5
  309. package/src/utils/login.js +188 -188
  310. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  311. package/src/utils/lowcode/lowcodeLog.js +29 -29
  312. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  313. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  314. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  315. package/src/utils/map-utils.js +47 -47
  316. package/src/utils/reg.js +95 -95
  317. package/src/utils/runEvalFunction.js +14 -14
  318. package/src/utils/theme-color-replacer-extend.js +92 -92
  319. package/src/utils/util.js +329 -329
  320. package/src/utils/waterMark.js +31 -31
  321. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,591 +1,591 @@
1
- <template>
2
- <a-card
3
- class="question-history"
4
- id="question-history"
5
- size="small"
6
- :bordered="false"
7
- :bodyStyle="{ height:'100%', overflowY: 'auto'}">
8
- <a-tabs v-model="activeKey" :tabBarStyle="{ textAlign: 'center',height:'100%' }" tabPosition="top">
9
- <a-tab-pane key="1" tab="对话历史">
10
- <a-list item-layout="horizontal" :data-source="questions">
11
- <a-list-item
12
- slot="renderItem"
13
- :class="renderItem.sql ? (renderItem.uuid === currentuuid ? 'question-history-active' : 'question-history-inactive') : (renderItem.uuid === currentuuid ? 'question-history-active-bug' : 'question-history-inactive-bug')"
14
- slot-scope="renderItem,index"
15
- @click="handleOpenFavorite(renderItem)">
16
- <a-list-item-meta
17
- :title="renderItem.question"
18
- :description="renderItem.date"
19
- />
20
- <a-space>
21
- <a-tooltip title="查看元数据">
22
- <a-icon
23
- v-if="renderItem.data"
24
- type="eye"
25
- @click.stop="openMetaDataModal(renderItem)"/>
26
- </a-tooltip>
27
- <span>&emsp;</span>
28
- <a-tooltip title="删除对话">
29
- <a-icon
30
- type="delete"
31
- theme="filled"
32
- class="delClass"
33
- @click.stop="delQuestion(renderItem,index)"/>
34
- </a-tooltip>
35
- <span>&emsp;</span>
36
- <a-tooltip :title="renderItem.isFavorite ? '取消收藏' : '收藏'" v-if="renderItem.sql">
37
- <a-icon
38
- type="star"
39
- :class="renderItem.isFavorite ? 'startActive' : 'startInactive'"
40
- @click.stop="toFavorites(renderItem,index,'lib')"
41
- :theme=" renderItem.isFavorite ? 'filled': 'twoTone'"
42
- two-tone-color="#FFD700"/>
43
- </a-tooltip>
44
- <a-tooltip title="重新查询" v-else>
45
- <a-icon
46
- @click.stop="reTrySearch(renderItem, index)"
47
- type="sync"
48
- class="reSearch"
49
- title="重新查询"/>
50
- </a-tooltip>
51
- </a-space>
52
- </a-list-item>
53
- </a-list>
54
- </a-tab-pane>
55
- <a-tab-pane key="2" tab="收藏的对话" force-render>
56
- <a-list item-layout="horizontal" :data-source="favorites">
57
- <a-list-item
58
- slot="renderItem"
59
- slot-scope="renderItem, index"
60
- :class="renderItem.uuid === currentuuid ? 'question-history-active' : 'question-history-inactive'"
61
- @click="handleOpenFavorite(renderItem, true)">
62
- <a-list-item-meta
63
- :title="renderItem.question"
64
- :description="renderItem.date"
65
- />
66
- <a-space>
67
- <a-tooltip title="查看元数据">
68
- <a-icon
69
- v-if="renderItem.data"
70
- type="eye"
71
- @click.stop="openMetaDataModal(renderItem)"/>
72
- </a-tooltip>
73
- <span>&emsp;</span>
74
- <a-icon
75
- type="star"
76
- :class="renderItem.isFavorite ? 'startActive' : 'startInactive'"
77
- @click.stop="delFavorites(renderItem,index)"
78
- :theme=" renderItem.isFavorite ? 'filled': 'twoTone'"
79
- two-tone-color="#FFD700"/>
80
- </a-space>
81
- </a-list-item>
82
- </a-list>
83
- </a-tab-pane>
84
- <a-tab-pane key="3" tab="对话库">
85
- <a-button type="dashed" class="pullQuestion" :loading="pullQuestionLoading" @click="pullQuestion">
86
- 拉取对话
87
- </a-button>
88
- <a-list item-layout="horizontal" :data-source="questionsLib">
89
- <a-list-item
90
- slot="renderItem"
91
- class="questionItem"
92
- :class="[renderItem.sql ? (renderItem.uuid === currentuuid ? 'question-history-active' : 'question-history-inactive') : (renderItem.uuid === currentuuid ? 'question-history-active-bug' : 'question-history-inactive-bug'),
93
- index===0 || questionsLib[index].date !== questionsLib[index-1].date ? 'mgtop-20' : '']"
94
- slot-scope="renderItem,index"
95
- @click="handleOnlyOpen(renderItem)">
96
- <a-divider v-if="index===0 || questionsLib[index].date !== questionsLib[index-1].date" class="questionItemDivider">
97
- {{ timeAgo(renderItem.date) }}
98
- </a-divider>
99
- <a-list-item-meta
100
- :description="renderItem.date"
101
- >
102
- <span slot="title">
103
- {{ renderItem.question }}
104
- <br/>
105
- <span class="evaluation" v-if="icons[renderItem.evaluation]">
106
- <a-icon
107
- :type="icons[renderItem.evaluation].icon"
108
- theme="twoTone"
109
- style="font-size: 1rem"
110
- :two-tone-color="icons[renderItem.evaluation].color"/>
111
- 【{{ icons[renderItem.evaluation].text }}】
112
- </span>
113
- <span class="evaluation" v-else>
114
- <a-icon type="message" style="font-size: 1rem" theme="twoTone" two-tone-color="#999"/>
115
- 未评价
116
- </span>
117
- </span>
118
- </a-list-item-meta>
119
- <a-space>
120
- <a-tooltip title="查看元数据">
121
- <a-icon
122
- v-if="renderItem.data"
123
- type="eye"
124
- @click.stop="openMetaDataModal(renderItem)"/>
125
- </a-tooltip>
126
- <span>&emsp;</span>
127
- <a-tooltip :title="renderItem.isFavorite ? '取消收藏' : '收藏'" v-if="renderItem.sql">
128
- <a-icon
129
- type="star"
130
- :class="renderItem.isFavorite ? 'startActive' : 'startInactive'"
131
- @click.stop="libToFavorites(renderItem,index)"
132
- :theme=" renderItem.isFavorite ? 'filled': 'twoTone'"
133
- two-tone-color="#FFD700"/>
134
- </a-tooltip>
135
- <a-tooltip title="重新查询" v-else>
136
- <a-icon
137
- @click.stop="reTrySearch(renderItem, index)"
138
- type="sync"
139
- class="reSearch"
140
- title="重新查询"/>
141
- </a-tooltip>
142
- </a-space>
143
- </a-list-item>
144
- </a-list>
145
- </a-tab-pane>
146
- </a-tabs>
147
- <a-modal
148
- width="1200px"
149
- title="元数据"
150
- @cancel="handleCancel"
151
- :visible="metaDataModalVisible"
152
- >
153
- <a-descriptions :column="2" bordered>
154
- <a-descriptions-item label="uuid">
155
- {{ item.uuid }}
156
- </a-descriptions-item>
157
- <a-descriptions-item label="问题">
158
- {{ item.question }}
159
- </a-descriptions-item>
160
- <a-descriptions-item label="类型">
161
- {{ item.queryType }}
162
- </a-descriptions-item>
163
- <a-descriptions-item label="filterTable">
164
- {{ item.filterTable }}
165
- </a-descriptions-item>
166
- <a-descriptions-item label="relationTable">
167
- {{ item.relationTable }}
168
- </a-descriptions-item>
169
- <a-descriptions-item label="similarTable">
170
- {{ item.similarTable }}
171
- </a-descriptions-item>
172
- <a-descriptions-item label="prompt">
173
- {{ item.prompt }}
174
- </a-descriptions-item>
175
- <a-descriptions-item label="sql">
176
- {{ item.sql }}
177
- </a-descriptions-item>
178
- <a-descriptions-item label="oldSql">
179
- {{ item.oldSql }}
180
- </a-descriptions-item>
181
- <a-descriptions-item label="查询日期">
182
- {{ item.date }}
183
- </a-descriptions-item>
184
- </a-descriptions>
185
- </a-modal>
186
- </a-card>
187
- </template>
188
-
189
- <script>
190
- import { indexedDB } from '@vue2-client/utils/indexedDB'
191
- import { formatDate } from '@vue2-client/utils/util'
192
- import { post } from '@vue2-client/services/api'
193
-
194
- export default {
195
- props: {
196
- currentuuid: {
197
- type: String,
198
- default: ''
199
- }
200
- },
201
- data () {
202
- return {
203
- activeKey: '1',
204
- actions: [
205
- { type: 'star-o', text: '156' },
206
- { type: 'like-o', text: '156' },
207
- { type: 'message', text: '2' },
208
- ],
209
- questions: [], // 你的问题历史
210
- favorites: [], // 你的收藏问题
211
- questionsLib: [], // 对话库
212
- icons: {
213
- 0: {
214
- icon: 'like',
215
- text: '满意'
216
- },
217
- 1: {
218
- icon: 'dislike',
219
- text: '不满意',
220
- color: '#FF4F53'
221
- },
222
- 2: {
223
- icon: 'dislike',
224
- text: '不满意',
225
- color: '#FF4F53'
226
- }
227
- }, // 对话库
228
- // 元数据窗口
229
- metaDataModalVisible: false,
230
- item: {},
231
- pullQuestionLoading: false
232
- }
233
- },
234
- mounted () {
235
- this.loadData()
236
- },
237
- methods: {
238
- // 根据时间yyyy-mm-dd hh24:mi:ss判断是刚刚?今天?昨天?还是更早?
239
- timeAgo (time) {
240
- const now = new Date()
241
- const date = new Date(time)
242
- const diff = now - date
243
- const day = 24 * 60 * 60 * 1000
244
- if (diff < 60 * 60 * 1000) {
245
- return '刚刚'
246
- } else if (diff < day) {
247
- return '今天'
248
- } else if (diff < day * 2) {
249
- return '昨天'
250
- } else {
251
- return time.substring(0, 10)
252
- }
253
- },
254
- pullQuestion () {
255
- this.pullQuestionLoading = true
256
- post('/api/af-system/logic/openapi/getCommonData', {
257
- type: 'ai-question',
258
- content: ''
259
- }).then(res => {
260
- const _questionsLib = []
261
- res.forEach(item => {
262
- const _item = JSON.parse(item.f_json)
263
- if (_item.data && _item.data.length) {
264
- if (!this.questionsLib.some(_ => _.uuid === _item.uuid)) {
265
- _item.date = formatDate('now')
266
- _questionsLib.push(_item)
267
- indexedDB.add('question-lib-' + _item.uuid, _item)
268
- }
269
- }
270
- })
271
- // _questionsLib 根据问题question文字排序
272
- _questionsLib.sort((a, b) => a.question.localeCompare(b.question))
273
- // 把_questionsLib 放到 questionsLib 上面
274
- this.questionsLib = _questionsLib.concat(this.questionsLib)
275
- this.pullQuestionLoading = false
276
- }).catch(e => {
277
- this.pullQuestionLoading = false
278
- })
279
- },
280
- loadData () {
281
- this.questions = []
282
- this.favorites = []
283
- indexedDB.getAll((data) => {
284
- // 遍历data,将question和favorites分别赋值给questions和favorites
285
- for (const datum of data) {
286
- if (datum.key.includes('question-lib')) {
287
- this.questionsLib.push(datum.data)
288
- } else if (datum.key.includes('favorites')) {
289
- this.favorites.push(datum.data)
290
- } else if (datum.key.includes('question')) {
291
- this.questions.push(datum.data)
292
- }
293
- }
294
- this.questions.sort((a, b) => new Date(b.date) - new Date(a.date))
295
- this.favorites.sort((a, b) => new Date(b.date) - new Date(a.date))
296
- this.questionsLib.sort((a, b) => new Date(b.date) - new Date(a.date))
297
- }
298
- )
299
- },
300
- handleOpenFavorite (item, reSearch) {
301
- this.$emit('handleOpenFavorite', item, reSearch)
302
- },
303
- handleOnlyOpen (item) {
304
- this.$emit('handleOnlyOpen', item)
305
- },
306
- submitEvaluationLib (value, uuid) {
307
- // 根据uuid 在 questionslib里卖弄找到这个对象
308
- const item = this.questionsLib.find(item => item.uuid === uuid)
309
- const key = 'question-lib-' + uuid
310
- // 收藏状态不存储到库里
311
- delete item.isFavorite
312
- const content = Object.assign(item, {
313
- evaluation: value
314
- })
315
- // 使用 content 替换 item
316
- this.questionsLib = this.questionsLib.map(_item => {
317
- if (_item.uuid === uuid) {
318
- _item = content
319
- }
320
- return _item
321
- })
322
- if (content.sql) {
323
- // 处理sql的单引号
324
- content.sql = content.sql.replaceAll(/'/g, "''")
325
- }
326
- if (content.oldSql) {
327
- // 处理sql的单引号
328
- content.oldSql = content.oldSql.replaceAll(/'/g, "''")
329
- }
330
- console.log(content)
331
- // 保存到数据库中
332
- post('/api/af-system/logic/openapi/updateCommonData', {
333
- type: 'ai-question',
334
- content: uuid,
335
- newContent: content
336
- }).then(res => {
337
- this.$message.success('评论成功')
338
- indexedDB.delete(key)
339
- indexedDB.add(key, content)
340
- })
341
- },
342
- reTrySearch (item, index) {
343
- this.delQuestion(item, index)
344
- this.$emit('handleSearch', item.question, null, item.uuid)
345
- },
346
- add (question) {
347
- // 检查 questions 数组中是否已经存在这个问题 替换掉
348
- const index = this.questions.findIndex(item => item.uuid === question.uuid)
349
- const index2 = this.favorites.findIndex(item => item.uuid === question.uuid)
350
- if (index2 !== -1) {
351
- return
352
- }
353
- if (index !== -1) {
354
- if (question.data) {
355
- this.questions.splice(index, 1, Object.assign(question, { date: this.questions[index].date }))
356
- } else {
357
- this.questions.splice(index, 1, question)
358
- }
359
- this.updateQuestion(question)
360
- } else {
361
- this.questions.push(question)
362
- this.handleOpenFavorite(question)
363
- indexedDB.add('question-' + question.uuid, question)
364
- this.loadData()
365
- }
366
- },
367
- updateQuestion (question) {
368
- console.log(question)
369
- const questionKey = 'question-' + question.uuid
370
- indexedDB.delete(questionKey)
371
- indexedDB.add(questionKey, question)
372
- },
373
- openMetaDataModal (item) {
374
- this.item = item
375
- this.metaDataModalVisible = true
376
- },
377
- handleCancel () {
378
- this.metaDataModalVisible = false
379
- },
380
- toFavorites (question, index) {
381
- this.questions[index].isFavorite = !this.questions[index].isFavorite
382
- if (this.questions[index].isFavorite) {
383
- const key = 'favorites-' + question.uuid
384
- question.date = formatDate('now')
385
- question.isFavorite = true
386
- indexedDB.add(key, question)
387
- this.favorites.push(question)
388
- this.$message.success('收藏成功')
389
- } else {
390
- // 根据 uuid 删除 favorites 中的对应项
391
- this.favorites = this.favorites.filter(item => item.uuid !== question.uuid).sort((a, b) => new Date(b.date) - new Date(a.date))
392
- // 删除收藏的储存
393
- const key = 'favorites-' + question.uuid
394
- indexedDB.delete(key)
395
- }
396
- this.updateQuestion(question)
397
- },
398
- libToFavorites (question, index) {
399
- this.questionsLib[index].isFavorite = !this.questionsLib[index].isFavorite
400
- this.questionsLib = JSON.parse(JSON.stringify(this.questionsLib))
401
- if (this.questionsLib[index].isFavorite) {
402
- const key = 'favorites-' + question.uuid
403
- question.isFavorite = true
404
- // 避免从其他地方收藏了这个 uuid
405
- indexedDB.delete(key)
406
- indexedDB.add(key, question)
407
- this.favorites.push(Object.assign({}, question, { date: formatDate('now') }))
408
- this.$message.success('收藏成功')
409
- } else {
410
- // 根据 uuid 删除 favorites 中的对应项
411
- this.favorites = this.favorites.filter(item => item.uuid !== question.uuid).sort((a, b) => new Date(b.date) - new Date(a.date))
412
- // 删除收藏的储存
413
- const key = 'favorites-' + question.uuid
414
- indexedDB.delete(key)
415
- }
416
-
417
- const questionKey = 'question-lib-' + question.uuid
418
- indexedDB.delete(questionKey)
419
- indexedDB.add(questionKey, this.questionsLib[index])
420
- },
421
- delQuestion (item, index) {
422
- // 删除对话历史
423
- this.questions.splice(index, 1)
424
- const key = 'question-' + item.uuid
425
- indexedDB.delete(key)
426
- // 删除收藏
427
- const favoritesKey = 'favorites-' + item.uuid
428
- indexedDB.delete(favoritesKey)
429
- },
430
- delFavorites (item, index) {
431
- this.favorites.splice(index, 1)
432
- // 根据uuid寻找 questions 中的对应项
433
- // 重新赋值给 questions
434
- this.questions = this.questions.map(_item => {
435
- if (_item.uuid === item.uuid) {
436
- _item.isFavorite = false
437
- }
438
- return _item
439
- })
440
- const key = 'favorites-' + item.uuid
441
- indexedDB.delete(key)
442
- this.$message.success('取消收藏成功')
443
- // 如果favorites为空,切换到对话历史
444
- if (this.favorites.length === 0) {
445
- this.activeKey = '1'
446
- }
447
- this.updateQuestion(item)
448
- }
449
- ,
450
- }
451
- }
452
- </script>
453
-
454
- <style scoped lang="less">
455
-
456
- #question-history {
457
-
458
- margin-right: 10px;
459
- height: 100%;
460
- border-radius: 8px;
461
-
462
- .question-history-active-bug {
463
- border-left: 4px solid #FF0036;
464
- border-radius: 4px;
465
- padding: 18px 18px 18px 14px;
466
- background-color: rgba(#ff0000, 0.04);
467
- }
468
-
469
- .question-history-active {
470
- border-left: 4px solid #1890FF;
471
- border-radius: 4px;
472
- padding: 18px 18px 18px 14px;
473
- }
474
-
475
- .question-history-inactive-bug {
476
- border-radius: 4px;
477
- padding: 18px;
478
- background-color: rgba(#ff0000, 0.04);
479
- }
480
-
481
- .question-history-inactive {
482
- border-radius: 4px;
483
- padding: 18px;
484
- }
485
-
486
- .ant-list-item-meta /deep/ {
487
- width: 60%;
488
- }
489
-
490
- .ant-list-item-meta-content /deep/ {
491
- width: 98%;
492
- }
493
-
494
- .ant-list-item-meta-title /deep/ {
495
- width: 90%;
496
- white-space: nowrap;
497
- overflow: hidden;
498
- text-overflow: ellipsis;
499
- }
500
-
501
- .ant-card {
502
- height: 100%;
503
- overflow-y: auto;
504
- }
505
-
506
- .startActive {
507
- color: #FFD700;
508
- font-size: 1rem;
509
- }
510
-
511
- .startInactive {
512
- font-size: 1rem;
513
- }
514
-
515
- .delClass {
516
- font-size: 1rem;
517
- color: #777;
518
- }
519
-
520
- .reSearch {
521
- font-size: 1rem;
522
- color: #1890FF;
523
- }
524
-
525
- .reSearch:hover {
526
- animation: rotate 0.5s ease-in-out both;
527
- }
528
-
529
- @keyframes rotate {
530
- 0% {
531
- transform: rotate(0deg);
532
- }
533
- 100% {
534
- transform: rotate(180deg);
535
- }
536
- }
537
-
538
- .startActive, .startInactive, .reSearch {
539
- transition: transform 0.1s;
540
- }
541
-
542
- .startActive:hover, .startInactive:hover {
543
- animation: shake 0.5s ease-in-out both;
544
- }
545
-
546
- @keyframes shake {
547
- 0% {
548
- transform: rotate(0deg);
549
- }
550
- 25% {
551
- transform: rotate(-20deg);
552
- }
553
- 50% {
554
- transform: rotate(0deg);
555
- }
556
- 75% {
557
- transform: rotate(20deg);
558
- }
559
- 100% {
560
- transform: rotate(0deg);
561
- }
562
- }
563
-
564
- .pullQuestion {
565
- width: 100%;
566
- margin-bottom: 10px;
567
- }
568
-
569
- .evaluation {
570
-
571
- }
572
-
573
- .mgtop-20 {
574
- margin-top: 20px;
575
- }
576
-
577
- .questionItemDivider {
578
- position: absolute;
579
- top: -25px
580
- }
581
-
582
- .questionItem {
583
- position: relative;
584
- }
585
- }
586
-
587
- .scroller {
588
- height: 100%;
589
- overflow-y: auto;
590
- }
591
- </style>
1
+ <template>
2
+ <a-card
3
+ class="question-history"
4
+ id="question-history"
5
+ size="small"
6
+ :bordered="false"
7
+ :bodyStyle="{ height:'100%', overflowY: 'auto'}">
8
+ <a-tabs v-model="activeKey" :tabBarStyle="{ textAlign: 'center',height:'100%' }" tabPosition="top">
9
+ <a-tab-pane key="1" tab="对话历史">
10
+ <a-list item-layout="horizontal" :data-source="questions">
11
+ <a-list-item
12
+ slot="renderItem"
13
+ :class="renderItem.sql ? (renderItem.uuid === currentuuid ? 'question-history-active' : 'question-history-inactive') : (renderItem.uuid === currentuuid ? 'question-history-active-bug' : 'question-history-inactive-bug')"
14
+ slot-scope="renderItem,index"
15
+ @click="handleOpenFavorite(renderItem)">
16
+ <a-list-item-meta
17
+ :title="renderItem.question"
18
+ :description="renderItem.date"
19
+ />
20
+ <a-space>
21
+ <a-tooltip title="查看元数据">
22
+ <a-icon
23
+ v-if="renderItem.data"
24
+ type="eye"
25
+ @click.stop="openMetaDataModal(renderItem)"/>
26
+ </a-tooltip>
27
+ <span>&emsp;</span>
28
+ <a-tooltip title="删除对话">
29
+ <a-icon
30
+ type="delete"
31
+ theme="filled"
32
+ class="delClass"
33
+ @click.stop="delQuestion(renderItem,index)"/>
34
+ </a-tooltip>
35
+ <span>&emsp;</span>
36
+ <a-tooltip :title="renderItem.isFavorite ? '取消收藏' : '收藏'" v-if="renderItem.sql">
37
+ <a-icon
38
+ type="star"
39
+ :class="renderItem.isFavorite ? 'startActive' : 'startInactive'"
40
+ @click.stop="toFavorites(renderItem,index,'lib')"
41
+ :theme=" renderItem.isFavorite ? 'filled': 'twoTone'"
42
+ two-tone-color="#FFD700"/>
43
+ </a-tooltip>
44
+ <a-tooltip title="重新查询" v-else>
45
+ <a-icon
46
+ @click.stop="reTrySearch(renderItem, index)"
47
+ type="sync"
48
+ class="reSearch"
49
+ title="重新查询"/>
50
+ </a-tooltip>
51
+ </a-space>
52
+ </a-list-item>
53
+ </a-list>
54
+ </a-tab-pane>
55
+ <a-tab-pane key="2" tab="收藏的对话" force-render>
56
+ <a-list item-layout="horizontal" :data-source="favorites">
57
+ <a-list-item
58
+ slot="renderItem"
59
+ slot-scope="renderItem, index"
60
+ :class="renderItem.uuid === currentuuid ? 'question-history-active' : 'question-history-inactive'"
61
+ @click="handleOpenFavorite(renderItem, true)">
62
+ <a-list-item-meta
63
+ :title="renderItem.question"
64
+ :description="renderItem.date"
65
+ />
66
+ <a-space>
67
+ <a-tooltip title="查看元数据">
68
+ <a-icon
69
+ v-if="renderItem.data"
70
+ type="eye"
71
+ @click.stop="openMetaDataModal(renderItem)"/>
72
+ </a-tooltip>
73
+ <span>&emsp;</span>
74
+ <a-icon
75
+ type="star"
76
+ :class="renderItem.isFavorite ? 'startActive' : 'startInactive'"
77
+ @click.stop="delFavorites(renderItem,index)"
78
+ :theme=" renderItem.isFavorite ? 'filled': 'twoTone'"
79
+ two-tone-color="#FFD700"/>
80
+ </a-space>
81
+ </a-list-item>
82
+ </a-list>
83
+ </a-tab-pane>
84
+ <a-tab-pane key="3" tab="对话库">
85
+ <a-button type="dashed" class="pullQuestion" :loading="pullQuestionLoading" @click="pullQuestion">
86
+ 拉取对话
87
+ </a-button>
88
+ <a-list item-layout="horizontal" :data-source="questionsLib">
89
+ <a-list-item
90
+ slot="renderItem"
91
+ class="questionItem"
92
+ :class="[renderItem.sql ? (renderItem.uuid === currentuuid ? 'question-history-active' : 'question-history-inactive') : (renderItem.uuid === currentuuid ? 'question-history-active-bug' : 'question-history-inactive-bug'),
93
+ index===0 || questionsLib[index].date !== questionsLib[index-1].date ? 'mgtop-20' : '']"
94
+ slot-scope="renderItem,index"
95
+ @click="handleOnlyOpen(renderItem)">
96
+ <a-divider v-if="index===0 || questionsLib[index].date !== questionsLib[index-1].date" class="questionItemDivider">
97
+ {{ timeAgo(renderItem.date) }}
98
+ </a-divider>
99
+ <a-list-item-meta
100
+ :description="renderItem.date"
101
+ >
102
+ <span slot="title">
103
+ {{ renderItem.question }}
104
+ <br/>
105
+ <span class="evaluation" v-if="icons[renderItem.evaluation]">
106
+ <a-icon
107
+ :type="icons[renderItem.evaluation].icon"
108
+ theme="twoTone"
109
+ style="font-size: 1rem"
110
+ :two-tone-color="icons[renderItem.evaluation].color"/>
111
+ 【{{ icons[renderItem.evaluation].text }}】
112
+ </span>
113
+ <span class="evaluation" v-else>
114
+ <a-icon type="message" style="font-size: 1rem" theme="twoTone" two-tone-color="#999"/>
115
+ 未评价
116
+ </span>
117
+ </span>
118
+ </a-list-item-meta>
119
+ <a-space>
120
+ <a-tooltip title="查看元数据">
121
+ <a-icon
122
+ v-if="renderItem.data"
123
+ type="eye"
124
+ @click.stop="openMetaDataModal(renderItem)"/>
125
+ </a-tooltip>
126
+ <span>&emsp;</span>
127
+ <a-tooltip :title="renderItem.isFavorite ? '取消收藏' : '收藏'" v-if="renderItem.sql">
128
+ <a-icon
129
+ type="star"
130
+ :class="renderItem.isFavorite ? 'startActive' : 'startInactive'"
131
+ @click.stop="libToFavorites(renderItem,index)"
132
+ :theme=" renderItem.isFavorite ? 'filled': 'twoTone'"
133
+ two-tone-color="#FFD700"/>
134
+ </a-tooltip>
135
+ <a-tooltip title="重新查询" v-else>
136
+ <a-icon
137
+ @click.stop="reTrySearch(renderItem, index)"
138
+ type="sync"
139
+ class="reSearch"
140
+ title="重新查询"/>
141
+ </a-tooltip>
142
+ </a-space>
143
+ </a-list-item>
144
+ </a-list>
145
+ </a-tab-pane>
146
+ </a-tabs>
147
+ <a-modal
148
+ width="1200px"
149
+ title="元数据"
150
+ @cancel="handleCancel"
151
+ :visible="metaDataModalVisible"
152
+ >
153
+ <a-descriptions :column="2" bordered>
154
+ <a-descriptions-item label="uuid">
155
+ {{ item.uuid }}
156
+ </a-descriptions-item>
157
+ <a-descriptions-item label="问题">
158
+ {{ item.question }}
159
+ </a-descriptions-item>
160
+ <a-descriptions-item label="类型">
161
+ {{ item.queryType }}
162
+ </a-descriptions-item>
163
+ <a-descriptions-item label="filterTable">
164
+ {{ item.filterTable }}
165
+ </a-descriptions-item>
166
+ <a-descriptions-item label="relationTable">
167
+ {{ item.relationTable }}
168
+ </a-descriptions-item>
169
+ <a-descriptions-item label="similarTable">
170
+ {{ item.similarTable }}
171
+ </a-descriptions-item>
172
+ <a-descriptions-item label="prompt">
173
+ {{ item.prompt }}
174
+ </a-descriptions-item>
175
+ <a-descriptions-item label="sql">
176
+ {{ item.sql }}
177
+ </a-descriptions-item>
178
+ <a-descriptions-item label="oldSql">
179
+ {{ item.oldSql }}
180
+ </a-descriptions-item>
181
+ <a-descriptions-item label="查询日期">
182
+ {{ item.date }}
183
+ </a-descriptions-item>
184
+ </a-descriptions>
185
+ </a-modal>
186
+ </a-card>
187
+ </template>
188
+
189
+ <script>
190
+ import { indexedDB } from '@vue2-client/utils/indexedDB'
191
+ import { formatDate } from '@vue2-client/utils/util'
192
+ import { post } from '@vue2-client/services/api'
193
+
194
+ export default {
195
+ props: {
196
+ currentuuid: {
197
+ type: String,
198
+ default: ''
199
+ }
200
+ },
201
+ data () {
202
+ return {
203
+ activeKey: '1',
204
+ actions: [
205
+ { type: 'star-o', text: '156' },
206
+ { type: 'like-o', text: '156' },
207
+ { type: 'message', text: '2' },
208
+ ],
209
+ questions: [], // 你的问题历史
210
+ favorites: [], // 你的收藏问题
211
+ questionsLib: [], // 对话库
212
+ icons: {
213
+ 0: {
214
+ icon: 'like',
215
+ text: '满意'
216
+ },
217
+ 1: {
218
+ icon: 'dislike',
219
+ text: '不满意',
220
+ color: '#FF4F53'
221
+ },
222
+ 2: {
223
+ icon: 'dislike',
224
+ text: '不满意',
225
+ color: '#FF4F53'
226
+ }
227
+ }, // 对话库
228
+ // 元数据窗口
229
+ metaDataModalVisible: false,
230
+ item: {},
231
+ pullQuestionLoading: false
232
+ }
233
+ },
234
+ mounted () {
235
+ this.loadData()
236
+ },
237
+ methods: {
238
+ // 根据时间yyyy-mm-dd hh24:mi:ss判断是刚刚?今天?昨天?还是更早?
239
+ timeAgo (time) {
240
+ const now = new Date()
241
+ const date = new Date(time)
242
+ const diff = now - date
243
+ const day = 24 * 60 * 60 * 1000
244
+ if (diff < 60 * 60 * 1000) {
245
+ return '刚刚'
246
+ } else if (diff < day) {
247
+ return '今天'
248
+ } else if (diff < day * 2) {
249
+ return '昨天'
250
+ } else {
251
+ return time.substring(0, 10)
252
+ }
253
+ },
254
+ pullQuestion () {
255
+ this.pullQuestionLoading = true
256
+ post('/api/af-system/logic/openapi/getCommonData', {
257
+ type: 'ai-question',
258
+ content: ''
259
+ }).then(res => {
260
+ const _questionsLib = []
261
+ res.forEach(item => {
262
+ const _item = JSON.parse(item.f_json)
263
+ if (_item.data && _item.data.length) {
264
+ if (!this.questionsLib.some(_ => _.uuid === _item.uuid)) {
265
+ _item.date = formatDate('now')
266
+ _questionsLib.push(_item)
267
+ indexedDB.add('question-lib-' + _item.uuid, _item)
268
+ }
269
+ }
270
+ })
271
+ // _questionsLib 根据问题question文字排序
272
+ _questionsLib.sort((a, b) => a.question.localeCompare(b.question))
273
+ // 把_questionsLib 放到 questionsLib 上面
274
+ this.questionsLib = _questionsLib.concat(this.questionsLib)
275
+ this.pullQuestionLoading = false
276
+ }).catch(e => {
277
+ this.pullQuestionLoading = false
278
+ })
279
+ },
280
+ loadData () {
281
+ this.questions = []
282
+ this.favorites = []
283
+ indexedDB.getAll((data) => {
284
+ // 遍历data,将question和favorites分别赋值给questions和favorites
285
+ for (const datum of data) {
286
+ if (datum.key.includes('question-lib')) {
287
+ this.questionsLib.push(datum.data)
288
+ } else if (datum.key.includes('favorites')) {
289
+ this.favorites.push(datum.data)
290
+ } else if (datum.key.includes('question')) {
291
+ this.questions.push(datum.data)
292
+ }
293
+ }
294
+ this.questions.sort((a, b) => new Date(b.date) - new Date(a.date))
295
+ this.favorites.sort((a, b) => new Date(b.date) - new Date(a.date))
296
+ this.questionsLib.sort((a, b) => new Date(b.date) - new Date(a.date))
297
+ }
298
+ )
299
+ },
300
+ handleOpenFavorite (item, reSearch) {
301
+ this.$emit('handleOpenFavorite', item, reSearch)
302
+ },
303
+ handleOnlyOpen (item) {
304
+ this.$emit('handleOnlyOpen', item)
305
+ },
306
+ submitEvaluationLib (value, uuid) {
307
+ // 根据uuid 在 questionslib里卖弄找到这个对象
308
+ const item = this.questionsLib.find(item => item.uuid === uuid)
309
+ const key = 'question-lib-' + uuid
310
+ // 收藏状态不存储到库里
311
+ delete item.isFavorite
312
+ const content = Object.assign(item, {
313
+ evaluation: value
314
+ })
315
+ // 使用 content 替换 item
316
+ this.questionsLib = this.questionsLib.map(_item => {
317
+ if (_item.uuid === uuid) {
318
+ _item = content
319
+ }
320
+ return _item
321
+ })
322
+ if (content.sql) {
323
+ // 处理sql的单引号
324
+ content.sql = content.sql.replaceAll(/'/g, "''")
325
+ }
326
+ if (content.oldSql) {
327
+ // 处理sql的单引号
328
+ content.oldSql = content.oldSql.replaceAll(/'/g, "''")
329
+ }
330
+ console.log(content)
331
+ // 保存到数据库中
332
+ post('/api/af-system/logic/openapi/updateCommonData', {
333
+ type: 'ai-question',
334
+ content: uuid,
335
+ newContent: content
336
+ }).then(res => {
337
+ this.$message.success('评论成功')
338
+ indexedDB.delete(key)
339
+ indexedDB.add(key, content)
340
+ })
341
+ },
342
+ reTrySearch (item, index) {
343
+ this.delQuestion(item, index)
344
+ this.$emit('handleSearch', item.question, null, item.uuid)
345
+ },
346
+ add (question) {
347
+ // 检查 questions 数组中是否已经存在这个问题 替换掉
348
+ const index = this.questions.findIndex(item => item.uuid === question.uuid)
349
+ const index2 = this.favorites.findIndex(item => item.uuid === question.uuid)
350
+ if (index2 !== -1) {
351
+ return
352
+ }
353
+ if (index !== -1) {
354
+ if (question.data) {
355
+ this.questions.splice(index, 1, Object.assign(question, { date: this.questions[index].date }))
356
+ } else {
357
+ this.questions.splice(index, 1, question)
358
+ }
359
+ this.updateQuestion(question)
360
+ } else {
361
+ this.questions.push(question)
362
+ this.handleOpenFavorite(question)
363
+ indexedDB.add('question-' + question.uuid, question)
364
+ this.loadData()
365
+ }
366
+ },
367
+ updateQuestion (question) {
368
+ console.log(question)
369
+ const questionKey = 'question-' + question.uuid
370
+ indexedDB.delete(questionKey)
371
+ indexedDB.add(questionKey, question)
372
+ },
373
+ openMetaDataModal (item) {
374
+ this.item = item
375
+ this.metaDataModalVisible = true
376
+ },
377
+ handleCancel () {
378
+ this.metaDataModalVisible = false
379
+ },
380
+ toFavorites (question, index) {
381
+ this.questions[index].isFavorite = !this.questions[index].isFavorite
382
+ if (this.questions[index].isFavorite) {
383
+ const key = 'favorites-' + question.uuid
384
+ question.date = formatDate('now')
385
+ question.isFavorite = true
386
+ indexedDB.add(key, question)
387
+ this.favorites.push(question)
388
+ this.$message.success('收藏成功')
389
+ } else {
390
+ // 根据 uuid 删除 favorites 中的对应项
391
+ this.favorites = this.favorites.filter(item => item.uuid !== question.uuid).sort((a, b) => new Date(b.date) - new Date(a.date))
392
+ // 删除收藏的储存
393
+ const key = 'favorites-' + question.uuid
394
+ indexedDB.delete(key)
395
+ }
396
+ this.updateQuestion(question)
397
+ },
398
+ libToFavorites (question, index) {
399
+ this.questionsLib[index].isFavorite = !this.questionsLib[index].isFavorite
400
+ this.questionsLib = JSON.parse(JSON.stringify(this.questionsLib))
401
+ if (this.questionsLib[index].isFavorite) {
402
+ const key = 'favorites-' + question.uuid
403
+ question.isFavorite = true
404
+ // 避免从其他地方收藏了这个 uuid
405
+ indexedDB.delete(key)
406
+ indexedDB.add(key, question)
407
+ this.favorites.push(Object.assign({}, question, { date: formatDate('now') }))
408
+ this.$message.success('收藏成功')
409
+ } else {
410
+ // 根据 uuid 删除 favorites 中的对应项
411
+ this.favorites = this.favorites.filter(item => item.uuid !== question.uuid).sort((a, b) => new Date(b.date) - new Date(a.date))
412
+ // 删除收藏的储存
413
+ const key = 'favorites-' + question.uuid
414
+ indexedDB.delete(key)
415
+ }
416
+
417
+ const questionKey = 'question-lib-' + question.uuid
418
+ indexedDB.delete(questionKey)
419
+ indexedDB.add(questionKey, this.questionsLib[index])
420
+ },
421
+ delQuestion (item, index) {
422
+ // 删除对话历史
423
+ this.questions.splice(index, 1)
424
+ const key = 'question-' + item.uuid
425
+ indexedDB.delete(key)
426
+ // 删除收藏
427
+ const favoritesKey = 'favorites-' + item.uuid
428
+ indexedDB.delete(favoritesKey)
429
+ },
430
+ delFavorites (item, index) {
431
+ this.favorites.splice(index, 1)
432
+ // 根据uuid寻找 questions 中的对应项
433
+ // 重新赋值给 questions
434
+ this.questions = this.questions.map(_item => {
435
+ if (_item.uuid === item.uuid) {
436
+ _item.isFavorite = false
437
+ }
438
+ return _item
439
+ })
440
+ const key = 'favorites-' + item.uuid
441
+ indexedDB.delete(key)
442
+ this.$message.success('取消收藏成功')
443
+ // 如果favorites为空,切换到对话历史
444
+ if (this.favorites.length === 0) {
445
+ this.activeKey = '1'
446
+ }
447
+ this.updateQuestion(item)
448
+ }
449
+ ,
450
+ }
451
+ }
452
+ </script>
453
+
454
+ <style scoped lang="less">
455
+
456
+ #question-history {
457
+
458
+ margin-right: 10px;
459
+ height: 100%;
460
+ border-radius: 8px;
461
+
462
+ .question-history-active-bug {
463
+ border-left: 4px solid #FF0036;
464
+ border-radius: 4px;
465
+ padding: 18px 18px 18px 14px;
466
+ background-color: rgba(#ff0000, 0.04);
467
+ }
468
+
469
+ .question-history-active {
470
+ border-left: 4px solid #1890FF;
471
+ border-radius: 4px;
472
+ padding: 18px 18px 18px 14px;
473
+ }
474
+
475
+ .question-history-inactive-bug {
476
+ border-radius: 4px;
477
+ padding: 18px;
478
+ background-color: rgba(#ff0000, 0.04);
479
+ }
480
+
481
+ .question-history-inactive {
482
+ border-radius: 4px;
483
+ padding: 18px;
484
+ }
485
+
486
+ .ant-list-item-meta /deep/ {
487
+ width: 60%;
488
+ }
489
+
490
+ .ant-list-item-meta-content /deep/ {
491
+ width: 98%;
492
+ }
493
+
494
+ .ant-list-item-meta-title /deep/ {
495
+ width: 90%;
496
+ white-space: nowrap;
497
+ overflow: hidden;
498
+ text-overflow: ellipsis;
499
+ }
500
+
501
+ .ant-card {
502
+ height: 100%;
503
+ overflow-y: auto;
504
+ }
505
+
506
+ .startActive {
507
+ color: #FFD700;
508
+ font-size: 1rem;
509
+ }
510
+
511
+ .startInactive {
512
+ font-size: 1rem;
513
+ }
514
+
515
+ .delClass {
516
+ font-size: 1rem;
517
+ color: #777;
518
+ }
519
+
520
+ .reSearch {
521
+ font-size: 1rem;
522
+ color: #1890FF;
523
+ }
524
+
525
+ .reSearch:hover {
526
+ animation: rotate 0.5s ease-in-out both;
527
+ }
528
+
529
+ @keyframes rotate {
530
+ 0% {
531
+ transform: rotate(0deg);
532
+ }
533
+ 100% {
534
+ transform: rotate(180deg);
535
+ }
536
+ }
537
+
538
+ .startActive, .startInactive, .reSearch {
539
+ transition: transform 0.1s;
540
+ }
541
+
542
+ .startActive:hover, .startInactive:hover {
543
+ animation: shake 0.5s ease-in-out both;
544
+ }
545
+
546
+ @keyframes shake {
547
+ 0% {
548
+ transform: rotate(0deg);
549
+ }
550
+ 25% {
551
+ transform: rotate(-20deg);
552
+ }
553
+ 50% {
554
+ transform: rotate(0deg);
555
+ }
556
+ 75% {
557
+ transform: rotate(20deg);
558
+ }
559
+ 100% {
560
+ transform: rotate(0deg);
561
+ }
562
+ }
563
+
564
+ .pullQuestion {
565
+ width: 100%;
566
+ margin-bottom: 10px;
567
+ }
568
+
569
+ .evaluation {
570
+
571
+ }
572
+
573
+ .mgtop-20 {
574
+ margin-top: 20px;
575
+ }
576
+
577
+ .questionItemDivider {
578
+ position: absolute;
579
+ top: -25px
580
+ }
581
+
582
+ .questionItem {
583
+ position: relative;
584
+ }
585
+ }
586
+
587
+ .scroller {
588
+ height: 100%;
589
+ overflow-y: auto;
590
+ }
591
+ </style>