This commit is contained in:
pengxiaolong
2025-07-09 13:28:41 +08:00
parent b2346c856a
commit e29e595fef
10 changed files with 137 additions and 63 deletions

18
package-lock.json generated
View File

@@ -11,6 +11,7 @@
"axios": "^1.8.4",
"core-js": "^3.8.3",
"echarts": "^5.6.0",
"echarts-gl": "^2.0.9",
"element-plus": "^2.9.7",
"pinia": "^3.0.1",
"qwebchannel": "^6.2.0",
@@ -5155,6 +5156,11 @@
"node": ">=6.0"
}
},
"node_modules/claygl": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/claygl/-/claygl-1.3.0.tgz",
"integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ=="
},
"node_modules/clean-css": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
@@ -6519,6 +6525,18 @@
"zrender": "5.6.1"
}
},
"node_modules/echarts-gl": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/echarts-gl/-/echarts-gl-2.0.9.tgz",
"integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==",
"dependencies": {
"claygl": "^1.2.1",
"zrender": "^5.1.1"
},
"peerDependencies": {
"echarts": "^5.1.2"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",

View File

@@ -10,6 +10,7 @@
"axios": "^1.8.4",
"core-js": "^3.8.3",
"echarts": "^5.6.0",
"echarts-gl": "^2.0.9",
"element-plus": "^2.9.7",
"pinia": "^3.0.1",
"qwebchannel": "^6.2.0",

View File

@@ -2,7 +2,7 @@ import { getAxios, postAxios, downFile } from '@/utils/axios.js'
//登录
export function login(data) {
return postAxios({ url: 'api/user/doLogin', data })
return postAxios({ url: 'account/login', data })
}
//ai

View File

@@ -4,40 +4,39 @@ import HomeView from '../views/HomeView.vue'
const routes = [
{
path: '/',
name: 'home',
name: 'login',
component: HomeView
},
{
path: '/nav',
name: 'nav',
redirect: '/nav/Home', // 默认跳转
component: () => import(/* webpackChunkName: "hostsList" */ '../views/nav.vue'),
redirect: '/nav/home', // 默认跳转
component: () => import( '../views/nav.vue'),
children: [
{
path: 'Home',
name: 'Home',
component: () => import(/* webpackChunkName: "hostsList" */ '../views/hosts/Home.vue'),
path: 'home',
name: 'home',
component: () => import( '../views/hosts/Home.vue'),
},
{
path: 'scriptManagement',
name: 'scriptManagement',
component: () => import(/* webpackChunkName: "hostsList" */ '../views/hosts/ai/scriptManagement.vue'),
component: () => import( '../views/hosts/ai/scriptManagement.vue'),
},
{
path: 'LanguageManagement',
name: 'LanguageManagement',
component: () => import(/* webpackChunkName: "hostsList" */ '../views/hosts/ai/LanguageManagement.vue'),
component: () => import( '../views/hosts/ai/LanguageManagement.vue'),
},
{
path: 'miniAM',
name: 'miniAM',
component: () => import(/* webpackChunkName: "hostsList" */ '../views/hosts/mini/miniAM.vue'),
component: () => import( '../views/hosts/mini/miniAM.vue'),
},
{
path: 'miniIntegral',
name: 'miniIntegral',
component: () => import(/* webpackChunkName: "hostsList" */ '../views/hosts/mini/miniIntegral.vue'),
component: () => import( '../views/hosts/mini/miniIntegral.vue'),
},
]
}
@@ -47,4 +46,22 @@ const router = createRouter({
routes
})
// 添加导航守卫
router.beforeEach((to, from, next) => {
// 假设你有一个方法来检查用户是否已登录
const isAuthenticated = () => {
return localStorage.getItem('token') == 1;
};
// 定义需要登录才能访问的路由
const requiresAuth = ['nav','home', 'scriptManagement', 'LanguageManagement', 'miniAM', 'miniIntegral'];
// 如果需要登录且用户未登录,则重定向到登录页面
if (requiresAuth.includes(to.name) && !isAuthenticated()) {
next({ name: 'login' });
} else {
next();
}
});
export default router

View File

@@ -30,9 +30,6 @@ if (process.env.NODE_ENV === 'development') {
// 请求拦截器
axios.interceptors.request.use((config) => {
const url = sliceUrl(config.url)
// if (!(config.url == 'templateList' || config.url == 'languageList')) {
// config.headers['vvtoken'] = getToken();
// }
// 请求超时时间 - 毫秒
config.timeout = 60000
@@ -49,10 +46,9 @@ axios.interceptors.response.use((response) => {
if (response.data.code == '200') {
return response.data.data
} else {
router.push('/')
ElMessage.error(response.data.code + '' + response.data.message);
ElMessage.error(response.data.code + '' + response.data.msg);
return Promise.reject(response.data.msg);
}
}, (error) => {
// 可添加请求失败后的处理逻辑
return Promise.reject(error)

View File

@@ -69,10 +69,9 @@
<script setup>
import { ref, reactive, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { login, getIdByName } from '@/api/account';
import { getToken, setToken, setUser, setUserPass, getUserPass } from '@/utils/storage';
import { login} from '@/api/account';
import { setUserPass, getUserPass,setToken } from '@/utils/storage';
import { ElLoading } from 'element-plus';
import { usePythonBridge } from '@/utils/pythonBridge'
// const { getVersion } = usePythonBridge();
@@ -104,24 +103,19 @@ const onSubmit = () => {
background: 'rgba(0, 0, 0, 0.7)',
});
setUserPass(formData.value);
getIdByName(formData.value.tenantName).then((tenantId) => {
console.log(tenantId)
login({
// tenantId: Number(tenantId),
username: formData.value.userId,
password: formData.value.password,
account: formData.value.userId,
pwd: formData.value.password,
}).then((res) => {
loading.close();
console.log(res)
setToken(res.tokenValue);
setUser(res);
router.push('/nav');
if (res == 1) {
setToken(res);
router.push("/nav");
}
}).catch((err) => {
loading.close();
console.log(err);
});
})
};
</script>

View File

@@ -1,31 +1,59 @@
<template>
<div class="home">
<!-- <div id="main" class="main"></div> -->
<div class="noData">
暂无数据
</div>
</div>
</template>
<script setup>
import {
ref, // 响应式基础
watch, // 侦听器
onMounted, // 组件挂载完成后执行
onUpdated, // 组件更新后执行
onUnmounted, // 组件销毁前执行
} from "vue";
const refname = ref('');
watch(refname, async (newQuestion, oldQuestion) => {
// 变化后执行
});
onMounted(() => {
// 组件挂载完成后执行
});
onUpdated(() => {
// 组件更新后执行
});
onUnmounted(() => {
// 组件销毁前执行
});
// <script setup>
// import { ref, watch, onMounted, onUpdated, onUnmounted } from "vue";
// const refname = ref('');
// const echarts = require('echarts/lib/echarts');
// require('echarts/lib/component/grid');
// require('echarts/lib/chart/bar');
// const initChart = () => {
// var chartDom = document.getElementById('main');
// var myChart = echarts.init(chartDom);
// var option = {
// xAxis: {
// type: 'category',
// data: ['用户量', '123', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
// },
// yAxis: {
// type: 'value'
// },
// series: [
// {
// data: [120, 200, 150, 80, 70, 110, 130],
// type: 'bar'
// }
// ]
// };
// myChart.setOption(option);
// };
// watch(refname, (newQuestion) => {
// // 变化后执行
// // 如果 refname 的变化影响图表数据,可以在这里更新 option 并调用 myChart.setOption(option)
// });
// onMounted(() => {
// initChart();
// });
// onUpdated(() => {
// // 组件更新后执行
// // 如果需要根据更新重新初始化图表或更新数据,可以在这里添加逻辑
// });
// onUnmounted(() => {
// // 组件销毁前执行
// // 如果需要销毁图表实例以释放资源,可以在这里添加逻辑
// });
</script>
<style scoped>
@@ -34,5 +62,16 @@ onUnmounted(() => {
height: 100%;
background-color: #ffffff;
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
}
</style>
.noData{
font-size: 20px;
color: #999999;
}
.main{
width: 40%;
height: 40%;
}
</style>

View File

@@ -157,13 +157,13 @@ function handleSaveWordsAdd() {
});
return;
}
wordsAddStatus.value = false;
addDialog(wordsAddData.value)
.then(() => {
ElMessage({
type: "success",
message: "添加成功",
});
wordsAddStatus.value = false;
getLanguageListDataFn();
})
.catch(() => {
@@ -224,8 +224,7 @@ function handleDelete(id) {
function getLanguageListDataFn() {
getDialogList().then((res) => {
getDialogListData.value = res;
});
getLanguageList().then((res) => {
getLanguageList().then((res) => {
getLanguageListData.value = res;
LanguageData.value = mergeArrays(
getDialogListData.value,
@@ -233,6 +232,7 @@ function getLanguageListDataFn() {
);
console.log("LanguageData", LanguageData.value);
});
});
}
watch(refname, async (newQuestion, oldQuestion) => {
// 变化后执行

View File

@@ -1,6 +1,8 @@
<template>
<div class="miniAM">
小程序账号管理
<div class="noData">
暂无数据
</div>
</div>
</template>
@@ -33,6 +35,13 @@ onUnmounted(() => {
height: 100%;
background-color: #ffffff;
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
}
.noData{
font-size: 20px;
color: #999999;
}
/* 样式定义 */
</style>

View File

@@ -44,7 +44,7 @@
<span>Ai管理</span>
</template>
<el-menu-item-group>
<template #title><span>Ai</span></template>
<template #title v-if="isCollapse"><span>Ai</span></template>
<el-menu-item index="/nav/scriptManagement">话术管理</el-menu-item>
<el-menu-item index="/nav/LanguageManagement">语言管理</el-menu-item>
</el-menu-item-group>
@@ -56,7 +56,7 @@
<span>小程序管理</span>
</template>
<el-menu-item-group>
<template #title><span>小程序</span></template>
<template #title v-if="isCollapse"><span>小程序</span></template>
<el-menu-item index="/nav/miniAM">账号管理</el-menu-item>
<el-menu-item index="/nav/miniIntegral">积分配置</el-menu-item>
</el-menu-item-group>