@utogether/udp-core 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/build/plugins.ts +13 -2
  2. package/dist/{403-JWjatlxJ.js → 403-B1rIjAAu.js} +7 -6
  3. package/dist/{404-BcdMJfPb.js → 404-mBqc2y4t.js} +14 -13
  4. package/dist/{500-bsa3F_cc.js → 500-BoI45Zdh.js} +10 -9
  5. package/dist/{AuthorityInfo-CqItgNs5.js → AuthorityInfo-B08NBIIn.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BLP1SaiH.js +100 -0
  7. package/dist/{AuthorityPanel-BaLMwMgW.js → AuthorityPanel-BeBNiwqc.js} +1 -1
  8. package/dist/{AuthorityPanel.vue_vue_type_style_index_0_lang-C_bkqLD9.js → AuthorityPanel.vue_vue_type_style_index_0_lang-CIYmnP9-.js} +6 -6
  9. package/dist/{Company-DVff9IA7.js → Company-JGGyWEWH.js} +3 -3
  10. package/dist/{CompanyPanel-CNrdq4XE.js → CompanyPanel-BQ_cCmDx.js} +16 -16
  11. package/dist/{Department-CqcpfL4i.js → Department-z2iO6hwM.js} +10 -10
  12. package/dist/{DepartmentPanel-Bvti4LGu.js → DepartmentPanel-BtQe7zwU.js} +108 -78
  13. package/dist/{DesignPanel-CjykspE1.js → DesignPanel-7mhtVWas.js} +1 -1
  14. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BK9EERdd.js → DesignPanel.vue_vue_type_style_index_0_lang-4EsHemj_.js} +24 -26
  15. package/dist/DictView-CjchV2Yk.js +109 -0
  16. package/dist/InvOrganization-Pn1O_XP0.js +74 -0
  17. package/dist/Org-BqytV_vi.js +39 -0
  18. package/dist/{Preview-Cm_7RhYU.js → Preview-CLpUUMay.js} +2 -2
  19. package/dist/{ReportDefine-CJVlQ--7.js → ReportDefine-Cz1KtEUF.js} +1 -1
  20. package/dist/{ReportDesign-B0unlrkt.js → ReportDesign-BaORYud4.js} +46 -46
  21. package/dist/{ReportQuery-BKuMCEvF.js → ReportQuery-CPCPXiXz.js} +5 -5
  22. package/dist/{ReportQueryFrom-DAngMJLU.js → ReportQueryFrom-C_AcrfkJ.js} +1 -1
  23. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CPpwmztJ.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-Bm67ejay.js} +6 -5
  24. package/dist/{ReportTemplate-8YH3L8Pv.js → ReportTemplate-CFiNMz79.js} +26 -26
  25. package/dist/{Role-MxI30-0W.js → Role-B-XDoJd5.js} +6 -6
  26. package/dist/{RoleAssign-BzUY_y_y.js → RoleAssign-BolW8YVs.js} +9 -9
  27. package/dist/{RolePanel-DS_TErTn.js → RolePanel-2kfs5tw9.js} +1 -1
  28. package/dist/{RolePanel-CXdcvsR5.js → RolePanel-HilSuYns.js} +1 -1
  29. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CE4gApUY.js +132 -0
  30. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Ddl-A7Zh.js → RolePanel.vue_vue_type_script_setup_true_lang-DPzgfAyV.js} +42 -36
  31. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DnchUgIF.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCTH4RkH.js} +20 -20
  32. package/dist/{Staff-D7tXo_Gn.js → Staff-BTk3whFC.js} +3 -3
  33. package/dist/{StaffInfo-Bk8BY8PO.js → StaffInfo-d3AuSzlA.js} +1 -1
  34. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DqKwZi5f.js → StaffInfo.vue_vue_type_script_setup_true_lang-eOL4VlfE.js} +13 -13
  35. package/dist/{StaffPanel-VtpGCTIq.js → StaffPanel-DV-D4jjz.js} +1 -1
  36. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-4sFq3CEo.js +135 -0
  37. package/dist/{SysUser-D0Q6OvD7.js → SysUser-BnjYytws.js} +2 -2
  38. package/dist/{SysUserPanel-1_vrsANQ.js → SysUserPanel-CBoyD-Qi.js} +1 -1
  39. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-PrTlTZR-.js +341 -0
  40. package/dist/{SystemMenu-9PG3vESE.js → SystemMenu-kYB_ZaUt.js} +49 -47
  41. package/dist/{UserInfo-qgXUEGwi.js → UserInfo-4dx97VBL.js} +1 -1
  42. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CN0C5rVk.js → UserInfo.vue_vue_type_style_index_0_lang-BpbC_ZDm.js} +35 -33
  43. package/dist/{childView-C7ZSA5fR.js → childView-CHPNfTEb.js} +1 -1
  44. package/dist/{childView-yV2QLwfA.js → childView-CKA_JgVZ.js} +1 -1
  45. package/dist/{childView.vue_vue_type_style_index_0_lang-DdKxPGdh.js → childView.vue_vue_type_style_index_0_lang-Bym2fQRd.js} +7 -7
  46. package/dist/childView.vue_vue_type_style_index_0_lang-W7bCtXeu.js +177 -0
  47. package/dist/{code-rule-95K1jr-u.js → code-rule-CbxuZg0-.js} +42 -41
  48. package/dist/core.es.js +19 -10
  49. package/dist/{cron-task-DGrQwOHs.js → cron-task-nTOpqQYf.js} +5 -5
  50. package/dist/flow-task-B07st2aD.js +10 -0
  51. package/dist/{frameView-7SmME93D.js → frameView-Z1tPUyCh.js} +15 -14
  52. package/dist/img/l_img.svg +1 -1
  53. package/dist/img/minicolors.png +0 -0
  54. package/dist/img/v_img.svg +1 -1
  55. package/dist/index-C3q8HoJM.js +4650 -0
  56. package/dist/{layoutView-C6WIVWGZ.js → layoutView--MGA9zUB.js} +1776 -1764
  57. package/dist/{log-in-e7D5Ss1P.js → log-in-CSYJDA6m.js} +36 -29
  58. package/dist/log-out-DiwGCg7p.js +130 -0
  59. package/dist/login-C6Y0ajDp.js +251 -0
  60. package/dist/{login-log-CvVnyGi3.js → login-log-C0V-_l3F.js} +6 -4
  61. package/dist/{lov-view-DoF5LqFQ.js → lov-view-Cmv7wZZ9.js} +9 -9
  62. package/dist/{menuInfo-CNzGQwOD.js → menuInfo-UeutJpOa.js} +1 -1
  63. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-51SYxVc_.js → menuInfo.vue_vue_type_style_index_0_lang-CWX4Mu67.js} +144 -121
  64. package/dist/pda-app-B6w99SJo.js +710 -0
  65. package/dist/redirect-BqegffKC.js +15 -0
  66. package/dist/{resource-gVFFMO9l.js → resource-BybJvUv0.js} +17 -17
  67. package/dist/{su-welcome-BN_s_RX_.js → su-welcome-C1bmxHoY.js} +124 -126
  68. package/dist/sys-config-BnmIDnCj.js +370 -0
  69. package/dist/udp-core.css +1 -9
  70. package/dist/utogether-MlnyYtNS.js +4 -0
  71. package/index.ts +19 -6
  72. package/package.json +18 -17
  73. package/src/App.vue +2 -7
  74. package/src/api/http.ts +1 -4
  75. package/src/api/index.ts +5 -3
  76. package/src/api/user.ts +2 -2
  77. package/src/components/SuCharts/src/UserInfo.vue +3 -3
  78. package/src/components/SuScrollTree/ScrollPanel.vue +4 -9
  79. package/src/components/udp/content/index.vue +88 -0
  80. package/src/components/udp/form/form.vue +109 -0
  81. package/src/components/udp/grid/index.vue +524 -0
  82. package/src/components/udp/index.ts +5 -4
  83. package/src/components/udp/ut-stamp-badge/index.vue +271 -0
  84. package/src/components/udp/utils.ts +408 -40
  85. package/src/directives/permission/index.ts +1 -1
  86. package/src/layout/components/lay-navbar/index.vue +9 -7
  87. package/src/layout/components/lay-panel/index.vue +3 -3
  88. package/src/layout/components/lay-search/index.vue +1 -1
  89. package/src/layout/components/lay-select-org/index.vue +4 -9
  90. package/src/layout/components/lay-setting/index.vue +503 -510
  91. package/src/layout/components/lay-sidebar/breadCrumb.vue +1 -1
  92. package/src/layout/components/lay-sidebar/horizontal.vue +8 -6
  93. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  94. package/src/layout/components/lay-sidebar/sidebar-logo.vue +101 -98
  95. package/src/layout/components/lay-tag/index.vue +598 -625
  96. package/src/layout/hooks/useDataThemeChange.ts +1 -1
  97. package/src/layout/hooks/useNav.ts +176 -173
  98. package/src/layout/hooks/useTag.ts +227 -233
  99. package/src/layout/layoutView.vue +215 -215
  100. package/src/layout/types.ts +93 -92
  101. package/src/main.ts +115 -109
  102. package/src/plugins/i18n/en.ts +26 -13
  103. package/src/plugins/i18n/module/u-workflow.ts +1 -1
  104. package/src/plugins/i18n/zh.ts +363 -337
  105. package/src/plugins/vxe-table/index.ts +74 -4
  106. package/src/plugins/vxe-table/render.tsx +186 -58
  107. package/src/router/index.ts +187 -183
  108. package/src/router/modules/flow.ts +35 -0
  109. package/src/router/modules/home.ts +32 -32
  110. package/src/router/modules/remaining.ts +1 -26
  111. package/src/router/utils.ts +420 -377
  112. package/src/store/modules/app.ts +2 -4
  113. package/src/store/modules/epTheme.ts +48 -49
  114. package/src/store/modules/multiTags.ts +15 -14
  115. package/src/store/modules/permission.ts +25 -15
  116. package/src/store/modules/system.ts +1 -3
  117. package/src/style/button.scss +11 -4
  118. package/src/style/login.css +1 -1
  119. package/src/style/tailwind.css +1 -68
  120. package/src/style/vxetable.scss +103 -11
  121. package/src/utils/authority/index.ts +1 -1
  122. package/src/utils/dataFormat/index.ts +223 -223
  123. package/src/utils/index.ts +3 -1
  124. package/src/utils/lifecycle.ts +39 -20
  125. package/src/utils/propTypes.ts +1 -6
  126. package/src/utils/storage/index.ts +2 -2
  127. package/src/utils/{http → udp/http}/index.ts +27 -30
  128. package/src/utils/{http → udp/http}/types.d.ts +2 -6
  129. package/src/views/login/login-view.vue +6 -20
  130. package/src/views/organization/company/CompanyPanel.vue +2 -2
  131. package/src/views/organization/department/Department.vue +58 -58
  132. package/src/views/organization/department/DepartmentPanel.vue +303 -283
  133. package/src/views/organization/inv-org/InvOrganization.vue +23 -9
  134. package/src/views/organization/org/Org.vue +9 -5
  135. package/src/views/organization/staff/StaffInfo.vue +127 -133
  136. package/src/views/organization/staff/StaffPanel.vue +162 -145
  137. package/src/views/system/cron/cron-task.vue +2 -12
  138. package/src/views/system/menu/AuthorityPanel.vue +2 -2
  139. package/src/views/system/menu/SystemMenu.vue +14 -20
  140. package/src/views/system/menu/menuInfo.vue +39 -23
  141. package/src/views/system/role/AuthorityInfo.vue +19 -15
  142. package/src/views/system/role/Role.vue +1 -5
  143. package/src/views/system/role/RolePanel.vue +11 -2
  144. package/src/views/system/role/UserInfo.vue +11 -9
  145. package/src/views/system/role-assign/RoleAssign.vue +2 -2
  146. package/src/views/system/role-assign/RolePanel.vue +12 -9
  147. package/src/views/system/sys/sys-config.vue +70 -21
  148. package/src/views/system/sysUser/SysUserPanel.vue +347 -278
  149. package/src/views/uapp/pda/pda-app.vue +48 -16
  150. package/src/views/udev/coderule/code-rule.vue +132 -121
  151. package/src/views/udev/dict/DictView.vue +118 -106
  152. package/src/views/udev/dict/childView.vue +183 -222
  153. package/src/views/udev/lov/childView.vue +1 -7
  154. package/src/views/ufile/aggregation/File.vue +5 -5
  155. package/src/views/ufile/file/water-mark.vue +14 -14
  156. package/src/views/uhome/components/menu-favorite.vue +314 -331
  157. package/src/views/uhome/su-welcome.vue +319 -339
  158. package/src/views/ulogin/login.vue +325 -316
  159. package/src/views/upms/interface/log-in.vue +100 -106
  160. package/src/views/upms/interface/log-out.vue +104 -107
  161. package/src/views/upms/user/login-log.vue +54 -60
  162. package/src/views/urpt/design/DesignPanel.vue +16 -35
  163. package/src/views/urpt/design/Preview.vue +1 -0
  164. package/src/views/urpt/design/ReportDesign.vue +17 -23
  165. package/src/views/urpt/static-resource/resource.vue +3 -3
  166. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  167. package/src/views/utask/flow-task.vue +18 -0
  168. package/types/global.d.ts +231 -236
  169. package/vite.config.ts +13 -2
  170. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-32L40GY2.js +0 -102
  171. package/dist/DictView-q7kR9K--.js +0 -95
  172. package/dist/InvOrganization-DI45LqZV.js +0 -260
  173. package/dist/Org-CZju_ZiR.js +0 -35
  174. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DJKu6PXz.js +0 -126
  175. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-C3Ixs12y.js +0 -111
  176. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-C5XEmxsV.js +0 -288
  177. package/dist/childView.vue_vue_type_style_index_0_lang-bkmucBUL.js +0 -187
  178. package/dist/core.umd.js +0 -173
  179. package/dist/index-OswH7SsT.js +0 -9937
  180. package/dist/log-out--RRncZhN.js +0 -120
  181. package/dist/login-BhCMeCLS.js +0 -251
  182. package/dist/pda-app-nn3llDUx.js +0 -2209
  183. package/dist/redirect-CmMplDV4.js +0 -15
  184. package/dist/sys-config-DGutV-VX.js +0 -277
  185. package/dist/utogether-wFDCI28t.js +0 -182
  186. package/src/assets/images/empty.png +0 -0
  187. package/src/assets/images/logo.png +0 -0
  188. package/src/components/ReCountTo/README.md +0 -2
  189. package/src/components/ReCountTo/index.ts +0 -18
  190. package/src/components/ReCountTo/src/normal/index.tsx +0 -165
  191. package/src/components/ReCountTo/src/normal/props.ts +0 -37
  192. package/src/components/ReCountTo/src/rebound/index.tsx +0 -67
  193. package/src/components/ReCountTo/src/rebound/props.ts +0 -14
  194. package/src/components/ReCountTo/src/rebound/rebound.css +0 -77
  195. package/src/components/ReCropper/index.ts +0 -14
  196. package/src/components/ReCropper/src/index.tsx +0 -141
  197. package/src/components/ReFlicker/index.css +0 -39
  198. package/src/components/ReFlicker/index.ts +0 -50
  199. package/src/components/ReFlop/index.ts +0 -14
  200. package/src/components/ReFlop/src/Filpper.tsx +0 -99
  201. package/src/components/ReFlop/src/filpper.css +0 -184
  202. package/src/components/ReFlop/src/index.vue +0 -126
  203. package/src/components/ReFlowChart/index.ts +0 -24
  204. package/src/components/ReFlowChart/src/Control.vue +0 -139
  205. package/src/components/ReFlowChart/src/DataDialog.vue +0 -12
  206. package/src/components/ReFlowChart/src/NodePanel.vue +0 -151
  207. package/src/components/ReFlowChart/src/adpterForTurbo.ts +0 -160
  208. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.css +0 -49
  209. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.eot +0 -0
  210. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.js +0 -61
  211. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.json +0 -58
  212. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.svg +0 -47
  213. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.ttf +0 -0
  214. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff +0 -0
  215. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff2 +0 -0
  216. package/src/components/ReFlowChart/src/config.ts +0 -62
  217. package/src/components/ReSplitPane/index.css +0 -49
  218. package/src/components/ReSplitPane/index.tsx +0 -119
  219. package/src/components/ReSplitPane/resizer.css +0 -45
  220. package/src/components/ReSplitPane/resizer.tsx +0 -30
  221. package/src/components/SuCommon/card/components/Card.vue +0 -148
  222. package/src/components/SuCommon/card/components/DialogForm.vue +0 -127
  223. package/src/components/SuCommon/card/index.vue +0 -142
  224. package/src/components/SuCommon/icon-select/index.vue +0 -241
  225. package/src/components/SuCommon/table/index.vue +0 -208
  226. package/src/components/SuCommon/utils/index.ts +0 -103
  227. package/src/components/SuCommon/utils/slot.tsx +0 -50
  228. package/src/components/udp/form-upload.vue +0 -132
  229. package/src/components/udp/modal-form.vue +0 -180
  230. package/src/utils/udp/useRender.ts +0 -420
  231. package/src/views/components/contextmenu/basic.vue +0 -74
  232. package/src/views/components/contextmenu/context-menu.vue +0 -40
  233. package/src/views/components/contextmenu/menuDynamic.vue +0 -99
  234. package/src/views/components/contextmenu/menuGroup.vue +0 -71
  235. package/src/views/components/count-to/index.vue +0 -43
  236. package/src/views/components/cropping/index.vue +0 -59
  237. package/src/views/components/cropping/picture.jpeg +0 -0
  238. package/src/views/components/split-pane/index.vue +0 -82
  239. package/src/views/components/video/index.vue +0 -57
