222
CI/CD / build (push) Successful in 4m9s Details

This commit is contained in:
13121765685 2026-01-12 11:23:18 +08:00
parent 779b6d15dd
commit f232232351
13 changed files with 1145 additions and 70 deletions

View File

@ -0,0 +1,70 @@
## 实施计划
### 1. 分析当前代码结构
* **PhoneLogin.vue**:手机号登录页面主组件,包含登录卡片和子组件调用
* **PhoneLoginForm.vue**:登录表单组件,包含登录方式切换和表单字段
* **login.js**包含登录相关的API调用方法如`sendPhoneCode`和`phoneLoginCode`
### 2. 修改PhoneLoginForm.vue组件
#### 模板部分修改
* **更新登录模式切换**:将现有的三种模式(密码登录、注册、重置密码)改为仅保留登录相关的模式
* **添加密码/验证码登录切换**:在登录模式下,添加一个新的切换开关,允许用户在密码登录和验证码登录之间切换
* **调整表单字段显示**:根据选择的登录方式显示相应的表单字段
#### 脚本部分修改
* **添加登录方式状态**:添加`loginMethod` ref用于跟踪用户选择的是密码登录还是验证码登录
* **设置默认登录方式**:将默认登录方式设置为验证码登录
* **更新表单验证逻辑**:根据选择的登录方式调整验证规则
* **更新发送验证码逻辑**:发送登录验证码时传递`purpose: 'login'`
* **更新表单提交逻辑**:验证码登录时调用`phoneLoginCode`函数
### 3. 修改PhoneLogin.vue组件
* **更新handleLogin方法**:确保根据登录方式调用正确的登录函数
### 4. 实施细节
#### PhoneLoginForm.vue修改点
* **第155行**:将默认`loginMode`改为'code'
* **第38-70行**:添加密码/验证码登录切换按钮
* **第256-285行**:更新`handleSendCode`方法确保发送验证码时传递正确的purpose
* **第288-316行**:更新`handleSubmit`方法,处理验证码登录逻辑
#### PhoneLogin.vue修改点
* **第79-81行**:更新`handleLogin`方法,根据登录方式调用正确的登录函数
### 5. 预期行为
* 用户默认看到验证码登录界面
* 用户可以在密码登录和验证码登录之间切换
* 发送登录验证码时,传递`purpose: 'login'`
* 验证码登录调用`phoneLoginCode`函数
* 密码登录保持原有功能不变
### 6. 需要修改的文件
* `d:\work\Aiproject\DeotalandAi\apps\frontend\src\components\auth\PhoneLoginForm.vue`
* `d:\work\Aiproject\DeotalandAi\apps\frontend\src\views\Login\PhoneLogin.vue`

View File

@ -1,4 +1,5 @@
如果前端项目,需要考虑以下几点:
1.你是一名精通 Vue3纯 JavaScript不使用 TypeScript的前端开发专家专注于构建可适配移动端、桌面端、平板端的响应式页面并且开发的页面都会基于当前项目搭建的中英文框架支持中英文切换(页面中英文切换内容都是本地的,所以需要在项目中配置好对应的英文内容),和主题色切换请基于以下要求完成开发任务:
2.技术栈规范
核心框架:使用 Vue3Options API 或 Composition API 均可,优先推荐 Composition API 以提升代码复用性),禁止使用 TypeScript所有逻辑用原生 JavaScript 实现。
@ -29,8 +30,9 @@
移动端兼容 iOS 13+、Android 8+;桌面端兼容 Chrome 80+、Firefox 75+、Edge 80+平板端覆盖主流设备iPadOS、Android 平板)。
避免使用 ES6 + 以上高级语法(或通过 Babel 转译),确保低版本浏览器兼容性。
12.设计风格
- 粘土拟态风格
- 极简风格
13.交付标准
代码结构清晰,遵循 Vue3 最佳实践(如组件拆分粒度合理、逻辑与 UI 分离)。
提供完整的多端测试报告(说明在不同设备 / 尺寸下的测试结果及适配方案)。
附带 README说明项目启动、打包命令以及响应式布局的核心实现逻辑。
附带 README说明项目启动、打包命令以及响应式布局的核心实现逻辑。
- 项目我已经启动了,你只负责修改

View File

