cloud-web-corejs-haier 1.0.5 → 1.0.6

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 (141) hide show
  1. package/package.json +7 -4
  2. package/src/App.vue +30 -34
  3. package/src/api/user.js +8 -0
  4. package/src/components/Tinymce/index.vue +112 -71
  5. package/src/components/VabUpload/image-viewer.vue +2 -2
  6. package/src/components/VabUpload/index.js +1 -1
  7. package/src/components/VabUpload/mixins.js +1 -1
  8. package/src/components/VabUpload/privateProfileDialogMixins.js +1 -1063
  9. package/src/components/VabUpload/view.vue +6 -2
  10. package/src/components/base-textarea/index.vue +104 -0
  11. package/src/components/baseAlert/mixins.js +1 -1
  12. package/src/components/baseAttachment/mixins.js +2 -1
  13. package/src/components/baseInputExport/index.vue +19 -12
  14. package/src/components/baseInputExport/mixins.js +1 -1
  15. package/src/components/baseTabs/mixins.js +1 -1
  16. package/src/components/code-editor/index.vue +102 -63
  17. package/src/components/confirmDialog/index.vue +24 -17
  18. package/src/components/confirmDialog/mixins.js +1 -1
  19. package/src/components/errorMsg/index.vue +42 -34
  20. package/src/components/errorMsg/mixins.js +1 -1
  21. package/src/components/excelExport/index.js +1 -2
  22. package/src/components/excelExport/mixins.js +1 -1
  23. package/src/components/fileLibrary/fileObjAuthDialog.vue +179 -89
  24. package/src/components/fileLibrary/filterDialog.vue +45 -21
  25. package/src/components/fileLibrary/index.vue +579 -238
  26. package/src/components/fileLibrary/mixins/fileObjAuthDialogMixin.js +4 -1
  27. package/src/components/fileLibrary/mixins/indexMixins.js +3 -0
  28. package/src/components/scriptDescription/button.vue +12 -4
  29. package/src/components/scriptTest/mixins.js +1 -1
  30. package/src/components/table/index.js +12 -12
  31. package/src/components/tempStorage/index.vue +1 -1
  32. package/src/components/vb-tabs/x-tabs.vue +0 -1
  33. package/src/components/wf/content.vue +32 -36
  34. package/src/components/wf/mixins/setCandidateDialog2.js +1 -1
  35. package/src/components/wf/mixins/wfFlowEleScriptDialog.js +131 -3
  36. package/src/components/wf/setCandidateDialog2.vue +76 -66
  37. package/src/components/wf/wf.js +2176 -1
  38. package/src/components/wf/wfFlowEleScriptDialog.vue +5 -1
  39. package/src/components/wf/wfStartDialog.vue +6 -10
  40. package/src/components/wf/wfUtil.js +279 -1
  41. package/src/components/xform/form-designer/designer.js +1 -1
  42. package/src/components/xform/form-designer/form-widget/components/gantt/index.vue +16 -1
  43. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +1 -1
  44. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +17 -4
  45. package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +1 -1
  46. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +247 -187
  47. package/src/components/xform/form-designer/form-widget/field-widget/gantt-widget.vue +2 -0
  48. package/src/components/xform/form-designer/form-widget/field-widget/html-text-widget.vue +6 -2
  49. package/src/components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue +10 -0
  50. package/src/components/xform/form-designer/form-widget/field-widget/text-widget.vue +65 -4
  51. package/src/components/xform/form-designer/setting-panel/form-setting.vue +132 -118
  52. package/src/components/xform/form-designer/setting-panel/property-editor/autoValueEnabled-editor.vue +1 -1
  53. package/src/components/xform/form-designer/setting-panel/property-editor/formatType-editor.vue +137 -0
  54. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +124 -50
  55. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -0
  56. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +5 -1
  57. package/src/components/xform/form-render/index.vue +8 -0
  58. package/src/components/xform/form-render/indexMixin copy.js +3462 -0
  59. package/src/components/xform/form-render/indexMixin.js +3496 -1
  60. package/src/components/xform/mixins/defaultHandle.js +1 -1
  61. package/src/components/xform/utils/format.js +14 -4
  62. package/src/components/xform/utils/formula-util.js +0 -4
  63. package/src/components/xform/utils/util.js +1 -1
  64. package/src/index.js +215 -190
  65. package/src/lang/index.js +56 -51
  66. package/src/lang/locale/en/login.js +20 -0
  67. package/src/lang/locale/zh/login.js +20 -0
  68. package/src/layout/components/Sidebar/default.vue +1423 -1266
  69. package/src/layout/components/TagsView/index.vue +37 -11
  70. package/src/layout/components/createCompany/createCompanyDialog.vue +157 -0
  71. package/src/layout/components/extractedCode/viewDialog.vue +1 -0
  72. package/src/layout/defaultLayout.vue +1 -1
  73. package/src/layout/index.vue +3 -5
  74. package/src/mixins/table/index.js +151 -0
  75. package/src/permission.js +1 -18
  76. package/src/router/modules/customer.js +3 -8
  77. package/src/store/getters.js +24 -23
  78. package/src/store/modules/user.js +1 -30
  79. package/src/utils/vab.js +1 -1
  80. package/src/views/bd/setting/config_manage/list.vue +36 -19
  81. package/src/views/bd/setting/form_script/edit.vue +9 -0
  82. package/src/views/bd/setting/form_script/edit1.vue +29 -3
  83. package/src/views/bd/setting/form_script/form_list.vue +99 -37
  84. package/src/views/bd/setting/form_script/list1.vue +181 -118
  85. package/src/views/bd/setting/form_script/mixins/dialog.js +130 -1
  86. package/src/views/bd/setting/form_script/mixins/edit.js +199 -1
  87. package/src/views/bd/setting/form_script/mixins/edit1.js +193 -1
  88. package/src/views/bd/setting/form_script/mixins/list.js +236 -1
  89. package/src/views/bd/setting/form_script/mixins/list1.js +410 -1
  90. package/src/views/bd/setting/form_script/mixins/otherAuthDialog.js +194 -0
  91. package/src/views/bd/setting/form_script/otherAuthDialog.vue +83 -0
  92. package/src/views/bd/setting/form_template/edit.vue +13 -0
  93. package/src/views/bd/setting/form_template/list.vue +326 -214
  94. package/src/views/bd/setting/form_template/mixins/batchWfObjConfigDialog.js +279 -1
  95. package/src/views/bd/setting/form_template/mixins/edit.js +234 -9
  96. package/src/views/bd/setting/form_template/mixins/list.js +667 -3
  97. package/src/views/bd/setting/form_template/mixins/otherAuthDialog.js +193 -0
  98. package/src/views/bd/setting/form_template/otherAuthDialog.vue +83 -0
  99. package/src/views/bd/setting/logic_param/mixins/edit.js +1 -91
  100. package/src/views/bd/setting/logic_param/mixins/list.js +2 -362
  101. package/src/views/bd/setting/menu_kind/list.vue +172 -87
  102. package/src/views/bd/setting/menu_kind/mixins/authDialog.js +300 -7
  103. package/src/views/bd/setting/table_model/edit.vue +345 -304
  104. package/src/views/bd/setting/table_model/list.vue +190 -128
  105. package/src/views/bd/setting/table_model/mixins/edit.js +1191 -1
  106. package/src/views/bd/setting/table_model/mixins/list.js +428 -2
  107. package/src/views/bd/setting/table_model/mixins/otherAuthDialog.js +201 -0
  108. package/src/views/bd/setting/table_model/otherAuthDialog.vue +83 -0
  109. package/src/views/user/access_log/list.vue +418 -349
  110. package/src/views/user/area/dialog.vue +223 -116
  111. package/src/views/user/area/list.vue +318 -0
  112. package/src/views/user/common_attribute/list.vue +4 -1
  113. package/src/views/user/extend_datasource/dialog.vue +3 -0
  114. package/src/views/user/extend_datasource/edit.vue +2 -1
  115. package/src/views/user/extend_datasource/list.vue +3 -0
  116. package/src/views/user/form/vform/designer.vue +2 -1
  117. package/src/views/user/home/bears/index.vue +1032 -0
  118. package/src/views/user/home/default.vue +6 -5
  119. package/src/views/user/home/taili/index.vue +1034 -0
  120. package/src/views/user/ledger_library/list.vue +10 -12
  121. package/src/views/user/login/default.vue +165 -36
  122. package/src/views/user/login/index.vue +4 -6
  123. package/src/views/user/login/indexMixin.js +184 -8
  124. package/src/views/user/menu/list.vue +24 -1
  125. package/src/views/user/notify_message/dialog.vue +2 -6
  126. package/src/views/user/outLink/index.vue +57 -18
  127. package/src/views/user/role/authConfig.vue +89 -0
  128. package/src/views/user/role/dialog.vue +70 -48
  129. package/src/views/user/role/edit.vue +114 -4
  130. package/src/views/user/user/form_dialog.vue +158 -0
  131. package/src/views/user/user/list.vue +652 -582
  132. package/src/views/user/user/modifyPasswordDialog.vue +64 -53
  133. package/src/views/user/wf/wfReport/index.vue +137 -28
  134. package/src/views/user/wf/wf_obj_config/itemEdit.vue +15 -116
  135. package/src/views/user/wf/wf_obj_config/itemOperateDialog.vue +414 -0
  136. package/src/views/user/wf/wf_obj_config/list.vue +84 -78
  137. package/src/views/user/wf/wf_transfer_setting/edit.vue +52 -0
  138. package/src/views/user/wf/wf_transfer_setting/list.vue +10 -0
  139. package/src/components/xform/form-render/container-item/data-table-mixin2.js +0 -2169
  140. package/src/views/bd/setting/table_model/mixins/edit copy.js +0 -903
  141. package/src/views/user/login/index2.vue +0 -131
