vue2-client 1.8.135 → 1.8.136

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.
package/.env CHANGED
@@ -15,3 +15,5 @@ VUE_APP_DIVISIONSOHCHINA=admin.divisionsohchina
15
15
  VUE_APP_WEB_CONFIG_KEY=admin.webconfig
16
16
  VUE_APP_API_BASE_URL=http://123.60.214.109:8405
17
17
  VUE_APP_SYSTEM_NAME=af-system
18
+ VUE_APP_LOGIN_VERSION=V4
19
+
package/package.json CHANGED
@@ -1,97 +1,97 @@
1
1
  {
2
- "name": "vue2-client",
3
- "version": "1.8.135",
4
- "private": false,
5
- "scripts": {
6
- "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
7
- "mac-serve": "vue-cli-service serve --no-eslint --mode mac",
8
- "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
9
- "test:unit": "vue-cli-service test:unit",
10
- "lint": "vue-cli-service lint",
11
- "build:preview": "vue-cli-service build --mode preview",
12
- "lint:nofix": "vue-cli-service lint --no-fix",
13
- "test": "jest"
14
- },
15
- "dependencies": {
16
- "@amap/amap-jsapi-loader": "^1.0.1",
17
- "@antv/data-set": "^0.11.8",
18
- "@antv/g2plot": "^2.4.31",
19
- "@vue/babel-preset-jsx": "^1.4.0",
20
- "amis": "^3.4.3",
21
- "animate.css": "^4.1.1",
22
- "ant-design-vue": "^1.7.8",
23
- "axios": "^0.27.2",
24
- "clipboard": "^2.0.11",
25
- "core-js": "^3.33.0",
26
- "crypto-js": "^4.1.1",
27
- "date-fns": "^2.29.3",
28
- "default-passive-events": "^2.0.0",
29
- "dotenv": "^16.3.1",
30
- "echarts": "^5.5.0",
31
- "enquire.js": "^2.1.6",
32
- "file-saver": "^2.0.5",
33
- "highlight.js": "^11.7.0",
34
- "html2canvas": "^1.4.1",
35
- "js-base64": "^3.7.5",
36
- "js-cookie": "^2.2.1",
37
- "jsencrypt": "^3.3.2",
38
- "jspdf": "^2.5.1",
39
- "lodash.clonedeep": "^4.5.0",
40
- "lodash.get": "^4.4.2",
41
- "mockjs": "^1.1.0",
42
- "nprogress": "^0.2.0",
43
- "qs": "^6.11.2",
44
- "regenerator-runtime": "^0.14.0",
45
- "videojs-contrib-hls": "^5.15.0",
46
- "viser-vue": "^2.4.8",
47
- "vue": "^2.7.14",
48
- "vue-codemirror": "4.0.6",
49
- "vue-i18n": "^8.28.2",
50
- "vue-json-viewer": "^2.2.22",
51
- "vue-router": "^3.6.5",
52
- "vue-video-player": "^5.0.2",
53
- "vue-virtual-scroller": "^1.1.2",
54
- "vuedraggable": "^2.24.3",
55
- "vuex": "^3.6.2",
56
- "xlsx": "0.18.5"
57
- },
58
- "devDependencies": {
59
- "@ant-design/colors": "^7.0.0",
60
- "@babel/core": "^7.22.20",
61
- "@babel/eslint-parser": "^7.22.15",
62
- "@babel/preset-env": "^7.22.20",
63
- "@vue/cli-plugin-babel": "^5.0.8",
64
- "@vue/cli-plugin-eslint": "^5.0.8",
65
- "@vue/cli-service": "^5.0.8",
66
- "@vue/eslint-config-standard": "^8.0.1",
67
- "@vue/test-utils": "^1.3.6",
68
- "babel-jest": "^26.6.3",
69
- "babel-plugin-transform-remove-console": "^6.9.4",
70
- "compression-webpack-plugin": "^10.0.0",
71
- "copy-webpack-plugin": "^11.0.0",
72
- "css-minimizer-webpack-plugin": "^5.0.1",
73
- "deepmerge": "^4.3.1",
74
- "eslint": "^8.51.0",
75
- "eslint-plugin-vue": "^9.17.0",
76
- "fast-deep-equal": "^3.1.3",
77
- "ignore-loader": "^0.1.2",
78
- "jest": "^26.6.3",
79
- "jest-environment-jsdom": "^26.6.2",
80
- "jest-transform-stub": "^2.0.0",
81
- "less-loader": "^6.2.0",
82
- "script-loader": "^0.7.2",
83
- "style-resources-loader": "^1.5.0",
84
- "vue-cli-plugin-style-resources-loader": "^0.1.5",
85
- "vue-jest": "^4.0.1",
86
- "vue-template-compiler": "^2.7.14",
87
- "webpack": "^5.88.2",
88
- "webpack-theme-color-replacer": "^1.4.7",
89
- "whatwg-fetch": "^3.6.19"
90
- },
91
- "browserslist": [
92
- "> 1%",
93
- "last 2 versions",
94
- "not dead",
95
- "not ie 11"
96
- ]
97
- }
2
+ "name": "vue2-client",
3
+ "version": "1.8.136",
4
+ "private": false,
5
+ "scripts": {
6
+ "serve": "vue-cli-service serve --no-eslint",
7
+ "mac-serve": "vue-cli-service serve --no-eslint --mode mac",
8
+ "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
9
+ "test:unit": "vue-cli-service test:unit",
10
+ "lint": "vue-cli-service lint",
11
+ "build:preview": "vue-cli-service build --mode preview",
12
+ "lint:nofix": "vue-cli-service lint --no-fix",
13
+ "test": "jest"
14
+ },
15
+ "dependencies": {
16
+ "@amap/amap-jsapi-loader": "^1.0.1",
17
+ "@antv/data-set": "^0.11.8",
18
+ "@antv/g2plot": "^2.4.31",
19
+ "@vue/babel-preset-jsx": "^1.4.0",
20
+ "amis": "^3.4.3",
21
+ "animate.css": "^4.1.1",
22
+ "ant-design-vue": "^1.7.8",
23
+ "axios": "^0.27.2",
24
+ "clipboard": "^2.0.11",
25
+ "core-js": "^3.33.0",
26
+ "crypto-js": "^4.1.1",
27
+ "date-fns": "^2.29.3",
28
+ "default-passive-events": "^2.0.0",
29
+ "dotenv": "^16.3.1",
30
+ "echarts": "^5.5.0",
31
+ "enquire.js": "^2.1.6",
32
+ "file-saver": "^2.0.5",
33
+ "highlight.js": "^11.7.0",
34
+ "html2canvas": "^1.4.1",
35
+ "js-base64": "^3.7.5",
36
+ "js-cookie": "^2.2.1",
37
+ "jsencrypt": "^3.3.2",
38
+ "jspdf": "^2.5.1",
39
+ "lodash.clonedeep": "^4.5.0",
40
+ "lodash.get": "^4.4.2",
41
+ "mockjs": "^1.1.0",
42
+ "nprogress": "^0.2.0",
43
+ "qs": "^6.11.2",
44
+ "regenerator-runtime": "^0.14.0",
45
+ "videojs-contrib-hls": "^5.15.0",
46
+ "viser-vue": "^2.4.8",
47
+ "vue": "^2.7.14",
48
+ "vue-codemirror": "4.0.6",
49
+ "vue-i18n": "^8.28.2",
50
+ "vue-json-viewer": "^2.2.22",
51
+ "vue-router": "^3.6.5",
52
+ "vue-video-player": "^5.0.2",
53
+ "vue-virtual-scroller": "^1.1.2",
54
+ "vuedraggable": "^2.24.3",
55
+ "vuex": "^3.6.2",
56
+ "xlsx": "0.18.5"
57
+ },
58
+ "devDependencies": {
59
+ "@ant-design/colors": "^7.0.0",
60
+ "@babel/core": "^7.22.20",
61
+ "@babel/eslint-parser": "^7.22.15",
62
+ "@babel/preset-env": "^7.22.20",
63
+ "@vue/cli-plugin-babel": "^5.0.8",
64
+ "@vue/cli-plugin-eslint": "^5.0.8",
65
+ "@vue/cli-service": "^5.0.8",
66
+ "@vue/eslint-config-standard": "^8.0.1",
67
+ "@vue/test-utils": "^1.3.6",
68
+ "babel-jest": "^26.6.3",
69
+ "babel-plugin-transform-remove-console": "^6.9.4",
70
+ "compression-webpack-plugin": "^10.0.0",
71
+ "copy-webpack-plugin": "^11.0.0",
72
+ "css-minimizer-webpack-plugin": "^5.0.1",
73
+ "deepmerge": "^4.3.1",
74
+ "eslint": "^8.51.0",
75
+ "eslint-plugin-vue": "^9.17.0",
76
+ "fast-deep-equal": "^3.1.3",
77
+ "ignore-loader": "^0.1.2",
78
+ "jest": "^26.6.3",
79
+ "jest-environment-jsdom": "^26.6.2",
80
+ "jest-transform-stub": "^2.0.0",
81
+ "less-loader": "^6.2.0",
82
+ "script-loader": "^0.7.2",
83
+ "style-resources-loader": "^1.5.0",
84
+ "vue-cli-plugin-style-resources-loader": "^0.1.5",
85
+ "vue-jest": "^4.0.1",
86
+ "vue-template-compiler": "^2.7.14",
87
+ "webpack": "^5.88.2",
88
+ "webpack-theme-color-replacer": "^1.4.7",
89
+ "whatwg-fetch": "^3.6.19"
90
+ },
91
+ "browserslist": [
92
+ "> 1%",
93
+ "last 2 versions",
94
+ "not dead",
95
+ "not ie 11"
96
+ ]
97
+ }
Binary file
Binary file
@@ -1,48 +1,48 @@
1
- # XReportSlot 暂时废弃
2
-
3
-
4
- 动态报表的插槽组件,可以递归使用
5
-
6
-
7
- ## 何时使用
8
-
9
- > 当需要一个动态生成的报表时
10
-
11
- > 一般由XReportDesign嵌套使用,在XReportDesign中判断当前行如果类型是slot,
12
- > 则递归此组件
13
-
14
- 引用方式:
15
-
16
- ```javascript
17
- import XReportSlot from '@vue2-client/base-client/components/XReportSlot/XReportSlot'
18
-
19
- export default {
20
- components: {
21
- XReportSlot
22
- }
23
- }
24
- ```
25
-
26
-
27
- ## API
28
-
29
- | 参数 | 说明 | 类型 | 默认值 |
30
- |-----------------|--------------------------|--------|------|
31
- | config | 表格完整配置 | Object | 无(必填) |
32
- | forDisplay | 是否为展示页 | Boolean | false |
33
- | slotConfigName | 插槽名 | String | undefined |
34
-
35
- ## 例子1
36
- ----
37
- ```vue
38
- <XReportSlot
39
- :config="activatedConfig"
40
- :slot-config-name="slotConfig"
41
- :for-display="forDisplay">
42
- </XReportSlot>
43
- ```
44
- ## 注意事项
45
- > slotConfigName如果不填,则展示整个表格。
46
- > 如果填写,则仅展示插槽中的内容
47
-
48
- > 该组件可以递归调用
1
+ # XReportSlot 暂时废弃
2
+
3
+
4
+ 动态报表的插槽组件,可以递归使用
5
+
6
+
7
+ ## 何时使用
8
+
9
+ > 当需要一个动态生成的报表时
10
+
11
+ > 一般由XReportDesign嵌套使用,在XReportDesign中判断当前行如果类型是slot,
12
+ > 则递归此组件
13
+
14
+ 引用方式:
15
+
16
+ ```javascript
17
+ import XReportSlot from '@vue2-client/base-client/components/XReportSlot/XReportSlot'
18
+
19
+ export default {
20
+ components: {
21
+ XReportSlot
22
+ }
23
+ }
24
+ ```
25
+
26
+
27
+ ## API
28
+
29
+ | 参数 | 说明 | 类型 | 默认值 |
30
+ |-----------------|--------------------------|--------|------|
31
+ | config | 表格完整配置 | Object | 无(必填) |
32
+ | forDisplay | 是否为展示页 | Boolean | false |
33
+ | slotConfigName | 插槽名 | String | undefined |
34
+
35
+ ## 例子1
36
+ ----
37
+ ```vue
38
+ <XReportSlot
39
+ :config="activatedConfig"
40
+ :slot-config-name="slotConfig"
41
+ :for-display="forDisplay">
42
+ </XReportSlot>
43
+ ```
44
+ ## 注意事项
45
+ > slotConfigName如果不填,则展示整个表格。
46
+ > 如果填写,则仅展示插槽中的内容
47
+
48
+ > 该组件可以递归调用
@@ -0,0 +1,389 @@
1
+ <template>
2
+ <common-layout>
3
+ <div class="loginContent">
4
+ <div class="illustration"/>
5
+ <div class="business">
6
+ <div class="top">
7
+ <div class="header">
8
+ <span class="title">{{ systemName }}</span>
9
+ </div>
10
+ </div>
11
+ <div class="login" id="loginForm">
12
+ <a-form :form="form" @submit="onSubmit">
13
+ <a-tabs :tabBarStyle="{textAlign: 'center'}" size="large" style="padding: 0 2px;">
14
+ <a-tab-pane>
15
+ <a-alert
16
+ v-show="error"
17
+ :closable="false"
18
+ :message="error"
19
+ showIcon
20
+ style="margin-bottom: 2.8vh;"
21
+ type="error" />
22
+ <a-form-item>
23
+ <a-input
24
+ v-decorator="['name', {rules: [{ required: true, message: '请输入账户名', whitespace: true}]}]"
25
+ autocomplete="autocomplete"
26
+ placeholder="请输入账户名"
27
+ size="large"
28
+ >
29
+ <a-icon slot="prefix" type="user" />
30
+ </a-input>
31
+ </a-form-item>
32
+ <a-form-item>
33
+ <a-input
34
+ v-decorator="['password', {rules: [{ required: true, message: '请输入密码', whitespace: true}]}]"
35
+ autocomplete="autocomplete"
36
+ placeholder="请输入密码"
37
+ size="large"
38
+ type="password"
39
+ >
40
+ <a-icon slot="prefix" type="lock" />
41
+ </a-input>
42
+ </a-form-item>
43
+ <a-form-item>
44
+ <a-button :loading="loading" htmlType="submit" size="large" class="btn" type="primary">登录</a-button>
45
+ </a-form-item>
46
+ </a-tab-pane>
47
+ </a-tabs>
48
+ </a-form>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </common-layout>
53
+ </template>
54
+
55
+ <script>
56
+ import CommonLayout from '@vue2-client/layouts/CommonLayout'
57
+ import { getRoutesConfig, login, V4Login } from '@vue2-client/services/user'
58
+ import { setAuthorization } from '@vue2-client/utils/request'
59
+ import { loadRoutes, funcToRouterOA, funcToRouter } from '@vue2-client/utils/routerUtil'
60
+ import { mapMutations, mapState } from 'vuex'
61
+ import JSEncrypt from 'jsencrypt'
62
+ import { ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
63
+ import { positions } from '@vue2-client/mock/common'
64
+ import { timeFix } from '@vue2-client/utils/util'
65
+ import { loginStart } from '@vue2-client/base-client/plugins/compatible/LoginServiceOA'
66
+ import { indexedDB } from '@vue2-client/utils/indexedDB'
67
+
68
+ export default {
69
+ name: 'Login',
70
+ components: { CommonLayout },
71
+ data () {
72
+ return {
73
+ loading: false,
74
+ error: '',
75
+ form: this.$form.createForm(this)
76
+ }
77
+ },
78
+ computed: {
79
+ ...mapState('setting', ['systemName', 'systemDesc', 'homePage', 'ticketPage', 'compatible', 'routeName', 'defaultAvatarUrl'])
80
+ },
81
+ methods: {
82
+ ...mapMutations('account', ['setUser', 'setPermissions', 'setRoles']),
83
+ onSubmit (e) {
84
+ e.preventDefault()
85
+ this.form.validateFields((err) => {
86
+ if (!err) {
87
+ this.loading = true
88
+ const name = this.form.getFieldValue('name')
89
+ const password = this.form.getFieldValue('password')
90
+ switch (this.compatible) {
91
+ case 'V2':
92
+ case 'V3': {
93
+ login(name, password).then(this.afterLogin).catch(msg => {
94
+ this.error = msg
95
+ this.loading = false
96
+ })
97
+ break
98
+ }
99
+ case 'OA' : {
100
+ loginStart(name, password).then(this.afterLoginOA).catch(msg => {
101
+ this.error = msg
102
+ this.loading = false
103
+ })
104
+ break
105
+ }
106
+ case 'V4' : {
107
+ V4Login(name, password, this.routeName).then(this.afterLoginV4).catch(msg => {
108
+ this.error = msg
109
+ this.loading = false
110
+ })
111
+ break
112
+ }
113
+ }
114
+ }
115
+ })
116
+ },
117
+ afterLoginOA (result) {
118
+ try {
119
+ // 默认第一个是旧OA地址
120
+ result.functions[0].navigate = result.functions[0].link
121
+ result.functions[0].link = null
122
+ this.afterGeneral(result)
123
+ this.setAccessToken(result.password)
124
+ this.$router.push(this.homePage).catch(() => {
125
+ })
126
+ } catch (res) {
127
+ this.error = res
128
+ } finally {
129
+ this.loading = false
130
+ }
131
+ },
132
+ afterLoginV4 (res) {
133
+ this.setV4AccessToken(res)
134
+ let data = res.resources
135
+ if (data.data) {
136
+ data = data.data
137
+ }
138
+ this.$login.login(data).then(() => {
139
+ this.afterGeneral(data)
140
+ if (data.deps === '用户工单登记') {
141
+ this.$router.push(this.ticketPage).catch(() => {
142
+ })
143
+ } else {
144
+ this.$router.push(this.homePage).catch(() => {
145
+ })
146
+ }
147
+ }).catch(res => {
148
+ this.error = res
149
+ }).finally(() => {
150
+ this.loading = false
151
+ })
152
+ },
153
+ afterLogin (res) {
154
+ const name = this.form.getFieldValue('name')
155
+ const password = this.form.getFieldValue('password')
156
+ const loginRes = res.states
157
+ if (loginRes === '登录成功') {
158
+ const encrypt = new JSEncrypt()
159
+ encrypt.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB')
160
+ const data = encrypt.encrypt(JSON.stringify({ username: name, password: password }))
161
+ // 获取路由配置
162
+ getRoutesConfig(data, this.routeName).then(result => {
163
+ this.$login.login(result).then(() => {
164
+ // V3任何情况首位加入资源管理
165
+ const resourceManageMain = {
166
+ name: '资源管理',
167
+ icon: 'api',
168
+ position: 1,
169
+ link: 'resourceManageMain'
170
+ }
171
+ result.functions.unshift(resourceManageMain)
172
+ this.afterGeneral(result)
173
+ this.setAccessToken(data)
174
+ if (result.deps === '用户工单登记') {
175
+ this.$router.push(this.ticketPage).catch(() => {})
176
+ } else {
177
+ this.$router.push(this.homePage).catch(() => {})
178
+ }
179
+ }).finally(() => {
180
+ this.loading = false
181
+ })
182
+ }).catch(res => {
183
+ this.error = res
184
+ })
185
+ } else {
186
+ this.error = loginRes
187
+ this.loading = false
188
+ }
189
+ },
190
+ afterGeneral (result) {
191
+ const user = Object.assign({
192
+ id: result.id,
193
+ username: result.ename,
194
+ password: this.form.getFieldValue('password'),
195
+ name: result.name,
196
+ avatar: result.avatar ? result.avatar : this.defaultAvatarUrl,
197
+ address: '西安市',
198
+ position: positions[0]
199
+ }, result)
200
+ this.setUser(user)
201
+ this.setPermissions([{ id: 'queryForm', operation: ['add', 'edit'] }])
202
+ this.setRoles([{ id: 'admin', operation: ['add', 'edit', 'delete'] }])
203
+ let func
204
+ switch (this.compatible) {
205
+ case 'OA' :
206
+ func = funcToRouterOA(user.functions)
207
+ break
208
+ default:
209
+ func = funcToRouter(user.functions)
210
+ break
211
+ }
212
+ loadRoutes(func)
213
+ // 每次重新登录时,清除indexedDB缓存
214
+ indexedDB.clear()
215
+ this.$message.success(timeFix().CN + `,${result.name} 欢迎回来`, 3)
216
+ },
217
+ setAccessToken (data) {
218
+ if (data) {
219
+ localStorage.setItem(ACCESS_TOKEN, data)
220
+ let timestamp = new Date().getTime()// 当前的时间戳
221
+ timestamp = timestamp + 12 * 60 * 60 * 1000
222
+ // 格式化时间获取年月日, 登陆过期时间
223
+ const dateAfter = new Date(timestamp)
224
+ setAuthorization({ token: data, expireAt: dateAfter })
225
+ }
226
+ },
227
+ setV4AccessToken (res) {
228
+ localStorage.setItem(ACCESS_TOKEN, res.access_token)
229
+ let timestamp = new Date().getTime()// 当前的时间戳
230
+ timestamp = timestamp + res.expire * 60 * 1000
231
+ // 格式化时间获取年月日, 登陆过期时间
232
+ const dateAfter = new Date(timestamp)
233
+ setAuthorization({ token: res.access_token, expireAt: dateAfter })
234
+ }
235
+ }
236
+ }
237
+ </script>
238
+
239
+ <style lang="less" scoped>
240
+ .common-layout {
241
+ background-image: url('/public/img/login/loginbg.gif');
242
+ background-size: cover;
243
+ background-position: center;
244
+ .content {
245
+ .loginContent {
246
+ position: absolute;
247
+ top: 50%;
248
+ left: 50%;
249
+ width: 63vw;
250
+ padding: 12.4vh 4.8vw 13.4vh 3.5vw;
251
+ @media screen and (max-width: 479px) {
252
+ padding: 6.4vh 4.8vw 4.4vh 3.5vw;
253
+ }
254
+ transform: translate(-50%, -50%);
255
+ background: #fff;
256
+ border-radius: 30px;
257
+ display: flex;
258
+ .illustration {
259
+ flex: 1;
260
+ background-image: url("/public/img/login/login-left.png");
261
+ background-size: contain;
262
+ background-position: center;
263
+ background-repeat: no-repeat;
264
+ @media screen and (max-width: 959px) {
265
+ flex: 0;
266
+ }
267
+ }
268
+ .business {
269
+ flex: 1;
270
+ .top {
271
+ text-align: center;
272
+ .header {
273
+ height: 2vh;
274
+ line-height: 2.7vh;
275
+ padding-bottom: 5.4vh;
276
+ .title {
277
+ font-size: 1.5rem;
278
+ @media screen and (max-width: 479px) {
279
+ font-size: 1rem;
280
+ }
281
+ @media screen and (min-width: 480px) and (max-width: 767px) {
282
+ font-size: 1.3rem;
283
+ }
284
+ @media screen and (min-width: 768px) and (max-width: 959px) {
285
+ font-size: 1.5rem;
286
+ }
287
+ @media screen and (min-width: 960px) {
288
+ font-size: 1.3rem;
289
+ }
290
+ @media screen and (min-width: 1200px) {
291
+ font-size: 1.5rem;
292
+ }
293
+ color: #333333;
294
+ font-weight: bold;
295
+ font-family: 'Microsoft YaHei UI Light', 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
296
+ letter-spacing: 0.13rem;
297
+ }
298
+ }
299
+ }
300
+ .login{
301
+ width: 20vw;
302
+ margin: 0 auto;
303
+ @media screen and (max-width: 479px) {
304
+ width: 50vw;
305
+ }
306
+ @media screen and (min-width: 480px) and (max-width: 767px) {
307
+ width: 50vw;
308
+ }
309
+ @media screen and (min-width: 768px) and (max-width: 959px) {
310
+ width: 40vw;
311
+ }
312
+ @media screen and (min-width: 960px) {
313
+ width: 20vw;
314
+ }
315
+ @media screen and (min-width: 1200px) {
316
+ width: 20vw;
317
+ }
318
+ .btn {
319
+ width: 100%;
320
+ min-height: 43px;
321
+ height: 5.4vh;
322
+ border-radius: 30px;
323
+ background-color: #4F93FE;
324
+ }
325
+ }
326
+ }
327
+ }
328
+ }
329
+ }
330
+ </style>
331
+ <style lang="less">
332
+ .common-layout {
333
+ .footer {
334
+ .copyright {
335
+ color: #fff !important;
336
+ }
337
+ }
338
+ }
339
+ #loginForm {
340
+ .ant-input {
341
+ border-radius: 30px;
342
+ }
343
+ .ant-input:focus {
344
+ box-shadow: none;
345
+ }
346
+ .has-error .ant-input-affix-wrapper .ant-input:focus{
347
+ box-shadow: none;
348
+ }
349
+ .ant-input-lg {
350
+ min-height: 43px;
351
+ height: 5.4vh;
352
+ }
353
+ .ant-tabs-bar {
354
+ margin-bottom: 24px;
355
+ display: none;
356
+ }
357
+ .ant-input-affix-wrapper {
358
+ font-size: 1.15rem;
359
+ }
360
+ .ant-input-affix-wrapper .ant-input:not(:first-child) {
361
+ padding-left: 2.4vw;
362
+ border-radius: 0;
363
+ border-top: none;
364
+ border-left: none;
365
+ border-right: none;
366
+ @media screen and (max-width: 479px) {
367
+ padding-left: 10vw;
368
+ }
369
+ @media screen and (min-width: 480px) and (max-width: 767px) {
370
+ padding-left: 8vw;
371
+ }
372
+ @media screen and (min-width: 768px) and (max-width: 959px) {
373
+ padding-left: 5vw;
374
+ }
375
+ @media screen and (min-width: 960px) {
376
+ padding-left: 4vw;
377
+ }
378
+ @media screen and (min-width: 1200px) {
379
+ padding-left: 2.4vw;
380
+ }
381
+ }
382
+ .ant-input-affix-wrapper .ant-input-prefix, .ant-input-affix-wrapper .ant-input-suffix {
383
+ color: #4F93FE;
384
+ }
385
+ .ant-alert {
386
+ border-radius: 12px;
387
+ }
388
+ }
389
+ </style>
@@ -1,75 +1,98 @@
1
1
  const { homePage } = require('../../config')