@ -271,6 +271,7 @@ export default {
productManagement: 'Product Management',
voucherManagement: 'Voucher Management',
operationLog: 'Operation Log',
adminAgent: 'Admin Agent',
logout: 'Logout',
profile: 'Profile',
settings: 'Settings'
@ -945,6 +946,46 @@ export default {
createdAt: 'Created At',
detailTitle: 'Operation Log Detail',
getListFailed: 'Failed to get operation log list'
},
agent: {
title: 'Admin Agent Management',
deviceId: 'Device ID',
agentName: 'Agent Name',
xiaozhiDeviceId: 'Xiaozhi Device ID',
macAddress: 'MAC Address',
serialNumber: 'Serial Number',
isAuth: 'Auth Status',
userEmail: 'User Email',
userPhone: 'User Phone',
userNickname: 'User Nickname',
createTime: 'Create Time',
updateTime: 'Update Time',
unbind: 'Unbind',
forceUnbind: 'Force Unbind',
unbindConfirm: 'Unbind Confirm',
unbindConfirmMessage: 'Are you sure to unbind this device?',
forceUnbindConfirm: 'Force Unbind Confirm',
forceUnbindConfirmMessage: 'Are you sure to force unbind this device?',
unbindSuccess: 'Unbind successful',
unbindFailed: 'Unbind failed',
forceUnbindSuccess: 'Force unbind successful',
forceUnbindFailed: 'Force unbind failed',
getListFailed: 'Failed to get device list',
authStatus: {
all: 'All',
authorized: 'Authorized',
unauthorized: 'Unauthorized'
},
placeholder: {
agentName: 'Enter agent name',
xiaozhiDeviceId: 'Enter xiaozhi device ID',
macAddress: 'Enter MAC address',
serialNumber: 'Enter serial number',
isAuth: 'Select auth status',
userEmail: 'Enter user email',
userPhone: 'Enter user phone',
userNickname: 'Enter user nickname'
}
}
},
modelUpload: {

View File

@ -285,6 +285,7 @@ orderManagement: {
productManagement: '产品管理',
voucherManagement: '优惠券管理',
operationLog: '操作日志',
adminAgent: '智能体管理',
logout: '退出登录',
profile: '个人资料',
settings: '设置',
@ -938,6 +939,46 @@ orderManagement: {
createdAt: '创建时间',
detailTitle: '操作日志详情',
getListFailed: '获取操作日志列表失败'
},
agent: {
title: '智能体管理',
deviceId: '设备ID',
agentName: '智能体名称',
xiaozhiDeviceId: '小智设备ID',
macAddress: 'MAC地址',
serialNumber: '序列号',
isAuth: '授权状态',
userEmail: '用户邮箱',
userPhone: '用户电话',
userNickname: '用户昵称',
createTime: '创建时间',
updateTime: '更新时间',
unbind: '解绑',
forceUnbind: '强制解绑',
unbindConfirm: '解绑确认',
unbindConfirmMessage: '确定要解绑该设备吗?',
forceUnbindConfirm: '强制解绑确认',
forceUnbindConfirmMessage: '确定要强制解绑该设备吗?',
unbindSuccess: '解绑成功',
unbindFailed: '解绑失败',
forceUnbindSuccess: '强制解绑成功',
forceUnbindFailed: '强制解绑失败',
getListFailed: '获取设备列表失败',
authStatus: {
all: '全部',
authorized: '已授权',
unauthorized: '未授权'
},
placeholder: {
agentName: '请输入智能体名称',
xiaozhiDeviceId: '请输入小智设备ID',
macAddress: '请输入MAC地址',
serialNumber: '请输入序列号',
isAuth: '请选择授权状态',
userEmail: '请输入用户邮箱',
userPhone: '请输入用户电话',
userNickname: '请输入用户昵称'
}
}
},
modelUpload: {

View File

@ -25,6 +25,8 @@ const AdminPromptManagement = () => import('@/views/admin/AdminPromptManagement/
const AdminProductManagement = () => import('@/views/admin/ProductManagement/ProductManagement.vue')
const AdminVoucherManagement = () => import('@/views/admin/VoucherManagement/VoucherManagement.vue')
const AdminOperationLog = () => import('@/views/admin/AdminOperationLog/AdminOperationLog.vue')
const AdminAgent = () => import('@/views/admin/Adminagent/index.vue')
//权限路由映射表
export const permissionRoutes = [
{
@ -161,6 +163,17 @@ export const permissionRoutes = [
requiresAuth: true
}
},
{
path: 'admin-agent',
name: 'AdminAgent',
component: AdminAgent,
meta: {
title: 'admin.layout.adminAgent',
icon: 'User',
menuOrder: 9,
requiresAuth: true
}
},
{
path: 'permission',

View File

@ -0,0 +1,35 @@
import { requestUtils,adminApi } from "@deotaland/utils";
export class AdminAgent {
constructor() {
}
// 设备列表
async deviceList(data) {
let parmas = {
page: data.page,
page_size: data.pageSize,
agent_name: data.agentName,
xiaozhi_device_id: data.xiaozhiDeviceId,
mac_address: data.macAddress,
serial_number: data.serialNumber,
is_auth: data.isAuth,//0未授权1已授权
user_email: data.userEmail,
user_phone: data.userPhone,
user_nickname: data.userNickname,
}
return await requestUtils.common(adminApi.default.deviceList,parmas);
}
// 解绑设备,用于在小智平台解绑了,但在本地平台还没解绑的情况
async deviceUnbind(data) {
let parmas = {
device_id: data.device_id,
}
return await requestUtils.common(adminApi.default.deviceUnbind,parmas);
}
// 解绑设备,直接在平台解绑
async deviceUnbindDevice(data) {
let parmas = {
device_id: data.device_id,
}
return await requestUtils.common(adminApi.default.deviceUnbindDevice,parmas);
}
}

View File

@ -0,0 +1,328 @@
<template>
<div class="admin-agent">
<div class="admin-agent-header">
<h1>{{ $t('admin.agent.title') }}</h1>
</div>
<div class="admin-agent-content">
<!-- 搜索和筛选区域 -->
<div class="search-filter">
<el-form :inline="true" :model="searchForm" class="search-form">
<el-form-item :label="$t('admin.agent.agentName')">
<el-input v-model="searchForm.agentName" :placeholder="$t('admin.agent.placeholder.agentName')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('admin.agent.xiaozhiDeviceId')">
<el-input v-model="searchForm.xiaozhiDeviceId" :placeholder="$t('admin.agent.placeholder.xiaozhiDeviceId')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('admin.agent.macAddress')">
<el-input v-model="searchForm.macAddress" :placeholder="$t('admin.agent.placeholder.macAddress')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('admin.agent.serialNumber')">
<el-input v-model="searchForm.serialNumber" :placeholder="$t('admin.agent.placeholder.serialNumber')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('admin.agent.isAuth')">
<el-select v-model="searchForm.isAuth" :placeholder="$t('admin.agent.placeholder.isAuth')" clearable style="width: 180px;">
<el-option :label="$t('admin.agent.authStatus.all')" :value="''"></el-option>
<el-option :label="$t('admin.agent.authStatus.unauthorized')" :value="0"></el-option>
<el-option :label="$t('admin.agent.authStatus.authorized')" :value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('admin.agent.userEmail')">
<el-input v-model="searchForm.userEmail" :placeholder="$t('admin.agent.placeholder.userEmail')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('admin.agent.userPhone')">
<el-input v-model="searchForm.userPhone" :placeholder="$t('admin.agent.placeholder.userPhone')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('admin.agent.userNickname')">
<el-input v-model="searchForm.userNickname" :placeholder="$t('admin.agent.placeholder.userNickname')" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">{{ $t('common.search') }}</el-button>
<el-button @click="handleReset">{{ $t('common.reset') }}</el-button>
</el-form-item>
</el-form>
</div>
<!-- 设备列表 -->
<div class="device-list">
<el-table :data="deviceList" stripe style="width: 100%">
<el-table-column prop="id" :label="$t('admin.agent.deviceId')" min-width="80"></el-table-column>
<el-table-column prop="agent_name" :label="$t('admin.agent.agentName')" min-width="120"></el-table-column>
<el-table-column prop="xiaozhi_device_id" :label="$t('admin.agent.xiaozhiDeviceId')" min-width="150"></el-table-column>
<el-table-column prop="mac_address" :label="$t('admin.agent.macAddress')" min-width="150"></el-table-column>
<el-table-column prop="serial_number" :label="$t('admin.agent.serialNumber')" min-width="150"></el-table-column>
<el-table-column prop="is_auth" :label="$t('admin.agent.isAuth')" min-width="100">
<template #default="scope">
<el-tag :type="scope.row.is_auth ? 'success' : 'danger'">
{{ scope.row.is_auth ? $t('admin.agent.authStatus.authorized') : $t('admin.agent.authStatus.unauthorized') }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="user_nickname" :label="$t('admin.agent.userNickname')" min-width="120"></el-table-column>
<el-table-column prop="created_at" :label="$t('admin.agent.createTime')" min-width="150"></el-table-column>
<el-table-column prop="updated_at" :label="$t('admin.agent.updateTime')" min-width="150"></el-table-column>
<el-table-column :label="$t('common.actions')" min-width="180" fixed="right">
<template #default="scope">
<el-button type="warning" @click="handleUnbind(scope.row)" :disabled="!scope.row.is_auth">
{{ $t('admin.agent.unbind') }}
</el-button>
<el-button type="danger" @click="handleForceUnbind(scope.row)">
{{ $t('admin.agent.forceUnbind') }}
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
v-model:current-page="pagination.currentPage"
v-model:page-size="pagination.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div>
</div>
</div>
<!-- 解绑确认对话框 -->
<el-dialog
v-model="unbindDialogVisible"
:title="$t('admin.agent.unbindConfirm')"
width="30%"
>
<span>{{ $t('admin.agent.unbindConfirmMessage') }}</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="unbindDialogVisible = false">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="confirmUnbind">{{ $t('common.confirm') }}</el-button>
</span>
</template>
</el-dialog>
<!-- 强制解绑确认对话框 -->
<el-dialog
v-model="forceUnbindDialogVisible"
:title="$t('admin.agent.forceUnbindConfirm')"
width="30%"
>
<span>{{ $t('admin.agent.forceUnbindConfirmMessage') }}</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="forceUnbindDialogVisible = false">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="confirmForceUnbind">{{ $t('common.confirm') }}</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, onMounted, reactive } from 'vue'
import { ElMessage } from 'element-plus'
import { AdminAgent } from './index.js'
import { useI18n } from 'vue-i18n'
// i18nt
const { t } = useI18n()
// 使$tt$t
const $t = t
// AdminAgent
const adminAgent = new AdminAgent()
//
const deviceList = ref([])
//
const searchForm = reactive({
agentName: '',
xiaozhiDeviceId: '',
macAddress: '',
serialNumber: '',
isAuth: '', //
userEmail: '',
userPhone: '',
userNickname: ''
})
//
const pagination = reactive({
currentPage: 1,
pageSize: 20,
total: 0
})
//
const unbindDialogVisible = ref(false)
const forceUnbindDialogVisible = ref(false)
const currentDevice = ref(null)
//
const getDeviceList = async () => {
try {
//
const searchParams = Object.fromEntries(
Object.entries(searchForm)
.filter(([key, value]) => value !== '')
)
const params = {
page: pagination.currentPage,
pageSize: pagination.pageSize,
...searchParams
}
const response = await adminAgent.deviceList(params)
if (response.code === 0) {
deviceList.value = response.data.items
pagination.total = response.data.total
} else {
ElMessage.error(response.msg || t('admin.agent.getListFailed'))
}
} catch (error) {
ElMessage.error(t('admin.agent.getListFailed'))
}
}
//
const handleSearch = () => {
pagination.currentPage = 1
getDeviceList()
}
//
const handleReset = () => {
Object.keys(searchForm).forEach(key => {
searchForm[key] = ''
})
pagination.currentPage = 1
getDeviceList()
}
//
const handleSizeChange = (size) => {
pagination.pageSize = size
getDeviceList()
}
//
const handleCurrentChange = (current) => {
pagination.currentPage = current
getDeviceList()
}
//
const handleUnbind = (device) => {
currentDevice.value = device
unbindDialogVisible.value = true
}
//
const handleForceUnbind = (device) => {
currentDevice.value = device
forceUnbindDialogVisible.value = true
}
//
const confirmUnbind = async () => {
try {
const response = await adminAgent.deviceUnbind({ device_id: currentDevice.value.id })
if (response.code === 0) {
ElMessage.success(t('admin.agent.unbindSuccess'))
unbindDialogVisible.value = false
getDeviceList()
} else {
ElMessage.error(response.msg || t('admin.agent.unbindFailed'))
}
} catch (error) {
ElMessage.error(t('admin.agent.unbindFailed'))
}
}
//
const confirmForceUnbind = async () => {
try {
const response = await adminAgent.deviceUnbindDevice({ device_id: currentDevice.value.id })
if (response.code === 0) {
ElMessage.success(t('admin.agent.forceUnbindSuccess'))
forceUnbindDialogVisible.value = false
getDeviceList()
} else {
ElMessage.error(response.msg || t('admin.agent.forceUnbindFailed'))
}
} catch (error) {
ElMessage.error(t('admin.agent.forceUnbindFailed'))
}
}
//
onMounted(() => {
getDeviceList()
})
</script>
<style scoped>
.admin-agent {
padding: 20px;
}
.admin-agent-header {
margin-bottom: 20px;
}
.admin-agent-header h1 {
font-size: 24px;
margin: 0;
color: var(--el-text-color-primary);
}
.search-filter {
background-color: #fff;
padding: 20px;
border-radius: 8px;
margin-bottom: 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.search-form {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.device-list {
background-color: #fff;
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.pagination {
margin-top: 20px;
display: flex;
justify-content: flex-end;
}
@media (max-width: 768px) {
.admin-agent {
padding: 10px;
}
.search-form {
flex-direction: column;
align-items: stretch;
}
.search-form .el-form-item {
width: 100%;
}
.pagination {
justify-content: center;
}
}
</style>

View File

@ -48,14 +48,10 @@
</template>
</el-input>
</el-form-item>
</div>
<!-- 对话配置 -->
<div class="form-section">
<h3 class="section-title">{{ t('agentTemplate.dialogConfig') }}</h3>
<!-- 对话语言 -->
<el-form-item :label="t('agentTemplate.language')" prop="language">
<el-select
@ -567,7 +563,9 @@ const availableLanguages = computed(() => {
//
const availableVoices = computed(() => {
const currentLang = agentForm.language.split('-')[0] // 'zh-CN' -> 'zh'
return allVoices.value.filter(voice => voice.language === currentLang)
const list = allVoices.value.filter(voice => voice.language === currentLang&&voice.name != '湾湾小何')
console.log(list);
return list
})
//
@ -854,6 +852,7 @@ onMounted(async () => {
//
const agentName = route.query.name || route.params.name || 'deo'
agentForm.name = agentName
agentForm.assistant_name = agentName
}
// XiaozhiServergetTtsList
@ -895,7 +894,7 @@ const getTtsList = async ()=>{
if(data.code === 0){
ttsData.value = data.data
//
const voices = []
let voices = []
const ttsVoices = data.data.tts_voices || {}
//
for(const lang in ttsVoices){
@ -913,8 +912,9 @@ const getTtsList = async ()=>{
})
}
}
voices = voices.filter(voice => voice.name != '湾湾小何')
allVoices.value = voices
console.log(allVoices.value,'allVoices.value');
//
if(!agentForm.voice && voices.length > 0){

View File

@ -66,8 +66,8 @@ export default defineConfig({
// 配置代理解决CORS问题
proxy: {
'/api': {
target: 'https://api.deotaland.ai',
// target: 'http://api.deotaland.local',
// target: 'https://api.deotaland.ai',
target: 'http://api.deotaland.local',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}

601
demo.md
View File

@ -1,19 +1,592 @@
{
"code": 0,
"message": "",
"success": true,
"data": {
"id": 2,
"nickname": "suoyousheng",
"avatarUrl": null,
"phone": null,
"email": "suoyousheng@gmail.com",
"status": "active",
"lastActive": "2025-12-11T13:52:23.226796Z",
"inviteCode": "BTXYU6Z8",
"invitedBy": null,
"inviterNickname": null,
"createdAt": null,
"updatedAt": "2025-12-11T05:52:23.227754Z"
},
"message": "操作成功"
"items": [
{
"id": 37,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1403723,
"mac_address": "c8:47:8c:2d:db:bd",
"serial_number": "D573FFF799F8C0FC6D504069FCB5D622",
"is_auth": true,
"device_data": {
"id": 1403723,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-24T02:05:38.000Z",
"macAddress": "c8:47:8c:2d:db:bd",
"updated_at": "2025-12-24T02:05:38.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:2d:db:bd",
"serial_number": "D573FFF799F8C0FC6D504069FCB5D622",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-24T01:58:51.560441+00:00",
"updated_at": "2025-12-24T02:05:51.489015+00:00"
},
{
"id": 36,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1403580,
"mac_address": "c8:47:8c:63:cf:dd",
"serial_number": "51F90FA0D476BD4BB9BD0A13F196268A",
"is_auth": true,
"device_data": {
"id": 1403580,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-24T01:22:18.000Z",
"macAddress": "c8:47:8c:63:cf:dd",
"updated_at": "2025-12-24T01:22:18.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:63:cf:dd",
"serial_number": "51F90FA0D476BD4BB9BD0A13F196268A",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-24T01:22:15.787045+00:00",
"updated_at": "2025-12-24T01:44:55.214833+00:00"
},
{
"id": 35,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401628,
"mac_address": "c8:47:8c:7b:39:a5",
"serial_number": "698C9C12D7E028E6D4A708E500095CF2",
"is_auth": true,
"device_data": {
"id": 1401628,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:35:14.000Z",
"macAddress": "c8:47:8c:7b:39:a5",
"updated_at": "2025-12-23T09:35:14.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:7b:39:a5",
"serial_number": "698C9C12D7E028E6D4A708E500095CF2",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:35:12.413827+00:00",
"updated_at": "2025-12-24T01:08:32.483676+00:00"
},
{
"id": 34,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401623,
"mac_address": "c8:47:8c:53:73:f2",
"serial_number": "980AD543279040C4534E0379E60D53EB",
"is_auth": true,
"device_data": {
"id": 1401623,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:34:07.000Z",
"macAddress": "c8:47:8c:53:73:f2",
"updated_at": "2025-12-23T09:34:07.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:53:73:f2",
"serial_number": "980AD543279040C4534E0379E60D53EB",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:34:05.593979+00:00",
"updated_at": "2025-12-23T09:35:03.700268+00:00"
},
{
"id": 33,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401615,
"mac_address": "c8:47:8c:b8:f2:83",
"serial_number": "F9C373E779B4352CBE2CD44AB3A50AFD",
"is_auth": true,
"device_data": {
"id": 1401615,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:33:17.000Z",
"macAddress": "c8:47:8c:b8:f2:83",
"updated_at": "2025-12-23T09:33:17.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:b8:f2:83",
"serial_number": "F9C373E779B4352CBE2CD44AB3A50AFD",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:33:15.074071+00:00",
"updated_at": "2025-12-23T09:33:55.751273+00:00"
},
{
"id": 32,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401605,
"mac_address": "c8:47:8c:39:19:31",
"serial_number": "2CDA9874D76C3C94A1D9DC54096F2208",
"is_auth": true,
"device_data": {
"id": 1401605,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:32:22.000Z",
"macAddress": "c8:47:8c:39:19:31",
"updated_at": "2025-12-23T09:32:22.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:39:19:31",
"serial_number": "2CDA9874D76C3C94A1D9DC54096F2208",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:32:20.347740+00:00",
"updated_at": "2025-12-23T09:33:05.661537+00:00"
},
{
"id": 31,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401598,
"mac_address": "c8:47:8c:24:d8:13",
"serial_number": "D87F933C24C71405B8CC8AB5D9412159",
"is_auth": true,
"device_data": {
"id": 1401598,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:31:31.000Z",
"macAddress": "c8:47:8c:24:d8:13",
"updated_at": "2025-12-23T09:31:31.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:24:d8:13",
"serial_number": "D87F933C24C71405B8CC8AB5D9412159",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:31:29.850426+00:00",
"updated_at": "2025-12-23T09:31:48.670695+00:00"
},
{
"id": 30,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401585,
"mac_address": "c8:47:8c:f4:1a:64",
"serial_number": "E454746E3B854FD75DE638FF8CF75286",
"is_auth": true,
"device_data": {
"id": 1401585,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:30:09.000Z",
"macAddress": "c8:47:8c:f4:1a:64",
"updated_at": "2025-12-23T09:30:09.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:f4:1a:64",
"serial_number": "E454746E3B854FD75DE638FF8CF75286",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:30:07.416068+00:00",
"updated_at": "2025-12-23T09:30:25.870478+00:00"
},
{
"id": 29,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401579,
"mac_address": "c8:47:8c:b9:23:75",
"serial_number": "C1971774FE930B2AC5AC0890B904FC87",
"is_auth": true,
"device_data": {
"id": 1401579,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:28:56.000Z",
"macAddress": "c8:47:8c:b9:23:75",
"updated_at": "2025-12-23T09:28:56.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:b9:23:75",
"serial_number": "C1971774FE930B2AC5AC0890B904FC87",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:28:54.061646+00:00",
"updated_at": "2025-12-23T09:29:09.621515+00:00"
},
{
"id": 28,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401570,
"mac_address": "c8:47:8c:15:2a:70",
"serial_number": "DD4755E697A3B342562E975278C84014",
"is_auth": true,
"device_data": {
"id": 1401570,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:27:51.000Z",
"macAddress": "c8:47:8c:15:2a:70",
"updated_at": "2025-12-23T09:27:51.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:15:2a:70",
"serial_number": "DD4755E697A3B342562E975278C84014",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:27:49.669610+00:00",
"updated_at": "2025-12-23T09:28:39.300155+00:00"
},
{
"id": 27,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401568,
"mac_address": "c8:47:8c:14:96:e4",
"serial_number": "3460E5FAA64F8BD32A97AD09BC6EF318",
"is_auth": true,
"device_data": {
"id": 1401568,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:26:40.000Z",
"macAddress": "c8:47:8c:14:96:e4",
"updated_at": "2025-12-23T09:26:40.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:14:96:e4",
"serial_number": "3460E5FAA64F8BD32A97AD09BC6EF318",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:26:38.333116+00:00",
"updated_at": "2025-12-23T09:26:57.920852+00:00"
},
{
"id": 26,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401559,
"mac_address": "c8:47:8c:fd:a9:a7",
"serial_number": "1B926A2CFF32A518A291152EB214C125",
"is_auth": true,
"device_data": {
"id": 1401559,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:23:50.000Z",
"macAddress": "c8:47:8c:fd:a9:a7",
"updated_at": "2025-12-23T09:23:50.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:fd:a9:a7",
"serial_number": "1B926A2CFF32A518A291152EB214C125",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:23:48.364367+00:00",
"updated_at": "2025-12-23T09:24:06.861291+00:00"
},
{
"id": 25,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401542,
"mac_address": "c8:47:8c:c5:bf:e0",
"serial_number": "BD6629490895D608A5DEA0151BB7D289",
"is_auth": true,
"device_data": {
"id": 1401542,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:20:44.000Z",
"macAddress": "c8:47:8c:c5:bf:e0",
"updated_at": "2025-12-23T09:20:44.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:c5:bf:e0",
"serial_number": "BD6629490895D608A5DEA0151BB7D289",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:20:42.340747+00:00",
"updated_at": "2025-12-23T09:20:59.293540+00:00"
},
{
"id": 24,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401533,
"mac_address": "c8:47:8c:15:a1:f0",
"serial_number": "5F8DEEC65580DB5E53FAB6F0FB8BCBFD",
"is_auth": true,
"device_data": {
"id": 1401533,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:19:27.000Z",
"macAddress": "c8:47:8c:15:a1:f0",
"updated_at": "2025-12-23T09:19:27.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:15:a1:f0",
"serial_number": "5F8DEEC65580DB5E53FAB6F0FB8BCBFD",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:19:25.121039+00:00",
"updated_at": "2025-12-23T09:20:34.002488+00:00"
},
{
"id": 23,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401523,
"mac_address": "c8:47:8c:ce:db:23",
"serial_number": "37EE129E77BDFE62749FBE8C71593EEF",
"is_auth": true,
"device_data": {
"id": 1401523,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:18:07.000Z",
"macAddress": "c8:47:8c:ce:db:23",
"updated_at": "2025-12-23T09:18:07.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:ce:db:23",
"serial_number": "37EE129E77BDFE62749FBE8C71593EEF",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:18:05.646345+00:00",
"updated_at": "2025-12-23T09:18:35.541568+00:00"
},
{
"id": 22,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401511,
"mac_address": "c8:47:8c:f6:a2:ab",
"serial_number": "0DC2E3342A02589FBF29BC90101F89C5",
"is_auth": true,
"device_data": {
"id": 1401511,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:16:44.000Z",
"macAddress": "c8:47:8c:f6:a2:ab",
"updated_at": "2025-12-23T09:16:44.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:f6:a2:ab",
"serial_number": "0DC2E3342A02589FBF29BC90101F89C5",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:16:42.818711+00:00",
"updated_at": "2025-12-23T09:17:03.807210+00:00"
},
{
"id": 21,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401498,
"mac_address": "c8:47:8c:cd:f7:a9",
"serial_number": "DE2F4FCB0ED991A3CAB2729C1BE5F6CC",
"is_auth": true,
"device_data": {
"id": 1401498,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:15:27.000Z",
"macAddress": "c8:47:8c:cd:f7:a9",
"updated_at": "2025-12-23T09:15:27.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:cd:f7:a9",
"serial_number": "DE2F4FCB0ED991A3CAB2729C1BE5F6CC",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:15:25.683187+00:00",
"updated_at": "2025-12-23T09:15:39.779258+00:00"
},
{
"id": 20,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401491,
"mac_address": "c8:47:8c:c9:f2:98",
"serial_number": "546EE384367AAB209F067296F2F72E00",
"is_auth": true,
"device_data": {
"id": 1401491,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:14:11.000Z",
"macAddress": "c8:47:8c:c9:f2:98",
"updated_at": "2025-12-23T09:14:11.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:c9:f2:98",
"serial_number": "546EE384367AAB209F067296F2F72E00",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:14:09.762809+00:00",
"updated_at": "2025-12-23T09:14:26.434891+00:00"
},
{
"id": 19,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401480,
"mac_address": "c8:47:8c:4b:15:91",
"serial_number": "CA144DA49F912C4B0173C80155F300B7",
"is_auth": true,
"device_data": {
"id": 1401480,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:12:58.000Z",
"macAddress": "c8:47:8c:4b:15:91",
"updated_at": "2025-12-23T09:12:58.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:4b:15:91",
"serial_number": "CA144DA49F912C4B0173C80155F300B7",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:12:56.616617+00:00",
"updated_at": "2025-12-23T09:13:14.601850+00:00"
},
{
"id": 18,
"agent_id": null,
"agent_name": null,
"xiaozhi_device_id": 1401474,
"mac_address": "c8:47:8c:77:e2:70",
"serial_number": "5DE0EF7D5E0B63B441429E0C35E9C136",
"is_auth": true,
"device_data": {
"id": 1401474,
"alias": null,
"iccid": "",
"is_auth": true,
"user_id": 677673,
"agent_id": 1223893,
"board_name": "deotaland-d-1",
"created_at": "2025-12-23T09:11:40.000Z",
"macAddress": "c8:47:8c:77:e2:70",
"updated_at": "2025-12-23T09:11:40.000Z",
"app_version": "1.4.0",
"auto_update": 1,
"mac_address": "c8:47:8c:77:e2:70",
"serial_number": "5DE0EF7D5E0B63B441429E0C35E9C136",
"last_connected_at": null
},
"user_nickname": null,
"created_at": "2025-12-23T09:11:38.069967+00:00",
"updated_at": "2025-12-23T09:12:04.062386+00:00"
}
],
"page": 1,
"page_size": 20,
"total": 32
}
}

View File

@ -0,0 +1,6 @@
const login = {
deviceList:{url:'/api-core/admin/device/list',method:'GET'},// 设备列表
deviceUnbind:{url:'/api-core/admin/device/unbind',method:'POST'},// 解绑设备,用于在小智平台解绑了,但在本地平台还没解绑的情况
deviceUnbindDevice:{url:'/api-core/admin/device/unbind-device',method:'POST'},// 解绑设备,直接在平台解绑
}
export default login;

View File

@ -10,6 +10,7 @@ import pointsManagement from './pointsManagement.js';
import configuration from './configuration.js';
import seriespriceConfig from './seriespriceConfig.js';
import voucher from './voucher.js';
import agent from './agent.js';
export default {
...login,
@ -24,4 +25,5 @@ export default {
...configuration,
...seriespriceConfig,
...voucher,
...agent,
};

View File

@ -8,12 +8,21 @@ importers:
.:
devDependencies:
'@element-plus/icons-vue':
specifier: ^2.3.2
version: 2.3.2(vue@3.5.24)
'@google/genai':
specifier: ^1.27.0
version: 1.27.0
'@vitejs/plugin-vue':
specifier: ^6.0.1
version: 6.0.1(vite@7.2.2)(vue@3.5.24)
concurrently:
specifier: ^8.2.0
version: 8.2.0
element-plus:
specifier: ^2.11.7
version: 2.12.0(vue@3.5.24)
eslint:
specifier: ^8.45.0
version: 8.45.0
@ -324,7 +333,6 @@ packages:
/@ctrl/tinycolor@3.6.1:
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
dev: false
/@dimforge/rapier3d-compat@0.12.0:
resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==}
@ -336,7 +344,6 @@ packages:
vue: ^3.2.0
dependencies:
vue: 3.5.24
dev: false
/@esbuild/aix-ppc64@0.25.12:
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
@ -683,18 +690,15 @@ packages:
resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
dependencies:
'@floating-ui/utils': 0.2.10
dev: false
/@floating-ui/dom@1.7.4:
resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
dependencies:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
dev: false
/@floating-ui/utils@0.2.10:
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
dev: false
/@google/genai@1.27.0:
resolution: {integrity: sha512-sveeQqwyzO/U5kOjo3EflF1rf7v0ZGprrjPGmeT6V5u22IUTcA4wBFxW+q1n7hOX0M1iWR3944MImoNPOM+zsA==}
@ -711,7 +715,6 @@ packages:
- bufferutil
- supports-color
- utf-8-validate
dev: false
/@humanfs/core@0.19.1:
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@ -1100,7 +1103,6 @@ packages:
/@sxzz/popperjs-es@2.11.7:
resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
dev: false
/@tailwindcss/node@4.1.17:
resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
@ -1315,11 +1317,9 @@ packages:
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
dependencies:
'@types/lodash': 4.17.20
dev: false
/@types/lodash@4.17.20:
resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==}
dev: false
/@types/stats.js@0.17.4:
resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==}
@ -1339,7 +1339,6 @@ packages:
/@types/web-bluetooth@0.0.16:
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
dev: false
/@types/web-bluetooth@0.0.21:
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
@ -1499,14 +1498,12 @@ packages:
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
/@vueuse/metadata@14.1.0:
resolution: {integrity: sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==}
/@vueuse/metadata@9.13.0:
resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
dev: false
/@vueuse/shared@14.1.0(vue@3.5.24):
resolution: {integrity: sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==}
@ -1522,7 +1519,6 @@ packages:
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
/@webgpu/types@0.1.66:
resolution: {integrity: sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA==}
@ -1545,7 +1541,6 @@ packages:
/agent-base@7.1.4:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
dev: false
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@ -1580,7 +1575,6 @@ packages:
/async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
dev: false
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@ -1617,7 +1611,6 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
dev: false
/baseline-browser-mapping@2.9.4:
resolution: {integrity: sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==}
@ -1626,7 +1619,6 @@ packages:
/bignumber.js@9.3.1:
resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==}
dev: false
/birpc@2.8.0:
resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==}
@ -1662,7 +1654,6 @@ packages:
/buffer-equal-constant-time@1.0.1:
resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
dev: false
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@ -1807,7 +1798,6 @@ packages:
/data-uri-to-buffer@4.0.1:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
dev: false
/date-fns@2.30.0:
resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
@ -1822,7 +1812,6 @@ packages:
/dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
dev: false
/debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
@ -1903,7 +1892,6 @@ packages:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
dependencies:
safe-buffer: 5.2.1
dev: false
/electron-to-chromium@1.5.266:
resolution: {integrity: sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==}
@ -1955,7 +1943,6 @@ packages:
vue: 3.5.24
transitivePeerDependencies:
- '@vue/composition-api'
dev: false
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@ -2252,7 +2239,6 @@ packages:
/extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
dev: false
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@ -2297,7 +2283,6 @@ packages:
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
dev: false
/fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
@ -2379,7 +2364,6 @@ packages:
engines: {node: '>=12.20.0'}
dependencies:
fetch-blob: 3.2.0
dev: false
/fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
@ -2430,7 +2414,6 @@ packages:
rimraf: 5.0.10
transitivePeerDependencies:
- supports-color
dev: false
/gcp-metadata@8.1.2:
resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==}
@ -2441,7 +2424,6 @@ packages:
json-bigint: 1.0.0
transitivePeerDependencies:
- supports-color
dev: false
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
@ -2532,12 +2514,10 @@ packages:
jws: 4.0.0
transitivePeerDependencies:
- supports-color
dev: false
/google-logging-utils@1.1.3:
resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==}
engines: {node: '>=14'}
dev: false
/gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
@ -2560,7 +2540,6 @@ packages:
jws: 4.0.0
transitivePeerDependencies:
- supports-color
dev: false
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@ -2611,7 +2590,6 @@ packages:
debug: 4.4.3
transitivePeerDependencies:
- supports-color
dev: false
/ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
@ -2715,7 +2693,6 @@ packages:
resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}
dependencies:
bignumber.js: 9.3.1
dev: false
/json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@ -2744,14 +2721,12 @@ packages:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
safe-buffer: 5.2.1
dev: false
/jws@4.0.0:
resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}
dependencies:
jwa: 2.0.1
safe-buffer: 5.2.1
dev: false
/keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@ -2921,7 +2896,6 @@ packages:
/lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
/lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
@ -2933,7 +2907,6 @@ packages:
'@types/lodash-es': 4.17.12
lodash: 4.17.21
lodash-es: 4.17.21
dev: false
/lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@ -2957,7 +2930,6 @@ packages:
/memoize-one@6.0.0:
resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
dev: false
/meshoptimizer@0.22.0:
resolution: {integrity: sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==}
@ -3056,7 +3028,6 @@ packages:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
deprecated: Use your platform's native DOMException instead
dev: false
/node-fetch@3.3.2:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
@ -3065,7 +3036,6 @@ packages:
data-uri-to-buffer: 4.0.1
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
dev: false
/node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
@ -3078,7 +3048,6 @@ packages:
/normalize-wheel-es@1.2.0:
resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
dev: false
/normalize.css@8.0.1:
resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==}
@ -3365,7 +3334,6 @@ packages:
hasBin: true
dependencies:
glob: 10.5.0
dev: false
/rollup@4.53.2:
resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==}
@ -3417,7 +3385,6 @@ packages:
/safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: false
/scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
@ -3961,7 +3928,6 @@ packages:
optional: true
dependencies:
vue: 3.5.24
dev: false
/vue-eslint-parser@9.4.3(eslint@9.15.0):
resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
@ -4091,7 +4057,6 @@ packages:
/web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
dev: false
/webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
@ -4140,7 +4105,6 @@ packages:
optional: true
utf-8-validate:
optional: true
dev: false
/xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}