system-phone 3.1.91 → 3.1.92

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 (85) hide show
  1. package/.gradle/buildOutputCleanup/cache.properties +2 -2
  2. package/SystemPhone.iml +8 -8
  3. package/build/dev-server.js +147 -101
  4. package/build/webpack.base.conf.js +82 -82
  5. package/build.gradle +27 -27
  6. package/gradle/wrapper/gradle-wrapper.properties +5 -5
  7. package/gradlew +183 -183
  8. package/gradlew.bat +100 -100
  9. package/index.html +21 -21
  10. package/package.json +1 -1
  11. package/src/App.vue +25 -27
  12. package/src/Util.js +415 -415
  13. package/src/components/AloneLoadParams.vue +26 -26
  14. package/src/components/LoadAppdata.vue +38 -38
  15. package/src/components/LoginApp.vue +252 -1
  16. package/src/components/NavBottom.vue +117 -117
  17. package/src/components/NavBottomV.vue +141 -141
  18. package/src/components/NavBottomVVV.vue +185 -185
  19. package/src/components/PhoneAllInfo.vue +68 -68
  20. package/src/components/PhoneChangemeterInfo.vue +116 -116
  21. package/src/components/PhoneImageInfo.vue +102 -102
  22. package/src/components/PhoneInfoTable.vue +39 -39
  23. package/src/components/PhoneMeterInfo.vue +132 -132
  24. package/src/components/PhoneSafeInfo.vue +101 -101
  25. package/src/components/PhoneSellInfoLite.vue +112 -112
  26. package/src/components/PhoneUser.vue +202 -202
  27. package/src/components/PhoneUserDetil.vue +70 -70
  28. package/src/components/PhoneUserFind.vue +138 -138
  29. package/src/components/RightTree.vue +217 -217
  30. package/src/components/TabBarPhone.vue +81 -81
  31. package/src/components/Test.vue +14 -14
  32. package/src/components/ToolsPage.vue +199 -199
  33. package/src/components/UploadManage.vue +194 -194
  34. package/src/components/gaomi/NavBottomV.vue +223 -223
  35. package/src/components/gaomi/NavBottomVVVV.vue +210 -210
  36. package/src/components/gaomi/Scroller.vue +63 -63
  37. package/src/components/gaomi/SystemSetUp.vue +186 -186
  38. package/src/components/gaomi/ToolsPage.vue +168 -168
  39. package/src/components/idea/feedBack.vue +150 -150
  40. package/src/components/idea/feedbackAdd.vue +366 -366
  41. package/src/components/info/ConfigInfo.vue +122 -122
  42. package/src/components/info/InfoTable.vue +37 -37
  43. package/src/components/iot/InstructMessage.vue +313 -313
  44. package/src/components/iot/IotBaseInfo.vue +97 -97
  45. package/src/components/iot/IotMeterInfo.vue +77 -77
  46. package/src/components/online/ApplyOnline.vue +581 -581
  47. package/src/components/online/BJZhongRan/ApplyOnline.vue +600 -600
  48. package/src/components/screen/ChargeContentPage.vue +656 -656
  49. package/src/components/screen/ContentPage.vue +611 -611
  50. package/src/components/screen/GongdanContentPage.vue +149 -149
  51. package/src/components/screen/ListCountItem.vue +93 -93
  52. package/src/components/screen/ModuleTitle.vue +48 -48
  53. package/src/components/screen/SafeOrderContentPage.vue +440 -440
  54. package/src/components/screen/SecurityCheckItem.vue +50 -50
  55. package/src/components/screen/TotalItem.vue +76 -76
  56. package/src/components/screen/TotalUserNumber.vue +77 -77
  57. package/src/components/screen/WorkOrderItem.vue +51 -51
  58. package/src/components/screen/WorkOrderRightDownItem.vue +103 -103
  59. package/src/components/screen/WorkOrderRightItem.vue +115 -115
  60. package/src/components/userinfo/paymentQuery.vue +189 -189
  61. package/src/components/userinfo/queryFile.vue +190 -190
  62. package/src/components/wasm.vue +18 -18
  63. package/src/expandcssAndroid.less +521 -521
  64. package/src/filiale/yulinyuchuan/AlreadyService.vue +194 -194
  65. package/src/filiale/yulinyuchuan/AttendManage.vue +537 -537
  66. package/src/filiale/yulinyuchuan/OnlineManage.vue +256 -256
  67. package/src/filiale/yulinyuchuan/SystemSetUp.vue +332 -332
  68. package/src/filiale/yulinyuchuan/UploadManage.vue +195 -195
  69. package/src/filiale/yulinyuchuan/systemphonegrid.js +9 -9
  70. package/src/index.js +9 -9
  71. package/src/main.js +38 -38
  72. package/src/plugins/const.js +404 -404
  73. package/src/plugins/vue-py.js +37 -37
  74. package/src/stores/AppData.js +79 -79
  75. package/src/systemphone-gaomi.js +105 -105
  76. package/src/systemphone.js +60 -60
  77. package/src/systemphonegrid.js +185 -185
  78. package/src/util/LdapHelper.js +75 -75
  79. package/static/const.js +404 -404
  80. package/static/layui/font/iconfont.svg +554 -554
  81. package/static/vue-py.js +37 -37
  82. package/static/wasm_exec.js +465 -465
  83. package/src/filiale/chengran/EncryptUtil.js +0 -27
  84. package/src/filiale/chengran/LoginApp.vue +0 -775
  85. package/src/filiale/chengran/systemphonegrid.js +0 -4
