vue2-client 1.2.40 → 1.2.43

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 (57) hide show
  1. package/CHANGELOG.md +109 -103
  2. package/docs/notice.md +22 -22
  3. package/package.json +1 -1
  4. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +555 -0
  5. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  6. package/src/base-client/components/common/XAddForm/XAddForm.vue +339 -338
  7. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +2 -1
  8. package/src/base-client/components/common/XForm/XForm.vue +275 -275
  9. package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +225 -225
  10. package/src/base-client/components/iot/DataAnalysisView/DataAnalysisView.vue +244 -244
  11. package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +452 -452
  12. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +330 -330
  13. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +57 -57
  14. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +121 -121
  15. package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +131 -131
  16. package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +276 -276
  17. package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +469 -469
  18. package/src/base-client/components/iot/LogDetailsView/LogDetailsView.vue +379 -379
  19. package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +359 -359
  20. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +335 -335
  21. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +184 -184
  22. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +291 -291
  23. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +236 -236
  24. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +256 -256
  25. package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +189 -189
  26. package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +722 -722
  27. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +231 -231
  28. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +247 -247
  29. package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +370 -370
  30. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  31. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  32. package/src/base-client/plugins/AppData.js +67 -67
  33. package/src/base-client/plugins/GetLoginInfoService.js +252 -252
  34. package/src/components/exception/ExceptionPage.vue +70 -70
  35. package/src/components/setting/Setting.vue +235 -235
  36. package/src/config/default/setting.config.js +35 -35
  37. package/src/config/index.js +3 -3
  38. package/src/layouts/SinglePageView.vue +72 -70
  39. package/src/layouts/header/HeaderNotice.vue +97 -97
  40. package/src/layouts/tabs/TabsView.vue +41 -40
  41. package/src/pages/login/Login.vue +201 -201
  42. package/src/pages/report/ReportTableHome.vue +28 -28
  43. package/src/pages/resourceManage/depListManage.vue +23 -23
  44. package/src/pages/resourceManage/funListManage.vue +23 -23
  45. package/src/pages/resourceManage/index.js +15 -15
  46. package/src/pages/resourceManage/orgListManage.vue +98 -98
  47. package/src/pages/resourceManage/roleListManage.vue +23 -23
  48. package/src/pages/resourceManage/staffListManage.vue +23 -23
  49. package/src/pages/system/ticket/submitTicketSuccess.vue +248 -248
  50. package/src/router/async/config.async.js +26 -26
  51. package/src/router/index.js +27 -27
  52. package/src/services/api/common.js +47 -47
  53. package/src/services/api/index.js +39 -39
  54. package/src/services/user.js +34 -34
  55. package/src/theme/default/style.less +47 -33
  56. package/src/utils/indexedDB.js +146 -146
  57. package/src/utils/routerUtil.js +359 -359
