2025-03-05 23:13:24 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="welcome">
|
2025-03-14 23:48:59 +08:00
|
|
|
|
<!-- 公共头部 -->
|
2025-03-19 18:13:03 +08:00
|
|
|
|
<HeaderBar :devices="devices" @search-result="handleSearchResult" />
|
2025-03-14 23:48:59 +08:00
|
|
|
|
<el-main style="padding: 20px;display: flex;flex-direction: column;">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<!-- 首页内容 -->
|
2025-03-05 23:13:24 +08:00
|
|
|
|
<div class="add-device">
|
|
|
|
|
|
<div class="add-device-bg">
|
2025-03-14 23:48:59 +08:00
|
|
|
|
<div class="hellow-text" style="margin-top: 30px;">
|
|
|
|
|
|
您好,小智
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="hellow-text">
|
|
|
|
|
|
让我们度过
|
|
|
|
|
|
<div style="display: inline-block;color: #5778FF;">
|
2025-03-05 23:13:24 +08:00
|
|
|
|
美好的一天!
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="hi-hint">
|
2025-03-14 23:48:59 +08:00
|
|
|
|
Hello, Let's have a wonderful day!
|
|
|
|
|
|
</div>
|
2025-03-05 23:13:24 +08:00
|
|
|
|
<div class="add-device-btn" @click="showAddDialog">
|
|
|
|
|
|
<div class="left-add">
|
2025-03-18 21:49:57 +08:00
|
|
|
|
添加智能体
|
2025-03-05 23:13:24 +08:00
|
|
|
|
</div>
|
2025-03-14 23:48:59 +08:00
|
|
|
|
<div style="width: 23px;height: 13px;background: #5778ff;margin-left: -10px;" />
|
2025-03-05 23:13:24 +08:00
|
|
|
|
<div class="right-add">
|
2025-03-18 21:49:57 +08:00
|
|
|
|
<i class="el-icon-right" style="font-size: 20px;color: #fff;" />
|
2025-03-05 23:13:24 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2025-03-19 18:13:03 +08:00
|
|
|
|
<div style="display: flex;flex-wrap: wrap;margin-top: 20px;gap: 20px;justify-content: flex-start;box-sizing: border-box;">
|
2025-03-24 09:16:48 +08:00
|
|
|
|
<DeviceItem v-for="(item,index) in devices" :key="index" :device="item"
|
|
|
|
|
|
@configure="goToRoleConfig"
|
|
|
|
|
|
@deviceManage="handleDeviceManage"
|
|
|
|
|
|
@delete="handleDeleteAgent"
|
|
|
|
|
|
/>
|
2025-03-05 23:13:24 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2025-03-14 23:48:59 +08:00
|
|
|
|
<div style="font-size: 12px;font-weight: 400;margin-top: auto;padding-top: 30px;color: #979db1;">
|
2025-03-07 21:19:41 +08:00
|
|
|
|
©2025 xiaozhi-esp32-server
|
|
|
|
|
|
</div>
|
2025-03-18 21:49:57 +08:00
|
|
|
|
<AddWisdomBodyDialog :visible.sync="addDeviceDialogVisible" @confirm="handleWisdomBodyAdded" />
|
2025-03-05 23:13:24 +08:00
|
|
|
|
</el-main>
|
|
|
|
|
|
</div>
|
2025-03-14 23:48:59 +08:00
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
2025-03-14 23:48:59 +08:00
|
|
|
|
import DeviceItem from '@/components/DeviceItem.vue'
|
2025-03-18 21:49:57 +08:00
|
|
|
|
import AddWisdomBodyDialog from '@/components/AddWisdomBodyDialog.vue'
|
2025-03-14 23:48:59 +08:00
|
|
|
|
import HeaderBar from '@/components/HeaderBar.vue'
|
2025-03-19 18:13:03 +08:00
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
export default {
|
2025-03-14 23:48:59 +08:00
|
|
|
|
name: 'HomePage',
|
2025-03-18 21:49:57 +08:00
|
|
|
|
components: { DeviceItem, AddWisdomBodyDialog, HeaderBar },
|
2025-03-05 23:13:24 +08:00
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
addDeviceDialogVisible: false,
|
2025-03-19 18:13:03 +08:00
|
|
|
|
devices: [],
|
|
|
|
|
|
originalDevices: [],
|
2025-03-14 23:48:59 +08:00
|
|
|
|
}
|
2025-03-05 23:13:24 +08:00
|
|
|
|
},
|
2025-03-19 18:13:03 +08:00
|
|
|
|
|
|
|
|
|
|
mounted() {
|
|
|
|
|
|
this.fetchAgentList();
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
methods: {
|
|
|
|
|
|
showAddDialog() {
|
2025-03-14 23:48:59 +08:00
|
|
|
|
this.addDeviceDialogVisible = true
|
2025-03-05 23:13:24 +08:00
|
|
|
|
},
|
2025-03-14 23:48:59 +08:00
|
|
|
|
goToRoleConfig() {
|
|
|
|
|
|
// 点击配置角色后跳转到角色配置页
|
|
|
|
|
|
this.$router.push('/role-config')
|
2025-03-07 21:19:41 +08:00
|
|
|
|
},
|
2025-03-19 18:13:03 +08:00
|
|
|
|
handleWisdomBodyAdded(res) {
|
|
|
|
|
|
console.log('新增智能体响应:', res);
|
|
|
|
|
|
this.fetchAgentList();
|
|
|
|
|
|
this.addDeviceDialogVisible = false;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
},
|
|
|
|
|
|
handleDeviceManage() {
|
|
|
|
|
|
this.$router.push('/device-management');
|
|
|
|
|
|
},
|
2025-03-19 18:13:03 +08:00
|
|
|
|
// 获取智能体列表
|
|
|
|
|
|
fetchAgentList() {
|
2025-04-02 00:32:24 +08:00
|
|
|
|
import('@/apis/module/agent').then(({ default: userApi }) => {
|
2025-03-19 18:13:03 +08:00
|
|
|
|
userApi.getAgentList(({data}) => {
|
2025-03-24 09:16:48 +08:00
|
|
|
|
this.originalDevices = data.data.map(item => ({
|
|
|
|
|
|
...item,
|
|
|
|
|
|
agentId: item.id // 字段映射
|
|
|
|
|
|
}));
|
|
|
|
|
|
this.devices = this.originalDevices;
|
2025-03-19 18:13:03 +08:00
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
// 搜索更新智能体列表
|
|
|
|
|
|
handleSearchResult(filteredList) {
|
|
|
|
|
|
this.devices = filteredList; // 更新设备列表
|
2025-03-24 09:16:48 +08:00
|
|
|
|
},
|
|
|
|
|
|
// 删除智能体
|
|
|
|
|
|
handleDeleteAgent(agentId) {
|
|
|
|
|
|
this.$confirm('确定要删除该智能体吗?', '提示', {
|
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
|
cancelButtonText: '取消',
|
|
|
|
|
|
type: 'warning'
|
|
|
|
|
|
}).then(() => {
|
|
|
|
|
|
import('@/apis/module/user').then(({ default: userApi }) => {
|
|
|
|
|
|
userApi.deleteAgent(agentId, (res) => {
|
|
|
|
|
|
if (res.data.code === 0) {
|
|
|
|
|
|
this.$message.success('删除成功');
|
|
|
|
|
|
this.fetchAgentList(); // 刷新列表
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.$message.error(res.data.msg || '删除失败');
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
}).catch(() => {});
|
2025-03-19 18:13:03 +08:00
|
|
|
|
}
|
2025-03-05 23:13:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
2025-03-07 21:19:41 +08:00
|
|
|
|
|
2025-03-14 23:48:59 +08:00
|
|
|
|
<style scoped>
|
2025-03-05 23:13:24 +08:00
|
|
|
|
.welcome {
|
2025-03-18 21:49:57 +08:00
|
|
|
|
min-width: 900px;
|
|
|
|
|
|
min-height: 506px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
height: 100vh;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
background-image: url("@/assets/home/background.png");
|
|
|
|
|
|
background-size: cover;
|
|
|
|
|
|
/* 确保背景图像覆盖整个元素 */
|
|
|
|
|
|
background-position: center;
|
|
|
|
|
|
/* 从顶部中心对齐 */
|
|
|
|
|
|
-webkit-background-size: cover;
|
|
|
|
|
|
/* 兼容老版本WebKit浏览器 */
|
|
|
|
|
|
-o-background-size: cover;
|
|
|
|
|
|
/* 兼容老版本Opera浏览器 */
|
|
|
|
|
|
}
|
|
|
|
|
|
.add-device {
|
2025-03-18 21:49:57 +08:00
|
|
|
|
height: 195px;
|
|
|
|
|
|
border-radius: 15px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
position: relative;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
background: linear-gradient(
|
2025-03-14 23:48:59 +08:00
|
|
|
|
269.62deg,
|
|
|
|
|
|
#e0e6fd 0%,
|
|
|
|
|
|
#cce7ff 49.69%,
|
|
|
|
|
|
#d3d3fe 100%
|
2025-03-05 23:13:24 +08:00
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
.add-device-bg {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
text-align: left;
|
|
|
|
|
|
background-image: url("@/assets/home/main-top-bg.png");
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
background-size: cover;
|
|
|
|
|
|
/* 确保背景图像覆盖整个元素 */
|
|
|
|
|
|
background-position: center;
|
|
|
|
|
|
/* 从顶部中心对齐 */
|
|
|
|
|
|
-webkit-background-size: cover;
|
|
|
|
|
|
/* 兼容老版本WebKit浏览器 */
|
|
|
|
|
|
-o-background-size: cover;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
/* 兼容老版本Opera浏览器 */
|
|
|
|
|
|
.hellow-text {
|
2025-03-18 21:49:57 +08:00
|
|
|
|
margin-left: 75px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
color: #3d4566;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
font-size: 33px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
letter-spacing: 0;
|
|
|
|
|
|
}
|
2025-03-14 23:48:59 +08:00
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
.hi-hint {
|
|
|
|
|
|
font-weight: 400;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
font-size: 10px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
text-align: left;
|
|
|
|
|
|
color: #818cae;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
margin-left: 75px;
|
|
|
|
|
|
margin-top: 5px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-14 23:48:59 +08:00
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
.add-device-btn {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
margin-left: 75px;
|
|
|
|
|
|
margin-top: 15px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
cursor: pointer;
|
2025-03-14 23:48:59 +08:00
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
.left-add {
|
2025-03-18 21:49:57 +08:00
|
|
|
|
width: 105px;
|
|
|
|
|
|
height: 34px;
|
|
|
|
|
|
border-radius: 17px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
background: #5778ff;
|
|
|
|
|
|
color: #fff;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
font-size: 10px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
text-align: center;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
line-height: 34px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
}
|
2025-03-14 23:48:59 +08:00
|
|
|
|
|
2025-03-05 23:13:24 +08:00
|
|
|
|
.right-add {
|
2025-03-18 21:49:57 +08:00
|
|
|
|
width: 34px;
|
|
|
|
|
|
height: 34px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
background: #5778ff;
|
2025-03-18 21:49:57 +08:00
|
|
|
|
margin-left: -6px;
|
2025-03-05 23:13:24 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-14 23:48:59 +08:00
|
|
|
|
</style>
|