n20-common-lib 1.1.98

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 (196) hide show
  1. package/README.md +27 -0
  2. package/package.json +87 -0
  3. package/src/_qiankun/index.js +113 -0
  4. package/src/_qiankun/postMessage.js +48 -0
  5. package/src/assets/css/_coreLib.scss +35 -0
  6. package/src/assets/css/cl-anchor.scss +24 -0
  7. package/src/assets/css/cl-approve-card.scss +58 -0
  8. package/src/assets/css/cl-dialog.scss +99 -0
  9. package/src/assets/css/cl-drag-list.scss +22 -0
  10. package/src/assets/css/cl-empty.scss +10 -0
  11. package/src/assets/css/cl-expandable-pane.scss +25 -0
  12. package/src/assets/css/cl-expandable.scss +23 -0
  13. package/src/assets/css/cl-file-upload-table.scss +11 -0
  14. package/src/assets/css/cl-filter.scss +4 -0
  15. package/src/assets/css/cl-flow-step.scss +186 -0
  16. package/src/assets/css/cl-footer-box.scss +10 -0
  17. package/src/assets/css/cl-form-item.scss +322 -0
  18. package/src/assets/css/cl-general-card.scss +12 -0
  19. package/src/assets/css/cl-layout-aside.scss +88 -0
  20. package/src/assets/css/cl-layout-content.scss +16 -0
  21. package/src/assets/css/cl-layout-header.scss +73 -0
  22. package/src/assets/css/cl-layout-tabs.scss +87 -0
  23. package/src/assets/css/cl-layout.scss +97 -0
  24. package/src/assets/css/cl-login-temporary.scss +37 -0
  25. package/src/assets/css/cl-message.scss +75 -0
  26. package/src/assets/css/cl-more-tab.scss +98 -0
  27. package/src/assets/css/cl-nav-menu.scss +5 -0
  28. package/src/assets/css/cl-pagination.scss +65 -0
  29. package/src/assets/css/cl-secondary-tab.scss +39 -0
  30. package/src/assets/css/cl-showcolumn.scss +23 -0
  31. package/src/assets/css/cl-sifting.scss +51 -0
  32. package/src/assets/css/cl-statis.scss +42 -0
  33. package/src/assets/css/cl-step.scss +73 -0
  34. package/src/assets/css/cl-suspend.scss +19 -0
  35. package/src/assets/css/cl-tertiary-tab.scss +9 -0
  36. package/src/assets/css/cl-upload.scss +41 -0
  37. package/src/assets/css/cl-worn-pagination.scss +50 -0
  38. package/src/assets/css/el-button.scss +169 -0
  39. package/src/assets/css/el-table.scss +79 -0
  40. package/src/assets/css/element-variables.scss +1061 -0
  41. package/src/assets/css/element.dev.scss +21 -0
  42. package/src/assets/css/font-icon.scss +26 -0
  43. package/src/assets/css/index.dev.scss +4 -0
  44. package/src/assets/css/index.scss +11 -0
  45. package/src/assets/css/normalize.scss +723 -0
  46. package/src/assets/css/rootvar.scss +139 -0
  47. package/src/assets/css/select.scss +26 -0
  48. package/src/assets/css/title-pop.scss +4 -0
  49. package/src/assets/getJsonc.js +50 -0
  50. package/src/assets/realUrl.js +12 -0
  51. package/src/components/Anchor/AnchorItem.vue +30 -0
  52. package/src/components/Anchor/index.vue +185 -0
  53. package/src/components/ApprovalButtons/index.vue +232 -0
  54. package/src/components/ApprovalCard/index.vue +128 -0
  55. package/src/components/ApprovalRecord/approvalImg.vue +39 -0
  56. package/src/components/ApprovalRecord/index.vue +59 -0
  57. package/src/components/Button/button-group.vue +150 -0
  58. package/src/components/Button/icon-group-button.vue +61 -0
  59. package/src/components/Button/index.vue +56 -0
  60. package/src/components/ContentLoading/index.vue +41 -0
  61. package/src/components/ContentNull/index.vue +19 -0
  62. package/src/components/DatePicker/index.vue +27 -0
  63. package/src/components/DatePicker/por.vue +169 -0
  64. package/src/components/Dialog/index.vue +26 -0
  65. package/src/components/Dialog/indexO.vue +116 -0
  66. package/src/components/DragList/index.vue +68 -0
  67. package/src/components/Empty/img/404.png +0 -0
  68. package/src/components/Empty/img/abnormal.svg +109 -0
  69. package/src/components/Empty/img/dispose.svg +72 -0
  70. package/src/components/Empty/img/empty.svg +58 -0
  71. package/src/components/Empty/img/general.svg +59 -0
  72. package/src/components/Empty/img/lock.svg +58 -0
  73. package/src/components/Empty/img/network.svg +60 -0
  74. package/src/components/Empty/img/relevant.svg +69 -0
  75. package/src/components/Empty/img/search.svg +73 -0
  76. package/src/components/Empty/index.vue +92 -0
  77. package/src/components/Expandable/index.vue +49 -0
  78. package/src/components/Expandable/main.vue +52 -0
  79. package/src/components/FileUploadTable/index.vue +484 -0
  80. package/src/components/Filters/index.vue +358 -0
  81. package/src/components/Filters/indexO.vue +104 -0
  82. package/src/components/FlowStep/index.vue +69 -0
  83. package/src/components/FooterBox/index.vue +21 -0
  84. package/src/components/GeneralCard/index.vue +15 -0
  85. package/src/components/InputNumber/index.vue +153 -0
  86. package/src/components/InputNumber/numberRange.vue +47 -0
  87. package/src/components/InputSearch/index.vue +75 -0
  88. package/src/components/Layout/AsideNav/index.vue +144 -0
  89. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -0
  90. package/src/components/Layout/HeaderWrap/index.vue +336 -0
  91. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -0
  92. package/src/components/Layout/SubContent/index.vue +131 -0
  93. package/src/components/Layout/TabsNav/index.vue +170 -0
  94. package/src/components/Layout/index.vue +529 -0
  95. package/src/components/Layout/utils.js +12 -0
  96. package/src/components/LoginTemporary/form.vue +511 -0
  97. package/src/components/LoginTemporary/index.vue +122 -0
  98. package/src/components/LoginTemporary/qr.png +0 -0
  99. package/src/components/LoginTemporary/qrcode.vue +90 -0
  100. package/src/components/LoginTemporary/qrt.png +0 -0
  101. package/src/components/LoginTemporary/retrievePw.vue +28 -0
  102. package/src/components/LoginTemporary/utils.js +73 -0
  103. package/src/components/MicroApp/index.js +67 -0
  104. package/src/components/MicroFrame/index.vue +95 -0
  105. package/src/components/MoreTab/index.vue +232 -0
  106. package/src/components/NavMenu/index.vue +60 -0
  107. package/src/components/NstcG6Components/NstcApprovel/NstcApprovel.vue +13 -0
  108. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +185 -0
  109. package/src/components/NstcG6Components/Progress/progress.vue +134 -0
  110. package/src/components/PageLayout/page.vue +15 -0
  111. package/src/components/Pagination/index.vue +96 -0
  112. package/src/components/SecondaryTab/index.vue +58 -0
  113. package/src/components/SelectLazy/index.vue +75 -0
  114. package/src/components/SelectTree/SelectTreeLazy.vue +241 -0
  115. package/src/components/SelectTree/index.vue +208 -0
  116. package/src/components/ShowColumn/index.vue +188 -0
  117. package/src/components/Sifting/index.vue +99 -0
  118. package/src/components/Statis/index.vue +97 -0
  119. package/src/components/Statis/statisItem.vue +54 -0
  120. package/src/components/Statis/statisPopover.vue +55 -0
  121. package/src/components/Step/index.vue +38 -0
  122. package/src/components/Suspend/index.vue +72 -0
  123. package/src/components/Table/index.vue +131 -0
  124. package/src/components/Table/indexO.vue +149 -0
  125. package/src/components/Task/index.vue +26 -0
  126. package/src/components/TertiaryTab/index.vue +53 -0
  127. package/src/components/TimePicker/index.vue +28 -0
  128. package/src/components/Upload/index.vue +242 -0
  129. package/src/components/WornPagination/index.vue +73 -0
  130. package/src/directives/VClickOutside/index.js +19 -0
  131. package/src/directives/VDrag/index.js +72 -0
  132. package/src/directives/VHas/index.js +27 -0
  133. package/src/directives/VMove/index.js +42 -0
  134. package/src/directives/VTitle/index.js +56 -0
  135. package/src/directives/VTitle/tooltip.vue +21 -0
  136. package/src/index.js +225 -0
  137. package/src/plugins/CompatibleOld/index.js +57 -0
  138. package/src/plugins/Print/index.js +4 -0
  139. package/src/plugins/Print/print-js/.babelrc +12 -0
  140. package/src/plugins/Print/print-js/LICENSE +21 -0
  141. package/src/plugins/Print/print-js/README.md +98 -0
  142. package/src/plugins/Print/print-js/dist/print.css +97 -0
  143. package/src/plugins/Print/print-js/dist/print.js +991 -0
  144. package/src/plugins/Print/print-js/dist/print.map +1 -0
  145. package/src/plugins/Print/print-js/package.json +60 -0
  146. package/src/plugins/Print/print-js/src/index.d.ts +45 -0
  147. package/src/plugins/Print/print-js/src/index.js +10 -0
  148. package/src/plugins/Print/print-js/src/js/browser.js +33 -0
  149. package/src/plugins/Print/print-js/src/js/functions.js +103 -0
  150. package/src/plugins/Print/print-js/src/js/html.js +70 -0
  151. package/src/plugins/Print/print-js/src/js/image.js +48 -0
  152. package/src/plugins/Print/print-js/src/js/init.js +168 -0
  153. package/src/plugins/Print/print-js/src/js/json.js +109 -0
  154. package/src/plugins/Print/print-js/src/js/modal.js +62 -0
  155. package/src/plugins/Print/print-js/src/js/pdf.js +62 -0
  156. package/src/plugins/Print/print-js/src/js/print.js +102 -0
  157. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -0
  158. package/src/plugins/Print/print-js/src/sass/index.scss +14 -0
  159. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +10 -0
  160. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +41 -0
  161. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +46 -0
  162. package/src/plugins/Print/print.js +2 -0
  163. package/src/plugins/Print/print.scss +1 -0
  164. package/src/plugins/SetMenuTree/index.vue +41 -0
  165. package/src/plugins/SetMenuTree/logoIcon.vue +37 -0
  166. package/src/plugins/SetMenuTree/setmenutree.vue +427 -0
  167. package/src/plugins/SetMenuTree/utils.js +74 -0
  168. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -0
  169. package/src/plugins/Sign/index.js +65 -0
  170. package/src/plugins/Sign/sign.js +1 -0
  171. package/src/plugins/setTabsForSub.js +2 -0
  172. package/src/utils/auth.js +53 -0
  173. package/src/utils/axios.js +203 -0
  174. package/src/utils/downloadBlob.js +19 -0
  175. package/src/utils/forEachs.js +16 -0
  176. package/src/utils/getScrollContainer.js +43 -0
  177. package/src/utils/i18n/cn2hk.json +1270 -0
  178. package/src/utils/i18n/index.js +54 -0
  179. package/src/utils/list2tree.js +36 -0
  180. package/src/utils/msgboxPor.js +26 -0
  181. package/src/utils/print.js +161 -0
  182. package/src/utils/relaNo.js +35 -0
  183. package/src/utils/repairElementUI.js +66 -0
  184. package/src/utils/urlToGo.js +82 -0
  185. package/style/css/normalize.scss +723 -0
  186. package/style/fonts/element-icons.535877f5.woff +0 -0
  187. package/style/fonts/element-icons.732389de.ttf +0 -0
  188. package/style/index.css +3 -0
  189. package/style/index.css.map +1 -0
  190. package/style/index.umd.min.js +2 -0
  191. package/style/index.umd.min.js.map +1 -0
  192. package/style/pageDemo/demo-1.vue +130 -0
  193. package/style/pageDemo/demo-2.vue +35 -0
  194. package/style/pageDemo/demo-3.vue +22 -0
  195. package/style/pageDemo/seeCode.js +20 -0
  196. package/style/server-config.jsonc +663 -0