@@ -1,26 +1,26 @@
1
- <template>
2
- <div>
3
- <p>获取参数中,请保持网络畅通</p>
4
- </div>
5
- </template>
6
-
7
- <script>
8
- import co from 'co'
9
- import Vue from 'vue'
10
- import LoadParams from '../plugins/LoadParams'
11
-
12
- export default {
13
- title: '加载参数',
14
- props: {
15
- componentName: {
16
- type: String
17
- }
18
- },
19
- ready () {
20
- LoadParams.load().then(() => {
21
- // this.$resetpost(Vue.dataUrl + 'rs/logic/androidLog', {data: {name: 'path', msg: '加载参数成功'}}, {resolveMsg: null, rejectMsg: null})
22
- this.$goto(this.componentName)
23
- })
24
- }
25
- }
26
- </script>
1
+ <template>
2
+ <div>
3
+ <p>获取参数中,请保持网络畅通</p>
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ import co from 'co'
9
+ import Vue from 'vue'
10
+ import LoadParams from '../plugins/LoadParams'
11
+
12
+ export default {
13
+ title: '加载参数',
14
+ props: {
15
+ componentName: {
16
+ type: String
17
+ }
18
+ },
19
+ ready () {
20
+ LoadParams.load().then(() => {
21
+ // this.$resetpost(Vue.dataUrl + 'rs/logic/androidLog', {data: {name: 'path', msg: '加载参数成功'}}, {resolveMsg: null, rejectMsg: null})
22
+ this.$goto(this.componentName)
23
+ })
24
+ }
25
+ }
26
+ </script>
@@ -1,38 +1,38 @@
1
- <template>
2
- <div class="loadingdata" :class="{'loaderror': show, 'loadsuccess': !show}">
3
- <!-- <h2 style="margin: 0" v-if="show">{{msg}}</h2> -->
4
- <h2 style="margin: 0" v-if="show">参数加载失败,请检查网络状态和服务状态...</h2>
5
- </div>
6
- </template>
7
-
8
- <script>
9
- export default {
10
- title: '加载参数',
11
- data () {
12
- return {
13
- msg: '',
14
- show: false
15
- }
16
- },
17
- ready () {
18
- this.$appdata.load().then(() => {
19
- this.$emit('ready')
20
- })
21
- }
22
- }
23
- </script>
24
- <style media="screen">
25
- .loadingdata {
26
- position: fixed;
27
- background: #fff;
28
- opacity: 0.6;
29
- top: 0;
30
- width: 100%;
31
- }
32
- .loaderror {
33
- opacity: 1;
34
- }
35
- .loadsuccess {
36
- display: none;
37
- }
38
- </style>
1
+ <template>
2
+ <div class="loadingdata" :class="{'loaderror': show, 'loadsuccess': !show}">
3
+ <!-- <h2 style="margin: 0" v-if="show">{{msg}}</h2> -->
4
+ <h2 style="margin: 0" v-if="show">参数加载失败,请检查网络状态和服务状态...</h2>
5
+ </div>
6
+ </template>
7
+
8
+ <script>
9
+ export default {
10
+ title: '加载参数',
11
+ data () {
12
+ return {
13
+ msg: '',
14
+ show: false
15
+ }
16
+ },
17
+ ready () {
18
+ this.$appdata.load().then(() => {
19
+ this.$emit('ready')
20
+ })
21
+ }
22
+ }
23
+ </script>
24
+ <style media="screen">
25
+ .loadingdata {
26
+ position: fixed;
27
+ background: #fff;
28
+ opacity: 0.6;
29
+ top: 0;
30
+ width: 100%;
31
+ }
32
+ .loaderror {
33
+ opacity: 1;
34
+ }
35
+ .loadsuccess {
36
+ display: none;
37
+ }
38
+ </style>
@@ -46,6 +46,48 @@
46
46
  <footer slot="modal-footer" class="modal-footer">
