Commit ca7e400aa3e26aba1ae3c827ca96ca8b83d0a961
Merge branch 'ft' into 'main_dev'
feat: 管理台新增部分缺失的权限标识 See merge request yunteng/thingskit-front!825
Showing
11 changed files
with
107 additions
and
47 deletions
@@ -37,13 +37,21 @@ | @@ -37,13 +37,21 @@ | ||
37 | </a-button> | 37 | </a-button> |
38 | </template> | 38 | </template> |
39 | <template #status="{ record }"> | 39 | <template #status="{ record }"> |
40 | - <Switch | ||
41 | - :checked="record.status === 1" | ||
42 | - :loading="record.pendingStatus" | ||
43 | - checkedChildren="启用" | ||
44 | - unCheckedChildren="禁用" | ||
45 | - @change="(checked:boolean)=>statusChange(checked,record)" | ||
46 | - /> | 40 | + <Authority value="api:yt:alarm:profile:status"> |
41 | + <Switch | ||
42 | + :checked="record.status === 1" | ||
43 | + :loading="record.pendingStatus" | ||
44 | + checkedChildren="启用" | ||
45 | + unCheckedChildren="禁用" | ||
46 | + @change="(checked:boolean)=>statusChange(checked,record)" | ||
47 | + /> | ||
48 | + </Authority> | ||
49 | + <Tag | ||
50 | + v-if="!hasPermission('api:yt:alarm:profile:status')" | ||
51 | + :color="record.status ? 'green' : 'red'" | ||
52 | + > | ||
53 | + {{ record.status ? '启用' : '禁用' }} | ||
54 | + </Tag> | ||
47 | </template> | 55 | </template> |
48 | <template #action="{ record }"> | 56 | <template #action="{ record }"> |
49 | <TableAction | 57 | <TableAction |
@@ -88,7 +96,7 @@ | @@ -88,7 +96,7 @@ | ||
88 | import { useResetOrganizationTree, OrganizationIdTree } from '/@/views/common/organizationIdTree'; | 96 | import { useResetOrganizationTree, OrganizationIdTree } from '/@/views/common/organizationIdTree'; |
89 | import { deleteAlarmConfig, queryAlarmConfig } from '/@/api/alarm/config/alarmConfig'; | 97 | import { deleteAlarmConfig, queryAlarmConfig } from '/@/api/alarm/config/alarmConfig'; |
90 | import { searchFormSchema, columns } from './config.data'; | 98 | import { searchFormSchema, columns } from './config.data'; |
91 | - import { Modal, Popconfirm } from 'ant-design-vue'; | 99 | + import { Modal, Popconfirm, Tag } from 'ant-design-vue'; |
92 | import { JsonPreview } from '/@/components/CodeEditor'; | 100 | import { JsonPreview } from '/@/components/CodeEditor'; |
93 | import { findDictItemByCode } from '/@/api/system/dict'; | 101 | import { findDictItemByCode } from '/@/api/system/dict'; |
94 | import { alarmContactGetPage } from '/@/api/device/deviceConfigApi'; | 102 | import { alarmContactGetPage } from '/@/api/device/deviceConfigApi'; |
@@ -97,6 +105,7 @@ | @@ -97,6 +105,7 @@ | ||
97 | import { putAlarmConfigStatus } from '/@/api/alarm/config/alarmConfig'; | 105 | import { putAlarmConfigStatus } from '/@/api/alarm/config/alarmConfig'; |
98 | import { useMessage } from '/@/hooks/web/useMessage'; | 106 | import { useMessage } from '/@/hooks/web/useMessage'; |
99 | import { Authority } from '/@/components/Authority'; | 107 | import { Authority } from '/@/components/Authority'; |
108 | + import { usePermission } from '/@/hooks/web/usePermission'; | ||
100 | 109 | ||
101 | export default defineComponent({ | 110 | export default defineComponent({ |
102 | components: { | 111 | components: { |
@@ -108,8 +117,10 @@ | @@ -108,8 +117,10 @@ | ||
108 | Switch, | 117 | Switch, |
109 | Authority, | 118 | Authority, |
110 | Popconfirm, | 119 | Popconfirm, |
120 | + Tag, | ||
111 | }, | 121 | }, |
112 | setup() { | 122 | setup() { |
123 | + const { hasPermission } = usePermission(); | ||
113 | const searchInfo = reactive<Recordable>({}); | 124 | const searchInfo = reactive<Recordable>({}); |
114 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); | 125 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); |
115 | // 刷新 | 126 | // 刷新 |
@@ -250,6 +261,7 @@ | @@ -250,6 +261,7 @@ | ||
250 | showAlarmContact, | 261 | showAlarmContact, |
251 | showMessageMode, | 262 | showMessageMode, |
252 | statusChange, | 263 | statusChange, |
264 | + hasPermission, | ||
253 | }; | 265 | }; |
254 | }, | 266 | }, |
255 | }); | 267 | }); |
@@ -52,7 +52,9 @@ | @@ -52,7 +52,9 @@ | ||
52 | <div class="mt-4" v-if="!isCustomer"> | 52 | <div class="mt-4" v-if="!isCustomer"> |
53 | <a-button type="primary" class="mr-4" @click="copyTbDeviceId">复制设备ID</a-button> | 53 | <a-button type="primary" class="mr-4" @click="copyTbDeviceId">复制设备ID</a-button> |
54 | <a-button type="primary" class="mr-4" @click="copyDeviceToken">复制访问令牌</a-button> | 54 | <a-button type="primary" class="mr-4" @click="copyDeviceToken">复制访问令牌</a-button> |
55 | - <a-button type="primary" class="mr-4" @click="manageDeviceToken">管理设备凭证</a-button> | 55 | + <Authority value="api:yt:device:equipment"> |
56 | + <a-button type="primary" class="mr-4" @click="manageDeviceToken">管理设备凭证</a-button> | ||
57 | + </Authority> | ||
56 | <ManageDeviceTokenModal @register="registerModal" /> | 58 | <ManageDeviceTokenModal @register="registerModal" /> |
57 | </div> | 59 | </div> |
58 | <div class="mt-4"> | 60 | <div class="mt-4"> |
@@ -84,10 +86,10 @@ | @@ -84,10 +86,10 @@ | ||
84 | import { DeviceTypeEnum } from '/@/api/device/model/deviceModel'; | 86 | import { DeviceTypeEnum } from '/@/api/device/model/deviceModel'; |
85 | import { useAuthDeviceDetail } from '../../hook/useAuthDeviceDetail'; | 87 | import { useAuthDeviceDetail } from '../../hook/useAuthDeviceDetail'; |
86 | import { useClipboard } from '@vueuse/core'; | 88 | import { useClipboard } from '@vueuse/core'; |
87 | - | ||
88 | import wz from '/@/assets/images/wz.png'; | 89 | import wz from '/@/assets/images/wz.png'; |
89 | import { useAsyncQueue } from '../../../localtion/useAsyncQueue'; | 90 | import { useAsyncQueue } from '../../../localtion/useAsyncQueue'; |
90 | import locationImage from '/@/assets/icons/location.svg'; | 91 | import locationImage from '/@/assets/icons/location.svg'; |
92 | + import { Authority } from '/@/components/Authority'; | ||
91 | 93 | ||
92 | export default defineComponent({ | 94 | export default defineComponent({ |
93 | components: { | 95 | components: { |
@@ -98,6 +100,7 @@ | @@ -98,6 +100,7 @@ | ||
98 | BasicModal, | 100 | BasicModal, |
99 | Tooltip, | 101 | Tooltip, |
100 | Empty, | 102 | Empty, |
103 | + Authority, | ||
101 | }, | 104 | }, |
102 | props: { | 105 | props: { |
103 | deviceDetail: { | 106 | deviceDetail: { |
@@ -5,7 +5,9 @@ | @@ -5,7 +5,9 @@ | ||
5 | > | 5 | > |
6 | <template #toolbar> | 6 | <template #toolbar> |
7 | <Space> | 7 | <Space> |
8 | - <Button type="primary" @click="openModal(true)">命令下发</Button> | 8 | + <Authority value="api:yt:device:rpc"> |
9 | + <Button type="primary" @click="openModal(true)">命令下发</Button> | ||
10 | + </Authority> | ||
9 | </Space> | 11 | </Space> |
10 | </template> | 12 | </template> |
11 | <template #recordContent="{ record }"> | 13 | <template #recordContent="{ record }"> |
@@ -43,6 +45,7 @@ | @@ -43,6 +45,7 @@ | ||
43 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; | 45 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; |
44 | import { BasicModal, useModal } from '/@/components/Modal'; | 46 | import { BasicModal, useModal } from '/@/components/Modal'; |
45 | import CommandIssuance from '../CommandIssuance.vue'; | 47 | import CommandIssuance from '../CommandIssuance.vue'; |
48 | + import { Authority } from '/@/components/Authority'; | ||
46 | 49 | ||
47 | const props = defineProps({ | 50 | const props = defineProps({ |
48 | fromId: { | 51 | fromId: { |
@@ -24,14 +24,16 @@ | @@ -24,14 +24,16 @@ | ||
24 | <Authority value="api:yt:device:import"> | 24 | <Authority value="api:yt:device:import"> |
25 | <Button type="primary" @click="handleBatchImport">导入</Button> | 25 | <Button type="primary" @click="handleBatchImport">导入</Button> |
26 | </Authority> | 26 | </Authority> |
27 | - <a-button | ||
28 | - v-if="authBtn(role)" | ||
29 | - type="primary" | ||
30 | - @click="handleBatchAssign" | ||
31 | - :disabled="!isExistOption" | ||
32 | - > | ||
33 | - 批量分配 | ||
34 | - </a-button> | 27 | + <Authority value="api:yt:device:assign"> |
28 | + <a-button | ||
29 | + v-if="authBtn(role)" | ||
30 | + type="primary" | ||
31 | + @click="handleBatchAssign" | ||
32 | + :disabled="!isExistOption" | ||
33 | + > | ||
34 | + 批量分配 | ||
35 | + </a-button> | ||
36 | + </Authority> | ||
35 | </template> | 37 | </template> |
36 | <template #img="{ record }"> | 38 | <template #img="{ record }"> |
37 | <TableImg | 39 | <TableImg |
@@ -134,6 +136,7 @@ | @@ -134,6 +136,7 @@ | ||
134 | label: '分配客户', | 136 | label: '分配客户', |
135 | icon: 'mdi:account-arrow-right', | 137 | icon: 'mdi:account-arrow-right', |
136 | ifShow: authBtn(role), | 138 | ifShow: authBtn(role), |
139 | + auth: 'api:yt:device:assign', | ||
137 | onClick: handleDispatchCustomer.bind(null, record), | 140 | onClick: handleDispatchCustomer.bind(null, record), |
138 | }, | 141 | }, |
139 | { | 142 | { |
@@ -135,10 +135,14 @@ | @@ -135,10 +135,14 @@ | ||
135 | <Tabs.TabPane tab="详情" key="detail"> | 135 | <Tabs.TabPane tab="详情" key="detail"> |
136 | <Space> | 136 | <Space> |
137 | <!-- <Button type="primary" @click="openDetailPage">打开详情页</Button> --> | 137 | <!-- <Button type="primary" @click="openDetailPage">打开详情页</Button> --> |
138 | - <Button type="primary" @click="downloadPackage" :disabled="!!otaRecord.url"> | ||
139 | - 下载包 | ||
140 | - </Button> | ||
141 | - <Button type="primary" @click="deletePackage" danger>删除包</Button> | 138 | + <Authority :value="OtaPermissionKey.DOWNLOAD"> |
139 | + <Button type="primary" @click="downloadPackage" :disabled="!!otaRecord.url"> | ||
140 | + 下载包 | ||
141 | + </Button> | ||
142 | + </Authority> | ||
143 | + <Authority :value="OtaPermissionKey.DELETE"> | ||
144 | + <Button type="primary" @click="deletePackage" danger>删除包</Button> | ||
145 | + </Authority> | ||
142 | </Space> | 146 | </Space> |
143 | <div class="mt-3"> | 147 | <div class="mt-3"> |
144 | <Space> | 148 | <Space> |
@@ -8,6 +8,7 @@ export enum PermissionDataFlowEnum { | @@ -8,6 +8,7 @@ export enum PermissionDataFlowEnum { | ||
8 | PERMISSION_GET = 'api:yt:convert:config:get', | 8 | PERMISSION_GET = 'api:yt:convert:config:get', |
9 | PERMISSION_DELETE = 'api:yt:convert:config:delete', | 9 | PERMISSION_DELETE = 'api:yt:convert:config:delete', |
10 | PERMISSION_UPDATE = 'api:yt:convert:config:update', | 10 | PERMISSION_UPDATE = 'api:yt:convert:config:update', |
11 | + PERMISSION_STATUS = 'api:yt:convert:config:status', | ||
11 | } | 12 | } |
12 | 13 | ||
13 | //业务文字描述配置枚举 | 14 | //业务文字描述配置枚举 |
@@ -79,13 +79,21 @@ | @@ -79,13 +79,21 @@ | ||
79 | /> | 79 | /> |
80 | </template> | 80 | </template> |
81 | <template #status="{ record }"> | 81 | <template #status="{ record }"> |
82 | - <Switch | ||
83 | - :checked="record.status === 1" | ||
84 | - :loading="record.pendingStatus" | ||
85 | - checkedChildren="启用" | ||
86 | - unCheckedChildren="禁用" | ||
87 | - @change="(checked:boolean)=>hanldeSwitch(checked,record)" | ||
88 | - /> | 82 | + <Authority :value="PermissionDataFlowEnum.PERMISSION_STATUS"> |
83 | + <Switch | ||
84 | + :checked="record.status === 1" | ||
85 | + :loading="record.pendingStatus" | ||
86 | + checkedChildren="启用" | ||
87 | + unCheckedChildren="禁用" | ||
88 | + @change="(checked:boolean)=>hanldeSwitch(checked,record)" | ||
89 | + /> | ||
90 | + </Authority> | ||
91 | + <Tag | ||
92 | + v-if="!hasPermission(PermissionDataFlowEnum.PERMISSION_STATUS)" | ||
93 | + :color="record.status ? 'green' : 'red'" | ||
94 | + > | ||
95 | + {{ record.status ? '启用' : '禁用' }} | ||
96 | + </Tag> | ||
89 | </template> | 97 | </template> |
90 | </BasicTable> | 98 | </BasicTable> |
91 | <DataFlowModal @register="registerModal" @success="handleSuccess" /> | 99 | <DataFlowModal @register="registerModal" @success="handleSuccess" /> |
@@ -103,15 +111,18 @@ | @@ -103,15 +111,18 @@ | ||
103 | import { useMessage } from '/@/hooks/web/useMessage'; | 111 | import { useMessage } from '/@/hooks/web/useMessage'; |
104 | import { Authority } from '/@/components/Authority'; | 112 | import { Authority } from '/@/components/Authority'; |
105 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | 113 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; |
106 | - import { Switch, Popconfirm } from 'ant-design-vue'; | 114 | + import { Switch, Popconfirm, Tag } from 'ant-design-vue'; |
107 | import { PermissionDataFlowEnum, BusinessDataFlowTextEnum } from './enum'; | 115 | import { PermissionDataFlowEnum, BusinessDataFlowTextEnum } from './enum'; |
108 | import { DataFlowModal } from './components/dataflowmodal'; | 116 | import { DataFlowModal } from './components/dataflowmodal'; |
109 | import { defaultTableAttribute } from './config'; | 117 | import { defaultTableAttribute } from './config'; |
118 | + import { usePermission } from '/@/hooks/web/usePermission'; | ||
110 | 119 | ||
111 | const { createMessage } = useMessage(); | 120 | const { createMessage } = useMessage(); |
112 | 121 | ||
113 | const loading = ref(true); | 122 | const loading = ref(true); |
114 | 123 | ||
124 | + const { hasPermission } = usePermission(); | ||
125 | + | ||
115 | const handleSuccess = () => { | 126 | const handleSuccess = () => { |
116 | reload(); | 127 | reload(); |
117 | }; | 128 | }; |
@@ -50,13 +50,21 @@ | @@ -50,13 +50,21 @@ | ||
50 | </template> | 50 | </template> |
51 | 51 | ||
52 | <template #status="{ record }"> | 52 | <template #status="{ record }"> |
53 | - <Switch | ||
54 | - :checked="record.status === 1" | ||
55 | - :loading="record.pendingStatus" | ||
56 | - checkedChildren="启用" | ||
57 | - unCheckedChildren="禁用" | ||
58 | - @change="(checked:boolean)=>statusChange(checked,record)" | ||
59 | - /> | 53 | + <Authority value="api:yt:sceneLinkage:status"> |
54 | + <Switch | ||
55 | + :checked="record.status === 1" | ||
56 | + :loading="record.pendingStatus" | ||
57 | + checkedChildren="启用" | ||
58 | + unCheckedChildren="禁用" | ||
59 | + @change="(checked:boolean)=>statusChange(checked,record)" | ||
60 | + /> | ||
61 | + </Authority> | ||
62 | + <Tag | ||
63 | + v-if="!hasPermission('api:yt:sceneLinkage:status')" | ||
64 | + :color="record.status ? 'green' : 'red'" | ||
65 | + > | ||
66 | + {{ record.status ? '启用' : '禁用' }} | ||
67 | + </Tag> | ||
60 | </template> | 68 | </template> |
61 | </BasicTable> | 69 | </BasicTable> |
62 | <SceneLinkAgeDrawer @register="registerDrawer" @success="handleSuccess" /> | 70 | <SceneLinkAgeDrawer @register="registerDrawer" @success="handleSuccess" /> |
@@ -72,16 +80,18 @@ | @@ -72,16 +80,18 @@ | ||
72 | screenLinkPagePutApi, | 80 | screenLinkPagePutApi, |
73 | } from '/@/api/ruleengine/ruleengineApi'; | 81 | } from '/@/api/ruleengine/ruleengineApi'; |
74 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | 82 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; |
75 | - import { Switch, Popconfirm } from 'ant-design-vue'; | 83 | + import { Switch, Popconfirm, Tag } from 'ant-design-vue'; |
76 | import { columns, searchFormSchema } from './config/config.data'; | 84 | import { columns, searchFormSchema } from './config/config.data'; |
77 | import { USER_INFO_KEY } from '/@/enums/cacheEnum'; | 85 | import { USER_INFO_KEY } from '/@/enums/cacheEnum'; |
78 | import { getAuthCache } from '/@/utils/auth'; | 86 | import { getAuthCache } from '/@/utils/auth'; |
79 | import SceneLinkAgeDrawer from './SceneLinkAgeDrawer.vue'; | 87 | import SceneLinkAgeDrawer from './SceneLinkAgeDrawer.vue'; |
80 | import { useMessage } from '/@/hooks/web/useMessage'; | 88 | import { useMessage } from '/@/hooks/web/useMessage'; |
81 | import { Authority } from '/@/components/Authority'; | 89 | import { Authority } from '/@/components/Authority'; |
90 | + import { usePermission } from '/@/hooks/web/usePermission'; | ||
82 | 91 | ||
83 | const userInfo: any = getAuthCache(USER_INFO_KEY); | 92 | const userInfo: any = getAuthCache(USER_INFO_KEY); |
84 | const userId = userInfo.userId; | 93 | const userId = userInfo.userId; |
94 | + const { hasPermission } = usePermission(); | ||
85 | 95 | ||
86 | const [registerDrawer, { openDrawer }] = useDrawer(); | 96 | const [registerDrawer, { openDrawer }] = useDrawer(); |
87 | const [registerTable, { reload, setProps, setSelectedRowKeys }] = useTable({ | 97 | const [registerTable, { reload, setProps, setSelectedRowKeys }] = useTable({ |
@@ -17,13 +17,21 @@ | @@ -17,13 +17,21 @@ | ||
17 | </Authority> | 17 | </Authority> |
18 | </template> | 18 | </template> |
19 | <template #status="{ record }"> | 19 | <template #status="{ record }"> |
20 | - <Switch | ||
21 | - :checked="record.status === 1" | ||
22 | - :loading="record.pendingStatus" | ||
23 | - checkedChildren="启用" | ||
24 | - unCheckedChildren="禁用" | ||
25 | - @change="(checked:boolean)=>statusChange(checked,record)" | ||
26 | - /> | 20 | + <Authority value="api:yt:convert:js:status"> |
21 | + <Switch | ||
22 | + :checked="record.status === 1" | ||
23 | + :loading="record.pendingStatus" | ||
24 | + checkedChildren="启用" | ||
25 | + unCheckedChildren="禁用" | ||
26 | + @change="(checked:boolean)=>statusChange(checked,record)" | ||
27 | + /> | ||
28 | + </Authority> | ||
29 | + <Tag | ||
30 | + v-if="!hasPermission('api:yt:convert:js:status')" | ||
31 | + :color="record.status ? 'green' : 'red'" | ||
32 | + > | ||
33 | + {{ record.status ? '启用' : '禁用' }} | ||
34 | + </Tag> | ||
27 | </template> | 35 | </template> |
28 | <template #action="{ record }"> | 36 | <template #action="{ record }"> |
29 | <TableAction | 37 | <TableAction |
@@ -69,7 +77,7 @@ | @@ -69,7 +77,7 @@ | ||
69 | 77 | ||
70 | <script lang="ts" setup> | 78 | <script lang="ts" setup> |
71 | import { ref, nextTick } from 'vue'; | 79 | import { ref, nextTick } from 'vue'; |
72 | - import { Switch, Popconfirm } from 'ant-design-vue'; | 80 | + import { Switch, Popconfirm, Tag } from 'ant-design-vue'; |
73 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 81 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
74 | import { columns } from '../config/config.data'; | 82 | import { columns } from '../config/config.data'; |
75 | import { getConvertApi, deleteTransformApi } from '/@/api/device/TransformScriptApi'; | 83 | import { getConvertApi, deleteTransformApi } from '/@/api/device/TransformScriptApi'; |
@@ -81,11 +89,14 @@ | @@ -81,11 +89,14 @@ | ||
81 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | 89 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; |
82 | import { Authority } from '/@/components/Authority'; | 90 | import { Authority } from '/@/components/Authority'; |
83 | import { computed, unref } from 'vue'; | 91 | import { computed, unref } from 'vue'; |
92 | + import { usePermission } from '/@/hooks/web/usePermission'; | ||
84 | 93 | ||
85 | const props = defineProps<{ searchInfo: Recordable }>(); | 94 | const props = defineProps<{ searchInfo: Recordable }>(); |
86 | 95 | ||
87 | const getSearchInfo = computed(() => props.searchInfo); | 96 | const getSearchInfo = computed(() => props.searchInfo); |
88 | 97 | ||
98 | + const { hasPermission } = usePermission(); | ||
99 | + | ||
89 | const handleSuccess = () => { | 100 | const handleSuccess = () => { |
90 | reload(); | 101 | reload(); |
91 | }; | 102 | }; |
@@ -133,6 +133,7 @@ | @@ -133,6 +133,7 @@ | ||
133 | text: '详情', | 133 | text: '详情', |
134 | event: DropMenuEvent.DETAIL, | 134 | event: DropMenuEvent.DETAIL, |
135 | icon: 'ant-design:eye-outlined', | 135 | icon: 'ant-design:eye-outlined', |
136 | + auth: PermissionEnum.DETAIL, | ||
136 | onClick: emit.bind(null, 'detail', getRecord), | 137 | onClick: emit.bind(null, 'detail', getRecord), |
137 | }, | 138 | }, |
138 | { | 139 | { |
@@ -7,6 +7,7 @@ export enum PermissionEnum { | @@ -7,6 +7,7 @@ export enum PermissionEnum { | ||
7 | DELETE = 'api:yt:task_center:delete', | 7 | DELETE = 'api:yt:task_center:delete', |
8 | ALLOW = 'api:yt:task_center:cancel:allow', | 8 | ALLOW = 'api:yt:task_center:cancel:allow', |
9 | EXECUTE = 'api:yt:task_center:immediate:execute', | 9 | EXECUTE = 'api:yt:task_center:immediate:execute', |
10 | + DETAIL = 'api:yt:task_center:get', | ||
10 | } | 11 | } |
11 | 12 | ||
12 | export enum FormFieldsEnum { | 13 | export enum FormFieldsEnum { |