system-phone 3.1.40 → 3.1.42
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/.babelrc +5 -5
- package/.editorconfig +9 -9
- package/.eslintrc.js +16 -16
- package/CHANGELOG.md +1 -1
- package/Dockerfile +3 -3
- package/README.md +36 -36
- package/build/css-loaders.js +34 -34
- package/build/dev-client.js +8 -8
- package/build/example-server.js +80 -80
- package/build/release.sh +28 -28
- package/build/utils.js +71 -71
- package/build/webpack.dev.conf.js +31 -31
- package/build/webpack.example.conf.js +49 -49
- package/build/webpack.prod.conf.js +60 -60
- package/build/webpack.test.conf.js +31 -31
- package/config/dev.env.js +6 -6
- package/config/index.js +38 -38
- package/config/prod.env.js +3 -3
- package/config/test.env.js +6 -6
- package/nginx.conf +304 -304
- package/package.json +1 -1
- package/release.bat +5 -5
- package/src/App.vue +25 -25
- package/src/Util.js +415 -415
- package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
- package/src/android-bootstrap/less/.csscomb.json +304 -304
- package/src/android-bootstrap/less/.csslintrc +19 -19
- package/src/android-bootstrap/less/alerts.less +73 -73
- package/src/android-bootstrap/less/badges.less +66 -66
- package/src/android-bootstrap/less/bootstrap.less +56 -56
- package/src/android-bootstrap/less/breadcrumbs.less +26 -26
- package/src/android-bootstrap/less/button-groups.less +247 -247
- package/src/android-bootstrap/less/buttons.less +173 -173
- package/src/android-bootstrap/less/carousel.less +269 -269
- package/src/android-bootstrap/less/close.less +34 -34
- package/src/android-bootstrap/less/code.less +69 -69
- package/src/android-bootstrap/less/component-animations.less +33 -33
- package/src/android-bootstrap/less/dropdowns.less +216 -216
- package/src/android-bootstrap/less/forms.less +626 -626
- package/src/android-bootstrap/less/glyphicons.less +305 -305
- package/src/android-bootstrap/less/grid.less +84 -84
- package/src/android-bootstrap/less/input-groups.less +167 -167
- package/src/android-bootstrap/less/jumbotron.less +52 -52
- package/src/android-bootstrap/less/labels.less +64 -64
- package/src/android-bootstrap/less/list-group.less +141 -141
- package/src/android-bootstrap/less/media.less +66 -66
- package/src/android-bootstrap/less/mixins/alerts.less +14 -14
- package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
- package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
- package/src/android-bootstrap/less/mixins/buttons.less +69 -69
- package/src/android-bootstrap/less/mixins/center-block.less +7 -7
- package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
- package/src/android-bootstrap/less/mixins/forms.less +90 -90
- package/src/android-bootstrap/less/mixins/gradients.less +59 -59
- package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
- package/src/android-bootstrap/less/mixins/grid.less +122 -122
- package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
- package/src/android-bootstrap/less/mixins/image.less +33 -33
- package/src/android-bootstrap/less/mixins/labels.less +12 -12
- package/src/android-bootstrap/less/mixins/list-group.less +30 -30
- package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
- package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
- package/src/android-bootstrap/less/mixins/opacity.less +8 -8
- package/src/android-bootstrap/less/mixins/pagination.less +24 -24
- package/src/android-bootstrap/less/mixins/panels.less +24 -24
- package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
- package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
- package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
- package/src/android-bootstrap/less/mixins/resize.less +6 -6
- package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
- package/src/android-bootstrap/less/mixins/size.less +10 -10
- package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
- package/src/android-bootstrap/less/mixins/table-row.less +44 -44
- package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
- package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
- package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
- package/src/android-bootstrap/less/mixins.less +40 -40
- package/src/android-bootstrap/less/modals.less +151 -151
- package/src/android-bootstrap/less/navbar.less +660 -660
- package/src/android-bootstrap/less/navs.less +290 -290
- package/src/android-bootstrap/less/normalize.less +424 -424
- package/src/android-bootstrap/less/pager.less +76 -76
- package/src/android-bootstrap/less/pagination.less +89 -89
- package/src/android-bootstrap/less/panels.less +274 -274
- package/src/android-bootstrap/less/popovers.less +131 -131
- package/src/android-bootstrap/less/print.less +101 -101
- package/src/android-bootstrap/less/progress-bars.less +87 -87
- package/src/android-bootstrap/less/responsive-embed.less +35 -35
- package/src/android-bootstrap/less/responsive-utilities.less +194 -194
- package/src/android-bootstrap/less/scaffolding.less +161 -161
- package/src/android-bootstrap/less/tables.less +262 -262
- package/src/android-bootstrap/less/theme.less +291 -291
- package/src/android-bootstrap/less/thumbnails.less +36 -36
- package/src/android-bootstrap/less/tooltip.less +102 -102
- package/src/android-bootstrap/less/type.less +303 -303
- package/src/android-bootstrap/less/utilities.less +55 -55
- package/src/android-bootstrap/less/variables.less +896 -896
- package/src/android-bootstrap/less/wells.less +29 -29
- package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
- package/src/bootstrap/less/.csscomb.json +304 -304
- package/src/bootstrap/less/.csslintrc +19 -19
- package/src/bootstrap/less/alerts.less +73 -73
- package/src/bootstrap/less/badges.less +66 -66
- package/src/bootstrap/less/bootstrap.less +56 -56
- package/src/bootstrap/less/breadcrumbs.less +26 -26
- package/src/bootstrap/less/button-groups.less +247 -247
- package/src/bootstrap/less/buttons.less +172 -172
- package/src/bootstrap/less/carousel.less +269 -269
- package/src/bootstrap/less/close.less +34 -34
- package/src/bootstrap/less/code.less +69 -69
- package/src/bootstrap/less/component-animations.less +33 -33
- package/src/bootstrap/less/dropdowns.less +216 -216
- package/src/bootstrap/less/forms.less +626 -626
- package/src/bootstrap/less/glyphicons.less +305 -305
- package/src/bootstrap/less/grid.less +84 -84
- package/src/bootstrap/less/input-groups.less +167 -167
- package/src/bootstrap/less/jumbotron.less +52 -52
- package/src/bootstrap/less/labels.less +64 -64
- package/src/bootstrap/less/list-group.less +141 -141
- package/src/bootstrap/less/media.less +66 -66
- package/src/bootstrap/less/mixins/alerts.less +14 -14
- package/src/bootstrap/less/mixins/background-variant.less +9 -9
- package/src/bootstrap/less/mixins/border-radius.less +18 -18
- package/src/bootstrap/less/mixins/buttons.less +69 -69
- package/src/bootstrap/less/mixins/center-block.less +7 -7
- package/src/bootstrap/less/mixins/clearfix.less +22 -22
- package/src/bootstrap/less/mixins/forms.less +90 -90
- package/src/bootstrap/less/mixins/gradients.less +59 -59
- package/src/bootstrap/less/mixins/grid-framework.less +92 -92
- package/src/bootstrap/less/mixins/grid.less +122 -122
- package/src/bootstrap/less/mixins/hide-text.less +21 -21
- package/src/bootstrap/less/mixins/image.less +33 -33
- package/src/bootstrap/less/mixins/labels.less +12 -12
- package/src/bootstrap/less/mixins/list-group.less +30 -30
- package/src/bootstrap/less/mixins/nav-divider.less +10 -10
- package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
- package/src/bootstrap/less/mixins/opacity.less +8 -8
- package/src/bootstrap/less/mixins/pagination.less +24 -24
- package/src/bootstrap/less/mixins/panels.less +24 -24
- package/src/bootstrap/less/mixins/progress-bar.less +10 -10
- package/src/bootstrap/less/mixins/reset-filter.less +8 -8
- package/src/bootstrap/less/mixins/reset-text.less +18 -18
- package/src/bootstrap/less/mixins/resize.less +6 -6
- package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
- package/src/bootstrap/less/mixins/size.less +10 -10
- package/src/bootstrap/less/mixins/tab-focus.less +9 -9
- package/src/bootstrap/less/mixins/table-row.less +44 -44
- package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
- package/src/bootstrap/less/mixins/text-overflow.less +8 -8
- package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
- package/src/bootstrap/less/mixins.less +40 -40
- package/src/bootstrap/less/modals.less +151 -151
- package/src/bootstrap/less/navbar.less +660 -660
- package/src/bootstrap/less/navs.less +286 -286
- package/src/bootstrap/less/normalize.less +424 -424
- package/src/bootstrap/less/pager.less +76 -76
- package/src/bootstrap/less/pagination.less +89 -89
- package/src/bootstrap/less/panels.less +275 -275
- package/src/bootstrap/less/popovers.less +131 -131
- package/src/bootstrap/less/print.less +101 -101
- package/src/bootstrap/less/progress-bars.less +87 -87
- package/src/bootstrap/less/responsive-embed.less +35 -35
- package/src/bootstrap/less/responsive-utilities.less +194 -194
- package/src/bootstrap/less/scaffolding.less +161 -161
- package/src/bootstrap/less/tables.less +262 -262
- package/src/bootstrap/less/theme.less +291 -291
- package/src/bootstrap/less/thumbnails.less +36 -36
- package/src/bootstrap/less/tooltip.less +102 -102
- package/src/bootstrap/less/type.less +303 -303
- package/src/bootstrap/less/utilities.less +55 -55
- package/src/bootstrap/less/variables.less +895 -895
- package/src/bootstrap/less/wells.less +29 -29
- package/src/components/AloneLoadParams.vue +26 -26
- package/src/components/AlreadyService.vue +210 -210
- package/src/components/AttendManage.vue +591 -591
- package/src/components/LoadAppdata.vue +38 -38
- package/src/components/LoginAppV4.vue +787 -790
- package/src/components/ModifyPassWord.vue +216 -216
- package/src/components/OnlineManage.vue +278 -278
- package/src/components/PhoneSellInfo.vue +148 -148
- package/src/components/Test.vue +14 -14
- package/src/filiale/liaoyuan/LoginApp.vue +734 -725
- package/src/filiale/liaoyuan/SystemSetUp.vue +352 -0
- package/src/filiale/liaoyuan/systemphonegrid.js +1 -0
- package/src/plugins/GetStringData.js +18 -18
- package/src/plugins/LoadParams.js +24 -24
- package/src/services/ConfigService.js +24 -24
- package/static/app.json +4 -4
- package/static/globals.txt +74 -74
- package/test/unit/.eslintrc +5 -5
- package/test/unit/TestUtil.js +35 -35
- package/test/unit/context.html +20 -20
- package/test/unit/index.js +13 -13
- package/test/unit/init.js +13 -13
- package/test/unit/karma.conf.js +50 -50
- package/test/unit/specs/App.spec.js +17 -17
- package/test/unit/specs/Test.spec.js +28 -28
- package/test/unit/specs/components/LoginApp.spec.js +21 -21
- package/test/unit/specs/sevices/ConfigService.spec.js +23 -23
- package/test/unit/specs/sevices/GetDBTest.spec.js +28 -28
- package/src/plugins/validateStrongPasswordPhone.js +0 -162
package/test/unit/TestUtil.js
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
|
|
3
|
-
let id = 0
|
|
4
|
-
|
|
5
|
-
const createElm = function () {
|
|
6
|
-
const elm = document.createElement('div')
|
|
7
|
-
|
|
8
|
-
elm.id = 'app' + ++id
|
|
9
|
-
document.body.appendChild(elm)
|
|
10
|
-
|
|
11
|
-
return elm
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export default {
|
|
15
|
-
// 创建一个测试组件
|
|
16
|
-
createTest: function (name, props) {
|
|
17
|
-
const template = '<div>' + '<' + name + ' v-ref:child></' + name + '></div>'
|
|
18
|
-
const elm = createElm()
|
|
19
|
-
const comp = new Vue({
|
|
20
|
-
template: template
|
|
21
|
-
})
|
|
22
|
-
comp.$mount(elm)
|
|
23
|
-
const vm = comp.$refs.child
|
|
24
|
-
Object.assign(vm, props)
|
|
25
|
-
return vm
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
// 删除一个组件
|
|
29
|
-
destroyVM: function (vm) {
|
|
30
|
-
vm.$destroy && vm.$destroy()
|
|
31
|
-
vm.$el &&
|
|
32
|
-
vm.$el.parentNode &&
|
|
33
|
-
vm.$el.parentNode.removeChild(vm.$el)
|
|
34
|
-
}
|
|
35
|
-
}
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
|
|
3
|
+
let id = 0
|
|
4
|
+
|
|
5
|
+
const createElm = function () {
|
|
6
|
+
const elm = document.createElement('div')
|
|
7
|
+
|
|
8
|
+
elm.id = 'app' + ++id
|
|
9
|
+
document.body.appendChild(elm)
|
|
10
|
+
|
|
11
|
+
return elm
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default {
|
|
15
|
+
// 创建一个测试组件
|
|
16
|
+
createTest: function (name, props) {
|
|
17
|
+
const template = '<div>' + '<' + name + ' v-ref:child></' + name + '></div>'
|
|
18
|
+
const elm = createElm()
|
|
19
|
+
const comp = new Vue({
|
|
20
|
+
template: template
|
|
21
|
+
})
|
|
22
|
+
comp.$mount(elm)
|
|
23
|
+
const vm = comp.$refs.child
|
|
24
|
+
Object.assign(vm, props)
|
|
25
|
+
return vm
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// 删除一个组件
|
|
29
|
+
destroyVM: function (vm) {
|
|
30
|
+
vm.$destroy && vm.$destroy()
|
|
31
|
+
vm.$el &&
|
|
32
|
+
vm.$el.parentNode &&
|
|
33
|
+
vm.$el.parentNode.removeChild(vm.$el)
|
|
34
|
+
}
|
|
35
|
+
}
|
package/test/unit/context.html
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
|
6
|
-
<meta name="referrer" content="never">
|
|
7
|
-
<title>呼叫系统</title>
|
|
8
|
-
<link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css"/>
|
|
9
|
-
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.3&key=4889f1e58df01cb40415536c8907bf64&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script>
|
|
10
|
-
<script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
|
|
11
|
-
<style media="screen">
|
|
12
|
-
/*url(./static/newmainbg.jpg)*/
|
|
13
|
-
body{width: 100%;background:#7f8eaf no-repeat center bottom; background-size: cover;}
|
|
14
|
-
body .loginbg{ width:100%; height:100%; background:url(./static/loginbg.jpg) no-repeat center top;}
|
|
15
|
-
</style>
|
|
16
|
-
</head>
|
|
17
|
-
<body>
|
|
18
|
-
测试2
|
|
19
|
-
</body>
|
|
20
|
-
</html>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
|
6
|
+
<meta name="referrer" content="never">
|
|
7
|
+
<title>呼叫系统</title>
|
|
8
|
+
<link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css"/>
|
|
9
|
+
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.3&key=4889f1e58df01cb40415536c8907bf64&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script>
|
|
10
|
+
<script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
|
|
11
|
+
<style media="screen">
|
|
12
|
+
/*url(./static/newmainbg.jpg)*/
|
|
13
|
+
body{width: 100%;background:#7f8eaf no-repeat center bottom; background-size: cover;}
|
|
14
|
+
body .loginbg{ width:100%; height:100%; background:url(./static/loginbg.jpg) no-repeat center top;}
|
|
15
|
+
</style>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
测试2
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
package/test/unit/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
// Polyfill fn.bind() for PhantomJS
|
|
2
|
-
/* eslint-disable no-extend-native */
|
|
3
|
-
Function.prototype.bind = require('function-bind')
|
|
4
|
-
|
|
5
|
-
// require all test files (files that ends with .spec.js)
|
|
6
|
-
var testsContext = require.context('./specs', true, /\.spec$/)
|
|
7
|
-
testsContext.keys().forEach(testsContext)
|
|
8
|
-
|
|
9
|
-
// require all src files except main.js for coverage.
|
|
10
|
-
// you can also change this to match only the subset of files that
|
|
11
|
-
// you want coverage for.
|
|
12
|
-
// var srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
|
|
13
|
-
// srcContext.keys().forEach(srcContext)
|
|
1
|
+
// Polyfill fn.bind() for PhantomJS
|
|
2
|
+
/* eslint-disable no-extend-native */
|
|
3
|
+
Function.prototype.bind = require('function-bind')
|
|
4
|
+
|
|
5
|
+
// require all test files (files that ends with .spec.js)
|
|
6
|
+
var testsContext = require.context('./specs', true, /\.spec$/)
|
|
7
|
+
testsContext.keys().forEach(testsContext)
|
|
8
|
+
|
|
9
|
+
// require all src files except main.js for coverage.
|
|
10
|
+
// you can also change this to match only the subset of files that
|
|
11
|
+
// you want coverage for.
|
|
12
|
+
// var srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
|
|
13
|
+
// srcContext.keys().forEach(srcContext)
|
package/test/unit/init.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import { all } from 'vue-client'
|
|
3
|
-
import { safecheckAndroid } from 'safecheck-client'
|
|
4
|
-
import { telephoneAndroid } from 'telephone-clients'
|
|
5
|
-
|
|
6
|
-
export default function () {
|
|
7
|
-
Vue.config.silent = false
|
|
8
|
-
|
|
9
|
-
all()
|
|
10
|
-
safecheckAndroid()
|
|
11
|
-
telephoneAndroid()
|
|
12
|
-
require('../../src/bootstrap/less/bootstrap.less')
|
|
13
|
-
}
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import { all } from 'vue-client'
|
|
3
|
+
import { safecheckAndroid } from 'safecheck-client'
|
|
4
|
+
import { telephoneAndroid } from 'telephone-clients'
|
|
5
|
+
|
|
6
|
+
export default function () {
|
|
7
|
+
Vue.config.silent = false
|
|
8
|
+
|
|
9
|
+
all()
|
|
10
|
+
safecheckAndroid()
|
|
11
|
+
telephoneAndroid()
|
|
12
|
+
require('../../src/bootstrap/less/bootstrap.less')
|
|
13
|
+
}
|
package/test/unit/karma.conf.js
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
// This is a karma config file. For more details see
|
|
2
|
-
// http://karma-runner.github.io/0.13/config/configuration-file.html
|
|
3
|
-
// we are also using it with karma-webpack
|
|
4
|
-
// https://github.com/webpack/karma-webpack
|
|
5
|
-
|
|
6
|
-
var webpackConfig = require('../../build/webpack.test.conf')
|
|
7
|
-
|
|
8
|
-
module.exports = function (config) {
|
|
9
|
-
config.set({
|
|
10
|
-
// to run in additional browsers:
|
|
11
|
-
// 1. install corresponding karma launcher
|
|
12
|
-
// http://karma-runner.github.io/0.13/config/browsers.html
|
|
13
|
-
// 2. add it to the `browsers` array below.
|
|
14
|
-
browsers: ['Chrome_without_security'],
|
|
15
|
-
customLaunchers: {
|
|
16
|
-
Chrome_without_security: {
|
|
17
|
-
base: 'Chrome',
|
|
18
|
-
flags: ['--disable-web-security']
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
proxies: {
|
|
22
|
-
'/rs': 'http://192.168.50.220:8300/rs',
|
|
23
|
-
'/phone/rs/vue': 'http://192.168.50.220:8500/phone/rs/vue',
|
|
24
|
-
//'/phone/rs/db': 'http://192.168.50.220:9300/manage/rs/db'
|
|
25
|
-
// '/phone/rs': 'http://192.168.50.220:9000/telephone/rs'
|
|
26
|
-
// '/phone/rs': 'http://192.168.50.220:9200/safecheck/rs'
|
|
27
|
-
'/rs/db': 'http://192.168.50.220:8300/phone/rs/db',
|
|
28
|
-
'/rs/dir': 'http://127.0.0.1:8080/rs/dir',
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
autoWatch: true,
|
|
32
|
-
frameworks: ['mocha', 'sinon-chai'],
|
|
33
|
-
reporters: ['spec', 'coverage'],
|
|
34
|
-
files: ['./index.js'],
|
|
35
|
-
preprocessors: {
|
|
36
|
-
'./index.js': ['webpack', 'sourcemap']
|
|
37
|
-
},
|
|
38
|
-
webpack: webpackConfig,
|
|
39
|
-
webpackMiddleware: {
|
|
40
|
-
noInfo: true
|
|
41
|
-
},
|
|
42
|
-
coverageReporter: {
|
|
43
|
-
dir: './coverage',
|
|
44
|
-
reporters: [
|
|
45
|
-
{ type: 'lcov', subdir: '.' },
|
|
46
|
-
{ type: 'text-summary' }
|
|
47
|
-
]
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
}
|
|
1
|
+
// This is a karma config file. For more details see
|
|
2
|
+
// http://karma-runner.github.io/0.13/config/configuration-file.html
|
|
3
|
+
// we are also using it with karma-webpack
|
|
4
|
+
// https://github.com/webpack/karma-webpack
|
|
5
|
+
|
|
6
|
+
var webpackConfig = require('../../build/webpack.test.conf')
|
|
7
|
+
|
|
8
|
+
module.exports = function (config) {
|
|
9
|
+
config.set({
|
|
10
|
+
// to run in additional browsers:
|
|
11
|
+
// 1. install corresponding karma launcher
|
|
12
|
+
// http://karma-runner.github.io/0.13/config/browsers.html
|
|
13
|
+
// 2. add it to the `browsers` array below.
|
|
14
|
+
browsers: ['Chrome_without_security'],
|
|
15
|
+
customLaunchers: {
|
|
16
|
+
Chrome_without_security: {
|
|
17
|
+
base: 'Chrome',
|
|
18
|
+
flags: ['--disable-web-security']
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
proxies: {
|
|
22
|
+
'/rs': 'http://192.168.50.220:8300/rs',
|
|
23
|
+
'/phone/rs/vue': 'http://192.168.50.220:8500/phone/rs/vue',
|
|
24
|
+
//'/phone/rs/db': 'http://192.168.50.220:9300/manage/rs/db'
|
|
25
|
+
// '/phone/rs': 'http://192.168.50.220:9000/telephone/rs'
|
|
26
|
+
// '/phone/rs': 'http://192.168.50.220:9200/safecheck/rs'
|
|
27
|
+
'/rs/db': 'http://192.168.50.220:8300/phone/rs/db',
|
|
28
|
+
'/rs/dir': 'http://127.0.0.1:8080/rs/dir',
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
autoWatch: true,
|
|
32
|
+
frameworks: ['mocha', 'sinon-chai'],
|
|
33
|
+
reporters: ['spec', 'coverage'],
|
|
34
|
+
files: ['./index.js'],
|
|
35
|
+
preprocessors: {
|
|
36
|
+
'./index.js': ['webpack', 'sourcemap']
|
|
37
|
+
},
|
|
38
|
+
webpack: webpackConfig,
|
|
39
|
+
webpackMiddleware: {
|
|
40
|
+
noInfo: true
|
|
41
|
+
},
|
|
42
|
+
coverageReporter: {
|
|
43
|
+
dir: './coverage',
|
|
44
|
+
reporters: [
|
|
45
|
+
{ type: 'lcov', subdir: '.' },
|
|
46
|
+
{ type: 'text-summary' }
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import init from 'test/unit/init'
|
|
3
|
-
import { TestUtil } from 'vue-client'
|
|
4
|
-
import LoginApp from 'src/components/LoginApp'
|
|
5
|
-
import App from 'src/App'
|
|
6
|
-
|
|
7
|
-
describe('src/App: 主应用', () => {
|
|
8
|
-
let vm = null
|
|
9
|
-
before(() => {
|
|
10
|
-
init()
|
|
11
|
-
Vue.component('login-app', LoginApp)
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
it('显示', () => {
|
|
15
|
-
vm = TestUtil.createTest(App, {})
|
|
16
|
-
})
|
|
17
|
-
})
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import init from 'test/unit/init'
|
|
3
|
+
import { TestUtil } from 'vue-client'
|
|
4
|
+
import LoginApp from 'src/components/LoginApp'
|
|
5
|
+
import App from 'src/App'
|
|
6
|
+
|
|
7
|
+
describe('src/App: 主应用', () => {
|
|
8
|
+
let vm = null
|
|
9
|
+
before(() => {
|
|
10
|
+
init()
|
|
11
|
+
Vue.component('login-app', LoginApp)
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('显示', () => {
|
|
15
|
+
vm = TestUtil.createTest(App, {})
|
|
16
|
+
})
|
|
17
|
+
})
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import $ from 'jquery'
|
|
2
|
-
import Vue from 'vue'
|
|
3
|
-
import init from '../init'
|
|
4
|
-
import TestUtil from '../TestUtil'
|
|
5
|
-
import Test from 'src/components/Test'
|
|
6
|
-
|
|
7
|
-
describe('基础测试', () => {
|
|
8
|
-
let vm = null
|
|
9
|
-
before(() => {
|
|
10
|
-
init()
|
|
11
|
-
Vue.component('test', Test)
|
|
12
|
-
vm = TestUtil.createTest('test', {msg: '测试标题'})
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
after(function () {
|
|
16
|
-
TestUtil.destroyVM(vm)
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
it('组件能够正确显示', () => {
|
|
20
|
-
expect($(vm.$el).html()).to.contain('Hello Test')
|
|
21
|
-
})
|
|
22
|
-
it('组件参数能够正确传递', done => {
|
|
23
|
-
vm.$nextTick(() => {
|
|
24
|
-
expect($(vm.$el).html()).to.contain('测试标题')
|
|
25
|
-
done()
|
|
26
|
-
})
|
|
27
|
-
})
|
|
28
|
-
})
|
|
1
|
+
import $ from 'jquery'
|
|
2
|
+
import Vue from 'vue'
|
|
3
|
+
import init from '../init'
|
|
4
|
+
import TestUtil from '../TestUtil'
|
|
5
|
+
import Test from 'src/components/Test'
|
|
6
|
+
|
|
7
|
+
describe('基础测试', () => {
|
|
8
|
+
let vm = null
|
|
9
|
+
before(() => {
|
|
10
|
+
init()
|
|
11
|
+
Vue.component('test', Test)
|
|
12
|
+
vm = TestUtil.createTest('test', {msg: '测试标题'})
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
after(function () {
|
|
16
|
+
TestUtil.destroyVM(vm)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('组件能够正确显示', () => {
|
|
20
|
+
expect($(vm.$el).html()).to.contain('Hello Test')
|
|
21
|
+
})
|
|
22
|
+
it('组件参数能够正确传递', done => {
|
|
23
|
+
vm.$nextTick(() => {
|
|
24
|
+
expect($(vm.$el).html()).to.contain('测试标题')
|
|
25
|
+
done()
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
})
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import init from 'test/unit/init'
|
|
3
|
-
import { TestUtil } from 'vue-client'
|
|
4
|
-
import LoginApp from 'src/components/LoginApp'
|
|
5
|
-
|
|
6
|
-
describe('src/components/LoginApp: 登录', () => {
|
|
7
|
-
let vm = null
|
|
8
|
-
before(() => {
|
|
9
|
-
init()
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
it('显示', () => {
|
|
13
|
-
vm = TestUtil.createTest(LoginApp, {})
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('登录', async function() {
|
|
17
|
-
vm.ename = 'wenming'
|
|
18
|
-
vm.password = '1'
|
|
19
|
-
await vm.confirm()
|
|
20
|
-
})
|
|
21
|
-
})
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import init from 'test/unit/init'
|
|
3
|
+
import { TestUtil } from 'vue-client'
|
|
4
|
+
import LoginApp from 'src/components/LoginApp'
|
|
5
|
+
|
|
6
|
+
describe('src/components/LoginApp: 登录', () => {
|
|
7
|
+
let vm = null
|
|
8
|
+
before(() => {
|
|
9
|
+
init()
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('显示', () => {
|
|
13
|
+
vm = TestUtil.createTest(LoginApp, {})
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('登录', async function() {
|
|
17
|
+
vm.ename = 'wenming'
|
|
18
|
+
vm.password = '1'
|
|
19
|
+
await vm.confirm()
|
|
20
|
+
})
|
|
21
|
+
})
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import init from 'test/unit/init'
|
|
3
|
-
import { TestUtil } from 'vue-client'
|
|
4
|
-
|
|
5
|
-
describe('src/App: 主应用', () => {
|
|
6
|
-
let vm = null
|
|
7
|
-
before(async function() {
|
|
8
|
-
init()
|
|
9
|
-
// 登录
|
|
10
|
-
let path = `/rs/user/liaoning/1/手机服务`
|
|
11
|
-
let ret = await Vue.resetget(path)
|
|
12
|
-
console.log(JSON.stringify(ret.data))
|
|
13
|
-
// 设置jwt
|
|
14
|
-
Vue.$login = {jwt: ret.data.id}
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
it.only('加载后台配置', async function() {
|
|
18
|
-
let result = await Vue.resetget(`/phone/rs/vue`,
|
|
19
|
-
{data: {}},
|
|
20
|
-
{resolveMsg: null, rejectMsg: null})
|
|
21
|
-
console.log('后台配置:', JSON.stringify(result.data))
|
|
22
|
-
})
|
|
23
|
-
})
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import init from 'test/unit/init'
|
|
3
|
+
import { TestUtil } from 'vue-client'
|
|
4
|
+
|
|
5
|
+
describe('src/App: 主应用', () => {
|
|
6
|
+
let vm = null
|
|
7
|
+
before(async function() {
|
|
8
|
+
init()
|
|
9
|
+
// 登录
|
|
10
|
+
let path = `/rs/user/liaoning/1/手机服务`
|
|
11
|
+
let ret = await Vue.resetget(path)
|
|
12
|
+
console.log(JSON.stringify(ret.data))
|
|
13
|
+
// 设置jwt
|
|
14
|
+
Vue.$login = {jwt: ret.data.id}
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it.only('加载后台配置', async function() {
|
|
18
|
+
let result = await Vue.resetget(`/phone/rs/vue`,
|
|
19
|
+
{data: {}},
|
|
20
|
+
{resolveMsg: null, rejectMsg: null})
|
|
21
|
+
console.log('后台配置:', JSON.stringify(result.data))
|
|
22
|
+
})
|
|
23
|
+
})
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import init from 'test/unit/init'
|
|
3
|
-
import { TestUtil } from 'vue-client'
|
|
4
|
-
|
|
5
|
-
describe('src/App: 主应用', () => {
|
|
6
|
-
let vm = null
|
|
7
|
-
before(async function() {
|
|
8
|
-
init()
|
|
9
|
-
// 登录
|
|
10
|
-
let path = `/rs/user/liaoning/1/手机服务`
|
|
11
|
-
let ret = await Vue.resetget(path)
|
|
12
|
-
// 设置jwt
|
|
13
|
-
Vue.$login = {jwt: ret.data.id}
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('加载表元', async function() {
|
|
17
|
-
let result = await Vue.resetpost(`/rs/db/meta`,
|
|
18
|
-
't_details',
|
|
19
|
-
{resolveMsg: null, rejectMsg: null})
|
|
20
|
-
console.log('表元数据:', result.data)
|
|
21
|
-
})
|
|
22
|
-
it.only('加载业务逻辑', async function() {
|
|
23
|
-
let result = await Vue.resetget(`/phone/rs/dir2`,
|
|
24
|
-
{resolveMsg: null, rejectMsg: null})
|
|
25
|
-
console.log('业务逻辑:', result.data)
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
})
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import init from 'test/unit/init'
|
|
3
|
+
import { TestUtil } from 'vue-client'
|
|
4
|
+
|
|
5
|
+
describe('src/App: 主应用', () => {
|
|
6
|
+
let vm = null
|
|
7
|
+
before(async function() {
|
|
8
|
+
init()
|
|
9
|
+
// 登录
|
|
10
|
+
let path = `/rs/user/liaoning/1/手机服务`
|
|
11
|
+
let ret = await Vue.resetget(path)
|
|
12
|
+
// 设置jwt
|
|
13
|
+
Vue.$login = {jwt: ret.data.id}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('加载表元', async function() {
|
|
17
|
+
let result = await Vue.resetpost(`/rs/db/meta`,
|
|
18
|
+
't_details',
|
|
19
|
+
{resolveMsg: null, rejectMsg: null})
|
|
20
|
+
console.log('表元数据:', result.data)
|
|
21
|
+
})
|
|
22
|
+
it.only('加载业务逻辑', async function() {
|
|
23
|
+
let result = await Vue.resetget(`/phone/rs/dir2`,
|
|
24
|
+
{resolveMsg: null, rejectMsg: null})
|
|
25
|
+
console.log('业务逻辑:', result.data)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
})
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
// 常见密码列表(可以根据需要扩展)
|
|
2
|
-
const COMMON_PASSWORDS: string[] = [
|
|
3
|
-
'password',
|
|
4
|
-
'password123',
|
|
5
|
-
'123456',
|
|
6
|
-
'12345678',
|
|
7
|
-
'qwerty',
|
|
8
|
-
'abc123',
|
|
9
|
-
'Password1',
|
|
10
|
-
'password1',
|
|
11
|
-
'123456789',
|
|
12
|
-
'welcome',
|
|
13
|
-
'admin',
|
|
14
|
-
'letmein',
|
|
15
|
-
'monkey',
|
|
16
|
-
'dragon',
|
|
17
|
-
'master',
|
|
18
|
-
'superman',
|
|
19
|
-
'qwerty123',
|
|
20
|
-
'admin123',
|
|
21
|
-
'root',
|
|
22
|
-
'pass',
|
|
23
|
-
'test',
|
|
24
|
-
'guest',
|
|
25
|
-
'user',
|
|
26
|
-
'000000',
|
|
27
|
-
'111111',
|
|
28
|
-
'666666',
|
|
29
|
-
'888888',
|
|
30
|
-
'999999',
|
|
31
|
-
'iloveyou',
|
|
32
|
-
'welcome123',
|
|
33
|
-
'password!',
|
|
34
|
-
'Passw0rd!',
|
|
35
|
-
'Passw0rd',
|
|
36
|
-
'Password!',
|
|
37
|
-
'passw0rd',
|
|
38
|
-
'P@ssw0rd',
|
|
39
|
-
'P@ssword',
|
|
40
|
-
'Password@123'
|
|
41
|
-
];
|
|
42
|
-
|
|
43
|
-
// 检查连续数字(3个或以上)
|
|
44
|
-
const hasConsecutiveNumbers = (password: string): boolean => {
|
|
45
|
-
for (let i = 0; i <= password.length - 3; i++) {
|
|
46
|
-
const substr = password.substring(i, i + 3);
|
|
47
|
-
if (/^\d{3,}$/.test(substr)) {
|
|
48
|
-
// 检查是否为连续数字
|
|
49
|
-
const digits = substr.split('').map(Number);
|
|
50
|
-
let isConsecutive = true;
|
|
51
|
-
for (let j = 1; j < digits.length; j++) {
|
|
52
|
-
if (digits[j] !== digits[j - 1] + 1) {
|
|
53
|
-
isConsecutive = false;
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (isConsecutive) return true;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return false;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
// 检查连续字母(3个或以上)
|
|
64
|
-
const hasConsecutiveLetters = (password: string): boolean => {
|
|
65
|
-
const lowerPassword = password.toLowerCase();
|
|
66
|
-
for (let i = 0; i <= lowerPassword.length - 3; i++) {
|
|
67
|
-
const substr = lowerPassword.substring(i, i + 3);
|
|
68
|
-
if (/^[a-z]{3,}$/.test(substr)) {
|
|
69
|
-
// 检查是否为连续字母
|
|
70
|
-
let isConsecutive = true;
|
|
71
|
-
for (let j = 1; j < substr.length; j++) {
|
|
72
|
-
if (substr.charCodeAt(j) !== substr.charCodeAt(j - 1) + 1) {
|
|
73
|
-
isConsecutive = false;
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (isConsecutive) return true;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return false;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
// 检查重复字符(3个或以上相同字符)
|
|
84
|
-
const hasRepeatedChars = (password: string): boolean => {
|
|
85
|
-
return /(.)\1{2,}/.test(password);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
// 检查键盘连续按键(如 qwerty, asdf 等)
|
|
89
|
-
const hasKeyboardPattern = (password: string): boolean => {
|
|
90
|
-
const keyboardRows: readonly string[] = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm', '1234567890'];
|
|
91
|
-
|
|
92
|
-
const lowerPassword = password.toLowerCase();
|
|
93
|
-
|
|
94
|
-
for (const row of keyboardRows) {
|
|
95
|
-
for (let i = 0; i <= row.length - 3; i++) {
|
|
96
|
-
const pattern = row.substring(i, i + 3);
|
|
97
|
-
if (lowerPassword.includes(pattern)) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return false;
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
// 密码校验结果接口
|
|
106
|
-
interface PasswordValidationResult {
|
|
107
|
-
isValid: boolean;
|
|
108
|
-
errors: string[];
|
|
109
|
-
}
|
|
110
|
-
// 增强的密码校验函数
|
|
111
|
-
export const validateStrongPasswordPhone = (password: string):PasswordValidationResult => {
|
|
112
|
-
const result: PasswordValidationResult = {
|
|
113
|
-
isValid: true,
|
|
114
|
-
errors: []
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
// 1. 基本格式校验
|
|
118
|
-
if (!REG_STRONG_PWD.test(password)) {
|
|
119
|
-
result.isValid = false;
|
|
120
|
-
result.errors.push('密码必须包含至少8个字符,包括大写字母、小写字母、数字和特殊字符');
|
|
121
|
-
return result;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const { config: WEB_COMMON_PASSWORDS } = useConfig<string[]>('COMMON_PASSWORDS', COMMON_PASSWORDS, true, 'value');
|
|
125
|
-
|
|
126
|
-
// 2. 检查是否为常见密码
|
|
127
|
-
if (WEB_COMMON_PASSWORDS.value.includes(password) || WEB_COMMON_PASSWORDS.value.includes(password.toLowerCase())) {
|
|
128
|
-
result.isValid = false;
|
|
129
|
-
result.errors.push('不能使用常见密码');
|
|
130
|
-
return result;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// 3. 检查连续数字
|
|
134
|
-
if (hasConsecutiveNumbers(password)) {
|
|
135
|
-
result.isValid = false;
|
|
136
|
-
result.errors.push('不能包含连续数字');
|
|
137
|
-
return result;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// 4. 检查连续字母
|
|
141
|
-
if (hasConsecutiveLetters(password)) {
|
|
142
|
-
result.isValid = false;
|
|
143
|
-
result.errors.push('不能包含连续字母');
|
|
144
|
-
return result;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// 5. 检查重复字符
|
|
148
|
-
if (hasRepeatedChars(password)) {
|
|
149
|
-
result.isValid = false;
|
|
150
|
-
result.errors.push('不能包含3个或以上相同字符');
|
|
151
|
-
return result;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// 6. 检查键盘模式
|
|
155
|
-
if (hasKeyboardPattern(password)) {
|
|
156
|
-
result.isValid = false;
|
|
157
|
-
result.errors.push('不能包含键盘连续按键模式');
|
|
158
|
-
return result;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return result;
|
|
162
|
-
};
|