@utogether/udp-core 1.0.4 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/{403-DASI6Pwz.js → 403-CxOqlq0f.js} +3 -3
  2. package/dist/403-WCboRvzZ-ZAPgYStl.js +65 -0
  3. package/dist/404-2V0Qi-d7-DkNwQggp.js +65 -0
  4. package/dist/{404-YhBA92cb.js → 404-xdB6lFeQ.js} +1 -1
  5. package/dist/500-BYfzvixf-CGpEieyQ.js +67 -0
  6. package/dist/{500-ywbFF5MX.js → 500-C94bRK2S.js} +2 -2
  7. package/dist/AuthorityInfo-DBovfUjB-DpQwT9Q5.js +4 -0
  8. package/dist/{AuthorityInfo-tCSX2Fh7.js → AuthorityInfo-Dy3b_nFN.js} +1 -1
  9. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-Cwd6UT2i.js → AuthorityInfo.vue_vue_type_style_index_0_lang-Bh7IbcdY.js} +2 -2
  10. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-D-l_Az3s-Cw7WmFxz.js +100 -0
  11. package/dist/AuthorityPanel-CRlAwbaI-G7pZXKdE.js +4 -0
  12. package/dist/{AuthorityPanel-BeBNiwqc.js → AuthorityPanel-CRlAwbaI.js} +1 -1
  13. package/dist/AuthorityPanel.vue_vue_type_style_index_0_lang-DxhZjp1S-CJvk3pW8.js +114 -0
  14. package/dist/{AuthorityPanel.vue_vue_type_style_index_0_lang-CIYmnP9-.js → AuthorityPanel.vue_vue_type_style_index_0_lang-DxhZjp1S.js} +31 -24
  15. package/dist/Company-B4vsXy2I-CkNCOqjJ.js +25 -0
  16. package/dist/{Company-l23MEzdM.js → Company-gKkfnhLt.js} +3 -3
  17. package/dist/{CompanyPanel-D_s0rh6h.js → CompanyPanel-BF5Pc35s.js} +7 -7
  18. package/dist/CompanyPanel-Czcx8Gyw-CvndXwB_.js +206 -0
  19. package/dist/DataSet-DT-rGICv-DaUfgbxk.js +147 -0
  20. package/dist/{Department-DSEvORLg.js → Department-D0I3QVZe.js} +3 -3
  21. package/dist/Department-D0dVUrGC-C6HJcYI1.js +25 -0
  22. package/dist/{DepartmentPanel-WN8nOgCV.js → DepartmentPanel-2LHODgc7.js} +22 -22
  23. package/dist/DepartmentPanel-e91Lxr1j-BS_A-ILd.js +254 -0
  24. package/dist/{DesignPanel-DirEGh9M.js → DesignPanel-CtF3cAAQ.js} +1 -1
  25. package/dist/DesignPanel-DdFl_ohi-uCwFxcl1.js +4 -0
  26. package/dist/DesignPanel.vue_vue_type_style_index_0_lang-BACPrfUI-cC7yL0uY.js +1013 -0
  27. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-D02hXSrN.js → DesignPanel.vue_vue_type_style_index_0_lang-BCYgwoVt.js} +3 -3
  28. package/dist/DictView-BzQLOf_P-DDicwdmM.js +111 -0
  29. package/dist/{DictView-DiIQdiek.js → DictView-H3V5hxg3.js} +17 -16
  30. package/dist/{InvOrganization-b7v3g9EJ.js → InvOrganization-BiGLnbqe.js} +2 -2
  31. package/dist/InvOrganization-atbhw0CI-BABbVt9V.js +74 -0
  32. package/dist/Org-BW1YHG-Q-Cow7JWlD.js +39 -0
  33. package/dist/{Org-BORfx1PL.js → Org-DQTCQHNY.js} +2 -2
  34. package/dist/Preview-DJtVsoq1-CCGidQjJ.js +48 -0
  35. package/dist/{Preview-DkRn_TSc.js → Preview-DXaiis29.js} +1 -1
  36. package/dist/{ReportDefine-Cd0QeaWA.js → ReportDefine-BLh4CiER.js} +1 -1
  37. package/dist/ReportDefine-CNx_ob99-6NQAHK-Q.js +10 -0
  38. package/dist/ReportDesign-FbQ6yTJS-C1pPAUSp.js +165 -0
  39. package/dist/{ReportDesign-4qNqyeEW.js → ReportDesign-Ni1YxrLC.js} +7 -7
  40. package/dist/ReportQuery-C5gz8Lgd-Eu2cQmda.js +75 -0
  41. package/dist/{ReportQuery-BJfTFpec.js → ReportQuery-C8G88_qF.js} +1 -1
  42. package/dist/ReportQueryFrom-C7scua5v-uHXWq8Gy.js +4 -0
  43. package/dist/{ReportQueryFrom-CB7sExZx.js → ReportQueryFrom-CuZKPtB4.js} +1 -1
  44. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CqO_2Ier.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-BAn_siFW.js} +7 -7
  45. package/dist/ReportQueryFrom.vue_vue_type_style_index_0_lang-DCbz67Wa-vK6r2uCl.js +178 -0
  46. package/dist/ReportTemplate-BDANdIWv-D_IGjR1w.js +161 -0
  47. package/dist/{ReportTemplate-B69muSgT.js → ReportTemplate-DFnDXWmx.js} +8 -8
  48. package/dist/{Role-Bo4YrNDC.js → Role-BQ7hsfPn.js} +3 -3
  49. package/dist/Role-ByB0WbxW-5E8Mb148.js +25 -0
  50. package/dist/RoleAssign-DW6iC_0v-Bis61auk.js +26 -0
  51. package/dist/{RoleAssign-kOMYJ4s3.js → RoleAssign-UPCg2d4G.js} +3 -3
  52. package/dist/RolePanel-BM2MaQPU-CgcsbfaX.js +4 -0
  53. package/dist/{RolePanel-BSJmjyqc.js → RolePanel-C-mQ5XRq.js} +1 -1
  54. package/dist/RolePanel-ClQy8DBL-DARL4O-o.js +4 -0
  55. package/dist/{RolePanel-B1d4e6uk.js → RolePanel-CoSXOCZN.js} +1 -1
  56. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-Bc_Ao_PU-DMmxr2iI.js +132 -0
  57. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-DgQpfjaU.js → RolePanel.vue_vue_type_script_setup_true_lang-Bg-t2UhF.js} +7 -7
  58. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-DCzX-ZP_.js → RolePanel.vue_vue_type_script_setup_true_lang-D-o7HYZ8.js} +8 -8
  59. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-fthF1zkp-JsbQJoDy.js +154 -0
  60. package/dist/ScrollPanel.vue_vue_type_style_index_0_lang-ByWIwajm-BsBf2Vs3.js +100 -0
  61. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-WNOYFxJ1.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCsoxDfk.js} +1 -1
  62. package/dist/Staff-CuxzvhD9-D0KTcyRh.js +25 -0
  63. package/dist/{Staff-BFp3zNNR.js → Staff-D-CmvG1R.js} +3 -3
  64. package/dist/StaffInfo-CY7gUICu-EZUhUwIp.js +4 -0
  65. package/dist/{StaffInfo-DcU9_40C.js → StaffInfo-Idhvuc6e.js} +1 -1
  66. package/dist/StaffInfo.vue_vue_type_script_setup_true_lang-Dd8gtQz8-Dlkt-eCn.js +108 -0
  67. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-CtfN2CAr.js → StaffInfo.vue_vue_type_script_setup_true_lang-MUGKjnHU.js} +1 -1
  68. package/dist/{StaffPanel-7exWkZd9.js → StaffPanel-CDDmAYE5.js} +1 -1
  69. package/dist/StaffPanel-CwqG0_xr-CrvzLJoc.js +4 -0
  70. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-v5xOXKRS.js → StaffPanel.vue_vue_type_script_setup_true_lang-Bdilqbee.js} +42 -42
  71. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-DCdBy8Hu-BXrueqi0.js +143 -0
  72. package/dist/SysUser-9Q2UJWhi-DprWXFlR.js +15 -0
  73. package/dist/{SysUser-B3uB_cp2.js → SysUser-a-j5bppr.js} +2 -2
  74. package/dist/{SysUserPanel-B0CLp5AO.js → SysUserPanel-6V232wwB.js} +1 -1
  75. package/dist/SysUserPanel-bJy69O7x-BJtBgFEs.js +4 -0
  76. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-Cwea_4dY.js → SysUserPanel.vue_vue_type_script_setup_true_lang-BOtHuMVy.js} +126 -111
  77. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-DUPFqgz3-BSqRCMen.js +356 -0
  78. package/dist/{SystemMenu-a59l4hTk.js → SystemMenu-BnVeOSOQ.js} +50 -47
  79. package/dist/SystemMenu-DGOAolc1-CJSLHP8i.js +156 -0
  80. package/dist/UserInfo-CKoOHkAM-DDWp0I_U.js +4 -0
  81. package/dist/{UserInfo-D1IA2oLt.js → UserInfo-Cax9b2nw.js} +1 -1
  82. package/dist/UserInfo.vue_vue_type_style_index_0_lang-BaT53SSu-DsNaAomO.js +160 -0
  83. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-DDVgYRD5.js → UserInfo.vue_vue_type_style_index_0_lang-D-cw11i9.js} +2 -2
  84. package/dist/await-to-js.es5-Bv3Eu4mi-UCggJjes.js +10 -0
  85. package/dist/await-to-js.es5-Bv3Eu4mi.js +10 -0
  86. package/dist/childView-0YZQ6GBn-CEqg7k5d.js +4 -0
  87. package/dist/{childView-6rCeLcsx.js → childView-DKG3eZo8.js} +1 -1
  88. package/dist/childView-DKkgi3yo-D47ft-vi.js +4 -0
  89. package/dist/{childView-JdrkroL5.js → childView-siumuBz0.js} +1 -1
  90. package/dist/childView.vue_vue_type_style_index_0_lang-ABMrGInv-ClOdE_sa.js +143 -0
  91. package/dist/{childView.vue_vue_type_style_index_0_lang-BfcnWnx9.js → childView.vue_vue_type_style_index_0_lang-CUfXDS1q.js} +28 -25
  92. package/dist/{childView.vue_vue_type_style_index_0_lang-B8x99f1B.js → childView.vue_vue_type_style_index_0_lang-CW3EbAmW.js} +8 -8
  93. package/dist/childView.vue_vue_type_style_index_0_lang-CaW106ve-CClTM8PK.js +180 -0
  94. package/dist/{code-rule-2lkPF547.js → code-rule-Dtoree6F.js} +2 -2
  95. package/dist/code-rule-wQyfgpNL-C4evD4Co.js +148 -0
  96. package/dist/core.es.js +10 -10
  97. package/dist/cron-task-C-kryDtd-C0NuGZCe.js +135 -0
  98. package/dist/{cron-task-DV1pGO1m.js → cron-task-GSRgA7S5.js} +2 -2
  99. package/dist/flow-task-B07st2aD-CgQvagSQ.js +10 -0
  100. package/dist/frameView-BOGA3ezf-QoSxzmSQ.js +44 -0
  101. package/dist/{frameView-C0bzSB8c.js → frameView-Cy6wxW0K.js} +1 -1
  102. package/dist/index-Dc7xWMiC.js +7265 -0
  103. package/dist/layout-home-3Dy4onl4.js +228 -0
  104. package/dist/layout-home-CYHksXN_-Basy-3IH.js +228 -0
  105. package/dist/layoutView-BaRvAbIa-xVgfqspc.js +3302 -0
  106. package/dist/{layoutView-CTV-E4Cj.js → layoutView-DMjNscJ-.js} +148 -149
  107. package/dist/log-in-Cx1dGik8-BVeEHeZ8.js +117 -0
  108. package/dist/{log-in-CoBP2x6u.js → log-in-VAG6Cvcx.js} +8 -8
  109. package/dist/log-out-COYdxrNC-ftopGZdE.js +130 -0
  110. package/dist/{log-out-KX8FiRVf.js → log-out-DZGaMCjC.js} +4 -4
  111. package/dist/{login-CtCoGWzD.js → login-CqVMdNHs.js} +126 -136
  112. package/dist/login-Dg9ofNS8-Bocp1XMA.js +241 -0
  113. package/dist/login-log-DJBGJVV0-AoOyj0jD.js +70 -0
  114. package/dist/lov-view-C0T5prk8-B2DBmn55.js +97 -0
  115. package/dist/{lov-view-Bm0JEzzg.js → lov-view-Cc68_28B.js} +7 -7
  116. package/dist/{menuInfo-D2qPoRwz.js → menuInfo-BIrIaJlH.js} +1 -1
  117. package/dist/menuInfo-BZJ_q7bz-Drho-_QC.js +4 -0
  118. package/dist/menuInfo.vue_vue_type_style_index_0_lang-BA8xjUo3-BCZ1wipf.js +363 -0
  119. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-DoQjX9Ly.js → menuInfo.vue_vue_type_style_index_0_lang-DlE4w35X.js} +38 -36
  120. package/dist/{pda-app-SbcIclbH.js → pda-app-DnjphrRS.js} +9 -9
  121. package/dist/pda-app-m9hsppHo-B4xyja1o.js +710 -0
  122. package/dist/redirect-BqegffKC-CBCIuqmz.js +15 -0
  123. package/dist/resource-C6KEIXu--B_ddyecm.js +97 -0
  124. package/dist/{resource-Cdq1UKGI.js → resource-DISgPDM7.js} +4 -4
  125. package/dist/su-welcome-BjbuSrBZ.js +49424 -0
  126. package/dist/su-welcome-CYYy-dzr-D3RKPoB0.js +42089 -0
  127. package/dist/sys-config-DCjJGtht-DARDjlrt.js +370 -0
  128. package/dist/{sys-config-CCOf4xbj.js → sys-config-Yc9vh1t1.js} +13 -13
  129. package/dist/udp-core.css +1 -1
  130. package/dist/utogether-MlnyYtNS-CGgjFNPS.js +4 -0
  131. package/package.json +5 -2
  132. package/src/App.vue +37 -31
  133. package/src/components/udp/content/index.vue +88 -88
  134. package/src/components/udp/form-upload/form-upload.vue +492 -0
  135. package/src/components/udp/grid/index.vue +524 -524
  136. package/src/components/udp/index.ts +6 -5
  137. package/src/components/udp/ut-stamp-badge/index.vue +271 -271
  138. package/src/components/udp/utils.ts +408 -408
  139. package/src/layout/components/lay-content/index.vue +4 -11
  140. package/src/layout/components/lay-search/components/SearchModal.vue +181 -189
  141. package/src/layout/components/lay-setting/index.vue +503 -503
  142. package/src/layout/components/lay-sidebar/sidebar-logo.vue +101 -101
  143. package/src/layout/components/lay-tag/index.vue +598 -598
  144. package/src/layout/hooks/useNav.ts +176 -176
  145. package/src/layout/hooks/useTag.ts +227 -227
  146. package/src/layout/layoutView.vue +216 -215
  147. package/src/layout/types.ts +93 -93
  148. package/src/main.ts +111 -115
  149. package/src/plugins/i18n/zh.ts +17 -3
  150. package/src/plugins/vxe-table/index.ts +116 -116
  151. package/src/plugins/vxe-table/render.tsx +968 -950
  152. package/src/router/index.ts +187 -187
  153. package/src/router/modules/home.ts +32 -32
  154. package/src/router/utils.ts +420 -420
  155. package/src/store/modules/epTheme.ts +48 -48
  156. package/src/style/vxetable.scss +18 -2
  157. package/src/utils/dataFormat/index.ts +222 -222
  158. package/src/utils/lifecycle.ts +39 -39
  159. package/src/views/organization/department/DepartmentPanel.vue +303 -303
  160. package/src/views/organization/staff/StaffInfo.vue +127 -127
  161. package/src/views/organization/staff/StaffPanel.vue +3 -3
  162. package/src/views/system/layout/layout-home.vue +237 -0
  163. package/src/views/system/menu/AuthorityPanel.vue +10 -9
  164. package/src/views/system/menu/SystemMenu.vue +194 -185
  165. package/src/views/system/menu/menuInfo.vue +384 -384
  166. package/src/views/system/sysUser/SysUserPanel.vue +363 -347
  167. package/src/views/udev/coderule/code-rule.vue +132 -132
  168. package/src/views/udev/dict/DictView.vue +118 -118
  169. package/src/views/udev/dict/childView.vue +184 -183
  170. package/src/views/udev/lov/childView.vue +174 -174
  171. package/src/views/uhome/components/common-menu.vue +118 -0
  172. package/src/views/uhome/components/dynamic-component.vue +66 -0
  173. package/src/views/uhome/components/home-todo.vue +170 -0
  174. package/src/views/uhome/components/menu-favorite.vue +315 -315
  175. package/src/views/uhome/dynamic-card.vue +31 -0
  176. package/src/views/uhome/su-welcome.vue +48 -113
  177. package/src/views/ulogin/login.vue +336 -325
  178. package/src/views/upms/interface/log-in.vue +100 -100
  179. package/src/views/upms/interface/log-out.vue +104 -104
  180. package/src/views/upms/user/login-log.vue +54 -54
  181. package/types/global.d.ts +232 -231
  182. package/dist/await-to-js.es5-BtRbN2QH.js +0 -10
  183. package/dist/index-BbtbEMCH.js +0 -4649
  184. package/dist/su-welcome-BHDsjqqV.js +0 -524