47
47
  </footer>
48
48
  </modal>
49
+ <!-- 短信验证码弹窗 -->
50
+ <modal :show.sync="smsModalShow" backdrop="true">
51
+ <div slot="modal-header"></div>
52
+ <article slot="modal-body" class="sms-modal-body">
53
+ <div class="sms-wrap">
54
+ <div class="sms-top">
55
+ <div class="sms-top-icon">
56
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
57
+ <rect x="2" y="4" width="20" height="16" rx="3"/>
58
+ <path d="M7 8h4M13 8h4M7 12h10M7 16h2M13 16h4"/>
59
+ </svg>
60
+ </div>
61
+ </div>
62
+ <div class="sms-ct">
63
+ <div class="sms-ct-label">短信验证码</div>
64
+ <div class="sms-ct-tip">{{ smsModalMessage }}</div>
65
+ </div>
66
+ <div class="sms-field">
67
+ <div class="sms-field-hint">请输入6位验证码</div>
68
+ <div class="sms-code-box">
69
+ <input
70
+ class="sms-code-ipt"
71
+ v-model="smsCode"
72
+ maxlength="6"
73
+ @keyup.enter="smsModalConfirm"
74
+ autocomplete="off"
75
+ type="tel"
76
+ />
77
+ </div>
78
+ <div class="sms-extra" :class="{ 'expiry-warn': smsCountdown <= 30 }">
79
+ <template v-if="smsCountdown > 0">剩余 {{ smsCountdown }}s</template>
80
+ <template v-else>已过期</template>
81
+ </div>
82
+ </div>
83
+ <div class="sms-actions">
84
+ <button class="sms-act-ok" @click="smsModalConfirm">确定</button>
85
+ <button class="sms-act-no" @click="smsModalCancel">取消</button>
86
+ </div>
87
+ </div>
88
+ </article>
89
+ <div slot="modal-footer"></div>
90
+ </modal>
49
91
  </div>
50
92
  </template>
51
93
 
@@ -125,7 +167,15 @@ export default {
125
167
  imageurl: require('../assets/miwen.png'),
126
168
  deviceIemi: '无法获取该设备码,请联系管理员',
127
169
  loginSafe: false,
128
- margintop: document.documentElement.clientHeight * 0.1
170
+ margintop: document.documentElement.clientHeight * 0.1,
171
+ // 短信验证码相关
172
+ smsCode: '',
173
+ smsCountdown: 0,
174
+ smsCountdownTimer: null,
175
+ smsModalShow: false,
176
+ smsModalMessage: '',
177
+ // 标记是否处于短信验证流程
178
+ smsLoginFlag: false
129
179
  }
130
180
  },
131
181
 