@@ -2,16 +2,15 @@
2
2
  <div id="containt">
3
3
  <fileLibrary :option="fileLibraryOption"></fileLibrary>
4
4
  </div>
5
-
6
5
  </template>
7
6
 
8
7
  <script>
9
- import fileLibrary from '@base/components/fileLibrary/index';
8
+ import fileLibrary from "@base/components/fileLibrary/index";
10
9
 
11
10
  export default {
12
- name: 'ledger_library:list',
11
+ name: "ledger_library:list",
13
12
  components: {
14
- fileLibrary
13
+ fileLibrary,
15
14
  },
16
15
  data() {
17
16
  return {
@@ -19,12 +18,11 @@ export default {
19
18
  isCategoryEdit: true,
20
19
  mouseCheck: true,
21
20
  storeAreaCode: "company_profile2",
22
- current_prefix: USER_PREFIX
23
- }
24
- }
25
- }
26
- }
27
-
21
+ current_prefix: USER_PREFIX,
22
+ showCategoryFilterArea: true,
23
+ },
24
+ };
25
+ },
26
+ };
28
27
  </script>
29
- <style scoped>
30
- </style>
28
+ <style scoped></style>
@@ -1,24 +1,54 @@
1
1
  <template>
2
- <div class="login-container" :class="backgroundClass" ref="login-container" v-show="showContent">
3
- <div class="login-main" style="height: auto;">
4
- <el-tabs v-model="activeName">
5
- <el-tab-pane label="账号登录" name="first">
6
- <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="box-form login" autocomplete="on"
7
- label-position="left">
2
+ <div
3
+ class="login-container"
4
+ :class="backgroundClass"
5
+ ref="login-container"
6
+ :style="{
7
+ background: imageUrl
8
+ ? 'url(' + imageUrl + ') center center/cover no-repeat !important'
9
+ : 'auto',
10
+ }"
11
+ v-show="showContent"
12
+ >
13
+ <div class="login-main" style="height: auto">
14
+ <el-tabs v-model="activeName" @tab-click="changeTab">
15
+ <el-tab-pane :label="$t1('账号登录')" name="first" v-if="accountLoagin">
16
+ <el-form
17
+ ref="loginForm"
18
+ :model="loginForm"
19
+ :rules="loginRules"
20
+ class="box-form login"
21
+ autocomplete="on"
22
+ label-position="left"
23
+ >
8
24
  <el-form-item prop="username" class="txt">