@@ -1,325 +1,336 @@
1
- <template>
2
- <!-- <img :src="bg" class="wave" /> -->
3
- <div :key="refreshKey" class="login-container" :style="bgStyle">
4
- <div v-if="!bgStyle.backgroundImage" class="img pr-24">
5
- <img :src="welcome" />
6
- </div>
7
- <div class="login-box">
8
- <div class="login-form">
9
- <h2 v-motion :initial="{ opacity: 0, y: 100 }" :enter="{ opacity: 1, y: 0, transition: { delay: 100 } }">
10
- {{ sysConfig['title'] }}
11
- </h2>
12
- <div
13
- v-motion
14
- class="input-group user focus"
15
- :initial="{ opacity: 0, y: 100 }"
16
- :enter="{ opacity: 1, y: 0, transition: { delay: 200 } }"
17
- >
18
- <div class="icon">
19
- <IconifyIconOffline :icon="UserFill" width="30" height="30" />
20
- </div>
21
- <div>
22
- <i class="ri-logout-box-line" />
23
- <h5>{{ $t('message.udp.userName') }}</h5>
24
- <input
25
- v-model.trim="contextInfo.username"
26
- v-focus
27
- type="text"
28
- class="input"
29
- @blur="onUserBlur"
30
- @keyup.enter="onLogin"
31
- />
32
- </div>
33
- </div>
34
- <div
35
- v-motion
36
- class="input-group pwd focus"
37
- :initial="{ opacity: 0, y: 100 }"
38
- :enter="{
39
- opacity: 1,
40
- y: 0,
41
- transition: { delay: 300 }
42
- }"
43
- >
44
- <div class="icon">
45
- <IconifyIconOffline :icon="LockFill" width="30" height="30" />
46
- </div>
47
- <div>
48
- <h5>{{ $t('message.udp.password') }}</h5>
49
- <input
50
- v-model.trim="contextInfo.passWord"
51
- type="password"
52
- class="input"
53
- @blur="onPwdBlur"
54
- @keyup.enter="onLogin"
55
- />
56
- </div>
57
- </div>
58
- <button
59
- v-motion
60
- class="btn"
61
- :initial="{ opacity: 0, y: 10 }"
62
- :enter="{ opacity: 1, y: 0, transition: { delay: 400 } }"
63
- :disabled="loading"
64
- :class="{ loading: loading }"
65
- @click="onLogin"
66
- >
67
- {{ $t('message.udp.login') }}
68
- </button>
69
- </div>
70
- </div>
71
- <div v-if="sysConfig.techSupport === 'Y'" class="absolute flex justify-center w-full font-bold bottom-1">
72
- <img :src="utogether" class="!h-10" style="height: 40px" />
73
- <span class="flex flex-row justify-center" style="width: 300px">
74
- <span style="font-size: 0; text-align: center">
75
- <a
76
- href="http://www.u-together.cn/"
77
- target="_blank"
78
- class="!inline-block"
79
- style="margin-bottom: -5px; font-size: 17px; color: #fff; mix-blend-mode: difference"
80
- :style="{ color: sysConfig.baseColor || '#FFF' }"
81
- >
82
- 深圳友聚信息技术有限公司
83
- </a>
84
- <a
85
- href="http://www.u-together.cn/"
86
- target="_blank"
87
- class="!inline-block"
88
- style="font-size: 12px; color: #fff; mix-blend-mode: difference"
89
- :style="{ color: sysConfig.baseColor || '#FFF' }"
90
- >
91
- SHENZHEN U-TOGETHER CO. LTD
92
- </a>
93
- </span>
94
- <span class="flex items-center text-white" style="width: 75px; font-size: 10px">技术支持</span>
95
- </span>
96
- </div>
97
- </div>
98
- </template>
99
-
100
- <script lang="ts">
101
- export default { name: 'LoginView' };
102
- </script>
103
-
104
- <script setup lang="ts">
105
- import { ref, reactive, onBeforeMount } from 'vue';
106
- import { useRouter } from 'vue-router';
107
- import { useI18n } from 'vue-i18n';
108
- // import io from 'socket.io-client';
109
- import { useFavicon } from '@vueuse/core';
110
- import { isEmpty, toDateString } from 'xe-utils';
111
- import { removeClass, storageLocal, errorMessage, cookies, delay } from '@utogether/utils';
112
- import to from 'await-to-js';
113
- // import JSEencrypt from 'jsencrypt';
114
- import { useSystemStoreHook } from '../../store/modules/system';
115
- import { useLayout } from '../../layout/hooks/useLayout';
116
- import { useDataThemeChange } from '../../layout/hooks/useDataThemeChange';
117
- import { getBaseURL, getServiceApi } from '../../api';
118
- import { initDict } from '../../api/user';
119
- import { kTOKEN, kCKTOKEN, kLOGINER, kSYSCONFIG } from '../../contant';
120
- import { getPlatform, getBrower } from '../../utils/browers';
121
- import { onLogined, onBeforeLogined } from '../../utils/lifecycle';
122
- // import bg from '../../assets/svg/bg.svg?component';
123
- import utogether from '../../assets/images/utogether.png';
124
- import welcome from '../../assets/images/welcome.png';
125
-
126
- import LockFill from '@iconify-icons/ri/lock-fill';
127
- import UserFill from '@iconify-icons/ri/user-3-fill';
128
-
129
- interface IContextProps {
130
- username: string;
131
- passWord: string;
132
- verify: number | null;
133
- svg: any;
134
- domain: string;
135
- }
136
- interface IRSAPublic {
137
- publicKeyExponent: string;
138
- publicKeyModulus: string;
139
- requestKey: string;
140
- }
141
- const contextInfo: IContextProps = reactive({
142
- username: '',
143
- passWord: '',
144
- requestKey: '',
145
- verify: null,
146
- svg: null,
147
- domain: ''
148
- });
149
- const publicRSA: IRSAPublic = reactive({
150
- publicKeyExponent: '10001',
151
- publicKeyModulus:
152
- 'a12708ab26367e1711bd767f6bb1f29afbd85380185723d7b492230e2567c95cf5718eca745da0643400ca619fbeec892df61abe1f71ad3b822d076ed831080c53782edf8c0627ee95c57e2bee12fe55da2b3cadec59947a75ccccbbf36fb3b781c93b4bf51489789f1c0849f9023a16ec70bef41a504785e1082b6f13588e29',
153
- requestKey: ''
154
- });
155
-
156
- const bgStyle = ref({
157
- backgroundImage: '',
158
- backgroundRepeat: 'no-repeat',
159
- backgroundPosition: 'center'
160
- });
161
- const refreshKey = ref(0);
162
-
163
- const sysConfig = ref<IRecord>({});
164
- const router = useRouter();
165
- const { t } = useI18n();
166
- const serviceApi = getServiceApi();
167
- // const { $config } = useGlobal();
168
-
169
- const { initStorage } = useLayout();
170
- const { overallStyle, dataThemeChange } = useDataThemeChange();
171
- initStorage();
172
-
173
- const loading = ref(false);
174
- // 登录
175
- const onLogin = async () => {
176
- // insertLoginInfo();
177
- // return;
178
- const { username, passWord, verify } = contextInfo;
179
- if (isEmpty(username) || isEmpty(passWord)) {
180
- return errorMessage(t('message.tip.loginFailure'));
181
- }
182
- // @ts-ignore
183
- setMaxDigits(200);
184
- // @ts-ignore
185
- const rsakeypair = new RSAKeyPair(publicRSA.publicKeyExponent, '', publicRSA.publicKeyModulus);
186
- // @ts-ignore
187
- const password = encryptedString(rsakeypair, passWord.split('').reverse().join(''));
188
- // const key = new JSEencrypt();
189
- // key.setPublicKey(
190
- // '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChJwirJjZ+FxG9dn9rsfKa+9hTgBhXI9e0kiMOJWfJXPVxjsp0XaBkNADKYZ++7Ikt9hq+H3GtO4ItB27YMQgMU3gu34wGJ+6VxX4r7hL+VdorPK3sWZR6dczMu/Nvs7eByTtL9RSJeJ8cCEn5AjoW7HC+9BpQR4XhCCtvE1iOKQIDAQAB-----END PUBLIC KEY-----'
191
- // );
192
- // const password = key.encrypt(passWord);
193
- // // console.log('password1 ===', password1);
194
- // console.log('password ===', password);
195
- // 执行登录成功后的函数
196
- onBeforeLogined();
197
- const param = {
198
- username,
199
- password,
200
- requestKey: publicRSA.requestKey,
201
- verify: verify,
202
- domain: getBaseURL()
203
- };
204
- loading.value = true;
205
- const [err, data] = await to(serviceApi.post('/uath/login', param));
206
- if (err) {
207
- loading.value = false;
208
- return;
209
- }
210
- useSystemStoreHook().setSessionKey(data);
211
- cacheToken(data);
212
- cookies.set(kLOGINER, username);
213
- if (!storageLocal.getItem('kLov')) {
214
- initDict().then(res => useSystemStoreHook().setDict(res));
215
- }
216
- // initSocket(username);
217
- await delay(100);
218
- // 执行登录成功后的函数
219
- onLogined();
220
- router.push('/');
221
- insertLoginInfo(username);
222
- loading.value = false;
223
- };
224
-
225
- function onUserBlur() {
226
- if (contextInfo.username.length === 0) removeClass(document.querySelector('.user'), 'focus');
227
- }
228
-
229
- function onPwdBlur() {
230
- if (contextInfo.passWord.length === 0) removeClass(document.querySelector('.pwd'), 'focus');
231
- }
232
-
233
- /**
234
- * @description: 缓存token
235
- * @param {*} token token数据
236
- * @return {*}
237
- */
238
- const cacheToken = token => {
239
- const { access_token, expires_in, refresh_token } = token;
240
- const cache = {
241
- accessToken: access_token,
242
- refreshToken: refresh_token,
243
- // expires: Date.now() + expires_in
244
- expires: Date.now() + expires_in * 1000
245
- };
246
-
247
- cookies.set(kCKTOKEN, token.access_token);
248
- const dataString = JSON.stringify(cache);
249
- expires_in > 0 ? cookies.set(kTOKEN, dataString) : cookies.set(kTOKEN, dataString);
250
- };
251
-
252
- // let socketIo = null;
253
- // const initSocket = username => {
254
- // socketIo = io(`ws://119.145.169.186:10006/webSocket/${username}`, {
255
- // transports: ['websocket']
256
- // });
257
- // socketIo.on('connection', res => {
258
- // console.log('connection', res);
259
- // });
260
- // socketIo.on('connected', res => {
261
- // console.log('connected', res);
262
- // });
263
- // socketIo.on('close', res => {
264
- // console.log('connected', res);
265
- // });
266
- // socketIo.on('message', res => {
267
- // console.log('message', res);
268
- // // ElNotification({
269
- // // title: '您有一条新的消息',
270
- // // message: res,
271
- // // type: 'success'
272
- // // });
273
- // });
274
- // };
275
-
276
- const insertLoginInfo = username => {
277
- const userAgent = navigator.userAgent.toLowerCase();
278
- const { browser, browserVersion } = getBrower(userAgent);
279
- const obj = {
280
- userName: username,
281
- loginTime: toDateString(new Date()),
282
- browser,
283
- browserVersion,
284
- operatingSystem: getPlatform(userAgent)
285
- };
286
- serviceApi.post('/upfm/v1/userMonitor', obj);
287
- };
288
-
289
- const getSysConfig = async () => {
290
- const [err, data]: [Error, any] = await to(serviceApi.get('/upfm/v1/sysConfig', {}));
291
- if (!err) {
292
- const config: any = {};
293
- data.list?.forEach(item => {
294
- config[item.configCode] = item.configValue;
295
- if (item.fileName) {
296
- config[item.configCode] = getBaseURL() + '/ufil' + item.configValue;
297
- }
298
- });
299
- const title = data.list?.find(f => f.configCode === 'title')?.configValue;
300
- config['title'] = title || 'U-DP';
301
- sysConfig.value = config;
302
- bgStyle.value = {
303
- backgroundImage: config['backgroundImg'] ? `url(${config['backgroundImg']})` : ``,
304
- // backgroundImage: config['backgroundImg'] ? `url(${config['backgroundImg']})` : `url1(${welcome})`,
305
- backgroundRepeat: 'no-repeat',
306
- backgroundPosition: 'center'
307
- };
308
- console.log('bgStyle=', bgStyle);
309
- const favicon = useFavicon();
310
- favicon.value = config.favicon || utogether;
311
- storageLocal.setItem(kSYSCONFIG, config);
312
- }
313
- };
314
-
315
- dataThemeChange(overallStyle.value);
316
-
317
- onBeforeMount(() => {
318
- getSysConfig();
319
- // cookies.addPrefix('sitzone-mes');
320
- });
321
- </script>
322
-
323
- <style scoped>
324
- @import url('../../style/login.css');
325
- </style>
1
+ <template>
2
+ <!-- <img :src="bg" class="wave" /> -->
3
+ <div :key="refreshKey" class="login-container" :style="bgStyle">
4
+ <div v-if="!bgStyle.backgroundImage" class="img pr-24">
5
+ <img :src="welcome" />
6
+ </div>
7
+ <div class="login-box">
8
+ <div class="login-form">
9
+ <h2 v-motion :initial="{ opacity: 0, y: 100 }" :enter="{ opacity: 1, y: 0, transition: { delay: 100 } }">
10
+ {{ sysConfig['title'] }}
11
+ </h2>
12
+ <div
13
+ v-motion
14
+ class="input-group user focus"
15
+ :initial="{ opacity: 0, y: 100 }"
16
+ :enter="{ opacity: 1, y: 0, transition: { delay: 200 } }"
17
+ >
18
+ <div class="icon">
19
+ <IconifyIconOffline :icon="UserFill" width="30" height="30" />
20
+ </div>
21
+ <div>
22
+ <i class="ri-logout-box-line" />
23
+ <h5>{{ $t('message.udp.userName') }}</h5>
24
+ <input
25
+ v-model.trim="contextInfo.username"
26
+ v-focus
27
+ type="text"
28
+ class="input"
29
+ @blur="onUserBlur"
30
+ @keyup.enter="onLogin"
31
+ />
32
+ </div>
33
+ </div>
34
+ <div
35
+ v-motion
36
+ class="input-group pwd focus"
37
+ :initial="{ opacity: 0, y: 100 }"
38
+ :enter="{
39
+ opacity: 1,
40
+ y: 0,
41
+ transition: { delay: 300 }
42
+ }"
43
+ >
44
+ <div class="icon">
45
+ <IconifyIconOffline :icon="LockFill" width="30" height="30" />
46
+ </div>
47
+ <div>
48
+ <h5>{{ $t('message.udp.password') }}</h5>
49
+ <input
50
+ v-model.trim="contextInfo.passWord"
51
+ type="password"
52
+ class="input"
53
+ @blur="onPwdBlur"
54
+ @keyup.enter="onLogin"
55
+ />
56
+ </div>
57
+ </div>
58
+ <button
59
+ v-motion
60
+ class="btn"
61
+ :initial="{ opacity: 0, y: 10 }"
62
+ :enter="{ opacity: 1, y: 0, transition: { delay: 400 } }"
63
+ :disabled="loading"
64
+ :class="{ loading: loading }"
65
+ @click="onLogin"
66
+ >
67
+ {{ $t('message.udp.login') }}
68
+ </button>
69
+ </div>
70
+ </div>
71
+ <div v-if="sysConfig.techSupport === 'Y'" class="absolute flex justify-center w-full font-bold bottom-1">
72
+ <img :src="utogether" class="!h-10" style="height: 40px" />
73
+ <span class="flex flex-row justify-center" style="width: 300px">
74
+ <span style="font-size: 0; text-align: center">
75
+ <a
76
+ href="http://www.u-together.cn/"
77
+ target="_blank"
78
+ class="!inline-block"
79
+ style="margin-bottom: -5px; font-size: 17px; color: #fff; mix-blend-mode: difference"
80
+ :style="{ color: sysConfig.baseColor || '#FFF' }"
81
+ >
82
+ 深圳友聚信息技术有限公司
83
+ </a>
84
+ <a
85
+ href="http://www.u-together.cn/"
86
+ target="_blank"
87
+ class="!inline-block"
88
+ style="font-size: 12px; color: #fff; mix-blend-mode: difference"
89
+ :style="{ color: sysConfig.baseColor || '#FFF' }"
90
+ >
91
+ SHENZHEN U-TOGETHER CO. LTD
92
+ </a>
93
+ </span>
94
+ <span class="flex items-center text-white" style="width: 75px; font-size: 10px">技术支持</span>
95
+ </span>
96
+ </div>
97
+ </div>
98
+ </template>
99
+
100
+ <script lang="ts">
101
+ export default { name: 'LoginView' };
102
+ </script>
103
+
104
+ <script setup lang="ts">
105
+ import { ref, reactive, onBeforeMount } from 'vue';
106
+ import { useRouter } from 'vue-router';
107
+ import { useI18n } from 'vue-i18n';
108
+ // import io from 'socket.io-client';
109
+ import { useFavicon } from '@vueuse/core';
110
+ import { isEmpty, toDateString } from 'xe-utils';
111
+ import { removeClass, storageLocal, errorMessage, cookies, delay } from '@utogether/utils';
112
+ import to from 'await-to-js';
113
+ // import JSEencrypt from 'jsencrypt';
114
+ import { useSystemStoreHook } from '../../store/modules/system';
115
+ import { useLayout } from '../../layout/hooks/useLayout';
116
+ import { useDataThemeChange } from '../../layout/hooks/useDataThemeChange';
117
+ import { getBaseURL, getServiceApi } from '../../api';
118
+ import { initDict } from '../../api/user';
119
+ import { kTOKEN, kCKTOKEN, kLOGINER, kSYSCONFIG } from '../../contant';
120
+ import { getPlatform, getBrower } from '../../utils/browers';
121
+ import { onLogined, onBeforeLogined } from '../../utils/lifecycle';
122
+ // import bg from '../../assets/svg/bg.svg?component';
123
+ import utogether from '../../assets/images/utogether.png';
124
+ import welcome from '../../assets/images/welcome.png';
125
+
126
+ import LockFill from '@iconify-icons/ri/lock-fill';
127
+ import UserFill from '@iconify-icons/ri/user-3-fill';
128
+
129
+ interface IContextProps {
130
+ username: string;
131
+ passWord: string;
132
+ verify: number | null;
133
+ svg: any;
134
+ domain: string;
135
+ }
136
+ interface IRSAPublic {
137
+ publicKeyExponent: string;
138
+ publicKeyModulus: string;
139
+ requestKey: string;
140
+ }
141
+ const contextInfo: IContextProps = reactive({
142
+ username: '',
143
+ passWord: '',
144
+ requestKey: '',
145
+ verify: null,
146
+ svg: null,
147
+ domain: ''
148
+ });
149
+ const publicRSA: IRSAPublic = reactive({
150
+ publicKeyExponent: '10001',
151
+ publicKeyModulus:
152
+ 'a12708ab26367e1711bd767f6bb1f29afbd85380185723d7b492230e2567c95cf5718eca745da0643400ca619fbeec892df61abe1f71ad3b822d076ed831080c53782edf8c0627ee95c57e2bee12fe55da2b3cadec59947a75ccccbbf36fb3b781c93b4bf51489789f1c0849f9023a16ec70bef41a504785e1082b6f13588e29',
153
+ requestKey: ''
154
+ });
155
+
156
+ const bgStyle = ref({
157
+ backgroundImage: '',
158
+ backgroundRepeat: 'no-repeat',
159
+ backgroundPosition: 'center'
160
+ });
161
+ const refreshKey = ref(0);
162
+
163
+ const sysConfig = ref<IRecord>({});
164
+ const router = useRouter();
165
+ const { t } = useI18n();
166
+ const serviceApi = getServiceApi();
167
+ // const { $config } = useGlobal();
168
+
169
+ const { initStorage } = useLayout();
170
+ const { overallStyle, dataThemeChange } = useDataThemeChange();
171
+ initStorage();
172
+
173
+ const loading = ref(false);
174
+ // 登录
175
+ const onLogin = async () => {
176
+ // insertLoginInfo();
177
+ // return;
178
+ const { username, passWord, verify } = contextInfo;
179
+ if (isEmpty(username) || isEmpty(passWord)) {
180
+ return errorMessage(t('message.tip.loginFailure'));
181
+ }
182
+ // @ts-ignore
183
+ setMaxDigits(200);
184
+ // @ts-ignore
185
+ const rsakeypair = new RSAKeyPair(publicRSA.publicKeyExponent, '', publicRSA.publicKeyModulus);
186
+ // @ts-ignore
187
+ const password = encryptedString(rsakeypair, passWord.split('').reverse().join(''));
188
+ // const key = new JSEencrypt();
189
+ // key.setPublicKey(
190
+ // '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChJwirJjZ+FxG9dn9rsfKa+9hTgBhXI9e0kiMOJWfJXPVxjsp0XaBkNADKYZ++7Ikt9hq+H3GtO4ItB27YMQgMU3gu34wGJ+6VxX4r7hL+VdorPK3sWZR6dczMu/Nvs7eByTtL9RSJeJ8cCEn5AjoW7HC+9BpQR4XhCCtvE1iOKQIDAQAB-----END PUBLIC KEY-----'
191
+ // );
192
+ // const password = key.encrypt(passWord);
193
+ // // console.log('password1 ===', password1);
194
+ // console.log('password ===', password);
195
+ // 执行登录成功后的函数
196
+ onBeforeLogined();
197
+ const param = {
198
+ username,
199
+ password,
200
+ requestKey: publicRSA.requestKey,
201
+ verify: verify,
202
+ domain: getBaseURL()
203
+ };
204
+ loading.value = true;
205
+ const [err, data] = await to(serviceApi.post('/uath/login', param));
206
+ if (err) {
207
+ loading.value = false;
208
+ return;
209
+ }
210
+ useSystemStoreHook().setSessionKey(data);
211
+ cacheToken(data);
212
+ cookies.set(kLOGINER, username);
213
+ if (!storageLocal.getItem('kLov')) {
214
+ initDict().then(res => useSystemStoreHook().setDict(res));
215
+ }
216
+ // initSocket(username);
217
+ await delay(100);
218
+ // 执行登录成功后的函数
219
+ onLogined();
220
+ router.push('/');
221
+ insertLoginInfo(username);
222
+ loading.value = false;
223
+ };
224
+
225
+ function onUserBlur() {
226
+ if (contextInfo.username.length === 0) removeClass(document.querySelector('.user'), 'focus');
227
+ }
228
+
229
+ function onPwdBlur() {
230
+ if (contextInfo.passWord.length === 0) removeClass(document.querySelector('.pwd'), 'focus');
231
+ }
232
+
233
+ /**
234
+ * @description: 缓存token
235
+ * @param {*} token token数据
236
+ * @return {*}
237
+ */
238
+ const cacheToken = token => {
239
+ const { access_token, expires_in, refresh_token } = token;
240
+ const cache = {
241
+ accessToken: access_token,
242
+ refreshToken: refresh_token,
243
+ // expires: Date.now() + expires_in
244
+ expires: Date.now() + expires_in * 1000
245
+ };
246
+
247
+ cookies.set(kCKTOKEN, token.access_token);
248
+ const dataString = JSON.stringify(cache);
249
+ expires_in > 0 ? cookies.set(kTOKEN, dataString) : cookies.set(kTOKEN, dataString);
250
+ };
251
+
252
+ // let socketIo = null;
253
+ // const initSocket = username => {
254
+ // socketIo = io(`ws://119.145.169.186:10006/webSocket/${username}`, {
255
+ // transports: ['websocket']
256
+ // });
257
+ // socketIo.on('connection', res => {
258
+ // console.log('connection', res);
259
+ // });
260
+ // socketIo.on('connected', res => {
261
+ // console.log('connected', res);
262
+ // });
263
+ // socketIo.on('close', res => {
264
+ // console.log('connected', res);
265
+ // });
266
+ // socketIo.on('message', res => {
267
+ // console.log('message', res);
268
+ // // ElNotification({
269
+ // // title: '您有一条新的消息',
270
+ // // message: res,
271
+ // // type: 'success'
272
+ // // });
273
+ // });
274
+ // };
275
+
276
+ const insertLoginInfo = username => {
277
+ const userAgent = navigator.userAgent.toLowerCase();
278
+ const { browser, browserVersion } = getBrower(userAgent);
279
+ const obj = {
280
+ userName: username,
281
+ loginTime: toDateString(new Date()),
282
+ browser,
283
+ browserVersion,
284
+ operatingSystem: getPlatform(userAgent)
285
+ };
286
+ serviceApi.post('/upfm/v1/userMonitor', obj);
287
+ };
288
+
289
+ const getSysConfig = async () => {
290
+ // const [err, data]: [Error, any] = await to(serviceApi.get('/upfm/v1/sysConfig', {}));
291
+ // if (!err) {
292
+ // const config: any = {};
293
+ // data.list?.forEach(item => {
294
+ // config[item.configCode] = item.configValue;
295
+ // if (item.fileName) {
296
+ // config[item.configCode] = getBaseURL() + '/ufil' + item.configValue;
297
+ // }
298
+ // });
299
+ // const title = data.list?.find(f => f.configCode === 'title')?.configValue;
300
+ // config['title'] = title || 'U-DP';
301
+ // sysConfig.value = config;
302
+ // bgStyle.value = {
303
+ // backgroundImage: config['backgroundImg'] ? `url(${config['backgroundImg']})` : ``,
304
+ // // backgroundImage: config['backgroundImg'] ? `url(${config['backgroundImg']})` : `url1(${welcome})`,
305
+ // backgroundRepeat: 'no-repeat',
306
+ // backgroundPosition: 'center'
307
+ // };
308
+ // console.log('bgStyle=', bgStyle);
309
+ // const favicon = useFavicon();
310
+ // favicon.value = config.favicon || utogether;
311
+ // storageLocal.setItem(kSYSCONFIG, config);
312
+ // }
313
+
314
+ sysConfig.value = storageLocal.getItem(kSYSCONFIG);
315
+
316
+ bgStyle.value = {
317
+ backgroundImage: sysConfig.value['backgroundImg'] ? `url(${sysConfig.value['backgroundImg']})` : ``,
318
+ backgroundRepeat: 'no-repeat',
319
+ backgroundPosition: 'center'
320
+ };
321
+
322
+ const favicon = useFavicon();
323
+ favicon.value = sysConfig.value.favicon || utogether;
324
+ };
325
+
326
+ dataThemeChange(overallStyle.value);
327
+
328
+ onBeforeMount(() => {
329
+ getSysConfig();
330
+ // cookies.addPrefix('sitzone-mes');
331
+ });
332
+ </script>
333
+
334
+ <style scoped>
335
+ @import url('../../style/login.css');
336
+ </style>