@@ -1,316 +1,325 @@
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
- <!-- <bg /> -->
6
- <img :src="welcome" />
7
- </div>
8
- <div class="login-box">
9
- <div class="login-form">
10
- <h2
11
- v-motion
12
- :initial="{ opacity: 0, y: 100 }"
13
- :enter="{ opacity: 1, y: 0, transition: { delay: 100 } }"
14
- >
15
- {{ sysConfig['title'] }}
16
- </h2>
17
- <div
18
- v-motion
19
- class="input-group user focus"
20
- :initial="{ opacity: 0, y: 100 }"
21
- :enter="{ opacity: 1, y: 0, transition: { delay: 200 } }"
22
- >
23
- <div class="icon">
24
- <IconifyIconOffline :icon="UserFill" width="30" height="30" />
25
- </div>
26
- <div>
27
- <i class="ri-logout-box-line" />
28
- <h5>{{ $t('message.udp.userName') }}</h5>
29
- <input
30
- v-model.trim="contextInfo.username"
31
- v-focus
32
- type="text"
33
- class="input"
34
- @blur="onUserBlur"
35
- @keyup.enter="onLogin"
36
- />
37
- </div>
38
- </div>
39
- <div
40
- v-motion
41
- class="input-group pwd focus"
42
- :initial="{ opacity: 0, y: 100 }"
43
- :enter="{
44
- opacity: 1,
45
- y: 0,
46
- transition: { delay: 300 }
47
- }"
48
- >
49
- <div class="icon">
50
- <IconifyIconOffline :icon="LockFill" width="30" height="30" />
51
- </div>
52
- <div>
53
- <h5>{{ $t('message.udp.password') }}</h5>
54
- <input
55
- v-model.trim="contextInfo.passWord"
56
- type="password"
57
- class="input"
58
- @blur="onPwdBlur"
59
- @keyup.enter="onLogin"
60
- />
61
- </div>
62
- </div>
63
- <button
64
- v-motion
65
- class="btn"
66
- :initial="{ opacity: 0, y: 10 }"
67
- :enter="{ opacity: 1, y: 0, transition: { delay: 400 } }"
68
- :disabled="loading"
69
- :class="{ loading: loading }"
70
- @click="onLogin"
71
- >
72
- {{ $t('message.udp.login') }}
73
- </button>
74
- </div>
75
- </div>
76
- <div class="absolute flex justify-center w-full font-bold bottom-1">
77
- <img :src="utogether" class="!h-10" style="height: 40px" />
78
- <span class="flex flex-row justify-center" style="width: 300px">
79
- <span style="font-size: 0; text-align: center">
80
- <a
81
- href="http://www.u-together.cn/"
82
- target="_blank"
83
- class="!inline-block"
84
- style="margin-bottom: -5px; font-size: 17px; color: #59d8d8"
85
- >
86
- 深圳友聚信息技术有限公司
87
- </a>
88
- <a
89
- href="http://www.u-together.cn/"
90
- target="_blank"
91
- class="!inline-block"
92
- style="font-size: 12px; color: #d9d9d9"
93
- >
94
- SHENZHEN U-TOGETHER CO. LTD
95
- </a>
96
- </span>
97
- <span class="flex items-center text-white" style="width: 75px; font-size: 10px">技术支持</span>
98
- </span>
99
- </div>
100
- </div>
101
- </template>
102
-
103
- <script lang="ts">
104
- export default { name: 'LoginView' };
105
- </script>
106
-
107
- <script setup lang="ts">
108
- import { ref, reactive, onBeforeMount } from 'vue';
109
- import { useRouter } from 'vue-router';
110
- import { useI18n } from 'vue-i18n';
111
- // import io from 'socket.io-client';
112
- import { useFavicon } from '@vueuse/core';
113
- import { isEmpty, toDateString } from 'xe-utils';
114
- import { removeClass, storageLocal, errorMessage, cookies, delay } from '@utogether/utils';
115
- import to from 'await-to-js';
116
- import { useSystemStoreHook } from '../../store/modules/system';
117
- import { useLayout } from '../../layout/hooks/useLayout';
118
- import { useDataThemeChange } from '../../layout/hooks/useDataThemeChange';
119
- import { getBaseURL, getServiceApi } from '../../api';
120
- import { initDict } from '../../api/user';
121
- import { kTOKEN, kCKTOKEN, kLOGINER, kSYSCONFIG } from '../../contant';
122
- import { getPlatform, getBrower } from '../../utils/browers';
123
- import { onLogined } from '../../utils/lifecycle';
124
- // import bg from '../../assets/svg/bg.svg?component';
125
- import utogether from '../../assets/images/utogether.png';
126
- import welcome from '../../assets/images/welcome.png';
127
-
128
- import LockFill from '@iconify-icons/ri/lock-fill';
129
- import UserFill from '@iconify-icons/ri/user-3-fill';
130
-
131
- interface IContextProps {
132
- username: string;
133
- passWord: string;
134
- verify: number | null;
135
- svg: any;
136
- domain: string;
137
- }
138
- interface IRSAPublic {
139
- publicKeyExponent: string;
140
- publicKeyModulus: string;
141
- requestKey: string;
142
- }
143
- const contextInfo: IContextProps = reactive({
144
- username: '',
145
- passWord: '',
146
- requestKey: '',
147
- verify: null,
148
- svg: null,
149
- domain: ''
150
- });
151
- const publicRSA: IRSAPublic = reactive({
152
- publicKeyExponent: '10001',
153
- publicKeyModulus:
154
- 'a12708ab26367e1711bd767f6bb1f29afbd85380185723d7b492230e2567c95cf5718eca745da0643400ca619fbeec892df61abe1f71ad3b822d076ed831080c53782edf8c0627ee95c57e2bee12fe55da2b3cadec59947a75ccccbbf36fb3b781c93b4bf51489789f1c0849f9023a16ec70bef41a504785e1082b6f13588e29',
155
- requestKey: ''
156
- });
157
-
158
- const bgStyle = ref({
159
- backgroundImage: '',
160
- backgroundRepeat: 'no-repeat',
161
- backgroundPosition: 'center'
162
- });
163
- const refreshKey = ref(0);
164
-
165
- const sysConfig = ref({});
166
- const router = useRouter();
167
- const { t } = useI18n();
168
- const serviceApi = getServiceApi();
169
- // const { $config } = useGlobal();
170
-
171
- const { initStorage } = useLayout();
172
- const { overallStyle, dataThemeChange } = useDataThemeChange();
173
- initStorage();
174
-
175
- const loading = ref(false);
176
- // 登录
177
- const onLogin = async () => {
178
- // insertLoginInfo();
179
- // return;
180
- const { username, passWord, verify } = contextInfo;
181
- if (isEmpty(username) || isEmpty(passWord)) {
182
- return errorMessage(t('message.tip.loginFailure'));
183
- }
184
- // @ts-ignore
185
- setMaxDigits(200);
186
- // @ts-ignore
187
- const rsakeypair = new RSAKeyPair(publicRSA.publicKeyExponent, '', publicRSA.publicKeyModulus);
188
- // @ts-ignore
189
- const password = encryptedString(rsakeypair, passWord.split('').reverse().join(''));
190
- const param = {
191
- username,
192
- password,
193
- requestKey: publicRSA.requestKey,
194
- verify: verify,
195
- domain: getBaseURL()
196
- };
197
- loading.value = true;
198
- const [err, data] = await to(serviceApi.post('/uath/login', param));
199
- if (err) {
200
- loading.value = false;
201
- return;
202
- }
203
- useSystemStoreHook().setSessionKey(data);
204
- cacheToken(data);
205
- cookies.set(kLOGINER, username);
206
- if (!storageLocal.getItem('kLov')) {
207
- initDict().then(res => useSystemStoreHook().setDict(res));
208
- }
209
- // initSocket(username);
210
- await delay(100);
211
- // 执行登录成功后的函数
212
- onLogined();
213
- router.push('/');
214
- insertLoginInfo(username);
215
- loading.value = false;
216
- };
217
-
218
- function onUserBlur() {
219
- if (contextInfo.username.length === 0) removeClass(document.querySelector('.user'), 'focus');
220
- }
221
-
222
- function onPwdBlur() {
223
- if (contextInfo.passWord.length === 0) removeClass(document.querySelector('.pwd'), 'focus');
224
- }
225
-
226
- /**
227
- * @description: 缓存token
228
- * @param {*} token token数据
229
- * @return {*}
230
- */
231
- const cacheToken = token => {
232
- const { access_token, expires_in, refresh_token } = token;
233
- const cache = {
234
- accessToken: access_token,
235
- refreshToken: refresh_token,
236
- expires: Date.now() + expires_in * 1000
237
- };
238
-
239
- cookies.set(kCKTOKEN, token.access_token);
240
- const dataString = JSON.stringify(cache);
241
- expires_in > 0 ? cookies.set(kTOKEN, dataString) : cookies.set(kTOKEN, dataString);
242
- };
243
-
244
- // let socketIo = null;
245
- // const initSocket = username => {
246
- // socketIo = io(`ws://119.145.169.186:10006/webSocket/${username}`, {
247
- // transports: ['websocket']
248
- // });
249
- // socketIo.on('connection', res => {
250
- // console.log('connection', res);
251
- // });
252
- // socketIo.on('connected', res => {
253
- // console.log('connected', res);
254
- // });
255
- // socketIo.on('close', res => {
256
- // console.log('connected', res);
257
- // });
258
- // socketIo.on('message', res => {
259
- // console.log('message', res);
260
- // // ElNotification({
261
- // // title: '您有一条新的消息',
262
- // // message: res,
263
- // // type: 'success'
264
- // // });
265
- // });
266
- // };
267
-
268
- const insertLoginInfo = username => {
269
- const userAgent = navigator.userAgent.toLowerCase();
270
- const { browser, browserVersion } = getBrower(userAgent);
271
- const obj = {
272
- userName: username,
273
- loginTime: toDateString(new Date()),
274
- browser,
275
- browserVersion,
276
- operatingSystem: getPlatform(userAgent)
277
- };
278
- serviceApi.post('/upms/v1/userMonitor', obj);
279
- };
280
-
281
- const getSysConfig = async () => {
282
- const [err, data]: [Error, any] = await to(serviceApi.get('/upfm/v1/sysConfig', {}));
283
- if (!err) {
284
- const config: any = {};
285
- data.list?.forEach(item => {
286
- config[item.configCode] = item.configValue;
287
- if (item.fileName) {
288
- config[item.configCode] = getBaseURL() + '/ufil' + item.configValue;
289
- }
290
- });
291
- const title = data.list?.find(f => f.configCode === 'title')?.configValue;
292
- config['title'] = title || 'U-DP';
293
- sysConfig.value = config;
294
- bgStyle.value = {
295
- backgroundImage: config['backgroundImg'] ? `url(${config['backgroundImg']})` : '',
296
- backgroundRepeat: 'no-repeat',
297
- backgroundPosition: 'center'
298
- };
299
- console.log('bgStyle=', bgStyle);
300
- const favicon = useFavicon();
301
- favicon.value = config.favicon || utogether;
302
- storageLocal.setItem(kSYSCONFIG, config);
303
- }
304
- };
305
-
306
- dataThemeChange(overallStyle.value);
307
-
308
- onBeforeMount(() => {
309
- getSysConfig();
310
- // cookies.addPrefix('sitzone-mes');
311
- });
312
- </script>
313
-
314
- <style scoped>
315
- @import url('../../style/login.css');
316
- </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
+
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>