2
- // 视图组件
2
+ // 视图组件
3
3
  const view = {
4
- tabs: () => import('@vue2-client/layouts/tabs'),
5
- blank: () => import('@vue2-client/layouts/BlankView'),
6
- page: () => import('@vue2-client/layouts/PageView')
7
- }
8
- // 动态路由对象定义
4
+ tabs: () =>
5
+ import('@vue2-client/layouts/tabs'),
6
+ blank: () =>
7
+ import('@vue2-client/layouts/BlankView'),
8
+ page: () =>
9
+ import('@vue2-client/layouts/PageView'),
10
+ login: () =>
11
+ import('@vue2-client/pages/login/Login'),
12
+ loginv3: () =>
13
+ import('@vue2-client/pages/login/LoginV3')
14
+ }
15
+ // 动态路由对象定义
9
16
  const routerResource = {}
10
- // --------------------------------------基本视图组件--------------------------------------
11
- // 空白视图
17
+ // --------------------------------------基本视图组件--------------------------------------
18
+ // 空白视图
12
19
  routerResource.blank = view.blank
13
- // 单页面视图
20
+ // 单页面视图
14
21
  routerResource.singlePage = view.blank
15
22
 
16
23
  // --------------------------------------仪表盘--------------------------------------
17
24
  routerResource.dashboard = view.blank