9
- <span class="svg-container"><i class="el-icon-user"/></span>
10
- <el-input ref="username" v-model="loginForm.username" placeholder="请输入用户名" name="" type="text"
11
- tabindex="1" autocomplete="on" @keyup.enter.native="handleLogin"/>
25
+ <span class="svg-container"><i class="el-icon-user" /></span>
26
+ <el-input
27
+ ref="username"
28
+ v-model="loginForm.username"
29
+ :placeholder="$t1('请输入用户名')"
30
+ name=""
31
+ type="text"
32
+ tabindex="1"
33
+ autocomplete="on"
34
+ @keyup.enter.native="handleLogin"
35
+ />
12
36
  </el-form-item>
13
- <el-tooltip :enterable="false" v-model="capsTooltip" content="Caps lock is On" placement="right" manual>
37
+ <el-tooltip
38
+ :enterable="false"
39
+ v-model="capsTooltip"
40
+ content="Caps lock is On"
41
+ placement="right"
42
+ manual
43
+ >
14
44
  <el-form-item prop="password" class="txt">
15
- <span class="svg-container"><i class="el-icon-lock"/></span>
45
+ <span class="svg-container"><i class="el-icon-lock" /></span>
16
46
  <el-input
17
47
  :key="passwordType"
18
48
  ref="password"
