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 | 37 | </a-button> | 
| 38 | 38 | </template> | 
| 39 | 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 | 55 | </template> | 
| 48 | 56 | <template #action="{ record }"> | 
| 49 | 57 | <TableAction | 
| ... | ... | @@ -88,7 +96,7 @@ | 
| 88 | 96 | import { useResetOrganizationTree, OrganizationIdTree } from '/@/views/common/organizationIdTree'; | 
| 89 | 97 | import { deleteAlarmConfig, queryAlarmConfig } from '/@/api/alarm/config/alarmConfig'; | 
| 90 | 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 | 100 | import { JsonPreview } from '/@/components/CodeEditor'; | 
| 93 | 101 | import { findDictItemByCode } from '/@/api/system/dict'; | 
| 94 | 102 | import { alarmContactGetPage } from '/@/api/device/deviceConfigApi'; | 
| ... | ... | @@ -97,6 +105,7 @@ | 
| 97 | 105 | import { putAlarmConfigStatus } from '/@/api/alarm/config/alarmConfig'; | 
| 98 | 106 | import { useMessage } from '/@/hooks/web/useMessage'; | 
| 99 | 107 | import { Authority } from '/@/components/Authority'; | 
| 108 | + import { usePermission } from '/@/hooks/web/usePermission'; | |
| 100 | 109 | |
| 101 | 110 | export default defineComponent({ | 
| 102 | 111 | components: { | 
| ... | ... | @@ -108,8 +117,10 @@ | 
| 108 | 117 | Switch, | 
| 109 | 118 | Authority, | 
| 110 | 119 | Popconfirm, | 
| 120 | + Tag, | |
| 111 | 121 | }, | 
| 112 | 122 | setup() { | 
| 123 | + const { hasPermission } = usePermission(); | |
| 113 | 124 | const searchInfo = reactive<Recordable>({}); | 
| 114 | 125 | const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); | 
| 115 | 126 | // 刷新 | 
| ... | ... | @@ -250,6 +261,7 @@ | 
| 250 | 261 | showAlarmContact, | 
| 251 | 262 | showMessageMode, | 
| 252 | 263 | statusChange, | 
| 264 | + hasPermission, | |
| 253 | 265 | }; | 
| 254 | 266 | }, | 
| 255 | 267 | }); | ... | ... | 
| ... | ... | @@ -52,7 +52,9 @@ | 
| 52 | 52 | <div class="mt-4" v-if="!isCustomer"> | 
| 53 | 53 | <a-button type="primary" class="mr-4" @click="copyTbDeviceId">复制设备ID</a-button> | 
| 54 | 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 | 58 | <ManageDeviceTokenModal @register="registerModal" /> | 
| 57 | 59 | </div> | 
| 58 | 60 | <div class="mt-4"> | 
| ... | ... | @@ -84,10 +86,10 @@ | 
| 84 | 86 | import { DeviceTypeEnum } from '/@/api/device/model/deviceModel'; | 
| 85 | 87 | import { useAuthDeviceDetail } from '../../hook/useAuthDeviceDetail'; | 
| 86 | 88 | import { useClipboard } from '@vueuse/core'; | 
| 87 | - | |
| 88 | 89 | import wz from '/@/assets/images/wz.png'; | 
| 89 | 90 | import { useAsyncQueue } from '../../../localtion/useAsyncQueue'; | 
| 90 | 91 | import locationImage from '/@/assets/icons/location.svg'; | 
| 92 | + import { Authority } from '/@/components/Authority'; | |
| 91 | 93 | |
| 92 | 94 | export default defineComponent({ | 
| 93 | 95 | components: { | 
| ... | ... | @@ -98,6 +100,7 @@ | 
| 98 | 100 | BasicModal, | 
| 99 | 101 | Tooltip, | 
| 100 | 102 | Empty, | 
| 103 | + Authority, | |
| 101 | 104 | }, | 
| 102 | 105 | props: { | 
| 103 | 106 | deviceDetail: { | ... | ... | 
| ... | ... | @@ -5,7 +5,9 @@ | 
| 5 | 5 | > | 
| 6 | 6 | <template #toolbar> | 
| 7 | 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 | 11 | </Space> | 
| 10 | 12 | </template> | 
| 11 | 13 | <template #recordContent="{ record }"> | 
| ... | ... | @@ -43,6 +45,7 @@ | 
| 43 | 45 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; | 
| 44 | 46 | import { BasicModal, useModal } from '/@/components/Modal'; | 
| 45 | 47 | import CommandIssuance from '../CommandIssuance.vue'; | 
| 48 | + import { Authority } from '/@/components/Authority'; | |
| 46 | 49 | |
| 47 | 50 | const props = defineProps({ | 
| 48 | 51 | fromId: { | ... | ... | 
| ... | ... | @@ -24,14 +24,16 @@ | 
| 24 | 24 | <Authority value="api:yt:device:import"> | 
| 25 | 25 | <Button type="primary" @click="handleBatchImport">导入</Button> | 
| 26 | 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 | 37 | </template> | 
| 36 | 38 | <template #img="{ record }"> | 
| 37 | 39 | <TableImg | 
| ... | ... | @@ -134,6 +136,7 @@ | 
| 134 | 136 | label: '分配客户', | 
| 135 | 137 | icon: 'mdi:account-arrow-right', | 
| 136 | 138 | ifShow: authBtn(role), | 
| 139 | + auth: 'api:yt:device:assign', | |
| 137 | 140 | onClick: handleDispatchCustomer.bind(null, record), | 
| 138 | 141 | }, | 
| 139 | 142 | { | ... | ... | 
| ... | ... | @@ -135,10 +135,14 @@ | 
| 135 | 135 | <Tabs.TabPane tab="详情" key="detail"> | 
| 136 | 136 | <Space> | 
| 137 | 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 | 146 | </Space> | 
| 143 | 147 | <div class="mt-3"> | 
| 144 | 148 | <Space> | ... | ... | 
| ... | ... | @@ -8,6 +8,7 @@ export enum PermissionDataFlowEnum { | 
| 8 | 8 | PERMISSION_GET = 'api:yt:convert:config:get', | 
| 9 | 9 | PERMISSION_DELETE = 'api:yt:convert:config:delete', | 
| 10 | 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 | 79 | /> | 
| 80 | 80 | </template> | 
| 81 | 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 | 97 | </template> | 
| 90 | 98 | </BasicTable> | 
| 91 | 99 | <DataFlowModal @register="registerModal" @success="handleSuccess" /> | 
| ... | ... | @@ -103,15 +111,18 @@ | 
| 103 | 111 | import { useMessage } from '/@/hooks/web/useMessage'; | 
| 104 | 112 | import { Authority } from '/@/components/Authority'; | 
| 105 | 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 | 115 | import { PermissionDataFlowEnum, BusinessDataFlowTextEnum } from './enum'; | 
| 108 | 116 | import { DataFlowModal } from './components/dataflowmodal'; | 
| 109 | 117 | import { defaultTableAttribute } from './config'; | 
| 118 | + import { usePermission } from '/@/hooks/web/usePermission'; | |
| 110 | 119 | |
| 111 | 120 | const { createMessage } = useMessage(); | 
| 112 | 121 | |
| 113 | 122 | const loading = ref(true); | 
| 114 | 123 | |
| 124 | + const { hasPermission } = usePermission(); | |
| 125 | + | |
| 115 | 126 | const handleSuccess = () => { | 
| 116 | 127 | reload(); | 
| 117 | 128 | }; | ... | ... | 
| ... | ... | @@ -50,13 +50,21 @@ | 
| 50 | 50 | </template> | 
| 51 | 51 | |
| 52 | 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 | 68 | </template> | 
| 61 | 69 | </BasicTable> | 
| 62 | 70 | <SceneLinkAgeDrawer @register="registerDrawer" @success="handleSuccess" /> | 
| ... | ... | @@ -72,16 +80,18 @@ | 
| 72 | 80 | screenLinkPagePutApi, | 
| 73 | 81 | } from '/@/api/ruleengine/ruleengineApi'; | 
| 74 | 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 | 84 | import { columns, searchFormSchema } from './config/config.data'; | 
| 77 | 85 | import { USER_INFO_KEY } from '/@/enums/cacheEnum'; | 
| 78 | 86 | import { getAuthCache } from '/@/utils/auth'; | 
| 79 | 87 | import SceneLinkAgeDrawer from './SceneLinkAgeDrawer.vue'; | 
| 80 | 88 | import { useMessage } from '/@/hooks/web/useMessage'; | 
| 81 | 89 | import { Authority } from '/@/components/Authority'; | 
| 90 | + import { usePermission } from '/@/hooks/web/usePermission'; | |
| 82 | 91 | |
| 83 | 92 | const userInfo: any = getAuthCache(USER_INFO_KEY); | 
| 84 | 93 | const userId = userInfo.userId; | 
| 94 | + const { hasPermission } = usePermission(); | |
| 85 | 95 | |
| 86 | 96 | const [registerDrawer, { openDrawer }] = useDrawer(); | 
| 87 | 97 | const [registerTable, { reload, setProps, setSelectedRowKeys }] = useTable({ | ... | ... | 
| ... | ... | @@ -17,13 +17,21 @@ | 
| 17 | 17 | </Authority> | 
| 18 | 18 | </template> | 
| 19 | 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 | 35 | </template> | 
| 28 | 36 | <template #action="{ record }"> | 
| 29 | 37 | <TableAction | 
| ... | ... | @@ -69,7 +77,7 @@ | 
| 69 | 77 | |
| 70 | 78 | <script lang="ts" setup> | 
| 71 | 79 | import { ref, nextTick } from 'vue'; | 
| 72 | - import { Switch, Popconfirm } from 'ant-design-vue'; | |
| 80 | + import { Switch, Popconfirm, Tag } from 'ant-design-vue'; | |
| 73 | 81 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 
| 74 | 82 | import { columns } from '../config/config.data'; | 
| 75 | 83 | import { getConvertApi, deleteTransformApi } from '/@/api/device/TransformScriptApi'; | 
| ... | ... | @@ -81,11 +89,14 @@ | 
| 81 | 89 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | 
| 82 | 90 | import { Authority } from '/@/components/Authority'; | 
| 83 | 91 | import { computed, unref } from 'vue'; | 
| 92 | + import { usePermission } from '/@/hooks/web/usePermission'; | |
| 84 | 93 | |
| 85 | 94 | const props = defineProps<{ searchInfo: Recordable }>(); | 
| 86 | 95 | |
| 87 | 96 | const getSearchInfo = computed(() => props.searchInfo); | 
| 88 | 97 | |
| 98 | + const { hasPermission } = usePermission(); | |
| 99 | + | |
| 89 | 100 | const handleSuccess = () => { | 
| 90 | 101 | reload(); | 
| 91 | 102 | }; | ... | ... |