@@ -154,6 +204,40 @@ export default {
154
204
  this.modifyPassword = false
155
205
  this.password = val
156
206
  },
207
+ startSmsCountdown () {
208
+ if (this.smsCountdownTimer) {
209
+ clearInterval(this.smsCountdownTimer)
210
+ }
211
+ this.smsCountdownTimer = setInterval(() => {
212
+ if (this.smsCountdown > 0) {
213
+ this.smsCountdown--
214
+ } else {
215
+ clearInterval(this.smsCountdownTimer)
216
+ }
217
+ }, 1000)
218
+ },
219
+ stopSmsCountdown () {
220
+ if (this.smsCountdownTimer) {
221
+ clearInterval(this.smsCountdownTimer)
222
+ this.smsCountdownTimer = null
223
+ }
224
+ },
225
+ smsModalConfirm () {
226
+ if (this.smsCode === '') {
227
+ this.$showMessage('请输入短信验证码')
228
+ return
229
+ }
230
+ this.smsLoginFlag = true
231
+ // 调用 confirm 方法完成 Step2
232
+ this.confirm()
233
+ },
234
+ smsModalCancel () {
235
+ this.smsModalShow = false
236
+ this.smsLoginFlag = false
237
+ this.stopSmsCountdown()
238
+ this.smsCode = ''
239
+ this.loaderShow = false
240
+ },
157
241
  // 对资源菜单进行排序
