Merge pull request 'feat(verbal-trick): 新增增强话术功能' (#203) from dj into master
Reviewed-on: http://git.feashow.cn/feashow/SmartOpsWeb/pulls/203
This commit is contained in:
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
<fvFormDialog ref="formDialogRef" width="400" :title="dialogTitle"
|
<fvFormDialog ref="formDialogRef" width="550" :title="dialogTitle"
|
||||||
:form-schema="formSchema" :form-rules="formRules"
|
:form-schema="formSchema" :form-rules="formRules"
|
||||||
@dialogSubmit="handleSubmitAddressBook"></fvFormDialog>
|
@dialogSubmit="handleSubmitAddressBook"></fvFormDialog>
|
||||||
</div>
|
</div>
|
||||||
@@ -78,16 +78,16 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
const formDialogRef = ref()
|
const formDialogRef = ref()
|
||||||
const dialogTitle = ref("添加问题答案");
|
const dialogTitle = ref("训练知识库");
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
answer: [
|
answer: [
|
||||||
{required: true, message: "答案不能为空", trigger: "blur"},
|
{required: true, message: "知识校准不能为空", trigger: "blur"},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
const formSchema = computed(() => {
|
const formSchema = computed(() => {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
label: '问题',
|
label: '知识内容',
|
||||||
prop: 'query',
|
prop: 'query',
|
||||||
component: 'el-input',
|
component: 'el-input',
|
||||||
colProps: {
|
colProps: {
|
||||||
@@ -95,16 +95,18 @@ const formSchema = computed(() => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '答案',
|
label: '知识校准',
|
||||||
prop: 'answer',
|
prop: 'answer',
|
||||||
component: 'el-input',
|
component: 'el-input',
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 24
|
span: 24
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
placeholder: '请输入答案',
|
placeholder: '请输入知识校准',
|
||||||
clearable: true,
|
clearable: true,
|
||||||
}
|
type: 'textarea',
|
||||||
|
rows: 4,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,122 +1,134 @@
|
|||||||
import { defineStore } from "pinia";
|
import {defineStore} from "pinia";
|
||||||
import { ref } from "vue";
|
import {ref} from "vue";
|
||||||
import { getRouters } from "@/api/system/menu";
|
import {getRouters} from "@/api/system/menu";
|
||||||
import Layout from '@/layout/index.vue'
|
import Layout from '@/layout/index.vue'
|
||||||
import ParentView from '@/components/ParentView.vue'
|
import ParentView from '@/components/ParentView.vue'
|
||||||
import router from "../router";
|
import router from "../router";
|
||||||
|
import {getUserInfo} from "@/api/login";
|
||||||
|
|
||||||
const VueComUrl = import.meta.glob('../views/**/*.vue')
|
const VueComUrl = import.meta.glob('../views/**/*.vue')
|
||||||
|
|
||||||
export const usePermisstionStroe = defineStore('permisstion', () => {
|
export const usePermisstionStroe = defineStore('permisstion', () => {
|
||||||
const asyncRouters = ref([])
|
const asyncRouters = ref([])
|
||||||
//定义是否加载路由变量
|
const userinfo = ref()
|
||||||
const isLoadRoutes = ref(false)
|
//定义是否加载路由变量
|
||||||
const menuList = ref([{
|
const isLoadRoutes = ref(false)
|
||||||
name: 'home',
|
const menuList = ref([{
|
||||||
path: '/home',
|
name: 'home',
|
||||||
icon: 'home',
|
path: '/home',
|
||||||
title: '工作台',
|
icon: 'home',
|
||||||
meta: {
|
title: '工作台',
|
||||||
breadcrumb: true
|
meta: {
|
||||||
}
|
breadcrumb: true
|
||||||
}])
|
|
||||||
|
|
||||||
const setIsLoadRoutes = (status) => {
|
|
||||||
return isLoadRoutes.value = status
|
|
||||||
}
|
|
||||||
const setAsyncRouters = async () => {
|
|
||||||
await getRouters().then(res => {
|
|
||||||
if (res.code === 1000) {
|
|
||||||
const sRouter = JSON.parse(JSON.stringify(res.data))
|
|
||||||
const mData = JSON.parse(JSON.stringify(res.data))
|
|
||||||
asyncRouters.value = formatAsyncRouters(sRouter)
|
|
||||||
// menuList.value = generateMenu(mData)
|
|
||||||
menuList.value = [...menuList.value, ...generateMenu(mData)]
|
|
||||||
addAsyncRouters(asyncRouters.value)
|
|
||||||
isLoadRoutes.value = false
|
|
||||||
} else {
|
|
||||||
isLoadRoutes.value = true
|
|
||||||
setTimeout(() => setAsyncRouters(), 3000)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const formatAsyncRouters = (routers) => {
|
|
||||||
return routers.filter(route => {
|
|
||||||
if (route.component) {
|
|
||||||
if (route.component === 'Layout') {
|
|
||||||
route.component = Layout
|
|
||||||
} else if (route.component === 'ParentView') {
|
|
||||||
route.component = ParentView
|
|
||||||
}
|
}
|
||||||
else {
|
}])
|
||||||
route.component = loadView(route.component)
|
|
||||||
|
const setIsLoadRoutes = (status) => {
|
||||||
|
return isLoadRoutes.value = status
|
||||||
|
}
|
||||||
|
const getUser=async ()=>{
|
||||||
|
let {data}= await getUserInfo()
|
||||||
|
return data.user.roles[0].roleKey == 'voice';
|
||||||
|
}
|
||||||
|
const setAsyncRouters = async () => {
|
||||||
|
await getRouters().then(async res => {
|
||||||
|
if (res.code === 1000) {
|
||||||
|
const sRouter = JSON.parse(JSON.stringify(res.data))
|
||||||
|
const mData = JSON.parse(JSON.stringify(res.data))
|
||||||
|
asyncRouters.value = formatAsyncRouters(sRouter)
|
||||||
|
let role = await getUser()
|
||||||
|
if(role){
|
||||||
|
generateMenu(mData).map(item => {
|
||||||
|
if (item.path == '/voice/management') {
|
||||||
|
item.children = item.children.filter(item => item.name !== "Speech")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
menuList.value = [...menuList.value, ...generateMenu(mData)]
|
||||||
|
addAsyncRouters(asyncRouters.value)
|
||||||
|
isLoadRoutes.value = false
|
||||||
|
} else {
|
||||||
|
isLoadRoutes.value = true
|
||||||
|
setTimeout(() => setAsyncRouters(), 3000)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const formatAsyncRouters = (routers) => {
|
||||||
|
return routers.filter(route => {
|
||||||
|
if (route.component) {
|
||||||
|
if (route.component === 'Layout') {
|
||||||
|
route.component = Layout
|
||||||
|
} else if (route.component === 'ParentView') {
|
||||||
|
route.component = ParentView
|
||||||
|
} else {
|
||||||
|
route.component = loadView(route.component)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (route.children !== null && route.children && route.children.length !== 0) {
|
||||||
|
route.children = formatAsyncRouters(route.children)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const addAsyncRouters = (routers) => {
|
||||||
|
routers.forEach(route => {
|
||||||
|
router.addRoute(route)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateMenu = (routes) => {
|
||||||
|
return routes.filter(item => {
|
||||||
|
if (item.children && item.children.length !== 0) {
|
||||||
|
generateMenu(item.children)
|
||||||
|
}
|
||||||
|
if (item.pathParams != null) {
|
||||||
|
item.path = formatPath(item.path, JSON.parse(item.pathParams))
|
||||||
|
}
|
||||||
|
item.title = item.meta.title
|
||||||
|
item.icon = item.meta.icon
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拼接地址
|
||||||
|
const formatPath = (path, query) => {
|
||||||
|
const queryArr = []
|
||||||
|
let newPath = path
|
||||||
|
for (const key in query) {
|
||||||
|
queryArr.push({label: key, value: query[key]})
|
||||||
}
|
}
|
||||||
}
|
queryArr.forEach((item, index) => {
|
||||||
if (route.children !== null && route.children && route.children.length !== 0) {
|
if (!index) {
|
||||||
route.children = formatAsyncRouters(route.children)
|
newPath += `?${item.label}=${item.value}`
|
||||||
}
|
} else {
|
||||||
return true
|
newPath += `&${item.label}=${item.value}`
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
|
return newPath
|
||||||
const addAsyncRouters = (routers) => {
|
|
||||||
routers.forEach(route => {
|
|
||||||
router.addRoute(route)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const generateMenu = (routes) => {
|
|
||||||
return routes.filter(item => {
|
|
||||||
if (item.children && item.children.length !== 0) {
|
|
||||||
generateMenu(item.children)
|
|
||||||
}
|
|
||||||
if (item.pathParams != null) {
|
|
||||||
item.path = formatPath(item.path, JSON.parse(item.pathParams))
|
|
||||||
}
|
|
||||||
item.title = item.meta.title
|
|
||||||
item.icon = item.meta.icon
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 拼接地址
|
|
||||||
const formatPath = (path, query) => {
|
|
||||||
const queryArr = []
|
|
||||||
let newPath = path
|
|
||||||
for (const key in query) {
|
|
||||||
queryArr.push({label: key, value: query[key]})
|
|
||||||
}
|
}
|
||||||
queryArr.forEach((item, index)=>{
|
|
||||||
if(!index) {
|
|
||||||
newPath += `?${item.label}=${item.value}`
|
|
||||||
} else {
|
|
||||||
newPath += `&${item.label}=${item.value}`
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return newPath
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const loadView = (view) => {
|
const loadView = (view) => {
|
||||||
if (import.meta.env.MODE === 'development') {
|
if (import.meta.env.MODE === 'development') {
|
||||||
return () => import(/* @vite-ignore */`/src/views/${view}.vue`)
|
return () => import(/* @vite-ignore */`/src/views/${view}.vue`)
|
||||||
} else {
|
} else {
|
||||||
return VueComUrl['../views/' + view + '.vue']
|
return VueComUrl['../views/' + view + '.vue']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const removeMenu = () => {
|
const removeMenu = () => {
|
||||||
menuList.value.length = 0
|
menuList.value.length = 0
|
||||||
asyncRouters.value.length = 0
|
asyncRouters.value.length = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
asyncRouters,
|
asyncRouters,
|
||||||
menuList,
|
menuList,
|
||||||
isLoadRoutes,
|
isLoadRoutes,
|
||||||
setAsyncRouters,
|
setAsyncRouters,
|
||||||
setIsLoadRoutes,
|
setIsLoadRoutes,
|
||||||
removeMenu
|
removeMenu
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user