@@ -1,201 +1,201 @@
1
- <template>
2
- <common-layout>
3
- <div class="top">
4
- <div class="header">
5
- <img alt="logo" class="logo" src="@/assets/img/logo.png" />
6
- <span class="title">{{ systemName }}</span>
7
- </div>
8
- <div class="desc">{{ systemDesc }}</div>
9
- </div>
10
- <div class="login">
11
- <a-form @submit="onSubmit" :form="form">
12
- <a-tabs size="large" :tabBarStyle="{textAlign: 'center'}" style="padding: 0 2px;">
13
- <a-tab-pane tab="账户密码登录" key="1">
14
- <a-alert
15
- type="error"
16
- :closable="true"
17
- v-show="error"
18
- :message="error"
19
- showIcon
20
- style="margin-bottom: 24px;" />
21
- <a-form-item>
22
- <a-input
23
- autocomplete="autocomplete"
24
- size="large"
25
- placeholder="admin"
26
- v-decorator="['name', {rules: [{ required: true, message: '请输入账户名', whitespace: true}]}]"
27
- >
28
- <a-icon slot="prefix" type="user" />
29
- </a-input>
30
- </a-form-item>
31
- <a-form-item>
32
- <a-input
33
- size="large"
34
- placeholder="888888"
35
- autocomplete="autocomplete"
36
- type="password"
37
- v-decorator="['password', {rules: [{ required: true, message: '请输入密码', whitespace: true}]}]"
38
- >
39
- <a-icon slot="prefix" type="lock" />
40
- </a-input>
41
- </a-form-item>
42
- </a-tab-pane>
43
- </a-tabs>
44
- <div>
45
- <a-checkbox :checked="true" >自动登录</a-checkbox>
46
- </div>
47
- <a-form-item>
48
- <a-button :loading="logging" style="width: 100%;margin-top: 24px" size="large" htmlType="submit" type="primary">登录</a-button>
49
- </a-form-item>
50
- </a-form>
51
- </div>
52
- </common-layout>
53
- </template>
54
-
55
- <script>
56
- import CommonLayout from '@vue2-client/layouts/CommonLayout'
57
- import { getRoutesConfig, login } from '@vue2-client/services/user'
58
- import { setAuthorization } from '@vue2-client/utils/request'
59
- import { loadRoutes, funcToRouter } from '@vue2-client/utils/routerUtil'
60
- import { mapMutations } from 'vuex'
61
- import JSEncrypt from 'jsencrypt'
62
- import { ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
63
- import Vue from 'vue'
64
- import { positions } from '@vue2-client/mock/common'
65
- import { timeFix } from '@vue2-client/utils/util'
66
- const { homePage, ticketPage } = require('@vue2-client/config')
67
- // import { router } from '@vue2-client/mock/user/routes'
68
-
69
- export default {
70
- name: 'Login',
71
- components: { CommonLayout },
72
- data () {
73
- return {
74
- logging: false,
75
- error: '',
76
- form: this.$form.createForm(this)
77
- }
78
- },
79
- computed: {
80
- systemName () {
81
- return this.$store.state.setting.systemName
82
- },
83
- systemDesc () {
84
- return this.$store.state.setting.systemDesc
85
- }
86
- },
87
- methods: {
88
- ...mapMutations('account', ['setUser', 'setPermissions', 'setRoles']),
89
- onSubmit (e) {
90
- e.preventDefault()
91
- this.form.validateFields((err) => {
92
- if (!err) {
93
- this.logging = true
94
- const name = this.form.getFieldValue('name')
95
- const password = this.form.getFieldValue('password')
96
- login(name, password).then(this.afterLogin)
97
- }
98
- })
99
- },
100
- afterLogin (res) {
101
- const name = this.form.getFieldValue('name')
102
- const password = this.form.getFieldValue('password')
103
- this.logging = false
104
- const loginRes = res.states
105
- if (loginRes === '登录成功') {
106
- const encrypt = new JSEncrypt()
107
- encrypt.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB')
108
- const data = encrypt.encrypt(JSON.stringify({ username: name, password: password }))
109
- localStorage.setItem(ACCESS_TOKEN, data)
110
- // 获取路由配置
111
- getRoutesConfig(data).then(result => {
112
- Vue.$login.login(result).then(() => {
113
- const user = Object.assign({
114
- username: result.ename,
115
- name: result.name,
116
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png',
117
- address: '西安市',
118
- position: positions[0]
119
- }, result)
120
- this.setUser(user)
121
- this.setPermissions([{ id: 'queryForm', operation: ['add', 'edit'] }])
122
- this.setRoles([{ id: 'admin', operation: ['add', 'edit', 'delete'] }])
123
- let timestamp = new Date().getTime()// 当前的时间戳
124
- timestamp = timestamp + 60 * 60 * 1000
125
- // 格式化时间获取年月日, 登陆过期时间
126
- const dateAfter = new Date(timestamp)
127
- setAuthorization({ token: data, expireAt: dateAfter })
128
- loadRoutes(funcToRouter(user.functions))
129
- if (result.deps === '用户工单登记') {
130
- this.$router.push(ticketPage).catch(() => {})
131
- } else {
132
- this.$router.push(homePage).catch(() => {})
133
- }
134
- this.$message.success(timeFix().CN + ',欢迎回来', 3)
135
- })
136
- })
137
- } else {
138
- this.error = loginRes
139
- }
140
- }
141
- }
142
- }
143
- </script>
144
-
145
- <style lang="less" scoped>
146
- .common-layout{
147
- .top {
148
- text-align: center;
149
- .header {
150
- height: 44px;
151
- line-height: 44px;
152
- a {
153
- text-decoration: none;
154
- }
155
- .logo {
156
- height: 44px;
157
- vertical-align: top;
158
- margin-right: 16px;
159
- }
160
- .title {
161
- font-size: 33px;
162
- color: @title-color;
163
- font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
164
- font-weight: 600;
165
- position: relative;
166
- top: 2px;
167
- }
168
- }
169
- .desc {
170
- font-size: 14px;
171
- color: @text-color-second;
172
- margin-top: 12px;
173
- margin-bottom: 40px;
174
- }
175
- }
176
- .login{
177
- width: 368px;
178
- margin: 0 auto;
179
- @media screen and (max-width: 576px) {
180
- width: 95%;
181
- }
182
- @media screen and (max-width: 320px) {
183
- .captcha-button{
184
- font-size: 14px;
185
- }
186
- }
187
- .icon {
188
- font-size: 24px;
189
- color: @text-color-second;
190
- margin-left: 16px;
191
- vertical-align: middle;
192
- cursor: pointer;
193
- transition: color 0.3s;
194
-
195
- &:hover {
196
- color: @primary-color;
197
- }
198
- }
199
- }
200
- }
201
- </style>
1
+ <template>
2
+ <common-layout>
3
+ <div class="top">
4
+ <div class="header">
5
+ <img alt="logo" class="logo" src="@/assets/img/logo.png" />
6
+ <span class="title">{{ systemName }}</span>
7
+ </div>
8
+ <div class="desc">{{ systemDesc }}</div>
9
+ </div>
10
+ <div class="login">
11
+ <a-form @submit="onSubmit" :form="form">
12
+ <a-tabs size="large" :tabBarStyle="{textAlign: 'center'}" style="padding: 0 2px;">
13
+ <a-tab-pane tab="账户密码登录" key="1">
14
+ <a-alert
15
+ type="error"
16
+ :closable="true"
17
+ v-show="error"
18
+ :message="error"
19
+ showIcon
20
+ style="margin-bottom: 24px;" />
21
+ <a-form-item>
22
+ <a-input
23
+ autocomplete="autocomplete"
24
+ size="large"
25
+ placeholder="admin"
26
+ v-decorator="['name', {rules: [{ required: true, message: '请输入账户名', whitespace: true}]}]"
27
+ >
28
+ <a-icon slot="prefix" type="user" />
29
+ </a-input>
30
+ </a-form-item>
31
+ <a-form-item>
32
+ <a-input
33
+ size="large"
34
+ placeholder="888888"
35
+ autocomplete="autocomplete"
36
+ type="password"
37
+ v-decorator="['password', {rules: [{ required: true, message: '请输入密码', whitespace: true}]}]"
38
+ >
39
+ <a-icon slot="prefix" type="lock" />
40
+ </a-input>
41
+ </a-form-item>
42
+ </a-tab-pane>
43
+ </a-tabs>
44
+ <div>
45
+ <a-checkbox :checked="true" >自动登录</a-checkbox>
46
+ </div>
47
+ <a-form-item>
48
+ <a-button :loading="logging" style="width: 100%;margin-top: 24px" size="large" htmlType="submit" type="primary">登录</a-button>
49
+ </a-form-item>
50
+ </a-form>
51
+ </div>
52
+ </common-layout>
53
+ </template>
54
+
55
+ <script>
56
+ import CommonLayout from '@vue2-client/layouts/CommonLayout'
57
+ import { getRoutesConfig, login } from '@vue2-client/services/user'
58
+ import { setAuthorization } from '@vue2-client/utils/request'
59
+ import { loadRoutes, funcToRouter } from '@vue2-client/utils/routerUtil'
60
+ import { mapMutations } from 'vuex'
61
+ import JSEncrypt from 'jsencrypt'
62
+ import { ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
63
+ import Vue from 'vue'
64
+ import { positions } from '@vue2-client/mock/common'
65
+ import { timeFix } from '@vue2-client/utils/util'
66
+ const { homePage, ticketPage } = require('@vue2-client/config')
67
+ // import { router } from '@vue2-client/mock/user/routes'
68
+
69
+ export default {
70
+ name: 'Login',
71
+ components: { CommonLayout },
72
+ data () {
73
+ return {
74
+ logging: false,
75
+ error: '',
76
+ form: this.$form.createForm(this)
77
+ }
78
+ },
79
+ computed: {
80
+ systemName () {
81
+ return this.$store.state.setting.systemName
82
+ },
83
+ systemDesc () {
84
+ return this.$store.state.setting.systemDesc
85
+ }
86
+ },
87
+ methods: {
88
+ ...mapMutations('account', ['setUser', 'setPermissions', 'setRoles']),
89
+ onSubmit (e) {
90
+ e.preventDefault()
91
+ this.form.validateFields((err) => {
92
+ if (!err) {
93
+ this.logging = true
94
+ const name = this.form.getFieldValue('name')
95
+ const password = this.form.getFieldValue('password')
96
+ login(name, password).then(this.afterLogin)
97
+ }
98
+ })
99
+ },
100
+ afterLogin (res) {
101
+ const name = this.form.getFieldValue('name')
102
+ const password = this.form.getFieldValue('password')
103
+ this.logging = false
104
+ const loginRes = res.states
105
+ if (loginRes === '登录成功') {
106
+ const encrypt = new JSEncrypt()
107
+ encrypt.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB')
108
+ const data = encrypt.encrypt(JSON.stringify({ username: name, password: password }))
109
+ localStorage.setItem(ACCESS_TOKEN, data)
110
+ // 获取路由配置
111
+ getRoutesConfig(data).then(result => {
112
+ Vue.$login.login(result).then(() => {
113
+ const user = Object.assign({
114
+ username: result.ename,
115
+ name: result.name,
116
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png',
117
+ address: '西安市',
118
+ position: positions[0]
119
+ }, result)
120
+ this.setUser(user)
121
+ this.setPermissions([{ id: 'queryForm', operation: ['add', 'edit'] }])
122
+ this.setRoles([{ id: 'admin', operation: ['add', 'edit', 'delete'] }])
123
+ let timestamp = new Date().getTime()// 当前的时间戳
124
+ timestamp = timestamp + 60 * 60 * 1000
125
+ // 格式化时间获取年月日, 登陆过期时间
126
+ const dateAfter = new Date(timestamp)
127
+ setAuthorization({ token: data, expireAt: dateAfter })
128
+ loadRoutes(funcToRouter(user.functions))
129
+ if (result.deps === '用户工单登记') {
130
+ this.$router.push(ticketPage).catch(() => {})
131
+ } else {
132
+ this.$router.push(homePage).catch(() => {})
133
+ }
134
+ this.$message.success(timeFix().CN + ',欢迎回来', 3)
135
+ })
136
+ })
137
+ } else {
138
+ this.error = loginRes
139
+ }
140
+ }
141
+ }
142
+ }
143
+ </script>
144
+
145
+ <style lang="less" scoped>
146
+ .common-layout{
147
+ .top {
148
+ text-align: center;
149
+ .header {
150
+ height: 44px;
151
+ line-height: 44px;
152
+ a {
153
+ text-decoration: none;
154
+ }
155
+ .logo {
156
+ height: 44px;
157
+ vertical-align: top;
158
+ margin-right: 16px;
159
+ }
160
+ .title {
161
+ font-size: 33px;
162
+ color: @title-color;
163
+ font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
164
+ font-weight: 600;
165
+ position: relative;
166
+ top: 2px;
167
+ }
168
+ }
169
+ .desc {
170
+ font-size: 14px;
171
+ color: @text-color-second;
172
+ margin-top: 12px;
173
+ margin-bottom: 40px;
174
+ }
175
+ }
176
+ .login{
177
+ width: 368px;
178
+ margin: 0 auto;
179
+ @media screen and (max-width: 576px) {
180
+ width: 95%;
181
+ }
182
+ @media screen and (max-width: 320px) {
183
+ .captcha-button{
184
+ font-size: 14px;
185
+ }
186
+ }
187
+ .icon {
188
+ font-size: 24px;
189
+ color: @text-color-second;
190
+ margin-left: 16px;
191
+ vertical-align: middle;
192
+ cursor: pointer;
193
+ transition: color 0.3s;
194
+
195
+ &:hover {
196
+ color: @primary-color;
197
+ }
198
+ }
199
+ }
200
+ }
201
+ </style>
@@ -1,28 +1,28 @@
1
- <template>
2
- <report-table :tableData="tableData"></report-table>
3
- </template>
4
-
5
- <script>
6
- import { post } from '@vue2-client/services/api'
7
- import ReportTable from '@vue2-client/pages/report/ReportTable'
8
- export default {
9
- name: 'ReportTableHome',
10
- components: { ReportTable },
11
- data () {
12
- return {
13
- tableData: null
14
- }
15
- },
16
- created () {
17
- },
18
- mounted () {
19
- this.getData()
20
- },
21
- methods: {
22
- async getData () {
23
- this.tableData = await post('webmeterapi/reportTest', {})
24
- console.log('数据=>', JSON.stringify(this.tableData))
25
- }
26
- }
27
- }
28
- </script>
1
+ <template>
2
+ <report-table :tableData="tableData"></report-table>
3
+ </template>
4
+
5
+ <script>
6
+ import { post } from '@vue2-client/services/api'
7
+ import ReportTable from '@vue2-client/pages/report/ReportTable'
8
+ export default {
9
+ name: 'ReportTableHome',
10
+ components: { ReportTable },
11
+ data () {
12
+ return {
13
+ tableData: null
14
+ }
15
+ },
16
+ created () {
17
+ },
18
+ mounted () {
19
+ this.getData()
20
+ },
21
+ methods: {
22
+ async getData () {
23
+ this.tableData = await post('webmeterapi/reportTest', {})
24
+ console.log('数据=>', JSON.stringify(this.tableData))
25
+ }
26
+ }
27
+ }
28
+ </script>
@@ -1,23 +1,23 @@
1
- <template>
2
- <div id="depListManage">
3
-
4
- </div>
5
- </template>
6
-
7
- <script>
8
- export default {
9
- name: 'depListManage',
10
- data () {
11
- return {}
12
- },
13
- created () {
14
- },
15
- mounted () {
16
- },
17
- methods: {}
18
- }
19
- </script>
20
-
21
- <style lang="less">
22
-
23
- </style>
1
+ <template>
2
+ <div id="depListManage">
3
+
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'depListManage',
10
+ data () {
11
+ return {}
12
+ },
13
+ created () {
14
+ },
15
+ mounted () {
16
+ },
17
+ methods: {}
18
+ }
19
+ </script>
20
+
21
+ <style lang="less">
22
+
23
+ </style>
@@ -1,23 +1,23 @@
1
- <template>
2
- <div id="funListManage">
3
-
4
- </div>
5
- </template>
6
-
7
- <script>
8
- export default {
9
- name: 'funListManage',
10
- data () {
11
- return {}
12
- },
13
- created () {
14
- },
15
- mounted () {
16
- },
17
- methods: {}
18
- }
19
- </script>
20
-
21
- <style lang="less">
22
-
23
- </style>
1
+ <template>
2
+ <div id="funListManage">
3
+
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'funListManage',
10
+ data () {
11
+ return {}
12
+ },
13
+ created () {
14
+ },
15
+ mounted () {
16
+ },
17
+ methods: {}
18
+ }
19
+ </script>
20
+
21
+ <style lang="less">
22
+
23
+ </style>
@@ -1,15 +1,15 @@
1
- import depListManage from '@vue2-client/pages/resourceManage/depListManage'
2
- import funListManage from '@vue2-client/pages/resourceManage/funListManage'
3
- import orgListManage from '@vue2-client/pages/resourceManage/orgListManage'
4
- import resourceManageMain from '@vue2-client/pages/resourceManage/resourceManageMain'
5
- import roleListManage from '@vue2-client/pages/resourceManage/roleListManage'
6
- import staffListManage from '@vue2-client/pages/resourceManage/staffListManage'
7
-
8
- export default resourceManageMain
9
- export {
10
- depListManage,
11
- funListManage,
12
- orgListManage,
13
- roleListManage,
14
- staffListManage
15
- }
1
+ import depListManage from '@vue2-client/pages/resourceManage/depListManage'
2
+ import funListManage from '@vue2-client/pages/resourceManage/funListManage'
3
+ import orgListManage from '@vue2-client/pages/resourceManage/orgListManage'
4
+ import resourceManageMain from '@vue2-client/pages/resourceManage/resourceManageMain'
5
+ import roleListManage from '@vue2-client/pages/resourceManage/roleListManage'
6
+ import staffListManage from '@vue2-client/pages/resourceManage/staffListManage'
7
+
8
+ export default resourceManageMain
9
+ export {
10
+ depListManage,
11
+ funListManage,
12
+ orgListManage,
13
+ roleListManage,
14
+ staffListManage
15
+ }