@@ -0,0 +1,511 @@
1
+ <template>
2
+ <!-- eslint-disable no-irregular-whitespace -->
3
+ <div v-loading="loadingV" class="login-form-wrap p-a">
4
+ <slot name="header"></slot>
5
+ <svg class="cut-qrcode-h">
6
+ <image
7
+ v-if="theType === 'qrcode'"
8
+ width="52"
9
+ height="52"
10
+ xlink:href="./qrt.png"
11
+ />
12
+ <image v-else width="52" height="52" xlink:href="./qr.png" />
13
+ <path d="M0,0L52,0L52,52Z" @click="cutQrcode" />
14
+ </svg>
15
+ <!-- 账号/密码登录 -->
16
+ <div v-if="theType === 'account'">
17
+ <el-form
18
+ ref="login-form"
19
+ :model="form"
20
+ :rules="rules"
21
+ :hide-required-asterisk="true"
22
+ @submit.native.prevent="submitLogin"
23
+ >
24
+ <el-form-item label="帐号" prop="username">
25
+ <el-input v-model="form.username" placeholder="请输入账号" />
26
+ </el-form-item>
27
+ <el-form-item label="密码" prop="password">
28
+ <el-input
29
+ v-model="form.password"
30
+ placeholder="请输入密码"
31
+ show-password
32
+ />
33
+ <!-- 不自动填充密码
34
+ <input
35
+ v-model="fakePwd"
36
+ type="password"
37
+ name="password"
38
+ hidden="hidden"
39
+ @change="fakePwd = 'a1b2c3d4'"
40
+ />
41
+ <el-input
42
+ v-model="form.password"
43
+ placeholder="请输入密码"
44
+ :class="{ 'login-password': !showPwd }"
45
+ >
46
+ <i
47
+ slot="suffix"
48
+ class="el-input__icon el-icon-view"
49
+ style="pointer-events: all"
50
+ @click.stop="showPwd = !showPwd"
51
+ ></i>
52
+ </el-input>
53
+ 不自动填充密码End -->
54
+ </el-form-item>
55
+ <el-button
56
+ class="m-t"
57
+ type="primary"
58
+ native-type="submit"
59
+ style="width: 100%"
60
+ >登 录</el-button
61
+ >
62
+ </el-form>
63
+ </div>
64
+ <!-- 二维码扫码登录 -->
65
+ <qrCode v-else-if="theType === 'qrcode'" @qrcode-login="QrcodeLogin" />
66
+ <!-- 手机验证码登录 -->
67
+ <div v-if="theType === 'pthon'">
68
+ <el-form
69
+ ref="login-form"
70
+ :model="form"
71
+ :rules="rules"
72
+ :hide-required-asterisk="true"
73
+ @submit.native.prevent="submitLogin"
74
+ >
75
+ <el-form-item label="手机号" prop="phone">
76
+ <el-input v-model="form.phone" placeholder="请输入手机号" />
77
+ </el-form-item>
78
+ <el-form-item label="验证码" prop="code">
79
+ <br />
80
+ <div class="flex-box">
81
+ <el-input
82
+ v-model="form.code"
83
+ class="flex-item m-r-s"
84
+ placeholder="请输入验证码"
85
+ />
86
+ <el-button
87
+ plain
88
+ style="4em"
89
+ :disabled="!form.phone || codeNum !== '验证码'"
90
+ @click="sendMsg('phone', '手机号')"
91
+ >{{ codeNum }}</el-button
92
+ >
93
+ </div>
94
+ </el-form-item>
95
+ <el-button
96
+ class="m-t"
97
+ type="primary"
98
+ native-type="submit"
99
+ style="width: 100%"
100
+ >登 录</el-button
101
+ >
102
+ </el-form>
103
+ </div>
104
+ <!-- 账户密码验证码登录 -->
105
+ <div v-if="theType === 'accountPthon'">
106
+ <el-form
107
+ ref="login-form"
108
+ :model="form"
109
+ :rules="rules"
110
+ :hide-required-asterisk="true"
111
+ @submit.native.prevent="submitLogin"
112
+ >
113
+ <el-form-item label="帐号" prop="username">
114
+ <el-input v-model="form.username" placeholder="请输入账号" />
115
+ </el-form-item>
116
+ <el-form-item label="密码" prop="password">
117
+ <el-input
118
+ v-model="form.password"
119
+ placeholder="请输入密码"
120
+ show-password
121
+ />
122
+ </el-form-item>
123
+ <el-form-item label="验证码" prop="code">
124
+ <br />
125
+ <div class="flex-box">
126
+ <el-input
127
+ v-model="form.code"
128
+ class="flex-item m-r-s"
129
+ placeholder="请输入验证码"
130
+ />
131
+ <el-button
132
+ plain
133
+ style="4em"
134
+ :disabled="!form.username || codeNum !== '验证码'"
135
+ @click="sendMsg('username', '账户')"
136
+ >{{ codeNum }}</el-button
137
+ >
138
+ </div>
139
+ </el-form-item>
140
+ <el-button
141
+ class="m-t"
142
+ type="primary"
143
+ native-type="submit"
144
+ style="width: 100%"
145
+ >登 录</el-button
146
+ >
147
+ </el-form>
148
+ </div>
149
+ <!-- -->
150
+ <div v-if="theType !== 'qrcode'" class="flex-box flex-lr m-t-s m-b-s">
151
+ <el-dropdown
152
+ size="mini"
153
+ placement="bottom-start"
154
+ @command="changeLoginType"
155
+ >
156
+ <span>其他登录方式</span>
157
+ <el-dropdown-menu slot="dropdown">
158
+ <template v-for="item in loginTypes">
159
+ <el-dropdown-item
160
+ v-if="item !== theType"
161
+ :key="item"
162
+ :command="item"
163
+ >{{ loginTypeMap[item] }}</el-dropdown-item
164
+ >
165
+ </template>
166
+ </el-dropdown-menu>
167
+ </el-dropdown>
168
+
169
+ <el-link :underline="false" @click="forgetPw">忘记密码</el-link>
170
+ </div>
171
+ <slot name="footer"></slot>
172
+
173
+ <el-dialog :visible.sync="fPwV" title="找回密码" width="460px">
174
+ <retrievePw :visible.sync="fPwV" />
175
+ </el-dialog>
176
+ </div>
177
+ </template>
178
+
179
+ <script>
180
+ import axios from '../../utils/axios'
181
+ import auth from '../../utils/auth'
182
+ import qrCode from './qrcode.vue'
183
+ import { siteTree2menus, siteTree2RelaNos } from './utils'
184
+ import retrievePw from './retrievePw.vue'
185
+
186
+ function encode(pwd = '', key = 0) {
187
+ if (pwd === '') return ''
188
+
189
+ let pwdArr = pwd.trim().split('')
190
+ let resultArr = pwdArr.map((oPwd) =>
191
+ String.fromCharCode(oPwd.charCodeAt() ^ key)
192
+ )
193
+ let result = resultArr.join('')
194
+
195
+ return window.btoa(window.unescape(window.encodeURIComponent(result)))
196
+ }
197
+
198
+ export default {
199
+ name: 'LoginForm',
200
+ components: {
201
+ qrCode,
202
+ retrievePw
203
+ },
204
+ props: {
205
+ loginTypes: {
206
+ type: Array,
207
+ default: () => ['account']
208
+ },
209
+ loginThen: {
210
+ type: Function,
211
+ default: undefined
212
+ }
213
+ },
214
+ data() {
215
+ return {
216
+ showPwd: false,
217
+ fakePwd: 'a1b2c3d4',
218
+ loadingV: false,
219
+ loginTypeMap: {
220
+ account: '账号密码登录',
221
+ pthon: '手机验证码登录',
222
+ qrcode: '二维码扫码登录',
223
+ accountPthon: '账户密码验证码登录'
224
+ },
225
+ theType: this.loginTypes[0],
226
+ form: {
227
+ username: '',
228
+ password: '',
229
+ code: ''
230
+ },
231
+ pwd: '',
232
+ rules: {
233
+ username: [{ required: true, message: '请输入账号!', trigger: 'blur' }],
234
+ password: [{ required: true, message: '请输入密码!', trigger: 'blur' }],
235
+ code: [{ required: true, message: '请输入验证码!', trigger: 'blur' }],
236
+ phone: [
237
+ { required: true, message: '请输入手机号!', trigger: 'blur' },
238
+ {
239
+ pattern: /^1\d{10}$/,
240
+ message: '请输入正确手机号!',
241
+ trigger: 'blur'
242
+ }
243
+ ]
244
+ },
245
+ fPwV: false,
246
+ codeNum: '验证码'
247
+ }
248
+ },
249
+ methods: {
250
+ // 忘记密码
251
+ forgetPw() {
252
+ this.fPwV = true
253
+ },
254
+ // 切换登录方式
255
+ changeLoginType(val) {
256
+ this.theType = val
257
+ },
258
+ // 切换二维码小图标
259
+ cutQrcode() {
260
+ if (this.theType !== 'qrcode') {
261
+ this.theType = 'qrcode'
262
+ } else {
263
+ this.theType = this.loginTypes[0]
264
+ }
265
+ },
266
+ // 发送短信
267
+ outTime(num) {
268
+ clearTimeout(this.setTimeNum)
269
+ if (num > 0) {
270
+ num--
271
+ this.codeNum = num + 'S'
272
+
273
+ this.setTimeNum = setTimeout(() => {
274
+ this.outTime(num)
275
+ }, 1000)
276
+ num--
277
+ } else {
278
+ clearTimeout(this.setTimeNum)
279
+ this.codeNum = '验证码'
280
+ }
281
+ },
282
+ sendMsg(type = 'phone', typeName = '手机号') {
283
+ this.$refs['login-form'].validateField(type, (valid) => {
284
+ if (!valid) {
285
+ this.outTime(60)
286
+
287
+ axios
288
+ .get(
289
+ `/bems/prod_1.0/uas/api/authorization/captcha/${this.form[type]}/1`,
290
+ null,
291
+ { loading: false, noMsg: true }
292
+ )
293
+ .then(() => {
294
+ this.$message.success(
295
+ `${typeName}: ${this.form[type]} 验证码发送成功`
296
+ )
297
+ })
298
+ .catch(() => {
299
+ clearTimeout(this.setTimeNum)
300
+ this.codeNum = '验证码'
301
+ this.$message.warning(
302
+ `${typeName}: ${this.form[type]} 验证码发送失败`
303
+ )
304
+ })
305
+ }
306
+ })
307
+ },
308
+ loadingFn() {
309
+ this.loadingV = false
310
+ },
311
+ // 登录
312
+ submitLogin() {
313
+ this.$refs['login-form'].validate((valid) => {
314
+ if (!valid) return false
315
+
316
+ auth.removeToken()
317
+ this.theType === 'account' && this.passwordLogin().catch(this.loadingFn)
318
+ this.theType === 'pthon' && this.phoneLogin().catch(this.loadingFn)
319
+ this.theType === 'accountPthon' &&
320
+ this.accountPthonLogin().catch(this.loadingFn)
321
+ })
322
+ },
323
+ // 获取加密参数
324
+ async authorizationCode(username, password, code) {
325
+ let pwdArr = code ? [username, password, code] : [username, password]
326
+ let pwd = pwdArr.join('@@')
327
+
328
+ let { data = {} } = await axios.get(
329
+ '/bems/prod_1.0/uas/api/authorization/authorizationCode',
330
+ {},
331
+ { loading: false }
332
+ )
333
+ try {
334
+ pwd = encode(pwd, data.authorizationValue)
335
+ } catch (error) {
336
+ this.loadingV = false
337
+ // this.$message.warning('密码加密错误')
338
+ }
339
+ this.pwd = pwd + '@@' + data.authorizationKey
340
+ },
341
+ // 账号/密码登录
342
+ async passwordLogin() {
343
+ this.loadingV = true
344
+
345
+ let { username, password, code } = this.form
346
+ await this.authorizationCode(username, password, code)
347
+ // 请求该账号要不要强制验证码登录
348
+ let cL = await axios.post(
349
+ '/bems/prod_1.0/uas/api/authorization/checkLogin',
350
+ { grantType: 'password', username, password: this.pwd, code },
351
+ {
352
+ loading: false
353
+ }
354
+ )
355
+
356
+ // 输入验证码
357
+ if (cL.data === true) {
358
+ this.loadingV = false
359
+ this.theType = 'accountPthon'
360
+
361
+ this.sendMsg('username', '账户')
362
+ this.outTime(60)
363
+ return
364
+ }
365
+ // 签名验签
366
+ else if (cL.data === false) {
367
+ // 获取线上签名uDn
368
+ let uDn = await axios.get(
369
+ `/bems/prod_1.0/dssc/sign/getUserDn/${username}/password`,
370
+ null,
371
+ { loading: false }
372
+ )
373
+ let { checkCert, userDn } = uDn.data
374
+ // 走本地签名
375
+ let sign = undefined
376
+ let certDn = undefined
377
+ if (checkCert) {
378
+ let { getSign } = await import('../../plugins/Sign/index')
379
+ sign = getSign(username, userDn)
380
+ certDn = userDn
381
+ }
382
+
383
+ await this.authorizationCode(username, password, code) // authorizationValue 使用一次后就失效了
384
+ axios
385
+ .post(
386
+ '/bems/prod_1.0/uas/api/authorization/login',
387
+ {
388
+ grantType: 'password',
389
+ username,
390
+ password: this.pwd,
391
+ code,
392
+ sign,
393
+ certDn
394
+ },
395
+ {
396
+ loading: this.loadingFn
397
+ }
398
+ )
399
+ .then((res) => {
400
+ this.loginAfter(res.data)
401
+ })
402
+ return
403
+ }
404
+
405
+ // 正常登录
406
+ await this.authorizationCode(username, password, code) // authorizationValue 使用一次后就失效了
407
+ axios
408
+ .post(
409
+ '/bems/prod_1.0/uas/api/authorization/login',
410
+ { grantType: 'password', username, password: this.pwd, code },
411
+ { loading: this.loadingFn }
412
+ )
413
+ .then((res) => {
414
+ this.loginAfter(res.data)
415
+ })
416
+ },
417
+ // 二维码扫码登录
418
+ QrcodeLogin(userNo, qrcode) {
419
+ axios
420
+ .post(
421
+ '/bems/prod_1.0/uas/api/authorization/login',
422
+ {
423
+ grantType: 'qr_code',
424
+ type: 'qr_code',
425
+ username: userNo,
426
+ password: qrcode
427
+ },
428
+ { loading: false }
429
+ )
430
+ .then((res) => {
431
+ this.loginAfter(res.data)
432
+ })
433
+ },
434
+ // 手机号/验证码登录
435
+ async phoneLogin() {
436
+ this.loadingV = true
437
+ let { phone, code } = this.form
438
+ await this.authorizationCode(phone, code)
439
+ let pwd = this.pwd
440
+
441
+ axios
442
+ .post(
443
+ '/bems/prod_1.0/uas/api/authorization/login',
444
+ { grantType: 'mobile', username: phone, password: pwd },
445
+ { loading: this.loadingFn }
446
+ )
447
+ .then((res) => {
448
+ this.loginAfter(res.data)
449
+ })
450
+ },
451
+ async accountPthonLogin() {
452
+ this.loadingV = true
453
+ let { username, password, code } = this.form
454
+ await this.authorizationCode(username, password, code)
455
+ let pwd = this.pwd
456
+
457
+ axios
458
+ .post(
459
+ '/bems/prod_1.0/uas/api/authorization/login',
460
+ { grantType: 'user_password_code', username, password: pwd, code },
461
+ { loading: this.loadingFn }
462
+ )
463
+ .then((res) => {
464
+ this.loginAfter(res.data)
465
+ })
466
+ },
467
+ // 登录成功后
468
+ loginAfter(data) {
469
+ auth.setToken(data.accessToken)
470
+ Promise.all([this.getUserInfo(), this.getMicroAppsInfo()]).then(() => {
471
+ if (this.loginThen) {
472
+ this.loginThen().then(() => {
473
+ this.$router.replace('/')
474
+ })
475
+ } else {
476
+ this.$router.replace('/')
477
+ }
478
+ })
479
+ },
480
+ // 获取用户基本信息
481
+ async getUserInfo() {
482
+ let username = this.form.username
483
+ let { data } = await axios.get(
484
+ '/bems/prod_1.0/user/api/userController/userCltAdDep/' + username
485
+ )
486
+ let userInfo = data || { uname: username }
487
+
488
+ sessionStorage.setItem('userNo', username)
489
+ sessionStorage.setItem('userInfo', JSON.stringify(userInfo))
490
+ sessionStorage.setItem('loginTime', Date.now())
491
+ },
492
+ // 获取子应用相关列表
493
+ async getMicroAppsInfo() {
494
+ this.loadingV = true
495
+ let { data } = await axios.get('/bems/1.0/menuTree/tree', null, {
496
+ loading: this.loadingFn
497
+ })
498
+ data || (data = [])
499
+
500
+ let layoutMenus = siteTree2menus(data)
501
+ sessionStorage.setItem('menuTree', JSON.stringify(layoutMenus))
502
+
503
+ let relaNos = siteTree2RelaNos(data)
504
+ sessionStorage.setItem('relaNos', JSON.stringify(relaNos))
505
+
506
+ // XXX: 兼容旧版resources
507
+ sessionStorage.setItem('resources', JSON.stringify(data))
508
+ }
509
+ }
510
+ }
511
+ </script>
@@ -0,0 +1,122 @@
1
+ <template>
2
+ <div
3
+ class="login-wrap"
4
+ :style="{ backgroundImage: loginBg && `url(${loginBg})` }"
5
+ >
6
+ <div class="login-logo-box flex-box flex-v">
7
+ <img
8
+ v-if="loginLogo"
9
+ :src="loginLogo"
10
+ :style="{ width: loginLogoWidth, height: loginLogoHeight }"
11
+ />
12
+ <span
13
+ v-if="loginLogo && loginLogoText"
14
+ class="login-logo-hr m-l-s m-r-s"
15
+ ></span>
16
+ <h3 class="login-logo-text">
17
+ {{ loginLogoText }}
18
+ </h3>
19
+ </div>
20
+ <loginForm
21
+ :login-types="loginTypes"
22
+ :login-then="loginThen"
23
+ class="login-form"
24
+ >
25
+ <div slot="header" class="login-form-header m-b text-c">欢 迎 登 录</div>
26
+ <div slot="footer" class="login-form-footer m-t text-r">
27
+ <slot name="footer">
28
+ 为达到更好的体验效果,请<a
29
+ class="el-icon-bottom"
30
+ href="https://down.360safe.com/se/360se13.1.5101.0.exe"
31
+ download="启程浏览器.exe"
32
+ style="text-decoration: none; color: var(--color-primary)"
33
+ >下载</a
34
+ >启程浏览器
35
+ </slot>
36
+ </div>
37
+ </loginForm>
38
+ </div>
39
+ </template>
40
+
41
+ <script>
42
+ import getJsonc from '../../assets/getJsonc'
43
+ import realUrl from '../../assets/realUrl'
44
+
45
+ import loginForm from './form.vue'
46
+ export default {
47
+ name: 'Login',
48
+ components: {
49
+ loginForm
50
+ },
51
+ props: {
52
+ loginThen: {
53
+ type: Function,
54
+ default: undefined
55
+ }
56
+ },
57
+ data() {
58
+ return {
59
+ loginTypes: ['account'],
60
+ loginBg: undefined,
61
+ loginLogo: undefined,
62
+ loginLogoWidth: '60px',
63
+ loginLogoHeight: 'auto',
64
+ loginLogoText: ''
65
+ }
66
+ },
67
+ created() {
68
+ this.removeStorage()
69
+ this.setConfig()
70
+ },
71
+ methods: {
72
+ setConfig() {
73
+ getJsonc('/server-config.jsonc').then(({ _layoutData = {} }) => {
74
+ _layoutData.loginTypes && (this.loginTypes = _layoutData.loginTypes)
75
+ this.loginBg = realUrl(_layoutData.loginBg)
76
+ this.loginLogo = realUrl(_layoutData.loginLogo)
77
+ this.loginLogoWidth = _layoutData.loginLogoWidth
78
+ this.loginLogoHeight = _layoutData.loginLogoHeight
79
+ this.loginLogoText = _layoutData.loginLogoText
80
+ })
81
+ },
82
+ removeStorage() {
83
+ for (let k in window.sessionStorage) {
84
+ !['subEntry'].includes(k) && window.sessionStorage.removeItem(k)
85
+ }
86
+ }
87
+ }
88
+ }
89
+ </script>
90
+ <style scoped>
91
+ .login-logo-box {
92
+ position: absolute;
93
+ top: 26px;
94
+ left: 26px;
95
+ color: #ffffff;
96
+ }
97
+ .login-logo-hr {
98
+ height: 24px;
99
+ border-left: 2px solid;
100
+ }
101
+ .login-logo-text {
102
+ margin: 0;
103
+ font-size: 28px;
104
+ }
105
+ .login-form {
106
+ position: absolute;
107
+ top: 20%;
108
+ right: 10%;
109
+ width: 324px;
110
+ min-height: 360px;
111
+ background: #f7f6f6;
112
+ padding: 30px !important;
113
+ }
114
+ .login-form-header {
115
+ font-size: 16px;
116
+ color: #3d4a57;
117
+ }
118
+ .login-form-footer {
119
+ font-size: 12px;
120
+ color: #3d4a57;
121
+ }
122
+ </style>