| | |
| | | |
| | | instance.interceptors.response.use( |
| | | response => { |
| | | |
| | | |
| | | // console.info('URL: ' + response.config.baseURL + response.config.url, '\nData: ', response.data, '\nResponse:', response) |
| | | if (response.data.code && !response.data.success) { |
| | | message.error(response.data.message) |
| | | } |
| | | |
| | | //处理消息返回 |
| | | // if (response.data.code && !response.data.success) { |
| | | // message.error(response.data.message) |
| | | // } |
| | | if (response.data.code != 5000) { |
| | | message.error(response.data.message) |
| | | } |
| | | return response |
| | | }, |
| | | err => { |
| | |
| | | } |
| | | |
| | | export interface IPage { |
| | | page: number; |
| | | total: number; |
| | | page_size: number; |
| | | page?: number; |
| | | total?: number; |
| | | page_size?: number; |
| | | |
| | | current?:number; |
| | | size?:number; |
| | | } |
| | | |
| | | export interface IListWorkspaceResponse<T> { |
| | |
| | | import request, { CommonListResponse, IListWorkspaceResponse, IPage, IWorkspaceResponse } from '/@/api/http/request' |
| | | import { Device } from '/@/types/device' |
| | | |
| | | const HTTP_PREFIX = 'system/auth' |
| | | const HTTP_PREFIX = 'api/system' |
| | | |
| | | // login |
| | | export interface LoginBody { |
| | |
| | | return result.data |
| | | } |
| | | |
| | | export const getUserPage = async function (params: any, body: IPage): Promise<CommonListResponse<any>> { |
| | | |
| | | console.log(params,"++++++++++++++") |
| | | |
| | | const url = `${HTTP_PREFIX}/user/page` |
| | | const result = await request.get(url,{params:{...params,pageNum:body.current,pageSize:body.size}}) |
| | | return result.data |
| | | } |
| | | |
| | | |
| | | |
| | | export const updateUserInfo = async function (wid: string, user_id: string, body: {}): Promise<IWorkspaceResponse<any>> { |
| | | const url = `${HTTP_PREFIX}/users/${wid}/users/${user_id}` |
| | | const result = await request.put(url, body) |
| | |
| | | return result.data |
| | | } |
| | | |
| | | /** |
| | | * 获取设备信息 |
| | | * @param params |
| | | */ |
| | | export const getDeviceList = async function (params:any): Promise<IListWorkspaceResponse<Device>> { |
| | | const url = `${HTTP_PREFIX}/manage/device/getPage` |
| | | const result = await request.get(url,{params}) |
| | | return result.data |
| | | } |
| | | |
| | | |
| | | |
| | | export const updateDevice = async function (body: {}, workspace_id: string, device_sn: string): Promise<IWorkspaceResponse<any>> { |
| | | const url = `${HTTP_PREFIX}/devices/${workspace_id}/devices/${device_sn}` |
| | | const result = await request.put(url, body) |
| | |
| | | 机场 |
| | | </a-menu-item> |
| | | </a-menu> |
| | | |
| | | <div class="device-table-wrap table flex-display flex-column"> |
| | | <a-table :columns="columns" :data-source="data.device" :pagination="paginationProp" @change="refreshData" row-key="device_sn" :expandedRowKeys="expandRows" |
| | | :row-selection="rowSelection" :rowClassName="rowClassName" :scroll="{ x: '100%', y: 600 }" |
| | |
| | | </template> |
| | | </div> |
| | | </template> |
| | | |
| | | <template v-for="col in ['sn', 'workspace']" #[col]="{ text }" :key="col"> |
| | | <a-tooltip :title="text"> |
| | | <span>{{ text }}</span> |
| | |
| | | :device="currentDevice"> |
| | | </DeviceHmsDrawer> |
| | | </div> |
| | | |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { ColumnProps, TableState } from 'ant-design-vue/lib/table/interface' |
| | | import { h, onMounted, reactive, ref, UnwrapRef } from 'vue' |
| | | import { IPage } from '/@/api/http/type' |
| | | import { BindBody, bindDevice, getBindingDevices, unbindDevice, updateDevice } from '/@/api/manage' |
| | | import { BindBody, bindDevice, getBindingDevices, getDeviceList, unbindDevice, updateDevice } from '/@/api/manage' |
| | | import { EDeviceTypeName, ELocalStorageKey } from '/@/types' |
| | | import { EditOutlined, CheckOutlined, CloseOutlined, DeleteOutlined, FileSearchOutlined, CloudServerOutlined } from '@ant-design/icons-vue' |
| | | import { Device, DeviceFirmwareStatusEnum } from '/@/types/device' |
| | |
| | | const deleteTip = ref<boolean>(false) |
| | | const deleteSn = ref<string>() |
| | | const columns: ColumnProps[] = [ |
| | | { title: '设备型号', dataIndex: 'device_name', width: 100, className: 'titleStyle' }, |
| | | { title: '设备SN', dataIndex: 'device_sn', width: 100, className: 'titleStyle', ellipsis: true, slots: { customRender: 'sn' } }, |
| | | { title: '设备型号', dataIndex: 'deviceName', width: 100, className: 'titleStyle' }, |
| | | { title: '设备SN', dataIndex: 'deviceSn', width: 100, className: 'titleStyle', ellipsis: true, slots: { customRender: 'sn' } }, |
| | | { |
| | | title: '设备组织名称', |
| | | dataIndex: 'nickname', |
| | |
| | | ellipsis: true, |
| | | slots: { customRender: 'nickname' } |
| | | }, |
| | | { title: '固件版本', dataIndex: 'firmware_version', width: 150, className: 'titleStyle', slots: { customRender: 'firmware_version' } }, |
| | | { title: '固件版本', dataIndex: 'firmwareVersion', width: 150, className: 'titleStyle', slots: { customRender: 'firmware_version' } }, |
| | | { title: '在线状态', dataIndex: 'status', width: 100, className: 'titleStyle', slots: { customRender: 'status' } }, |
| | | { |
| | | title: '所属项目', |
| | | dataIndex: 'workspace_name', |
| | | dataIndex: 'workspaceName', |
| | | width: 100, |
| | | className: 'titleStyle', |
| | | ellipsis: true, |
| | |
| | | return obj |
| | | } |
| | | }, |
| | | { title: '加入组织时间', dataIndex: 'bound_time', width: 150, sorter: (a: Device, b: Device) => a.bound_time.localeCompare(b.bound_time), className: 'titleStyle' }, |
| | | { title: '在线时间', dataIndex: 'login_time', width: 150, sorter: (a: Device, b: Device) => a.login_time.localeCompare(b.login_time), className: 'titleStyle' }, |
| | | { title: '加入组织时间', dataIndex: 'boundTime', width: 150, sorter: (a: Device, b: Device) => a.bound_time.localeCompare(b.bound_time), className: 'titleStyle' }, |
| | | { title: '在线时间', dataIndex: 'loginTime', width: 150, sorter: (a: Device, b: Device) => a.login_time.localeCompare(b.login_time), className: 'titleStyle' }, |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'actions', |
| | |
| | | // 获取分页信息 |
| | | function getPaginationBody () { |
| | | return { |
| | | page: paginationProp.current, |
| | | page_size: paginationProp.pageSize |
| | | current: paginationProp.current, |
| | | size: paginationProp.pageSize |
| | | } as IPage |
| | | } |
| | | |
| | |
| | | useDeviceUpgradeEvent(onDeviceUpgradeWs) |
| | | |
| | | // 获取设备列表信息 |
| | | function getDevices (domain: number, closeLoading?: boolean) { |
| | | if (!closeLoading) { |
| | | loading.value = true |
| | | } |
| | | // getBindingDevices(workspaceId, getPaginationBody(), domain).then(res => { |
| | | // if (res.code !== 0) { |
| | | // return |
| | | // } |
| | | // const resData: Device[] = res.data.list |
| | | // expandRows.value = [] |
| | | // resData.forEach((val: any) => { |
| | | // if (val.children) { |
| | | // val.children = [val.children] |
| | | // } |
| | | // if (judgeCurrentType(EDeviceTypeName.Dock)) { |
| | | // expandRows.value.push(val.device_sn) |
| | | // } |
| | | // }) |
| | | // data.device = resData |
| | | // paginationProp.total = res.data.pagination.total |
| | | // paginationProp.current = res.data.pagination.page |
| | | // paginationProp.pageSize = res.data.pagination.page_size |
| | | // loading.value = false |
| | | // }) |
| | | function getDevices (params:any) { |
| | | loading.value = true |
| | | const paginationBody = getPaginationBody() |
| | | |
| | | getDeviceList(Object.assign(params, paginationBody)).then(res => { |
| | | if (res.code !== 5000) { |
| | | return |
| | | } |
| | | |
| | | console.log(res, '++++++++++') |
| | | const list = res.data.records |
| | | data.device = list |
| | | |
| | | loading.value = false |
| | | }).catch(err => { |
| | | console.log('错误:', err) |
| | | loading.value = false |
| | | }) |
| | | } |
| | | |
| | | function refreshData (page: Pagination) { |
| | |
| | | import { TableState } from 'ant-design-vue/lib/table/interface' |
| | | import { onMounted, reactive, Ref, ref, UnwrapRef } from 'vue' |
| | | import { IPage } from '/@/api/http/type' |
| | | import { getAllUsersInfo, updateUserInfo } from '/@/api/manage' |
| | | import { getAllUsersInfo, getUserPage, updateUserInfo } from '/@/api/manage' |
| | | import { ELocalStorageKey } from '/@/types' |
| | | import { EditOutlined, DeleteOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons-vue' |
| | | import { useMyStore } from '/@/store' |
| | | |
| | | export interface Member { |
| | | user_id: string |
| | |
| | | } |
| | | const columns = [ |
| | | { title: '账号', dataIndex: 'username', width: 150, sorter: (a: Member, b: Member) => a.username.localeCompare(b.username), className: 'titleStyle' }, |
| | | { title: '人员组织名称', dataIndex: 'organization_name', sorter: (a: Member, b: Member) => a.organization_name.localeCompare(b.organization_name), width: 150, className: 'titleStyle' }, |
| | | { title: '用户角色', dataIndex: 'user_role', width: 150, className: 'titleStyle', slots: { customRender: 'user_role' } }, |
| | | { title: '所属项目', dataIndex: 'project', width: 150, className: 'titleStyle' }, |
| | | { title: '人员组织名称', dataIndex: 'deptName', sorter: (a: Member, b: Member) => a.organization_name.localeCompare(b.organization_name), width: 150, className: 'titleStyle' }, |
| | | { title: '用户角色', dataIndex: 'roleName', width: 150, className: 'titleStyle', slots: { customRender: 'user_role' } }, |
| | | { title: '所属项目', dataIndex: 'projectName', width: 150, className: 'titleStyle' }, |
| | | { title: '加入方式', dataIndex: 'join_way', width: 150, className: 'titleStyle', slots: { customRender: 'join_way' } }, |
| | | { title: '加入时间', dataIndex: 'create_time', width: 150, sorter: (a: Member, b: Member) => a.create_time.localeCompare(b.create_time), className: 'titleStyle' }, |
| | | { title: '加入时间', dataIndex: 'createTime', width: 150, sorter: (a: Member, b: Member) => a.create_time.localeCompare(b.create_time), className: 'titleStyle' }, |
| | | { title: '操作', dataIndex: 'action', width: 70, className: 'titleStyle', slots: { customRender: 'action' } }, |
| | | ] |
| | | |
| | |
| | | page_size: 50 |
| | | } |
| | | const workspaceId: string = localStorage.getItem(ELocalStorageKey.WorkspaceId)! |
| | | const store = useMyStore() |
| | | const projectId:string = store.state.common.projectId |
| | | |
| | | onMounted(() => { |
| | | // getAllUsers(workspaceId, body) |
| | | getAllUsers({ projectId }, body) |
| | | }) |
| | | |
| | | function refreshData (page: Pagination) { |
| | | body.page = page?.current! |
| | | body.page_size = page?.pageSize! |
| | | getAllUsers(workspaceId, body) |
| | | getAllUsers({ projectId }, body) |
| | | } |
| | | |
| | | function getAllUsers (workspaceId: string, page: IPage) { |
| | | getAllUsersInfo(workspaceId, page).then(res => { |
| | | const userList: Member[] = res.data.list |
| | | data.member = userList |
| | | paginationProp.total = res.data.pagination.total |
| | | paginationProp.current = res.data.pagination.page |
| | | function getAllUsers (params:any, page: IPage) { |
| | | getUserPage(params, page).then(res => { |
| | | const resData = res.data |
| | | data.member = resData.list |
| | | |
| | | paginationProp.total = resData.total |
| | | paginationProp.current = resData.pageNum |
| | | }).catch(err => { |
| | | console.log(err) |
| | | }) |
| | | } |
| | | |
| | |
| | | onMounted(() => { |
| | | const parent = document.getElementsByClassName('scrollbar').item(0)?.parentNode as HTMLDivElement |
| | | height.value = document.body.clientHeight - parent.firstElementChild!.clientHeight |
| | | // getWaylines() |
| | | getWaylines() |
| | | |
| | | // const key = setInterval(() => { |
| | | // const data = document.getElementById('data')?.lastElementChild as HTMLDivElement |
| | | // if (pagination.total === 0 || Math.ceil(pagination.total / pagination.page_size) <= pagination.page || height.value <= data?.clientHeight + data?.offsetTop) { |
| | | // clearInterval(key) |
| | | // return |
| | | // } |
| | | // pagination.page++ |
| | | // getWaylines() |
| | | // }, 1000) |
| | | const key = setInterval(() => { |
| | | const data = document.getElementById('data')?.lastElementChild as HTMLDivElement |
| | | if (pagination.total === 0 || Math.ceil(pagination.total / pagination.page_size) <= pagination.page || height.value <= data?.clientHeight + data?.offsetTop) { |
| | | clearInterval(key) |
| | | return |
| | | } |
| | | pagination.page++ |
| | | getWaylines() |
| | | }, 1000) |
| | | }) |
| | | |
| | | function getWaylines () { |
| | |
| | | // store.commit('SET_SELECT_WAYLINE_INFO', wayline) |
| | | } |
| | | |
| | | /** |
| | | * 加载kml文件 |
| | | * @param file |
| | | */ |
| | | function initKmlFile (file:string) { |
| | | const options = { |
| | | camera: global.$viewer.scene.camera, |
| | |
| | | }, |
| | | }) |
| | | |
| | | global.$viewer.flyTo(lineEntity) |
| | | global.$viewer.flyTo(lineEntity, { |
| | | offset: new Cesium.HeadingPitchRange(0, -90, 1000) |
| | | }) |
| | | }) |
| | | } |
| | | |