18
- // 工作台
19
- routerResource.workplace = () => import('@vue2-client/pages/dashboard/workplace')
20
- // --------------------------------------系统配置--------------------------------------
25
+ // 工作台
26
+ routerResource.workplace = () =>
27
+ import('@vue2-client/pages/dashboard/workplace')
28
+ // --------------------------------------系统配置--------------------------------------
21
29
  routerResource.system = view.blank
22
- // 字典管理
23
- routerResource.dictionaryManage = () => import('@vue2-client/pages/system/dictionary')
24
- // 文件管理
25
- routerResource.fileManager = () => import('@vue2-client/pages/system/file')
26
- // 登录日志
27
- routerResource.loginInfor = () => import('@vue2-client/pages/system/monitor/loginInfor')
28
- // 操作日志
29
- routerResource.operLog = () => import('@vue2-client/pages/system/monitor/operLog')
30
- // 系统问题反馈工单
31
- routerResource.submitTicket = () => import('@vue2-client/pages/system/ticket')
32
- // 通用服务评价
33
- routerResource.ServiceReview = () => import('@vue2-client/pages/ServiceReview')
34
- // 系统设置
35
- routerResource.settings = () => import('@vue2-client/pages/system/settings')
36
- // AMIS示例页面
37
- routerResource.amisDemo = () => import('@vue2-client/pages/AMisDemo/AMisDemo')
38
- // 数据检索
39
- routerResource.dynamicStatistics = () => import('@vue2-client/pages/DynamicStatistics')
40
- // 示例页面
41
- routerResource.example = () => import('@vue2-client/pages/Example')
42
- routerResource.XReportView = () => import('@vue2-client/pages/XReportView')
43
-
44
- // 基础路由组件注册
30
+ // 字典管理
31
+ routerResource.dictionaryManage = () =>
32
+ import('@vue2-client/pages/system/dictionary')
33
+ // 文件管理
34
+ routerResource.fileManager = () =>
35
+ import('@vue2-client/pages/system/file')
36
+ // 登录日志
37
+ routerResource.loginInfor = () =>
38
+ import('@vue2-client/pages/system/monitor/loginInfor')
39
+ // 操作日志
40
+ routerResource.operLog = () =>
41
+ import('@vue2-client/pages/system/monitor/operLog')
42
+ // 系统问题反馈工单
43
+ routerResource.submitTicket = () =>
44
+ import('@vue2-client/pages/system/ticket')
45
+ // 通用服务评价
46
+ routerResource.ServiceReview = () =>
47
+ import('@vue2-client/pages/ServiceReview')
48
+ // 系统设置
49
+ routerResource.settings = () =>
50
+ import('@vue2-client/pages/system/settings')
51
+ // AMIS示例页面
52
+ routerResource.amisDemo = () =>
53
+ import('@vue2-client/pages/AMisDemo/AMisDemo')
54
+ // 数据检索
55
+ routerResource.dynamicStatistics = () =>
56
+ import('@vue2-client/pages/DynamicStatistics')
57
+ // 示例页面
58
+ routerResource.example = () =>
59
+ import('@vue2-client/pages/Example')
60
+ routerResource.XReportView = () =>
61
+ import('@vue2-client/pages/XReportView')
62
+ console.log(process.env)
63
+ // 基础路由组件注册
45
64
  const routerMap = {
46
- login: {
47
- authority: '*',
48
- path: '/login',
49
- component: () => import('@vue2-client/pages/login')
50
- },
51
- root: {
52
- path: '/',
53
- name: '首页',
54
- redirect: homePage,
55
- component: process.env.VUE_APP_SINGLE_PAPER === 'TRUE' ? view.blank : view.tabs,
56
- },
57
- exp403: {
58
- authority: '*',
59
- name: 'exp403',
60
- path: '403',
61
- component: () => import('@vue2-client/pages/exception/403')
62
- },
63
- exp404: {
64
- name: 'exp404',
65
- path: '404',
66
- component: () => import('@vue2-client/pages/exception/404')
67
- },
68
- exp500: {
69
- name: 'exp500',
70
- path: '500',
71
- component: () => import('@vue2-client/pages/exception/500')
72
- }
65
+ login: {
66
+ authority: '*',
67
+ path: '/login',
68
+ component: process.env.VUE_APP_LOGIN_VERSION === 'V3'
69
+ ? view.loginv3 : view.login
70
+ },
71
+ root: {
72
+ path: '/',
73
+ name: '首页',
74
+ redirect: homePage,
75
+ component: process.env.VUE_APP_SINGLE_PAPER === 'TRUE' ? view.blank : view.tabs,
76
+ },
77
+ exp403: {
78
+ authority: '*',
79
+ name: 'exp403',
80
+ path: '403',
81
+ component: () =>
82
+ import('@vue2-client/pages/exception/403')
83
+ },
84
+ exp404: {
85
+ name: 'exp404',
86
+ path: '404',
87
+ component: () =>
88
+ import('@vue2-client/pages/exception/404')
89
+ },
90
+ exp500: {
91
+ name: 'exp500',
92
+ path: '500',
93
+ component: () =>
94
+ import('@vue2-client/pages/exception/500')
95
+ }
73
96
  }
74
97
  Object.assign(routerMap, routerResource)
75
98
  export default routerMap