Files
as-partner-frontend/src/views/modules/manage/partner-device.vue
2026-07-26 12:54:46 +08:00

134 lines
4.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="mod-partner-device">
<el-form :inline="true" :model="dataForm" @keyup.enter="getDataList()">
<el-form-item>
<el-select v-model="dataForm.partnerId" placeholder="合作商" clearable filterable style="width:180px">
<el-option v-for="p in partnerOptions" :key="p.id" :label="p.name" :value="p.partnerId"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-input v-model="dataForm.deviceName" placeholder="设备名称" clearable style="width:160px"></el-input>
</el-form-item>
<el-form-item>
<el-input v-model="dataForm.mac" placeholder="MAC地址" clearable style="width:160px"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
</el-form-item>
</el-form>
<div class="table-page-wrap">
<el-table :data="dataList" border v-loading="dataListLoading" style="width: 100%">
<el-table-column type="index" header-align="center" align="center" width="60" label="序号" />
<el-table-column header-align="center" align="center" min-width="140" label="合作商">
<template #default="scope">{{ partnerNameOf(scope.row.partnerId) }}</template>
</el-table-column>
<el-table-column prop="deviceName" header-align="center" align="center" min-width="140" label="设备名称" />
<el-table-column prop="mac" header-align="center" align="center" width="140" label="MAC" />
<el-table-column prop="deviceSn" header-align="center" align="center" min-width="160" label="设备SN" show-overflow-tooltip />
<el-table-column prop="deviceModel" header-align="center" align="center" width="120" label="型号" />
<el-table-column prop="status" header-align="center" align="center" width="100" label="状态">
<template #default="scope">
<el-tag v-if="scope.row.status === 'ACTIVE'" size="small" type="success">启用</el-tag>
<el-tag v-else-if="scope.row.status === 'INACTIVE'" size="small" type="danger">禁用</el-tag>
<el-tag v-else size="small">{{ scope.row.status }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="storeName" header-align="center" align="center" min-width="140" label="绑定门店">
<template #default="scope">{{ scope.row.storeName || '-' }}</template>
</el-table-column>
<el-table-column prop="createdAt" header-align="center" align="center" width="170" label="注册时间" />
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</div>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted } from 'vue'
import { getDeviceList, type DeviceInfo } from '@/api/manage/device'
import { getPartnerList, type PartnerInfo } from '@/api/manage/partner'
interface DataForm {
partnerId: string | null
deviceName: string
mac: string
}
const dataForm = reactive<DataForm>({ partnerId: null, deviceName: '', mac: '' })
const dataList = ref<DeviceInfo[]>([])
const pageIndex = ref<number>(1)
const pageSize = ref<number>(10)
const totalPage = ref<number>(0)
const dataListLoading = ref<boolean>(false)
const partnerOptions = ref<PartnerInfo[]>([])
async function loadPartnerOptions (): Promise<void> {
try {
const res = await getPartnerList({ page: 1, limit: 500 })
if (res && res.code === 0) partnerOptions.value = res.data?.page?.list || []
} catch {
partnerOptions.value = []
}
}
function partnerNameOf (partnerId?: string): string {
if (!partnerId) return '-'
const p = partnerOptions.value.find(i => i.partnerId === partnerId)
return p?.name || String(partnerId)
}
async function getDataList (): Promise<void> {
dataListLoading.value = true
try {
// 固定 source=PARTNER,只查第三方接口注册的设备
const res = await getDeviceList({
page: pageIndex.value,
limit: pageSize.value,
source: 'PARTNER',
partnerId: dataForm.partnerId ?? undefined,
deviceName: dataForm.deviceName || undefined,
mac: dataForm.mac || undefined
})
if (res && res.code === 0) {
dataList.value = res.data?.page?.list || []
totalPage.value = res.data?.page?.totalCount || 0
} else {
dataList.value = []
totalPage.value = 0
}
} finally {
dataListLoading.value = false
}
}
function sizeChangeHandle (val: number): void {
pageSize.value = val
pageIndex.value = 1
getDataList()
}
function currentChangeHandle (val: number): void {
pageIndex.value = val
getDataList()
}
onMounted(() => {
loadPartnerOptions()
getDataList()
})
</script>
<style scoped>
.mod-partner-device {
padding: 10px;
}
</style>