19
49
  v-model="loginForm.password"
20
50
  :type="passwordType"
21
- placeholder="请输入密码"
51
+ :placeholder="$t1('请输入密码')"
22
52
  name=""
23
53
  tabindex="2"
24
54
  autocomplete="on"
@@ -27,41 +57,98 @@
27
57
  @blur="capsTooltip = false"
28
58
  @keyup.enter.native="handleLogin"
29
59
  />
30
- <span class="show-pwd" @click="showPwd"><svg-icon
31
- :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"/></span>
60
+ <span class="show-pwd" @click="showPwd"
61
+ ><svg-icon
62
+ :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
63
+ /></span>
32
64
  </el-form-item>
33
65
  </el-tooltip>
34
66
  <div class="">
35
- <el-checkbox v-model="isRememberPassword">记住密码</el-checkbox>
67
+ <el-checkbox v-model="isRememberPassword">{{
68
+ $t1("记住密码")
69
+ }}</el-checkbox>
36
70
  </div>
37
- <el-button :loading="loading" type="primary" @click.prevent.stop="handleLogin" class="btn">登录</el-button>
71
+ <el-button
72
+ :loading="loading"
73
+ type="primary"
74
+ @click.prevent.stop="handleLogin"
75
+ class="btn"
76
+ >{{ $t1("登录") }}</el-button
77
+ >
38
78
  </el-form>
39
79
  </el-tab-pane>
40
- <el-tab-pane label="手机验证码登录" name="second">
41
- <el-form ref="loginForm" :model="loginForm2" :rules="loginRules" class="box-form login" autocomplete="on"
42
- label-position="left">
43
- <el-form-item prop="username" class="txt" style="width:66%">
44
- <span class="svg-container"><i class="el-icon-mobile-phone"/></span>
45
- <el-input ref="mobile" v-model="loginForm2.username" placeholder="请输入手机号" name="" type="text"
46
- tabindex="1" autocomplete="on" @keyup.enter.native="handleLogin"/>
80
+ <el-tab-pane :label="$t1('手机登录')" name="second" v-if="phoneLogin">
81
+ <el-form
82
+ ref="loginForm"
83
+ :model="loginForm2"
84
+ :rules="loginRules"
85
+ class="box-form login"
86
+ autocomplete="on"
87
+ label-position="left"
88
+ >
89
+ <el-form-item prop="username" class="txt" style="width: 66%">
90
+ <span class="svg-container"><i class="el-icon-mobile-phone" /></span>
91
+ <el-input
92
+ ref="mobile"
93
+ v-model="loginForm2.username"
94
+ :placeholder="$t1('请输入手机号')"
95
+ name=""
96
+ type="text"
97
+ tabindex="1"
98
+ autocomplete="on"
99
+ @keyup.enter.native="handleLogin"
100
+ />
47
101
  </el-form-item>
48
- <el-button class="btn-send" type="success" :class="{'gray-btn':isCounting}" @click="sendCode">
102
+ <el-button
103
+ class="btn-send"
104
+ type="success"
105
+ :class="{ 'gray-btn': isCounting }"
106
+ @click="sendCode"
107
+ >
49
108
  {{ buttonText }}
50
109
  </el-button>
51
110
  <el-form-item prop="smsCode" class="txt">
