vue2-client 1.2.110 → 1.2.111

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.
@@ -1,79 +1,71 @@
1
- import { manageApi, post } from '@vue2-client/services/api'
2
- import { handleTree } from '@vue2-client/utils/util'
3
-
4
- const GetAppDataService = {
5
- install (Vue) {
6
- // 给vue增添对话框显示方法
7
- Vue.$appdata = Vue.prototype.$appdata = GetAppDataService
8
- },
9
- async load () {
10
- const params = {}
11
- await post(manageApi.getDictionaryValue, {}).then((res) => {
12
- // 从本地缓存中读取compatible
13
- const setting = localStorage.getItem('compatible')
14
- // 判断是否是V4环境
15
- if (setting === 'V4') {
16
- // 如果是V4,从返回值中,data取值
17
- Object.assign(params, res.data)
18
- } else {
19
- Object.assign(params, res)
20
- }
21
- const badgeItemArray = {}
22
- for (const key of Object.keys(params)) {
23
- badgeItemArray[key] = {}
24
- for (const item of params[key]) {
25
- if (item.status) {
26
- badgeItemArray[key][item.value] = {
27
- status: item.status,
28
- text: item.text
29
- }
30
- }
31
- }
32
- }
33
- // 追加参数
34
- localStorage.setItem(process.env.VUE_APP_DICTIONARY_KEY, JSON.stringify(params))
35
- localStorage.setItem(process.env.VUE_APP_BADGE_KEY, JSON.stringify(badgeItemArray))
36
- })
37
- // 获取省市区数据
38
- await post(manageApi.getDivisionsOhChina, {}).then((res) => {
39
- // 追加参数
40
- localStorage.setItem(process.env.VUE_APP_DIVISIONSOHCHINA, JSON.stringify(res))
41
- })
42
- },
43
- // 返回树形省市区
44
- getDivisionsOhChinaForTree () {
45
- const str = localStorage.getItem(process.env.VUE_APP_DIVISIONSOHCHINA)
46
- return handleTree(JSON.parse(str), 'code', 'parentcode')
47
- },
48
- // 返回列表省市区
49
- getDivisionsOhChinaForList () {
50
- const str = localStorage.getItem(process.env.VUE_APP_DIVISIONSOHCHINA)
51
- return JSON.parse(str)
52
- },
53
- getDictionaryList (key) {
54
- const str = localStorage.getItem(process.env.VUE_APP_DICTIONARY_KEY)
55
- const object = JSON.parse(str)
56
- return object[key]
57
- },
58
- getParam (key, value) {
59
- const str = localStorage.getItem(process.env.VUE_APP_BADGE_KEY)
60
- const object = JSON.parse(str)
61
- const result = object[key]
62
- if (result && result.hasOwnProperty(value)) {
63
- return result[value]
64
- } else {
65
- return null
66
- }
67
- },
68
- getParams () {
69
- const str = localStorage.getItem(process.env.VUE_APP_DICTIONARY_KEY)
70
- const object = JSON.parse(str)
71
- return object
72
- },
73
- getSingleValues () {
74
- const str = localStorage.getItem(process.env.VUE_APP_BADGE_KEY)
75
- const object = JSON.parse(str)
76
- return object
77
- }
78
- }
79
- export default GetAppDataService
1
+ import { manageApi, post } from '@vue2-client/services/api'
2
+ import { handleTree } from '@vue2-client/utils/util'
3
+
4
+ const GetAppDataService = {
5
+ install (Vue) {
6
+ // 给vue增添对话框显示方法
7
+ Vue.$appdata = Vue.prototype.$appdata = GetAppDataService
8
+ },
9
+ async load () {
10
+ const params = {}
11
+ await post(manageApi.getDictionaryValue, {}).then((res) => {
12
+ Object.assign(params, res)
13
+ const badgeItemArray = {}
14
+ for (const key of Object.keys(params)) {
15
+ badgeItemArray[key] = {}
16
+ for (const item of params[key]) {
17
+ if (item.status) {
18
+ badgeItemArray[key][item.value] = {
19
+ status: item.status,
20
+ text: item.text
21
+ }
22
+ }
23
+ }
24
+ }
25
+ // 追加参数
26
+ localStorage.setItem(process.env.VUE_APP_DICTIONARY_KEY, JSON.stringify(params))
27
+ localStorage.setItem(process.env.VUE_APP_BADGE_KEY, JSON.stringify(badgeItemArray))
28
+ })
29
+ // 获取省市区数据
30
+ await post(manageApi.getDivisionsOhChina, {}).then((res) => {
31
+ // 追加参数
32
+ localStorage.setItem(process.env.VUE_APP_DIVISIONSOHCHINA, JSON.stringify(res))
33
+ })
34
+ },
35
+ // 返回树形省市区
36
+ getDivisionsOhChinaForTree () {
37
+ const str = localStorage.getItem(process.env.VUE_APP_DIVISIONSOHCHINA)
38
+ return handleTree(JSON.parse(str), 'code', 'parentcode')
39
+ },
40
+ // 返回列表省市区
41
+ getDivisionsOhChinaForList () {
42
+ const str = localStorage.getItem(process.env.VUE_APP_DIVISIONSOHCHINA)
43
+ return JSON.parse(str)
44
+ },
45
+ getDictionaryList (key) {
46
+ const str = localStorage.getItem(process.env.VUE_APP_DICTIONARY_KEY)
47
+ const object = JSON.parse(str)
48
+ return object[key]
49
+ },
50
+ getParam (key, value) {
51
+ const str = localStorage.getItem(process.env.VUE_APP_BADGE_KEY)
52
+ const object = JSON.parse(str)
53
+ const result = object[key]
54
+ if (result && result.hasOwnProperty(value)) {
55
+ return result[value]
56
+ } else {
57
+ return null
58
+ }
59
+ },
60
+ getParams () {
61
+ const str = localStorage.getItem(process.env.VUE_APP_DICTIONARY_KEY)
62
+ const object = JSON.parse(str)
63
+ return object
64
+ },
65
+ getSingleValues () {
66
+ const str = localStorage.getItem(process.env.VUE_APP_BADGE_KEY)
67
+ const object = JSON.parse(str)
68
+ return object
69
+ }
70
+ }
71
+ export default GetAppDataService
@@ -1,20 +1,20 @@
1
- import { get } from '@vue2-client/services/api'
2
- import Vue from 'vue'
3
-
4
- async function loginStart (name, password) {
5
- const resource = await get(`/rs/user/${name}/${password}/智慧OA`, {})
6
- console.log('登陆获取', resource)
7
- Vue.$login.f = resource
8
- await Promise.all([Vue.$appdata.load()])
9
- const login = {
10
- f: Vue.$login.f,
11
- jwt: Vue.$login.f.id,
12
- r: Vue.$login.r
13
- }
14
- Vue.$store.commit('account/setLogin', login)
15
- return resource
16
- }
17
-
18
- export {
19
- loginStart
20
- }
1
+ import { get } from '@vue2-client/services/api'
2
+ import Vue from 'vue'
3
+
4
+ async function loginStart (name, password) {
5
+ const resource = await get(`/rs/user/${name}/${password}/智慧OA`, {})
6
+ console.log('登陆获取', resource)
7
+ Vue.$login.f = resource
8
+ await Promise.all([Vue.$appdata.load()])
9
+ const login = {
10
+ f: Vue.$login.f,
11
+ jwt: Vue.$login.f.id,
12
+ r: Vue.$login.r
13
+ }
14
+ Vue.$store.commit('account/setLogin', login)
15
+ return resource
16
+ }
17
+
18
+ export {
19
+ loginStart
20
+ }
@@ -1,98 +1,98 @@
1
- <template>
2
- <div id="orgListManage">
3
- <a-card :bordered="false">
4
- <!--<a-row :gutter="48">-->
5
- <!--<a-col>-->
6
- <!--<a-space>-->
7
- <!--<a-button type="primary" @click="addItem" v-if="!buttonState || buttonState.add">-->
8
- <!--<a-icon :style="iconStyle" type="plus"/>新增-->
9
- <!--</a-button>-->
10
- <!--<a-button-->
11
- <!--v-if="!buttonState || buttonState.edit"-->
12
- <!--:loading="editDataLoading"-->
13
- <!--:disabled="!isModify"-->
14
- <!--class="btn-success"-->
15
- <!--type="dashed"-->
16
- <!--@click="editItem">-->
17
- <!--<a-icon :style="iconStyle" type="edit"/>修改-->
18
- <!--</a-button>-->
19
- <!--<a-button :disabled="!isDelete" type="danger" @click="deleteItem" v-if="!buttonState || buttonState.delete">-->
20
- <!--<a-icon :style="iconStyle" type="delete"/>删除-->
21
- <!--</a-button>-->
22
- <!--</a-space>-->
23
- <!--<span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">-->
24
- <!--<a-button-group>-->
25
- <!--<a-button @click="toggleIsFormShow">-->
26
- <!--<a-icon :style="iconStyle" type="vertical-align-top"/>-->
27
- <!--</a-button>-->
28
- <!--<a-button @click="refresh(true)">-->
29
- <!--<a-icon :style="iconStyle" type="reload" />-->
30
- <!--</a-button>-->
31
- <!--<a-button @click="showDrawer">-->
32
- <!--<a-icon :style="iconStyle" type="table" />-->
33
- <!--</a-button>-->
34
- <!--<a-button @click="exports">-->
35
- <!--<a-icon :style="iconStyle" type="cloud-download"/>-->
36
- <!--</a-button>-->
37
- <!--</a-button-group>-->
38
- <!--</span>-->
39
- <!--</a-col>-->
40
- <!--</a-row>-->
41
- <a-table
42
- :columns="columns"
43
- :data-source="funTree"
44
- :pagination="false"
45
- bordered
46
- rowKey="id"
47
- size="middle">
48
- </a-table>
49
- </a-card>
50
- </div>
51
- </template>
52
-
53
- <script>
54
- import { getOrganization, searchFun } from '@vue2-client/base-client/plugins/GetLoginInfoService'
55
- import { getColumnsJson } from '@vue2-client/services/api'
56
- export default {
57
- // 组织管理
58
- name: 'orgListManage',
59
- data () {
60
- return {
61
- columnsJson: [],
62
- funTree: [],
63
- columns: [
64
- {
65
- title: '组织名称',
66
- dataIndex: 'name'
67
- },
68
- {
69
- title: '排序',
70
- dataIndex: 'position'
71
- },
72
- {
73
- title: '组件目录',
74
- dataIndex: 'f_dir'
75
- },
76
- {
77
- title: '描述',
78
- dataIndex: 'f_description'
79
- }
80
- ]
81
- }
82
- },
83
- created () {
84
- },
85
- async mounted () {
86
- getColumnsJson('orgListManage', (res) => {
87
- this.columnsJson = res
88
- })
89
- const fun = await getOrganization()
90
- this.funTree = searchFun(fun, '组织机构')
91
- },
92
- methods: {
93
- }
94
- }
95
- </script>
96
-
97
- <style lang="less">
98
- </style>
1
+ <template>
2
+ <div id="orgListManage">
3
+ <a-card :bordered="false">
4
+ <!--<a-row :gutter="48">-->
5
+ <!--<a-col>-->
6
+ <!--<a-space>-->
7
+ <!--<a-button type="primary" @click="addItem" v-if="!buttonState || buttonState.add">-->
8
+ <!--<a-icon :style="iconStyle" type="plus"/>新增-->
9
+ <!--</a-button>-->
10
+ <!--<a-button-->
11
+ <!--v-if="!buttonState || buttonState.edit"-->
12
+ <!--:loading="editDataLoading"-->
13
+ <!--:disabled="!isModify"-->
14
+ <!--class="btn-success"-->
15
+ <!--type="dashed"-->
16
+ <!--@click="editItem">-->
17
+ <!--<a-icon :style="iconStyle" type="edit"/>修改-->
18
+ <!--</a-button>-->
19
+ <!--<a-button :disabled="!isDelete" type="danger" @click="deleteItem" v-if="!buttonState || buttonState.delete">-->
20
+ <!--<a-icon :style="iconStyle" type="delete"/>删除-->
21
+ <!--</a-button>-->
22
+ <!--</a-space>-->
23
+ <!--<span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">-->
24
+ <!--<a-button-group>-->
25
+ <!--<a-button @click="toggleIsFormShow">-->
26
+ <!--<a-icon :style="iconStyle" type="vertical-align-top"/>-->
27
+ <!--</a-button>-->
28
+ <!--<a-button @click="refresh(true)">-->
29
+ <!--<a-icon :style="iconStyle" type="reload" />-->
30
+ <!--</a-button>-->
31
+ <!--<a-button @click="showDrawer">-->
32
+ <!--<a-icon :style="iconStyle" type="table" />-->
33
+ <!--</a-button>-->
34
+ <!--<a-button @click="exports">-->
35
+ <!--<a-icon :style="iconStyle" type="cloud-download"/>-->
36
+ <!--</a-button>-->
37
+ <!--</a-button-group>-->
38
+ <!--</span>-->
39
+ <!--</a-col>-->
40
+ <!--</a-row>-->
41
+ <a-table
42
+ :columns="columns"
43
+ :data-source="funTree"
44
+ :pagination="false"
45
+ bordered
46
+ rowKey="id"
47
+ size="middle">
48
+ </a-table>
49
+ </a-card>
50
+ </div>
51
+ </template>
52
+
53
+ <script>
54
+ import { getOrganization, searchFun } from '@vue2-client/base-client/plugins/GetLoginInfoService'
55
+ import { getColumnsJson } from '@vue2-client/services/api'
56
+ export default {
57
+ // 组织管理
58
+ name: 'orgListManage',
59
+ data () {
60
+ return {
61
+ columnsJson: [],
62
+ funTree: [],
63
+ columns: [
64
+ {
65
+ title: '组织名称',
66
+ dataIndex: 'name'
67
+ },
68
+ {
69
+ title: '排序',
70
+ dataIndex: 'position'
71
+ },
72
+ {
73
+ title: '组件目录',
74
+ dataIndex: 'f_dir'
75
+ },
76
+ {
77
+ title: '描述',
78
+ dataIndex: 'f_description'
79
+ }
80
+ ]
81
+ }
82
+ },
83
+ created () {
84
+ },
85
+ async mounted () {
86
+ getColumnsJson('orgListManage', (res) => {
87
+ this.columnsJson = res
88
+ })
89
+ const fun = await getOrganization()
90
+ this.funTree = searchFun(fun, '组织机构')
91
+ },
92
+ methods: {
93
+ }
94
+ }
95
+ </script>
96
+
97
+ <style lang="less">
98
+ </style>
@@ -1,26 +1,26 @@
1
- import routerMap from './router.map'
2
- import { parseRoutes } from '@vue2-client/utils/routerUtil'
3
-
4
- // 异步路由配置
5
- const routesConfig = [
6
- 'login',
7
- 'submitTicket',
8
- 'root',
9
- {
10
- router: 'exp404',
11
- path: '*',
12
- name: '404'
13
- },
14
- {
15
- router: 'exp403',
16
- path: '/403',
17
- name: '403'
18
- }
19
- ]
20
-
21
- const options = {
22
- mode: 'history',
23
- routes: parseRoutes(routesConfig, routerMap)
24
- }
25
-
26
- export default options
1
+ import routerMap from './router.map'
2
+ import { parseRoutes } from '@vue2-client/utils/routerUtil'
3
+
4
+ // 异步路由配置
5
+ const routesConfig = [
6
+ 'login',
7
+ 'submitTicket',
8
+ 'root',
9
+ {
10
+ router: 'exp404',
11
+ path: '*',
12
+ name: '404'
13
+ },
14
+ {
15
+ router: 'exp403',
16
+ path: '/403',
17
+ name: '403'
18
+ }
19
+ ]
20
+
21
+ const options = {
22
+ mode: 'history',
23
+ routes: parseRoutes(routesConfig, routerMap)
24
+ }
25
+
26
+ export default options
@@ -1,27 +1,27 @@
1
- import { formatRoutes } from '@vue2-client/utils/routerUtil'
2
-
3
- // 不需要登录拦截的路由配置
4
- const loginIgnore = {
5
- names: ['404', '403'], // 根据路由名称匹配
6
- paths: ['/login', '/submitTicket'], // 根据路由fullPath匹配
7
- /**
8
- * 判断路由是否包含在该配置中
9
- * @param route vue-router 的 route 对象
10
- * @returns {boolean}
11
- */
12
- includes (route) {
13
- return this.names.includes(route.name) || this.paths.includes(route.path)
14
- }
15
- }
16
-
17
- /**
18
- * 初始化路由实例
19
- * @param isAsync 是否异步路由模式
20
- * @returns {RouterOptions}
21
- */
22
- function initRouter (isAsync) {
23
- const options = require('./async/config.async').default
24
- formatRoutes(options.routes)
25
- return options
26
- }
27
- export { loginIgnore, initRouter }
1
+ import { formatRoutes } from '@vue2-client/utils/routerUtil'
2
+
3
+ // 不需要登录拦截的路由配置
4
+ const loginIgnore = {
5
+ names: ['404', '403'], // 根据路由名称匹配
6
+ paths: ['/login', '/submitTicket'], // 根据路由fullPath匹配
7
+ /**
8
+ * 判断路由是否包含在该配置中
9
+ * @param route vue-router 的 route 对象
10
+ * @returns {boolean}
11
+ */
12
+ includes (route) {
13
+ return this.names.includes(route.name) || this.paths.includes(route.path)
14
+ }
15
+ }
16
+
17
+ /**
18
+ * 初始化路由实例
19
+ * @param isAsync 是否异步路由模式
20
+ * @returns {RouterOptions}
21
+ */
22
+ function initRouter (isAsync) {
23
+ const options = require('./async/config.async').default
24
+ formatRoutes(options.routes)
25
+ return options
26
+ }
27
+ export { loginIgnore, initRouter }
@@ -1,39 +1,39 @@
1
- import { commonApi, getColumnsJson, query, addOrModify, remove } from '@vue2-client/services/api/common'
2
- import { CustomerDetailsViewApi } from '@vue2-client/services/api/CustomerDetailsViewApi'
3
- import { DeviceBrandDetailsViewApi } from '@vue2-client/services/api/DeviceBrandDetailsViewApi'
4
- import { DeviceDetailsViewApi } from '@vue2-client/services/api/DeviceDetailsViewApi'
5
- import { DeviceTypeDetailsViewApi } from '@vue2-client/services/api/DeviceTypeDetailsViewApi'
6
- import { DictionaryDetailsViewApi } from '@vue2-client/services/api/DictionaryDetailsViewApi'
7
- import { EmployeeDetailsViewApi } from '@vue2-client/services/api/EmployeeDetailsViewApi'
8
- import { FormGroupEditApi } from '@vue2-client/services/api/FormGroupEditApi'
9
- import { InstructDetailsViewApi } from '@vue2-client/services/api/InstructDetailsViewApi'
10
- import { iotApi } from '@vue2-client/services/api/iot'
11
- import { LogDetailsViewApi } from '@vue2-client/services/api/LogDetailsViewApi'
12
- import { manageApi } from '@vue2-client/services/api/manage'
13
- import { MeterDetailsViewApi } from '@vue2-client/services/api/MeterDetailsViewApi'
14
- import { QueryParamsDetailsViewApi } from '@vue2-client/services/api/QueryParamsDetailsViewApi'
15
- import { get, post } from '@vue2-client/services/api/restTools'
16
- import { serviceApi } from '@vue2-client/services/api/service'
17
- import { TicketDetailsViewApi } from '@vue2-client/services/api/TicketDetailsViewApi'
18
- import { WebmeterAnalysisViewApi } from '@vue2-client/services/api/WebmeterAnalysisViewApi'
19
-
20
- export {
21
- commonApi, getColumnsJson, query, addOrModify, remove,
22
- CustomerDetailsViewApi,
23
- DeviceBrandDetailsViewApi,
24
- DeviceDetailsViewApi,
25
- DeviceTypeDetailsViewApi,
26
- DictionaryDetailsViewApi,
27
- EmployeeDetailsViewApi,
28
- FormGroupEditApi,
29
- InstructDetailsViewApi,
30
- iotApi,
31
- LogDetailsViewApi,
32
- manageApi,
33
- MeterDetailsViewApi,
34
- QueryParamsDetailsViewApi,
35
- get, post,
36
- serviceApi,
37
- TicketDetailsViewApi,
38
- WebmeterAnalysisViewApi
39
- }
1
+ import { commonApi, getColumnsJson, query, addOrModify, remove } from '@vue2-client/services/api/common'
2
+ import { CustomerDetailsViewApi } from '@vue2-client/services/api/CustomerDetailsViewApi'
3
+ import { DeviceBrandDetailsViewApi } from '@vue2-client/services/api/DeviceBrandDetailsViewApi'
4
+ import { DeviceDetailsViewApi } from '@vue2-client/services/api/DeviceDetailsViewApi'
5
+ import { DeviceTypeDetailsViewApi } from '@vue2-client/services/api/DeviceTypeDetailsViewApi'
6
+ import { DictionaryDetailsViewApi } from '@vue2-client/services/api/DictionaryDetailsViewApi'
7
+ import { EmployeeDetailsViewApi } from '@vue2-client/services/api/EmployeeDetailsViewApi'
8
+ import { FormGroupEditApi } from '@vue2-client/services/api/FormGroupEditApi'
9
+ import { InstructDetailsViewApi } from '@vue2-client/services/api/InstructDetailsViewApi'
10
+ import { iotApi } from '@vue2-client/services/api/iot'
11
+ import { LogDetailsViewApi } from '@vue2-client/services/api/LogDetailsViewApi'
12
+ import { manageApi } from '@vue2-client/services/api/manage'
13
+ import { MeterDetailsViewApi } from '@vue2-client/services/api/MeterDetailsViewApi'
14
+ import { QueryParamsDetailsViewApi } from '@vue2-client/services/api/QueryParamsDetailsViewApi'
15
+ import { get, post } from '@vue2-client/services/api/restTools'
16
+ import { serviceApi } from '@vue2-client/services/api/service'
17
+ import { TicketDetailsViewApi } from '@vue2-client/services/api/TicketDetailsViewApi'
18
+ import { WebmeterAnalysisViewApi } from '@vue2-client/services/api/WebmeterAnalysisViewApi'
19
+
20
+ export {
21
+ commonApi, getColumnsJson, query, addOrModify, remove,
22
+ CustomerDetailsViewApi,
23
+ DeviceBrandDetailsViewApi,
24
+ DeviceDetailsViewApi,
25
+ DeviceTypeDetailsViewApi,
26
+ DictionaryDetailsViewApi,
27
+ EmployeeDetailsViewApi,
28
+ FormGroupEditApi,
29
+ InstructDetailsViewApi,
30
+ iotApi,
31
+ LogDetailsViewApi,
32
+ manageApi,
33
+ MeterDetailsViewApi,
34
+ QueryParamsDetailsViewApi,
35
+ get, post,
36
+ serviceApi,
37
+ TicketDetailsViewApi,
38
+ WebmeterAnalysisViewApi
39
+ }
@@ -1,18 +1,18 @@
1
- const DeviceDetailsCountApi = {
2
- // 获取设备使用天数
3
- getDeviceUsedDaySum: '/webmeterapi/getDeviceUsedDaySum',
4
- // 获取设备累计上报次数和近七天上报情况
5
- getDeviceUploadTimesCount: '/webmeterapi/getDeviceUploadTimesCount',
6
- // 获取设备累计失联次数和近三个月失联情况
7
- getDeviceLostContactCount: '/webmeterapi/getDeviceLostContactCount',
8
- // 获取设备指令下发成功率
9
- getInstructRateOfSuccess: '/webmeterapi/getInstructRateOfSuccess',
10
- // 获取设备上报情况
11
- getDeviceUploadCountData: '/webmeterapi/getDeviceUploadCountData',
12
- // 获取设备失联情况
13
- getDeviceLostContactCountData: '/webmeterapi/getDeviceLostContactCountData',
14
- // 获取设备失联排行榜
15
- getDeviceLostContactRankData: '/webmeterapi/getDeviceLostContactRankData'
16
- }
17
-
18
- export { DeviceDetailsCountApi }
1
+ const DeviceDetailsCountApi = {
2
+ // 获取设备使用天数
3
+ getDeviceUsedDaySum: '/webmeterapi/getDeviceUsedDaySum',
4
+ // 获取设备累计上报次数和近七天上报情况
5
+ getDeviceUploadTimesCount: '/webmeterapi/getDeviceUploadTimesCount',
6
+ // 获取设备累计失联次数和近三个月失联情况
7
+ getDeviceLostContactCount: '/webmeterapi/getDeviceLostContactCount',
8
+ // 获取设备指令下发成功率
9
+ getInstructRateOfSuccess: '/webmeterapi/getInstructRateOfSuccess',
10
+ // 获取设备上报情况
11
+ getDeviceUploadCountData: '/webmeterapi/getDeviceUploadCountData',
12
+ // 获取设备失联情况
13
+ getDeviceLostContactCountData: '/webmeterapi/getDeviceLostContactCountData',
14
+ // 获取设备失联排行榜
15
+ getDeviceLostContactRankData: '/webmeterapi/getDeviceLostContactRankData'
16
+ }
17
+
18
+ export { DeviceDetailsCountApi }