@utogether/udp-core 1.0.1-beta.9 → 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 (168) hide show
  1. package/build/plugins.ts +37 -39
  2. package/dist/{403-BOzKHdlm.js → 403-B1rIjAAu.js} +6 -6
  3. package/dist/{404-uwgt4Nll.js → 404-mBqc2y4t.js} +4 -4
  4. package/dist/{500-4HBf6V9m.js → 500-BoI45Zdh.js} +2 -2
  5. package/dist/{AuthorityInfo-DvbIh1vT.js → AuthorityInfo-B08NBIIn.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-BlCPvwXU.js → AuthorityInfo.vue_vue_type_style_index_0_lang-BLP1SaiH.js} +3 -3
  7. package/dist/{Company-D7Q9BFmr.js → Company-JGGyWEWH.js} +3 -3
  8. package/dist/{CompanyPanel-C0-PJlrt.js → CompanyPanel-BQ_cCmDx.js} +7 -7
  9. package/dist/{Department-h2hlXACv.js → Department-z2iO6hwM.js} +10 -10
  10. package/dist/{DepartmentPanel-B6hDEQpG.js → DepartmentPanel-BtQe7zwU.js} +108 -78
  11. package/dist/{DesignPanel-cS58-1v9.js → DesignPanel-7mhtVWas.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-LdvLC8VU.js → DesignPanel.vue_vue_type_style_index_0_lang-4EsHemj_.js} +6 -6
  13. package/dist/{DictView-T3TmpBa8.js → DictView-CjchV2Yk.js} +15 -16
  14. package/dist/InvOrganization-Pn1O_XP0.js +74 -0
  15. package/dist/{Org-CnCBDGKF.js → Org-BqytV_vi.js} +1 -1
  16. package/dist/{Preview-BaktKXB1.js → Preview-CLpUUMay.js} +2 -2
  17. package/dist/{ReportDefine-5Rb0PO9A.js → ReportDefine-Cz1KtEUF.js} +1 -1
  18. package/dist/{ReportDesign-DYdkVREA.js → ReportDesign-BaORYud4.js} +13 -13
  19. package/dist/{ReportQuery-BwhzIXMt.js → ReportQuery-CPCPXiXz.js} +1 -1
  20. package/dist/{ReportQueryFrom-PHtWwlOe.js → ReportQueryFrom-C_AcrfkJ.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-BE5yZNPM.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-Bm67ejay.js} +1 -1
  22. package/dist/{ReportTemplate-DaadVXIi.js → ReportTemplate-CFiNMz79.js} +11 -11
  23. package/dist/{Role-Dtg3nAmG.js → Role-B-XDoJd5.js} +3 -3
  24. package/dist/{RoleAssign-DEGtLssH.js → RoleAssign-BolW8YVs.js} +8 -8
  25. package/dist/{RolePanel-DpUzfE_o.js → RolePanel-2kfs5tw9.js} +1 -1
  26. package/dist/{RolePanel-CT7BTPmy.js → RolePanel-HilSuYns.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Xyo0YEI0.js → RolePanel.vue_vue_type_script_setup_true_lang-CE4gApUY.js} +7 -7
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Dg2A6DJu.js → RolePanel.vue_vue_type_script_setup_true_lang-DPzgfAyV.js} +13 -13
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CyutzDZS.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCTH4RkH.js} +4 -4
  30. package/dist/{Staff-_NlAGkrh.js → Staff-BTk3whFC.js} +3 -3
  31. package/dist/{StaffInfo-DVgUvVgd.js → StaffInfo-d3AuSzlA.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-C8hmlFgX.js → StaffInfo.vue_vue_type_script_setup_true_lang-eOL4VlfE.js} +5 -5
  33. package/dist/{StaffPanel-DKNZE3IE.js → StaffPanel-DV-D4jjz.js} +1 -1
  34. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-4sFq3CEo.js +135 -0
  35. package/dist/{SysUser-kQUf7XKz.js → SysUser-BnjYytws.js} +2 -2
  36. package/dist/{SysUserPanel-C191uX3U.js → SysUserPanel-CBoyD-Qi.js} +1 -1
  37. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-PrTlTZR-.js +341 -0
  38. package/dist/{SystemMenu-DwuSvHnj.js → SystemMenu-kYB_ZaUt.js} +36 -36
  39. package/dist/{UserInfo-DIsInFld.js → UserInfo-4dx97VBL.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CnvGdbej.js → UserInfo.vue_vue_type_style_index_0_lang-BpbC_ZDm.js} +10 -10
  41. package/dist/{childView-3Bs2UBEw.js → childView-CHPNfTEb.js} +1 -1
  42. package/dist/{childView-BawyULD7.js → childView-CKA_JgVZ.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-YpWF-p2F.js → childView.vue_vue_type_style_index_0_lang-Bym2fQRd.js} +7 -7
  44. package/dist/childView.vue_vue_type_style_index_0_lang-W7bCtXeu.js +177 -0
  45. package/dist/{code-rule-DVaYcn8S.js → code-rule-CbxuZg0-.js} +40 -38
  46. package/dist/core.es.js +18 -12
  47. package/dist/{cron-task-xuzP-BpE.js → cron-task-nTOpqQYf.js} +7 -7
  48. package/dist/flow-task-B07st2aD.js +10 -0
  49. package/dist/{frameView-Cudt06qS.js → frameView-Z1tPUyCh.js} +1 -1
  50. package/dist/index-C3q8HoJM.js +4650 -0
  51. package/dist/{layoutView-BlFTV2jX.js → layoutView--MGA9zUB.js} +1766 -1760
  52. package/dist/{log-in-e7D5Ss1P.js → log-in-CSYJDA6m.js} +36 -29
  53. package/dist/log-out-DiwGCg7p.js +130 -0
  54. package/dist/login-C6Y0ajDp.js +251 -0
  55. package/dist/{login-log-kqKzKTto.js → login-log-C0V-_l3F.js} +5 -3
  56. package/dist/{lov-view-B2HaxyMs.js → lov-view-Cmv7wZZ9.js} +6 -6
  57. package/dist/{menuInfo-BxCTJ1VW.js → menuInfo-UeutJpOa.js} +1 -1
  58. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-CLOPNeUW.js → menuInfo.vue_vue_type_style_index_0_lang-CWX4Mu67.js} +118 -98
  59. package/dist/{pda-app-DPsAFNiw.js → pda-app-B6w99SJo.js} +10 -10
  60. package/dist/{resource-Dibb7t8u.js → resource-BybJvUv0.js} +4 -4
  61. package/dist/{su-welcome-DejR0KkM.js → su-welcome-C1bmxHoY.js} +119 -121
  62. package/dist/sys-config-BnmIDnCj.js +370 -0
  63. package/dist/udp-core.css +1 -9
  64. package/dist/utogether-MlnyYtNS.js +4 -0
  65. package/index.ts +49 -40
  66. package/package.json +18 -18
  67. package/src/App.vue +65 -65
  68. package/src/api/http.ts +1 -4
  69. package/src/api/index.ts +4 -2
  70. package/src/api/user.ts +2 -2
  71. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  72. package/src/components/SuScrollTree/ScrollPanel.vue +1 -6
  73. package/src/components/udp/content/index.vue +88 -0
  74. package/src/components/udp/{form.vue → form/form.vue} +13 -16
  75. package/src/components/udp/{grid.vue → grid/index.vue} +56 -27
  76. package/src/components/udp/index.ts +4 -9
  77. package/src/components/udp/ut-stamp-badge/index.vue +271 -0
  78. package/src/components/udp/utils.ts +66 -105
  79. package/src/layout/components/lay-navbar/index.vue +8 -6
  80. package/src/layout/components/lay-panel/index.vue +150 -150
  81. package/src/layout/components/lay-search/index.vue +25 -25
  82. package/src/layout/components/lay-select-org/index.vue +4 -9
  83. package/src/layout/components/lay-setting/index.vue +503 -510
  84. package/src/layout/components/lay-sidebar/horizontal.vue +8 -6
  85. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  86. package/src/layout/components/lay-sidebar/sidebar-logo.vue +101 -98
  87. package/src/layout/components/lay-tag/index.vue +24 -51
  88. package/src/layout/hooks/useDataThemeChange.ts +1 -1
  89. package/src/layout/hooks/useNav.ts +176 -173
  90. package/src/layout/hooks/useTag.ts +227 -233
  91. package/src/layout/types.ts +93 -92
  92. package/src/main.ts +115 -119
  93. package/src/plugins/i18n/en.ts +302 -302
  94. package/src/plugins/i18n/module/u-workflow.ts +1 -1
  95. package/src/plugins/i18n/zh.ts +21 -6
  96. package/src/plugins/vxe-table/index.ts +116 -53
  97. package/src/plugins/vxe-table/render.tsx +945 -956
  98. package/src/router/index.ts +17 -17
  99. package/src/router/modules/flow.ts +35 -0
  100. package/src/router/modules/home.ts +32 -32
  101. package/src/router/modules/remaining.ts +58 -58
  102. package/src/router/utils.ts +420 -377
  103. package/src/store/modules/app.ts +2 -4
  104. package/src/store/modules/epTheme.ts +48 -49
  105. package/src/store/modules/multiTags.ts +15 -14
  106. package/src/store/modules/permission.ts +25 -15
  107. package/src/store/modules/system.ts +1 -3
  108. package/src/style/button.scss +85 -85
  109. package/src/style/login.css +1 -1
  110. package/src/style/vxetable.scss +61 -2
  111. package/src/utils/dataFormat/index.ts +223 -223
  112. package/src/utils/index.ts +3 -1
  113. package/src/utils/lifecycle.ts +39 -20
  114. package/src/utils/propTypes.ts +1 -6
  115. package/src/utils/storage/index.ts +2 -2
  116. package/src/utils/udp/http/index.ts +24 -11
  117. package/src/utils/udp/http/types.d.ts +3 -10
  118. package/src/views/login/login-view.vue +4 -18
  119. package/src/views/organization/company/CompanyPanel.vue +259 -259
  120. package/src/views/organization/department/Department.vue +58 -58
  121. package/src/views/organization/department/DepartmentPanel.vue +303 -283
  122. package/src/views/organization/inv-org/InvOrganization.vue +22 -7
  123. package/src/views/organization/staff/StaffInfo.vue +127 -133
  124. package/src/views/organization/staff/StaffPanel.vue +162 -145
  125. package/src/views/system/cron/cron-task.vue +2 -12
  126. package/src/views/system/menu/SystemMenu.vue +185 -183
  127. package/src/views/system/menu/menuInfo.vue +384 -363
  128. package/src/views/system/role/UserInfo.vue +195 -195
  129. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  130. package/src/views/system/role-assign/RolePanel.vue +139 -139
  131. package/src/views/system/sys/sys-config.vue +69 -20
  132. package/src/views/system/sysUser/SysUserPanel.vue +97 -28
  133. package/src/views/uapp/pda/pda-app.vue +208 -208
  134. package/src/views/udev/coderule/code-rule.vue +132 -121
  135. package/src/views/udev/dict/DictView.vue +2 -2
  136. package/src/views/udev/dict/childView.vue +183 -222
  137. package/src/views/udev/lov/childView.vue +1 -7
  138. package/src/views/udev/lov/lov-view.vue +91 -91
  139. package/src/views/uhome/components/menu-favorite.vue +314 -331
  140. package/src/views/uhome/su-welcome.vue +319 -339
  141. package/src/views/ulogin/login.vue +325 -321
  142. package/src/views/upms/interface/log-in.vue +100 -106
  143. package/src/views/upms/interface/log-out.vue +104 -107
  144. package/src/views/upms/user/login-log.vue +54 -60
  145. package/src/views/urpt/design/DesignPanel.vue +507 -507
  146. package/src/views/urpt/design/Preview.vue +1 -0
  147. package/src/views/urpt/design/ReportDesign.vue +2 -4
  148. package/src/views/utask/flow-task.vue +18 -0
  149. package/types/global.d.ts +231 -236
  150. package/dist/InvOrganization-BVuOhzbt.js +0 -66
  151. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-BOOO6Cek.js +0 -111
  152. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-SwNbAEvW.js +0 -294
  153. package/dist/childView.vue_vue_type_style_index_0_lang-DWIFCX3X.js +0 -187
  154. package/dist/index-CKnq5xIa.js +0 -2623
  155. package/dist/log-out--RRncZhN.js +0 -120
  156. package/dist/login-CpKykfdf.js +0 -253
  157. package/dist/sys-config-DiySRWns.js +0 -277
  158. package/dist/utogether-Dct_14Zk.js +0 -182
  159. package/src/components/udp/count-down.vue +0 -536
  160. package/src/components/udp/flip-down/FlipCard/flip-card.vue +0 -251
  161. package/src/components/udp/flip-down/FlipCard/interfaces.ts +0 -4
  162. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +0 -113
  163. package/src/components/udp/form-upload.vue +0 -482
  164. package/src/components/udp/lov.vue +0 -388
  165. package/src/components/udp/modal-form.vue +0 -189
  166. package/src/components/udp/modal-grid.vue +0 -288
  167. package/src/components/udp/upload.vue +0 -423
  168. package/src/utils/udp/useRender.ts +0 -431