52
- <span class="svg-container"><i class="el-icon-message"/></span>
53
- <el-input ref="smsCode" v-model="loginForm2.smsCode" placeholder="请输入验证码" name="" type="text"
54
- tabindex="1" autocomplete="on" @keyup.enter.native="handleLogin"/>
111
+ <span class="svg-container"><i class="el-icon-message" /></span>
112
+ <el-input
113
+ ref="smsCode"
114
+ v-model="loginForm2.smsCode"
115
+ :placeholder="$t1('请输入验证码')"
116
+ name=""
117
+ type="text"
118
+ tabindex="1"
119
+ autocomplete="on"
120
+ @keyup.enter.native="handleLogin"
121
+ />
55
122
  </el-form-item>
56
- <el-button :loading="loading" type="primary" @click.prevent.stop="handleLogin" class="btn">登录</el-button>
123
+ <el-button
124
+ :loading="loading"
125
+ type="primary"
126
+ @click.prevent.stop="handleLogin"
127
+ class="btn"
128
+ >{{ $t1("登录") }}</el-button
129
+ >
57
130
  </el-form>
58
131
  </el-tab-pane>
132
+ <el-tab-pane :label="$t1('扫码登录')" name="third" v-if="qrLogin">
133
+ <div class="login-qr">
134
+ <img class="qr__img" :src="qrBase64" v-if="activeName === 'third'" />
135
+ <span class="qr__txt">{{ $t1("扫一扫,登录系统") }}</span>
136
+ <div v-if="qrExpired" @click="initQR" class="qr__lose">
137
+ <span><i class="el-icon-refresh"></i>{{ $t1("二维码失效") }}</span>
138
+ </div>
139
+ </div>
140
+ </el-tab-pane>
59
141
  </el-tabs>
60
142
  </div>
61
- <div class="tc copyright">
143
+ <div class="tc copyright" v-show="loginConfig.hide_filing_info !== true">
62
144
  <slot name="footer">
63
- © 广州同望科技发展有限公司
64
- <span style="margin-left:50px;">4000646100</span>
145
+ © {{ this.$t1(loginConfig.filing_company || "广州同望科技发展有限公司") }}
146
+ <span style="margin-left: 50px" v-if="!!loginConfig.filing_number">{{
147
+ loginConfig.filing_number + " " + (loginConfig.phone || "4000646100")
148
+ }}</span>
149
+ <span style="margin-left: 50px" v-if="!loginConfig.filing_number">{{
150
+ loginConfig.phone || "4000646100"
151
+ }}</span>
65
152
  </slot>
66
153
  </div>
67
154
  </div>
@@ -71,12 +158,12 @@
71
158
  import mixin from "./indexMixin";
72
159
 
73
160
  export default {
74
- name: 'Login',
75
- mixins: [mixin]
76
- }
161
+ name: "Login",
162
+ mixins: [mixin],
163
+ };
77
164
  </script>
78
165
  <style lang="scss" scoped>
79
- @import '@/resources/css/login.scss';
166
+ @import "@/resources/css/login.scss";
80
167
 
81
168
  .login-container.tc {
82
169
  background: url(~@/resources/images/bg-login5.jpg) center center/cover no-repeat;
@@ -94,7 +181,9 @@ export default {
94
181
  right: 5px;
95
182
  top: 25px;
96
183
  }
97
-
184
+ .box-form {
185
+ height: 330px;
186
+ }
98
187
  ::v-deep .login-main .el-tabs__header {
99
188
  margin-bottom: 0;
100
189
 
@@ -128,4 +217,44 @@ export default {
128
217
  color: #8a8686;
129
218
  }
130
219
  }
220
+
221
+ ::v-deep .login-main .el-tabs__header .el-tabs__nav .el-tabs__item {
222
+ width: 33%;
223
+ }
224
+ .login-qr {
225
+ height: 330px;
226
+ text-align: center;
227
+ position: relative;
228
+ .qr__img {
229
+ width: 220px;
230
+ margin-top: 40px;
231
+ }
232
+ .qr__txt {
233
+ color: #666;
234
+ font-size: 15px;
235
+ display: block;
236
+ }
237
+ .qr__lose {
238
+ position: absolute;
239
+ cursor: pointer;
240
+ width: 192px;
241
+ height: 192px;
242
+ background: rgb(255 255 255 / 76%);
243
+ top: 60px;
244
+ left: 136px;
245
+ color: #000;
246
+ line-height: 64px;
247
+ font-weight: 600;
248
+ font-size: 26px;
249
+ span {
250
+ line-height: 1;
251
+ margin-top: 30px;
252
+ }
253
+ i {
254
+ display: block;
255
+ font-size: 42px;
256
+ margin-top: 46px;
257
+ }
258
+ }
259
+ }
131
260
  </style>
@@ -6,10 +6,8 @@
6
6
  import defaultView from "@base/views/user/login/default.vue";
7
7
 
8
8
  export default {
9
- name: 'Login',
10
- components: {defaultView}
11
- }
9
+ name: "Login",
10
+ components: { defaultView },
11
+ };
12
12
  </script>