158
242
  sortFunctions (val) {
159
243
  this.sortArr(val)
@@ -240,9 +324,29 @@ export default {
240
324
  }else{
241
325
  try {
242
326
  let data = {name: this.ename, password: this.password}
327
+ // Step2: 如果有 smsLoginFlag 且有待提交的验证码,则一起发送
328
+ if (this.smsLoginFlag && this.smsCode) {
329
+ data.smsCode = this.smsCode
330
+ }
243
331
  data = '$' + cryptJS.RSAEncrypt(JSON.stringify(data))
244
332
  const getLogin = await Vue.resetpost(`${this.$androidUtil.getProxyUrl()}/rs/logic/getLogin`, data, {resolveMsg: null, rejectMsg: null})
333
+ // 检查是否需要短信验证码(Step1 返回时,smsLoginFlag 为 false)
334
+ if (getLogin.data.needsSmsCode && !this.smsLoginFlag) {
335
+ this.loaderShow = false
336
+ this.smsCountdown = getLogin.data.expireSeconds || 300
337
+ this.smsModalMessage = getLogin.data.states || ('短信验证码已发送至' + getLogin.data.maskedPhone + ',请输入')
338
+ this.startSmsCountdown()
339
+ this.smsLoginFlag = true
340
+ this.smsModalShow = true
341
+ return
342
+ }
245
343
  if (getLogin.data.states === '登录成功'){
344
+ // Step2 成功后清理状态
345
+ if (this.smsLoginFlag) {
346
+ this.smsCode = ''
347
+ this.smsLoginFlag = false
348
+ this.smsModalShow = false
349
+ }
246
350
  // 初始化 Vue.$login
247
351
  Vue.$login = Vue.prototype.$login = {
248
352
  jwt: getLogin.data.jwt,
@@ -385,6 +489,9 @@ export default {
385
489
  this.$goto('nav-bottom')
386
490
  },
387
491
  },
492
+ beforeDestroy () {
493
+ this.stopSmsCountdown()
494
+ },
388
495
  watch: {
389
496
  'config'(val) {
390
497
  Vue.config = val
@@ -773,3 +880,147 @@ export default {
773
880
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
774
881
  }
775
882
  </style>
883
+ <style>
884
+ /* 短信验证码弹窗样式 */
885
+ .sms-modal-body {
886
+ padding: 0 !important;
887
+ }
888
+
889
+ .sms-wrap {
890
+ background: #fff;
891
+ padding: 32px 28px 28px;
892
+ text-align: center;
893
+ min-width: 280px;
894
+ }
895
+
896
+ .sms-top {
897
+ margin-bottom: 16px;
898
+ }
899
+
900
+ .sms-top-icon {
901
+ width: 44px;
902
+ height: 44px;
903
+ margin: 0 auto;
904
+ background: #EFF6FF;
905
+ border-radius: 12px;
906
+ display: flex;
907
+ align-items: center;
908
+ justify-content: center;
909
+ }
910
+
911
+ .sms-top-icon svg {
912
+ width: 22px;
913
+ height: 22px;
914
+ color: #3B82F6;
915
+ }
916
+
917
+ .sms-ct {
918
+ margin-bottom: 20px;
919
+ }
920
+
921
+ .sms-ct-label {
922
+ font-size: 18px;
923
+ font-weight: 600;
924
+ color: #111;
925
+ margin-bottom: 6px;
926
+ }
927
+
928
+ .sms-ct-tip {
929
+ font-size: 13px;
930
+ color: #888;
931
+ line-height: 1.5;
932
+ }
933
+
934
+ .sms-field {
935
+ margin-bottom: 20px;
936
+ }
937
+
938
+ .sms-field-hint {
939
+ font-size: 12px;
940
+ color: #aaa;
941
+ margin-bottom: 8px;
942
+ text-align: left;
943
+ }
944
+
945
+ .sms-code-box {
946
+ position: relative;
947
+ margin-bottom: 6px;
948
+ }
949
+
950
+ .sms-code-ipt {
951
+ width: 100%;
952
+ height: 46px;
953
+ border: 1px solid #E5E7EB;
954
+ border-radius: 10px;
955
+ padding: 0 14px;
956
+ font-size: 18px;
957
+ color: #111;
958
+ background: #FAFAFA;
959
+ text-align: center;
960
+ letter-spacing: 6px;
961
+ outline: none;
962
+ box-sizing: border-box;
963
+ transition: border-color 0.2s;
964
+ }
965
+
966
+ .sms-code-ipt:focus {
967
+ border-color: #3B82F6;
968
+ background: #fff;
969
+ }
970
+
971
+ .sms-code-ipt::placeholder {
972
+ color: #CCC;
973
+ letter-spacing: 1px;
974
+ font-size: 14px;
975
+ }
976
+
977
+ .sms-extra {
978
+ font-size: 12px;
979
+ color: #AAA;
980
+ text-align: right;
981
+ }
982
+
983
+ .expiry-warn {
984
+ color: #EF4444;
985
+ }
986
+
987
+ .sms-actions {
988
+ display: flex;
989
+ gap: 12px;
990
+ }
991
+
992
+ .sms-act-ok {
993
+ flex: 1;
994
+ height: 44px;
995
+ border: none;
996
+ border-radius: 10px;
997
+ background: #3B82F6;
998
+ color: #fff;
999
+ font-size: 16px;
1000
+ font-weight: 500;
1001
+ cursor: pointer;
1002
+ transition: background 0.2s;
1003
+ }
1004
+
1005
+ .sms-act-ok:active {
1006
+ background: #2563EB;
1007
+ }
1008
+
1009
+ .sms-act-no {
1010
+ flex: 1;
1011
+ height: 44px;
1012
+ border: 1px solid #E5E7EB;
1013
+ border-radius: 10px;
1014
+ background: #FAFAFA;
1015
+ color: #666;
1016
+ font-size: 16px;
1017
+ font-weight: 500;
1018
+ cursor: pointer;
1019
+ transition: background 0.2s;
1020
+ }
1021
+
1022
+ .sms-act-no:active {
1023
+ background: #F3F4F6;
1024
+ }
1025
+ </style>
1026
+
@@ -1,117 +1,117 @@
1
- <template>
2
- <div class="no-close row android-repair-order">
3
- <div :class="[fullpage ? 'menu-hide' : 'col-sm-3 col-xs-3']" >
4
- <ul class="nav nav-tabs">
5
- <li>
6
- <p style="padding-left: 15px; color: white; font-weight: 550">
7
- 登录人:{{loginInfo.name}}
8
- </p>
9
- <!--({{loginInfo.id}})-->
10
- </li>
11
- <li v-for="tab in tabs" @click="tabSelect(tab.link)" :class="{active: tab.link === componentName}">
12
- <a href="#" class="tab-befor-img">
13
- <img :src="getImg(tab.icon)" style="height: 30px;width:30px;">
14
- {{tab.name}}</a>
15
- </li>
16
- <li @click="mute()">
17
- <a href="#" class="repair-mute-class" >
18
- <img src="../assets/guanbishengyin.png" style="height: 30px;width:30px;border-width:0">关闭声音</a>
19
- </li>
20
- </ul>
21
- </div>
22
- <div :class="[fullpage ? 'col-sm-12 col-xs-12' : 'col-sm-9 col-xs-9']" style="overflow: auto;">
23
- <!--<route v-ref:route></route>-->
24
- <repair-first v-if="componentName === 'repair-first'"></repair-first>
25
- <completed-repair v-if="componentName === 'completed-repair'"></completed-repair>
26
- <up-load v-if="componentName === 'up-load'"></up-load>
27
- <check-page v-if="componentName === 'check-page'"></check-page>
28
- <readmeter-home v-if="componentName === 'readmeter-home'"></readmeter-home>
29
- <repair-send v-if="componentName === 'repair-send'"></repair-send>
30
- </div>
31
- </div>
32
- </template>
33
-
34
- <script scoped>
35
- import Vue from 'vue'
36
- import * as Util from '../Util'
37
- export default {
38
- title: '底部导航',
39
- data () {
40
- return {
41
- componentName: 'repair-first',
42
- tabs: Util.f.functions,
43
- text: '导航组件this',
44
- fullpage: false,
45
- loginInfo: {}
46
- }
47
- },
48
- ready () {
49
- this.loginInfo = Object.assign({}, this.loginInfo, Vue.user)
50
- console.log(this.loginInfo, 'loginINfo')
51
- // this.$refs.route.init('repair-first')
52
- },
53
- methods: {
54
- // 选择tab
55
- tabSelect (name) {
56
- this.componentName = name
57
- // this.$refs.route.init(name)
58
- if (name !== 'text-chat-pane') {
59
- this.notified('false')
60
- } else {
61
- this.notified('true')
62
- }
63
- },
64
- notified (stopped) {
65
- console.log('txtServiceStopped invoked$')
66
- if (this.$androidUtil.isAndroid) {
67
- HostApp.setPreference('txtServiceStopped', stopped)
68
- HostApp.setPreference('msgCount', '0')
69
- }
70
- },
71
- mute () {
72
- if(navigator.userAgent.match('iPad') || navigator.userAgent.match('iPhone')){
73
- window.prompt("mute","")
74
- }else{
75
- HostApp.mute()
76
- }
77
- },
78
- getImg (param) {
79
- return require(`../assets/${param}.png`)
80
- }
81
- },
82
- events: {
83
- showFullPage () {
84
- this.fullpage = true
85
- },
86
- hideFullPage () {
87
- this.fullpage = false
88
- }
89
- }
90
- }
91
- </script>
92
- <style lang="less">
93
- .tab-befor-img {
94
- margin: 3px 0;
95
- content: '';
96
- background-size: 30px;
97
- display: inline-block;
98
- margin-right: 8px;
99
- height: 30px;
100
- width: 100%;
101
- vertical-align: -35%;
102
- }
103
- img[src=""],img:not([src]){
104
- opacity: 0;
105
- border:none;
106
- visibility: hidden;
107
- max-width: none;
108
- }
109
- /* .repair-mute-class {
110
- &::before {
111
- .tab-befor-img("../assets/guanbishengyin.png")
112
- }
113
- }*/
114
- .menu-hide {
115
- display: none;
116
- }
117
- </style>
1
+ <template>
2
+ <div class="no-close row android-repair-order">
3
+ <div :class="[fullpage ? 'menu-hide' : 'col-sm-3 col-xs-3']" >
4
+ <ul class="nav nav-tabs">
5
+ <li>
6
+ <p style="padding-left: 15px; color: white; font-weight: 550">
7
+ 登录人:{{loginInfo.name}}
8
+ </p>
9
+ <!--({{loginInfo.id}})-->
10
+ </li>
11
+ <li v-for="tab in tabs" @click="tabSelect(tab.link)" :class="{active: tab.link === componentName}">
12
+ <a href="#" class="tab-befor-img">
13
+ <img :src="getImg(tab.icon)" style="height: 30px;width:30px;">
14
+ {{tab.name}}</a>
15
+ </li>
16
+ <li @click="mute()">
17
+ <a href="#" class="repair-mute-class" >
18
+ <img src="../assets/guanbishengyin.png" style="height: 30px;width:30px;border-width:0">关闭声音</a>
19
+ </li>
20
+ </ul>
21
+ </div>
22
+ <div :class="[fullpage ? 'col-sm-12 col-xs-12' : 'col-sm-9 col-xs-9']" style="overflow: auto;">
23
+ <!--<route v-ref:route></route>-->
24
+ <repair-first v-if="componentName === 'repair-first'"></repair-first>
25
+ <completed-repair v-if="componentName === 'completed-repair'"></completed-repair>
26
+ <up-load v-if="componentName === 'up-load'"></up-load>
27
+ <check-page v-if="componentName === 'check-page'"></check-page>
28
+ <readmeter-home v-if="componentName === 'readmeter-home'"></readmeter-home>
29
+ <repair-send v-if="componentName === 'repair-send'"></repair-send>
30
+ </div>
31
+ </div>
32
+ </template>
33
+
34
+ <script scoped>
35
+ import Vue from 'vue'
36
+ import * as Util from '../Util'
37
+ export default {
38
+ title: '底部导航',
39
+ data () {
40
+ return {
41
+ componentName: 'repair-first',
42
+ tabs: Util.f.functions,
43
+ text: '导航组件this',
44
+ fullpage: false,
45
+ loginInfo: {}
46
+ }
47
+ },
48
+ ready () {
49
+ this.loginInfo = Object.assign({}, this.loginInfo, Vue.user)
50
+ console.log(this.loginInfo, 'loginINfo')
51
+ // this.$refs.route.init('repair-first')
52
+ },
53
+ methods: {
54
+ // 选择tab
55
+ tabSelect (name) {
56
+ this.componentName = name
57
+ // this.$refs.route.init(name)
58
+ if (name !== 'text-chat-pane') {
59
+ this.notified('false')
60
+ } else {
61
+ this.notified('true')
62
+ }
63
+ },
64
+ notified (stopped) {
65
+ console.log('txtServiceStopped invoked$')
66
+ if (this.$androidUtil.isAndroid) {
67
+ HostApp.setPreference('txtServiceStopped', stopped)
68
+ HostApp.setPreference('msgCount', '0')
69
+ }
70
+ },
71
+ mute () {
72
+ if(navigator.userAgent.match('iPad') || navigator.userAgent.match('iPhone')){
73
+ window.prompt("mute","")
74
+ }else{
75
+ HostApp.mute()
76
+ }
77
+ },
78
+ getImg (param) {
79
+ return require(`../assets/${param}.png`)
80
+ }
81
+ },
82
+ events: {
83
+ showFullPage () {
84
+ this.fullpage = true
85
+ },
86
+ hideFullPage () {
87
+ this.fullpage = false
88
+ }
89
+ }
90
+ }
91
+ </script>
92
+ <style lang="less">
93
+ .tab-befor-img {
94
+ margin: 3px 0;
95
+ content: '';
96
+ background-size: 30px;
97
+ display: inline-block;
98
+ margin-right: 8px;
99
+ height: 30px;
100
+ width: 100%;
101
+ vertical-align: -35%;
102
+ }
103
+ img[src=""],img:not([src]){
104
+ opacity: 0;
105
+ border:none;
106
+ visibility: hidden;
107
+ max-width: none;
108
+ }
109
+ /* .repair-mute-class {
110
+ &::before {
111
+ .tab-befor-img("../assets/guanbishengyin.png")
112
+ }
113
+ }*/
114
+ .menu-hide {
115
+ display: none;
116
+ }
117
+ </style>