Compare commits
2 Commits
ec8bffa6f0
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e29e595fef | ||
|
|
b2346c856a |
18
package-lock.json
generated
18
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<title>
|
||||
<%= webpackConfig.name %>
|
||||
</title>
|
||||
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
|
||||
<!-- <script src="qrc:///qtwebchannel/qwebchannel.js"></script> -->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -29,12 +29,7 @@ if (process.env.NODE_ENV === 'development') {
|
||||
|
||||
// 请求拦截器
|
||||
axios.interceptors.request.use((config) => {
|
||||
console.log("config", config)
|
||||
const url = sliceUrl(config.url)
|
||||
console.log("url", url)
|
||||
// if (!(config.url == 'templateList' || config.url == 'languageList')) {
|
||||
// config.headers['vvtoken'] = getToken();
|
||||
// }
|
||||
|
||||
// 请求超时时间 - 毫秒
|
||||
config.timeout = 60000
|
||||
@@ -48,15 +43,12 @@ axios.interceptors.request.use((config) => {
|
||||
|
||||
// 响应拦截器
|
||||
axios.interceptors.response.use((response) => {
|
||||
console.log("```````````````response```````````````````", response.data)
|
||||
if (response.data.code == '200') {
|
||||
console.log("response", response.data.data)
|
||||
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)
|
||||
@@ -83,9 +75,6 @@ export function getAxios({ url, params }) {
|
||||
// axios的post请求
|
||||
export function postAxios({ url, data }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log("```````````````data```````````````", data);
|
||||
console.log("````````````````url````````````````", url);
|
||||
|
||||
axios.post(
|
||||
url,
|
||||
data,
|
||||
@@ -104,8 +93,6 @@ export const downFile = async (urlstr, data) => {
|
||||
// 获取文件名(如果后端设置了 Content-Disposition)
|
||||
const contentDisposition = response.headers['content-disposition'];
|
||||
let fileName = 'default-file-name'; // 默认文件名
|
||||
console.log(contentDisposition)
|
||||
console.log(response)
|
||||
if (contentDisposition) {
|
||||
// 从响应头中提取文件名
|
||||
const fileNameMatch = contentDisposition.match(/filename="(.+)"/);
|
||||
@@ -139,7 +126,6 @@ function cheekalive() {
|
||||
}
|
||||
}
|
||||
).then(res => {
|
||||
console.log(res.data)
|
||||
if (res.data) {
|
||||
|
||||
} else {
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -96,6 +96,7 @@ function languageSave() {
|
||||
type: "success",
|
||||
message: "修改成功",
|
||||
});
|
||||
getLanguageListData();
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -112,6 +113,7 @@ function languageSave() {
|
||||
type: "success",
|
||||
message: "添加成功",
|
||||
});
|
||||
getLanguageListData();
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -132,6 +134,7 @@ function handleDelete(index, row) {
|
||||
type: "success",
|
||||
message: "删除成功",
|
||||
});
|
||||
getLanguageListData();
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -142,21 +145,27 @@ function handleDelete(index, row) {
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
function getLanguageListData() {
|
||||
// 获取语言列表
|
||||
getLanguageList()
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
tableData.value = res;
|
||||
}).catch(() => {
|
||||
ElMessage({
|
||||
type: "error",
|
||||
message: "获取语言列表失败",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
watch(refname, async (newQuestion, oldQuestion) => {
|
||||
// 变化后执行
|
||||
});
|
||||
onMounted(() => {
|
||||
// // 组件挂载完成后执行
|
||||
// // 获取语言列表
|
||||
// getLanguageList()
|
||||
// .then((res) => {
|
||||
// tableData.value = res.data;
|
||||
// }).catch(() => {
|
||||
// ElMessage({
|
||||
// type: "error",
|
||||
// message: "获取语言列表失败",
|
||||
// });
|
||||
// });
|
||||
getLanguageListData();
|
||||
// 组件挂载完成后执行
|
||||
});
|
||||
onUpdated(() => {
|
||||
// 组件更新后执行
|
||||
|
||||
@@ -73,7 +73,14 @@
|
||||
<el-drawer v-model="wordsAddStatus" :with-header="false">
|
||||
<div class="dialog-content">
|
||||
<div class="dialog-title">话术编辑</div>
|
||||
<el-select v-model="wordsAddData.language" placeholder="请选择语言"></el-select>
|
||||
<el-select v-model="wordsAddData.language" placeholder="请选择语言">
|
||||
<el-option
|
||||
v-for="item in LanguageData"
|
||||
:key="item.language"
|
||||
:label="item.language"
|
||||
:value="item.language"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input
|
||||
v-model="wordsAddData.content"
|
||||
style="width: 100%; margin-top: 20px"
|
||||
@@ -90,7 +97,13 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getDialogList, getLanguageList, editDialog, deleteDialog,addDialog} from "@/api/account";
|
||||
import {
|
||||
getDialogList,
|
||||
getLanguageList,
|
||||
editDialog,
|
||||
deleteDialog,
|
||||
addDialog,
|
||||
} from "@/api/account";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import {
|
||||
ref, // 响应式基础
|
||||
@@ -115,28 +128,28 @@ const handleClick = (e) => {
|
||||
};
|
||||
|
||||
//数据处理
|
||||
function groupContentByLanguage(arr1, arr2) {
|
||||
return arr2.map((item) => {
|
||||
// 过滤出对应语言的内容
|
||||
const contents = arr1
|
||||
.filter(({ language }) => language === item.language)
|
||||
// 按 id 排序
|
||||
.sort((a, b) => a.id - b.id)
|
||||
// 转换为所需格式
|
||||
.map(({ id, content }) => ({ id, content }));
|
||||
function mergeArrays(arr1, arr2) {
|
||||
const result = [];
|
||||
const languages = new Set([...arr1.map(i => i.language), ...arr2.map(i => i.language)]);
|
||||
|
||||
for (const lang of languages) {
|
||||
const contents = arr1.filter(item => item.language === lang)
|
||||
.map(item => ({ id: item.id, content: item.content }));
|
||||
|
||||
result.push({
|
||||
language: lang,
|
||||
content: contents
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
id: item.id,
|
||||
language: item.language,
|
||||
content: contents,
|
||||
};
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
const dialogVisible = ref(false);
|
||||
const handletextareadeta = ref({});
|
||||
//添加话术
|
||||
function handleSaveWordsAdd() {
|
||||
console.log("handleSaveWordsAdd",wordsAddData.value);
|
||||
if (wordsAddData.value.language === "" || wordsAddData.value.content === "") {
|
||||
ElMessage({
|
||||
type: "error",
|
||||
@@ -144,19 +157,16 @@ function handleSaveWordsAdd() {
|
||||
});
|
||||
return;
|
||||
}
|
||||
wordsAddStatus.value = false;
|
||||
addDialog(wordsAddData.value)
|
||||
.then(() => {
|
||||
ElMessage({
|
||||
type: "success",
|
||||
message: "添加成功",
|
||||
});
|
||||
wordsAddStatus.value = false;
|
||||
getDialogListData.value = getDialogList();
|
||||
LanguageData.value = groupContentByLanguage(
|
||||
getDialogListData.value,
|
||||
getLanguageListData.value
|
||||
);
|
||||
}).catch(() => {
|
||||
getLanguageListDataFn();
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
type: "error",
|
||||
message: "添加失败",
|
||||
@@ -180,6 +190,8 @@ function handleSave() {
|
||||
type: "success",
|
||||
message: "保存成功",
|
||||
});
|
||||
getLanguageListDataFn();
|
||||
dialogVisible.value = false;
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -187,8 +199,6 @@ function handleSave() {
|
||||
message: "保存失败",
|
||||
});
|
||||
});
|
||||
dialogVisible.value = false;
|
||||
getDialogListData.value = getDialogList();
|
||||
}
|
||||
// 删除
|
||||
function handleDelete(id) {
|
||||
@@ -200,7 +210,7 @@ function handleDelete(id) {
|
||||
type: "success",
|
||||
message: "删除成功",
|
||||
});
|
||||
getDialogListData.value = getDialogList();
|
||||
getLanguageListDataFn();
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -211,17 +221,24 @@ function handleDelete(id) {
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
function getLanguageListDataFn() {
|
||||
getDialogList().then((res) => {
|
||||
getDialogListData.value = res;
|
||||
getLanguageList().then((res) => {
|
||||
getLanguageListData.value = res;
|
||||
LanguageData.value = mergeArrays(
|
||||
getDialogListData.value,
|
||||
getLanguageListData.value
|
||||
);
|
||||
console.log("LanguageData", LanguageData.value);
|
||||
});
|
||||
});
|
||||
}
|
||||
watch(refname, async (newQuestion, oldQuestion) => {
|
||||
// 变化后执行
|
||||
});
|
||||
onMounted(() => {
|
||||
// getDialogListData.value = getDialogList();
|
||||
// console.log(getDialogListData.value);
|
||||
// getLanguageListData.value = getLanguageList();
|
||||
LanguageData.value = groupContentByLanguage(
|
||||
getDialogListData.value,
|
||||
getLanguageListData.value
|
||||
);
|
||||
getLanguageListDataFn();
|
||||
});
|
||||
onUpdated(() => {
|
||||
// 组件更新后执行
|
||||
@@ -280,7 +297,7 @@ onUnmounted(() => {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.addwords:hover{
|
||||
.addwords:hover {
|
||||
background-color: rgb(214, 214, 214);
|
||||
}
|
||||
.addwordsimg {
|
||||
|
||||
@@ -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>
|
||||
@@ -90,18 +90,7 @@ import {
|
||||
onUnmounted, // 组件销毁前执行
|
||||
} from "vue";
|
||||
const refname = ref("");
|
||||
const tableData = ref([
|
||||
{
|
||||
id: 1,
|
||||
functionName: "登录",
|
||||
functionValue: 10,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
functionName: "分享",
|
||||
functionValue: 20,
|
||||
},
|
||||
]);
|
||||
const tableData = ref([]);
|
||||
const dialogVisible = ref(false);
|
||||
const miniIntegraldeta = ref({});
|
||||
//保存积分配置
|
||||
@@ -130,6 +119,7 @@ function miniIntegralAddSave() {
|
||||
});
|
||||
dialogVisible.value = false;
|
||||
miniIntegraldeta.value = {};
|
||||
getIntegralList()
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -147,6 +137,7 @@ function miniIntegralAddSave() {
|
||||
});
|
||||
dialogVisible.value = false;
|
||||
miniIntegraldeta.value = {};
|
||||
getIntegralList()
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -160,7 +151,6 @@ function miniIntegralAddSave() {
|
||||
function miniIntegralEdit(index, row) {
|
||||
dialogVisible.value = true;
|
||||
miniIntegraldeta.value = row;
|
||||
console.log(index, row);
|
||||
}
|
||||
//删除积分配置
|
||||
function miniIntegralDelete(index, row) {
|
||||
@@ -172,6 +162,7 @@ function miniIntegralDelete(index, row) {
|
||||
type: "success",
|
||||
message: "删除成功",
|
||||
});
|
||||
getIntegralList()
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
@@ -182,11 +173,24 @@ function miniIntegralDelete(index, row) {
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
// 获取积分配置列表
|
||||
function getIntegralList() {
|
||||
getWxConfigList()
|
||||
.then((res) => {
|
||||
tableData.value = res;
|
||||
})
|
||||
.catch(() => {
|
||||
ElMessage({
|
||||
type: "error",
|
||||
message: "获取积分配置列表失败",
|
||||
});
|
||||
});
|
||||
}
|
||||
watch(refname, async (newQuestion, oldQuestion) => {
|
||||
// 变化后执行
|
||||
});
|
||||
onMounted(() => {
|
||||
// 组件挂载完成后执行
|
||||
getIntegralList();
|
||||
});
|
||||
onUpdated(() => {
|
||||
// 组件更新后执行
|
||||
|
||||
@@ -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>
|
||||
@@ -70,7 +70,7 @@
|
||||
<!-- 顶部 -->
|
||||
<el-header class="header">
|
||||
<el-breadcrumb :separator-icon="ArrowRight">
|
||||
<el-breadcrumb-item :to="{ path: '/nav/Home' }">首页</el-breadcrumb-item>
|
||||
<el-breadcrumb-item :to="{ path: '/nav/Home' }" @click="onBreadcrumbClick('/nav/Home')">首页</el-breadcrumb-item>
|
||||
<el-breadcrumb-item
|
||||
v-for="(item, index) in breadcrumbList"
|
||||
:key="index"
|
||||
@@ -129,7 +129,6 @@ function convertPathsToMenuItems(paths) {
|
||||
}
|
||||
//面包屑
|
||||
function handleSelect(index, indexPath) {
|
||||
console.log("select", convertPathsToMenuItems(indexPath));
|
||||
breadcrumbList.value = convertPathsToMenuItems(indexPath);
|
||||
}
|
||||
//面包屑地址判断
|
||||
@@ -140,6 +139,17 @@ function handleurl(indexPath) {
|
||||
return indexPath;
|
||||
}
|
||||
}
|
||||
//处理面包屑点击事件
|
||||
function getPreviousObjects(arr, targetPath) {
|
||||
// 找到匹配目标路径的第一个元素的索引
|
||||
const index = arr.findIndex(item => item.path === targetPath);
|
||||
|
||||
// 如果找到匹配项,则返回从开始到该索引的子数组(包含自身)
|
||||
return index !== -1 ? arr.slice(0, index + 1) : [];
|
||||
}
|
||||
function onBreadcrumbClick(path) {
|
||||
breadcrumbList.value = getPreviousObjects(breadcrumbList.value, path)
|
||||
}
|
||||
//菜单展开
|
||||
function toggleCollapse() {
|
||||
asideWidth.value = isCollapse.value ? "10vw" : "4vw";
|
||||
|
||||
Reference in New Issue
Block a user