13
- <style lang="scss" scoped>
14
-
15
- </style>
13
+ <style lang="scss" scoped></style>
@@ -1,5 +1,6 @@
1
1
  import {encode} from "js-base64";
2
2
  import settingConfig from "@/settings";
3
+ import QRcode from "qrcode";
3
4
 
4
5
  function getUrlParams(url) {
5
6
  let result = {};
@@ -13,12 +14,16 @@ function getUrlParams(url) {
13
14
 
14
15
  export default {
15
16
  name: 'Login',
17
+ props:{
18
+ lang: [String,Function]
19
+ },
16
20
  components: {},
17
21
  data() {
18
22
  return {
19
23
  isCounting: false,
20
24
  countdown: 0,
21
- buttonText: '获取验证码',
25
+ buttonText: this.$t1('获取验证码'),
26
+ smsTimer: null,
22
27
  isRememberPassword: false,
23
28
  loginForm: {
24
29
  username: '',
@@ -54,7 +59,22 @@ export default {
54
59
  },
55
60
  activeName: "first",
56
61
  searchParam: {},
57
- showContent: true
62
+ showContent: true,
63
+
64
+ qrTimer1: null,
65
+ qrTimer2: null,
66
+ qrContent: null,
67
+ qrCodeFlag: 0,
68
+ qrBase64: "",
69
+ settingConfig: settingConfig,
70
+ qrExpired: false,
71
+ loginConfig: {},
72
+ imageUrl: '',
73
+ loginMethod: '',
74
+
75
+ accountLoagin:true,
76
+ phoneLogin:false,
77
+ qrLogin:false,
58
78
  };
59
79
  },
60
80
  watch: {
@@ -69,6 +89,10 @@ export default {
69
89
  immediate: true
70
90
  }
71
91
  },
92
+ beforeDestroy() {
93
+ this.clearQrLoginTimer();
94
+ this.clearSmsTimer();
95
+ },
72
96
  created() {
73
97
  this.init();
74
98
  },
@@ -84,7 +108,59 @@ export default {
84
108
  window.removeEventListener('keydown', this.keyDown, false);
85
109
  },
86
110
  methods: {
111
+ handleLoginConfig(){
112
+ let loginConfig = this.$store.getters.loginConfig || {};
113
+ this.loginConfig = loginConfig;
114
+ this.initImage();
115
+ this.initLoginMethod();
116
+ },
117
+ initImage(){
118
+ //初始化登录图片
119
+ let loginConfig = this.loginConfig;
120
+ if(loginConfig?.attachments?.length){
121
+ this.imageUrl = loginConfig.attachments[0].domain + loginConfig.attachments[0].source;
122
+ }
123
+ },
124
+
125
+ initLoginMethod(){
126
+ let loginConfig = this.loginConfig?.login_method;
127
+ if(loginConfig?.length){
128
+ this.accountLoagin = loginConfig.includes(1);
129
+ this.phoneLogin = loginConfig.includes(2);
130
+ this.qrLogin = loginConfig.includes(3);
131
+ if(this.accountLoagin){
132
+ this.activeName = "first";
133
+ }else if(this.phoneLogin){
134
+ this.activeName = "second";
135
+ }else if(this.qrLogin){
136
+ this.activeName = "third";
137
+ this.$nextTick(() => {
138
+ this.initQR();
139
+ })
140
+ }
141
+ }else{
142
+ this.accountLoagin = true;
143
+ this.phoneLogin = settingConfig.mobileLoginEnabled;
144
+ this.qrLogin = settingConfig.qrLoginEnabled;
145
+ }
146
+ },
147
+ initLang(){
148
+ let lang = this.$route.query.lang;
149
+ if(!lang && !!this.lang){
150
+ if(typeof this.lang === "function"){
151
+ lang = this.lang();
152
+ }else{
153
+ lang = this.lang;
154
+ }
155
+ }
156
+ if(lang){
157
+ this.$i18n.locale = lang;
158
+ localStorage.setItem("i18n-lang", lang);
159
+ }
160
+ },
87
161
  init() {
162
+ this.initLang();
163
+ this.handleLoginConfig();
88
164
  let searchParam = getUrlParams(location.search);
89
165
  this.searchParam = searchParam;
90
166
  //小熊SSO返回判断--目前因为小熊单点返回ticket有问题要特殊处理
@@ -110,6 +186,7 @@ export default {
110
186
  if (e.keyCode == 13 && e.target.nodeName != 'INPUT') {
111
187
  let closeBtn = document.querySelector('.el-dialog__close');
112
188
  closeBtn && closeBtn.click();
189
+ if (this.activeName == "third") return
113
190
  this.handleLogin();
114
191
  }
115
192
  },
@@ -140,7 +217,7 @@ export default {
140
217
  let username = this.loginForm2.username;
141
218
  let smsCode = this.loginForm2.smsCode;
142
219
  if (!username || !smsCode) {
143
- this.$baseAlert("请输入手机号和验证码");
220
+ this.$baseAlert(this.$t1('请输入手机号和验证码'));
144
221
  return;
145
222
  }
146
223
  loadingObj = this.$baseLoading();
@@ -325,6 +402,7 @@ export default {
325
402
  this.$baseAlert("请输入手机号");
326
403
  return
327
404
  }
405
+
328
406
  this.$http({
329
407
  url: USER_PREFIX + '/auth/sendSmsCode',
330
408
  method: `post`,
@@ -338,20 +416,27 @@ export default {
338
416
  });
339
417
  this.isCounting = true
340
418
  this.countdown = 60
341
- this.buttonText = '60秒后重新获取'
342
- const times = setInterval(() => {
419
+ this.buttonText = this.$t1('60秒后重新获取')
420
+ this.clearSmsTimer();
421
+ this.smsTimer = setInterval(() => {
343
422
  this.countdown--;
344
- this.buttonText = this.countdown + '秒后重新获取'
423
+ this.buttonText = this.$t1('{time}秒后重新获取',{time:this.countdown})
345
424
  if (this.countdown == 0) {
346
- clearInterval(times);
425
+ this.clearSmsTimer();
347
426
  this.isCounting = false
348
- this.buttonText = '获取验证码'
427
+ this.buttonText = this.$t1('获取验证码')
349
428
  }
350
429
  }, 1000)
351
430
  }
352
431
  });
353
432
 
354
433
  },
434
+ clearSmsTimer() {
435
+ if (this.smsTimer) {
436
+ clearInterval(this.smsTimer);
437
+ this.smsTimer = null;
438
+ }
439
+ },
355
440
  mobileLogin() {
356
441
 
357
442
  },
@@ -420,6 +505,97 @@ export default {
420
505
  });
421
506
  }
422
507
  });
508
+ },
509
+
510
+ /**二维码登录begin*/
511
+ guid() {
512
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (t) {
513
+ var e = 16 * Math.random() | 0;
514
+ return ("x" == t ? e : 3 & e | 8).toString(16);
515
+ });
516
+ },
517
+ initQR() {
518
+ this.clearQrLoginTimer();
519
+ this.qrExpired = true;
520
+ let option = {width: 300, height: 300};
521
+ this.qrContent = this.guid();
522
+ this.createQR(this.qrContent, option).then(url => {
523
+ this.qrExpired = false;
524
+ this.qrBase64 = url
525
+ this.createQrLoginTimer();
526
+ })
527
+ },
528
+ // 生成二维码
529
+ createQR(content, options) {
530
+ return new Promise((resolve, reject) => {
531
+ QRcode.toDataURL(content, options).then(url => {
532
+ resolve(url)
533
+ })
534
+ })
535
+ },
536
+ changeTab() {
537
+ // this.initQR();
538
+ // return
539
+ if (this.activeName == "third") {
540
+ this.initQR();
541
+ } else {
542
+ this.clearQrLoginTimer();
543
+ }
544
+ },
545
+ clearQrLoginTimer() {
546
+ if (this.qrTimer1) {
547
+ clearTimeout(this.qrTimer1)
548
+ this.qrTimer1 = null;
549
+ }
550
+ if (this.qrTimer2) {
551
+ clearTimeout(this.qrTimer2)
552
+ this.qrTimer2 = null;
553
+ }
554
+ },
555
+ createQrLoginTimer() {
556
+ this.checkQrLoginTimerHanlde()
557
+ this.qrTimer2 = setTimeout(() => {
558
+ this.qrExpired = true;
559
+ this.clearQrLoginTimer();
560
+ }, 60000)
561
+ },
562
+ checkQrLoginTimerHanlde() {
563
+ this.qrTimer1 = setTimeout(() => {
564
+ this.checkQrLoginStatusHanlde();
565
+ }, 3000)
566
+ },
567
+ checkQrLoginStatusHanlde() {
568
+ if (this.qrExpired) {
569
+ return
570
+ }
571
+ this.$http({
572
+ url: USER_PREFIX + '/auth/login',
573
+ method: `post`,
574
+ data: {as: this.qrContent},
575
+ // isLoading: true,
576
+ failMsg: false,
577
+ success: res => {
578
+ let token = res.objx;
579
+ if (token) {
580
+ this.$message({
581
+ message: this.$t1('登录成功'),
582
+ type: 'success'
583
+ });
584
+ this.clearQrLoginTimer();
585
+ this.$store.dispatch('user/addToken', {token}).then(res => {
586
+ localStorage.removeItem('currentMenuId');
587
+ this.rememberPassword();
588
+ this.loading = false;
589
+ window.removeEventListener('keydown', this.keyDown, false);
590
+ this.handleRedirectUrl();
591
+ });
592
+ } else {
593
+ this.checkQrLoginTimerHanlde();
594
+ }
595
+ }
596
+ });
423
597
  }