@@ -1,321 +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 v-motion :initial="{ opacity: 0, y: 100 }" :enter="{ opacity: 1, y: 0, transition: { delay: 100 } }">
11
- {{ sysConfig['title'] }}
12
- </h2>
13
- <div
14
- v-motion
15
- class="input-group user focus"
16
- :initial="{ opacity: 0, y: 100 }"
17
- :enter="{ opacity: 1, y: 0, transition: { delay: 200 } }"
18
- >
19
- <div class="icon">
20
- <IconifyIconOffline :icon="UserFill" width="30" height="30" />
21
- </div>
22
- <div>
23
- <i class="ri-logout-box-line" />
24
- <h5>{{ $t('message.udp.userName') }}</h5>
25
- <input
26
- v-model.trim="contextInfo.username"
27
- v-focus
28
- type="text"
29
- class="input"
30
- @blur="onUserBlur"
31
- @keyup.enter="onLogin"
32
- />
33
- </div>
34
- </div>
35
- <div
36
- v-motion
37
- class="input-group pwd focus"
38
- :initial="{ opacity: 0, y: 100 }"
39
- :enter="{
40
- opacity: 1,
41
- y: 0,
42
- transition: { delay: 300 }
43
- }"
44
- >
45
- <div class="icon">
46
- <IconifyIconOffline :icon="LockFill" width="30" height="30" />
47
- </div>
48
- <div>
49
- <h5>{{ $t('message.udp.password') }}</h5>
50
- <input
51
- v-model.trim="contextInfo.passWord"
52
- type="password"
53
- class="input"
54
- @blur="onPwdBlur"
55
- @keyup.enter="onLogin"
56
- />
57
- </div>
58
- </div>
59
- <button
60
- v-motion
61
- class="btn"
62
- :initial="{ opacity: 0, y: 10 }"
63
- :enter="{ opacity: 1, y: 0, transition: { delay: 400 } }"
64
- :disabled="loading"
65
- :class="{ loading: loading }"
66
- @click="onLogin"
67
- >
68
- {{ $t('message.udp.login') }}
69
- </button>
70
- </div>
71
- </div>
72
- <div class="absolute flex justify-center w-full font-bold bottom-1">
73
- <img :src="utogether" class="!h-10" style="height: 40px" />
74
- <span class="flex flex-row justify-center" style="width: 300px">
75
- <span style="font-size: 0; text-align: center">
76
- <a
77
- href="http://www.u-together.cn/"
78
- target="_blank"
79
- class="!inline-block"
80
- style="margin-bottom: -5px; font-size: 17px; color: #59d8d8"
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: #d9d9d9"
89
- >
90
- SHENZHEN U-TOGETHER CO. LTD
91
- </a>
92
- </span>
93
- <span class="flex items-center text-white" style="width: 75px; font-size: 10px">技术支持</span>
94
- </span>
95
- </div>
96
- </div>
97
- </template>
98
-
99
- <script lang="ts">
100
- export default { name: 'LoginView' };
101
- </script>
102
-
103
- <script setup lang="ts">
104
- import { ref, reactive, onBeforeMount } from 'vue';
105
- import { useRouter } from 'vue-router';
106
- import { useI18n } from 'vue-i18n';
107
- // import io from 'socket.io-client';
108
- import { useFavicon } from '@vueuse/core';
109
- import { isEmpty, toDateString } from 'xe-utils';
110
- import { removeClass, storageLocal, errorMessage, cookies, delay } from '@utogether/utils';
111
- import to from 'await-to-js';
112
- // import JSEencrypt from 'jsencrypt';
113
- import { useSystemStoreHook } from '../../store/modules/system';
114
- import { useLayout } from '../../layout/hooks/useLayout';
115
- import { useDataThemeChange } from '../../layout/hooks/useDataThemeChange';
116
- import { getBaseURL, getServiceApi } from '../../api';
117
- import { initDict } from '../../api/user';
118
- import { kTOKEN, kCKTOKEN, kLOGINER, kSYSCONFIG } from '../../contant';
119
- import { getPlatform, getBrower } from '../../utils/browers';
120
- import { onLogined } from '../../utils/lifecycle';
121
- // import bg from '../../assets/svg/bg.svg?component';
122
- import utogether from '../../assets/images/utogether.png';
123
- import welcome from '../../assets/images/welcome.png';
124
-
125
- import LockFill from '@iconify-icons/ri/lock-fill';
126
- import UserFill from '@iconify-icons/ri/user-3-fill';
127
-
128
- interface IContextProps {
129
- username: string;
130
- passWord: string;
131
- verify: number | null;
132
- svg: any;
133
- domain: string;
134
- }
135
- interface IRSAPublic {
136
- publicKeyExponent: string;
137
- publicKeyModulus: string;
138
- requestKey: string;
139
- }
140
- const contextInfo: IContextProps = reactive({
141
- username: '',
142
- passWord: '',
143
- requestKey: '',
144
- verify: null,
145
- svg: null,
146
- domain: ''
147
- });
148
- const publicRSA: IRSAPublic = reactive({
149
- publicKeyExponent: '10001',
150
- publicKeyModulus:
151
- 'a12708ab26367e1711bd767f6bb1f29afbd85380185723d7b492230e2567c95cf5718eca745da0643400ca619fbeec892df61abe1f71ad3b822d076ed831080c53782edf8c0627ee95c57e2bee12fe55da2b3cadec59947a75ccccbbf36fb3b781c93b4bf51489789f1c0849f9023a16ec70bef41a504785e1082b6f13588e29',
152
- requestKey: ''
153
- });
154
-
155
- const bgStyle = ref({
156
- backgroundImage: '',
157
- backgroundRepeat: 'no-repeat',
158
- backgroundPosition: 'center'
159
- });
160
- const refreshKey = ref(0);
161
-
162
- const sysConfig = ref({});
163
- const router = useRouter();
164
- const { t } = useI18n();
165
- const serviceApi = getServiceApi();
166
- // const { $config } = useGlobal();
167
-
168
- const { initStorage } = useLayout();
169
- const { overallStyle, dataThemeChange } = useDataThemeChange();
170
- initStorage();
171
-
172
- const loading = ref(false);
173
- // 登录
174
- const onLogin = async () => {
175
- // insertLoginInfo();
176
- // return;
177
- const { username, passWord, verify } = contextInfo;
178
- if (isEmpty(username) || isEmpty(passWord)) {
179
- return errorMessage(t('message.tip.loginFailure'));
180
- }
181
- // @ts-ignore
182
- setMaxDigits(200);
183
- // @ts-ignore
184
- const rsakeypair = new RSAKeyPair(publicRSA.publicKeyExponent, '', publicRSA.publicKeyModulus);
185
- // @ts-ignore
186
- const password = encryptedString(rsakeypair, passWord.split('').reverse().join(''));
187
- // const key = new JSEencrypt();
188
- // key.setPublicKey(
189
- // '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChJwirJjZ+FxG9dn9rsfKa+9hTgBhXI9e0kiMOJWfJXPVxjsp0XaBkNADKYZ++7Ikt9hq+H3GtO4ItB27YMQgMU3gu34wGJ+6VxX4r7hL+VdorPK3sWZR6dczMu/Nvs7eByTtL9RSJeJ8cCEn5AjoW7HC+9BpQR4XhCCtvE1iOKQIDAQAB-----END PUBLIC KEY-----'
190
- // );
191
- // const password = key.encrypt(passWord);
192
- // // console.log('password1 ===', password1);
193
- // console.log('password ===', password);
194
- const param = {
195
- username,
196
- password,
197
- requestKey: publicRSA.requestKey,
198
- verify: verify,
199
- domain: getBaseURL()
200
- };
201
- loading.value = true;
202
- const [err, data] = await to(serviceApi.post('/uath/login', param));
203
- if (err) {
204
- loading.value = false;
205
- return;
206
- }
207
- useSystemStoreHook().setSessionKey(data);
208
- cacheToken(data);
209
- cookies.set(kLOGINER, username);
210
- if (!storageLocal.getItem('kLov')) {
211
- initDict().then(res => useSystemStoreHook().setDict(res));
212
- }
213
- // initSocket(username);
214
- await delay(100);
215
- // 执行登录成功后的函数
216
- onLogined();
217
- router.push('/');
218
- insertLoginInfo(username);
219
- loading.value = false;
220
- };
221
-
222
- function onUserBlur() {
223
- if (contextInfo.username.length === 0) removeClass(document.querySelector('.user'), 'focus');
224
- }
225
-
226
- function onPwdBlur() {
227
- if (contextInfo.passWord.length === 0) removeClass(document.querySelector('.pwd'), 'focus');
228
- }
229
-
230
- /**
231
- * @description: 缓存token
232
- * @param {*} token token数据
233
- * @return {*}
234
- */
235
- const cacheToken = token => {
236
- const { access_token, expires_in, refresh_token } = token;
237
- const cache = {
238
- accessToken: access_token,
239
- refreshToken: refresh_token,
240
- // expires: Date.now() + expires_in * 1000
241
- expires: Date.now() + expires_in
242
- };
243
-
244
- cookies.set(kCKTOKEN, token.access_token);
245
- const dataString = JSON.stringify(cache);
246
- expires_in > 0 ? cookies.set(kTOKEN, dataString) : cookies.set(kTOKEN, dataString);
247
- };
248
-
249
- // let socketIo = null;
250
- // const initSocket = username => {
251
- // socketIo = io(`ws://119.145.169.186:10006/webSocket/${username}`, {
252
- // transports: ['websocket']
253
- // });
254
- // socketIo.on('connection', res => {
255
- // console.log('connection', res);
256
- // });
257
- // socketIo.on('connected', res => {
258
- // console.log('connected', res);
259
- // });
260
- // socketIo.on('close', res => {
261
- // console.log('connected', res);
262
- // });
263
- // socketIo.on('message', res => {
264
- // console.log('message', res);
265
- // // ElNotification({
266
- // // title: '您有一条新的消息',
267
- // // message: res,
268
- // // type: 'success'
269
- // // });
270
- // });
271
- // };
272
-
273
- const insertLoginInfo = username => {
274
- const userAgent = navigator.userAgent.toLowerCase();
275
- const { browser, browserVersion } = getBrower(userAgent);
276
- const obj = {
277
- userName: username,
278
- loginTime: toDateString(new Date()),
279
- browser,
280
- browserVersion,
281
- operatingSystem: getPlatform(userAgent)
282
- };
283
- serviceApi.post('/upfm/v1/userMonitor', obj);
284
- };
285
-
286
- const getSysConfig = async () => {
287
- const [err, data]: [Error, any] = await to(serviceApi.get('/upfm/v1/sysConfig', {}));
288
- if (!err) {
289
- const config: any = {};
290
- data.list?.forEach(item => {
291
- config[item.configCode] = item.configValue;
292
- if (item.fileName) {
293
- config[item.configCode] = getBaseURL() + '/ufil' + item.configValue;
294
- }
295
- });
296
- const title = data.list?.find(f => f.configCode === 'title')?.configValue;
297
- config['title'] = title || 'U-DP';
298
- sysConfig.value = config;
299
- bgStyle.value = {
300
- backgroundImage: config['backgroundImg'] ? `url(${config['backgroundImg']})` : '',
301
- backgroundRepeat: 'no-repeat',
302
- backgroundPosition: 'center'
303
- };
304
- console.log('bgStyle=', bgStyle);
305
- const favicon = useFavicon();
306
- favicon.value = config.favicon || utogether;
307
- storageLocal.setItem(kSYSCONFIG, config);
308
- }
309
- };
310
-
311
- dataThemeChange(overallStyle.value);
312
-
313
- onBeforeMount(() => {
314
- getSysConfig();
315
- // cookies.addPrefix('sitzone-mes');
316
- });
317
- </script>
318
-
319
- <style scoped>
320
- @import url('../../style/login.css');
321
- </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>