598
+ /**二维码登录end*/
599
+
424
600
  }
425
601
  }
@@ -351,7 +351,7 @@ export default {
351
351
  treeNodeUrl: USER_PREFIX + '/menu/listChildren',
352
352
  editSaveUrl: USER_PREFIX + '/menu/save',
353
353
  editDefaultRow: () => {
354
- return {enabled: true, type: this.menuType};
354
+ return {enabled: true, type: this.menuType,checkPermission: 0};
355
355
  },
356
356
  param: () => {
357
357
  return this.formData;
@@ -450,6 +450,29 @@ export default {
450
450
  }
451
451
  }
452
452
  },
453
+ {
454
+ field: 'checkPermission',
455
+ title: this.$t1('查询数据权限'),
456
+ width: 150,
457
+ editRender: {},
458
+ slots: {
459
+ default: ({row}) => {
460
+ if (row.checkPermission) {
461
+ return [<div class="txt-status">{this.$t1('启用')}</div>];
462
+ } else {
463
+ return [<div class="txt-status s-3">{this.$t1('禁用')}</div>];
464
+ }
465
+ },
466
+ edit: ({row}) => {
467
+ return [
468
+ <el-select v-model={row.checkPermission}>
469
+ <el-option value={1} label={this.$t1('启用')}></el-option>
470
+ <el-option value={0} label={this.$t1('禁用')}></el-option>
471
+ </el-select>
472
+ ]
473
+ }
474
+ }
475
+ },
453
476
  // { field: 'treePathName', title: '上级菜单', width: 200 },
454
477
  {field: 'orders', title: this.$t1('序号'), width: 100, editRender: {name: 'input'}},
455
478
  {
@@ -7,7 +7,7 @@
7
7
  v-if="showWfDialog2"
8
8
  :visible.sync="showWfDialog2"
9
9
  :modal="false"
10
- custom-class="dialog-style designer-dialog indexUse"
10
+ custom-class="el-dialog dialog-style designer-dialog indexUse"
11
11
  width="100%"
12
12
  height="100%"
13
13
  top="0px"
@@ -107,8 +107,4 @@ export default {
107
107
  };
108
108
  </script>
109
109
 
110
- <style scoped>
111
- .designer-dialog.indexUse #containt .detail-wrap .d-cont {
112
- height: calc(100vh - 82px);
113
- }
114
- </style>
110
+ <style scoped></style>