Compare commits
No commits in common. "6f45facc1becf4f74b00f3bac78ced8bb23f16b7" and "eab207256afedcabccc083189a20d6ba45963a86" have entirely different histories.
6f45facc1b
...
eab207256a
@ -11,7 +11,7 @@ const downloadPhoto = (imgSrc:any) => {
|
|||||||
const url = window.URL.createObjectURL(res.data);
|
const url = window.URL.createObjectURL(res.data);
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = '下载图片.'+ imgSrc.substr(imgSrc.lastIndexOf('.')+1) || 'jpg';
|
a.download = '下载图片.jpg';
|
||||||
document.body.appendChild(a);
|
document.body.appendChild(a);
|
||||||
a.click();
|
a.click();
|
||||||
document.body.removeChild(a);
|
document.body.removeChild(a);
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { baseUrlHost } from '../baseUrlHost';
|
|
||||||
import request from '/@/utils/request';
|
import request from '/@/utils/request';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,11 +12,11 @@ import request from '/@/utils/request';
|
|||||||
*/
|
*/
|
||||||
export function useMenuApi() {
|
export function useMenuApi() {
|
||||||
return {
|
return {
|
||||||
getAdminMenu: (id: number) => {
|
getAdminMenu: (params?: object) => {
|
||||||
return request({
|
return request({
|
||||||
// url: '/gitee/lyt-top/vue-next-admin-images/raw/master/menu/adminMenu.json',
|
url: '/gitee/lyt-top/vue-next-admin-images/raw/master/menu/adminMenu.json',
|
||||||
url:baseUrlHost + `/acGrouptype/findByUserMenu/${id}`,
|
|
||||||
method: 'get',
|
method: 'get',
|
||||||
|
params,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getTestMenu: (params?: object) => {
|
getTestMenu: (params?: object) => {
|
||||||
|
@ -3,23 +3,19 @@
|
|||||||
<el-aside class="layout-aside" :class="setCollapseStyle">
|
<el-aside class="layout-aside" :class="setCollapseStyle">
|
||||||
<Logo v-if="setShowLogo" />
|
<Logo v-if="setShowLogo" />
|
||||||
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef" @mouseenter="onAsideEnterLeave(true)" @mouseleave="onAsideEnterLeave(false)">
|
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef" @mouseenter="onAsideEnterLeave(true)" @mouseleave="onAsideEnterLeave(false)">
|
||||||
<div v-if="isDataReady">
|
<Vertical :menuList="state.menuList" />
|
||||||
<Vertical :menuList="Menulist" />
|
|
||||||
</div>
|
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</el-aside>
|
</el-aside>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="layoutAside">
|
<script setup lang="ts" name="layoutAside">
|
||||||
import { defineAsyncComponent, reactive, computed, watch, onBeforeMount, ref, onMounted } from 'vue';
|
import { defineAsyncComponent, reactive, computed, watch, onBeforeMount, ref } from 'vue';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
import { useRoutesList } from '/@/stores/routesList';
|
import { useRoutesList } from '/@/stores/routesList';
|
||||||
import { useThemeConfig } from '/@/stores/themeConfig';
|
import { useThemeConfig } from '/@/stores/themeConfig';
|
||||||
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
|
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
|
||||||
import mittBus from '/@/utils/mitt';
|
import mittBus from '/@/utils/mitt';
|
||||||
import {useMenuApi} from '/@/api/menu'
|
|
||||||
|
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
|
const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
|
||||||
@ -38,10 +34,6 @@ const state = reactive<AsideState>({
|
|||||||
clientWidth: 0,
|
clientWidth: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
const useMenuapi = useMenuApi();
|
|
||||||
|
|
||||||
const isDataReady = ref(false)
|
|
||||||
|
|
||||||
// 设置菜单展开/收起时的宽度
|
// 设置菜单展开/收起时的宽度
|
||||||
const setCollapseStyle = computed(() => {
|
const setCollapseStyle = computed(() => {
|
||||||
const { layout, isCollapse, menuBar } = themeConfig.value;
|
const { layout, isCollapse, menuBar } = themeConfig.value;
|
||||||
@ -95,23 +87,6 @@ const setFilterRoutes = () => {
|
|||||||
if (themeConfig.value.layout === 'columns') return false;
|
if (themeConfig.value.layout === 'columns') return false;
|
||||||
state.menuList = filterRoutesFun(routesList.value);
|
state.menuList = filterRoutesFun(routesList.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
let Menulist = ref([]);
|
|
||||||
// const defaultOpeneds =reactive([])
|
|
||||||
const getmenulist = async() =>{
|
|
||||||
try{
|
|
||||||
const res = await useMenuapi.getAdminMenu(1);
|
|
||||||
// console.log('菜单数据',res);
|
|
||||||
Menulist.value = res.data;
|
|
||||||
isDataReady.value = true
|
|
||||||
// for(let i = 0; i < Menulist.value.length; i++){
|
|
||||||
// defaultOpeneds.push(i + '')
|
|
||||||
// }
|
|
||||||
}catch(error){
|
|
||||||
console.error(error)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 路由过滤递归函数
|
// 路由过滤递归函数
|
||||||
const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
|
const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
|
||||||
return arr
|
return arr
|
||||||
@ -122,7 +97,6 @@ const filterRoutesFun = <T extends RouteItem>(arr: T[]): T[] => {
|
|||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// 设置菜单导航是否固定(移动端)
|
// 设置菜单导航是否固定(移动端)
|
||||||
const initMenuFixed = (clientWidth: number) => {
|
const initMenuFixed = (clientWidth: number) => {
|
||||||
state.clientWidth = clientWidth;
|
state.clientWidth = clientWidth;
|
||||||
@ -139,7 +113,6 @@ const onAsideEnterLeave = (bool: Boolean) => {
|
|||||||
onBeforeMount(() => {
|
onBeforeMount(() => {
|
||||||
initMenuFixed(document.body.clientWidth);
|
initMenuFixed(document.body.clientWidth);
|
||||||
setFilterRoutes();
|
setFilterRoutes();
|
||||||
// await getmenulist();
|
|
||||||
// 此界面不需要取消监听(mittBus.off('setSendColumnsChildren))
|
// 此界面不需要取消监听(mittBus.off('setSendColumnsChildren))
|
||||||
// 因为切换布局时有的监听需要使用,取消了监听,某些操作将不生效
|
// 因为切换布局时有的监听需要使用,取消了监听,某些操作将不生效
|
||||||
mittBus.on('setSendColumnsChildren', (res: MittMenu) => {
|
mittBus.on('setSendColumnsChildren', (res: MittMenu) => {
|
||||||
@ -165,11 +138,6 @@ onBeforeMount(() => {
|
|||||||
closeLayoutAsideMobileMode();
|
closeLayoutAsideMobileMode();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
onMounted(async() =>{
|
|
||||||
await getmenulist();
|
|
||||||
|
|
||||||
|
|
||||||
})
|
|
||||||
// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
|
// 监听 themeConfig 配置文件的变化,更新菜单 el-scrollbar 的高度
|
||||||
watch(
|
watch(
|
||||||
() => [themeConfig.value.isShowLogoChange, themeConfig.value.isShowLogo, themeConfig.value.layout, themeConfig.value.isClassicSplitMenu],
|
() => [themeConfig.value.isShowLogoChange, themeConfig.value.isShowLogo, themeConfig.value.layout, themeConfig.value.isClassicSplitMenu],
|
||||||
|
@ -6,9 +6,8 @@
|
|||||||
:collapse="state.isCollapse"
|
:collapse="state.isCollapse"
|
||||||
:unique-opened="getThemeConfig.isUniqueOpened"
|
:unique-opened="getThemeConfig.isUniqueOpened"
|
||||||
:collapse-transition="false"
|
:collapse-transition="false"
|
||||||
:default-openeds="defaultOpeneds"
|
|
||||||
>
|
>
|
||||||
<!-- <template v-for="val in menuLists">
|
<template v-for="val in menuLists">
|
||||||
<el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
|
<el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
|
||||||
<template #title>
|
<template #title>
|
||||||
<SvgIcon :name="val.meta.icon" />
|
<SvgIcon :name="val.meta.icon" />
|
||||||
@ -27,31 +26,16 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</template>
|
</template>
|
||||||
</template> -->
|
|
||||||
|
|
||||||
<el-sub-menu :index="index.toString()" v-for="(item,index) in menuLists" :key="index" >
|
|
||||||
<template #title>
|
|
||||||
<span>{{ item.modulename }}</span>
|
|
||||||
</template>
|
</template>
|
||||||
<el-menu-item-group>
|
|
||||||
<font-awesome-icon :icon="['fas',item.actions[0].icon]" size="lg" class="edtIcon" />
|
|
||||||
<el-menu-item :index="item1.link" v-for="(item1, index1) in item.actions" :key="index1">
|
|
||||||
<SvgIcon :name="item1.icon" />
|
|
||||||
{{ item1.actionname }}
|
|
||||||
</el-menu-item>
|
|
||||||
</el-menu-item-group>
|
|
||||||
</el-sub-menu>
|
|
||||||
|
|
||||||
</el-menu>
|
</el-menu>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="navMenuVertical">
|
<script setup lang="ts" name="navMenuVertical">
|
||||||
import { defineAsyncComponent, reactive, computed, onMounted, watch,ref ,onBeforeMount} from 'vue';
|
import { defineAsyncComponent, reactive, computed, onMounted, watch } from 'vue';
|
||||||
import { useRoute, onBeforeRouteUpdate, RouteRecordRaw } from 'vue-router';
|
import { useRoute, onBeforeRouteUpdate, RouteRecordRaw } from 'vue-router';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
import { useThemeConfig } from '/@/stores/themeConfig';
|
import { useThemeConfig } from '/@/stores/themeConfig';
|
||||||
import other from '/@/utils/other';
|
import other from '/@/utils/other';
|
||||||
import {useMenuApi} from '/@/api/menu'
|
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const SubItem = defineAsyncComponent(() => import('/@/layout/navMenu/subItem.vue'));
|
const SubItem = defineAsyncComponent(() => import('/@/layout/navMenu/subItem.vue'));
|
||||||
@ -77,25 +61,12 @@ const state = reactive({
|
|||||||
|
|
||||||
// 获取父级菜单数据
|
// 获取父级菜单数据
|
||||||
const menuLists = computed(() => {
|
const menuLists = computed(() => {
|
||||||
return props.menuList || [];
|
return <RouteItems>props.menuList;
|
||||||
});
|
});
|
||||||
// 获取布局配置信息
|
// 获取布局配置信息
|
||||||
const getThemeConfig = computed(() => {
|
const getThemeConfig = computed(() => {
|
||||||
return themeConfig.value;
|
return themeConfig.value;
|
||||||
});
|
});
|
||||||
// 默认全展开的实现
|
|
||||||
// const defaultOpeneds = computed(() => {
|
|
||||||
// if (menuLists.value.length === 0) {
|
|
||||||
// console.log(111111111111);
|
|
||||||
// return []; // 没有菜单时返回空数组
|
|
||||||
// }
|
|
||||||
// console.log(22222222222);
|
|
||||||
|
|
||||||
// return menuLists.value.map((_, index) => index.toString());
|
|
||||||
// });
|
|
||||||
const defaultOpeneds = ref<string[]>([]);
|
|
||||||
|
|
||||||
|
|
||||||
// 菜单高亮(详情时,父级高亮)
|
// 菜单高亮(详情时,父级高亮)
|
||||||
const setParentHighlight = (currentRoute: RouteToFrom) => {
|
const setParentHighlight = (currentRoute: RouteToFrom) => {
|
||||||
const { path, meta } = currentRoute;
|
const { path, meta } = currentRoute;
|
||||||
@ -107,18 +78,9 @@ const setParentHighlight = (currentRoute: RouteToFrom) => {
|
|||||||
const onALinkClick = (val: RouteItem) => {
|
const onALinkClick = (val: RouteItem) => {
|
||||||
other.handleOpenLink(val);
|
other.handleOpenLink(val);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 页面加载时
|
// 页面加载时
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
state.defaultActive = setParentHighlight(route);
|
state.defaultActive = setParentHighlight(route);
|
||||||
// 每次加载页面,初始化默认展开项
|
|
||||||
// const storedOpeneds = localStorage.getItem('defaultOpeneds');
|
|
||||||
// if (storedOpeneds) {
|
|
||||||
// console.log('Loaded from localStorage:', JSON.parse(storedOpeneds));
|
|
||||||
// } else {
|
|
||||||
// // 如果没有存储记录,设置为全部展开
|
|
||||||
// localStorage.setItem('defaultOpeneds', JSON.stringify(defaultOpeneds.value));
|
|
||||||
// }
|
|
||||||
});
|
});
|
||||||
// 路由更新时
|
// 路由更新时
|
||||||
onBeforeRouteUpdate((to) => {
|
onBeforeRouteUpdate((to) => {
|
||||||
@ -137,21 +99,4 @@ watch(
|
|||||||
immediate: true,
|
immediate: true,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
// // 监听默认展开状态,并存储到 localStorage
|
|
||||||
// // 保存状态到 localStorage,每次更改时更新存储
|
|
||||||
// watch(defaultOpeneds, (newVal) => {
|
|
||||||
// localStorage.setItem('defaultOpeneds', JSON.stringify(newVal));
|
|
||||||
// });
|
|
||||||
// 监控 props 的变化,确保 defaultOpeneds 始终正确
|
|
||||||
watch(
|
|
||||||
() => props.menuList,
|
|
||||||
(newMenuList) => {
|
|
||||||
defaultOpeneds.value = newMenuList.map((_, index) => index.toString());
|
|
||||||
},
|
|
||||||
{
|
|
||||||
immediate: true,
|
|
||||||
deep: true,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -38,21 +38,14 @@ service.interceptors.response.use(
|
|||||||
const res = response.data;
|
const res = response.data;
|
||||||
if (res.code && res.code !== 0) {
|
if (res.code && res.code !== 0) {
|
||||||
// `token` 过期或者账号已在别处登录
|
// `token` 过期或者账号已在别处登录
|
||||||
if (res.code === 401 || res.code === 4001 || (res.code === 502 && res.errorMsg==='只有登录成功后才可访问')) {
|
if (res.code === 401 || res.code === 4001) {
|
||||||
// ElMessage.error('该账户已在其它地方登录,请重新登录');
|
Session.clear(); // 清除浏览器全部临时缓存
|
||||||
|
window.location.href = '/'; // 去登录页
|
||||||
ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
|
ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
|
||||||
.then(() => {
|
.then(() => {})
|
||||||
Session.clear(); // 清除浏览器全部临时缓存
|
.catch(() => {});
|
||||||
window.location.href = '/'; // 去登录页
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
Session.clear(); // 清除浏览器全部临时缓存
|
|
||||||
window.location.href = '/'; // 去登录页
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
// else if(res.code === 502 && res.errorMsg){
|
// else if(res.code === 502 && res.errorMsg){
|
||||||
// console.log(res.errorMsg);
|
|
||||||
|
|
||||||
// return res;
|
// return res;
|
||||||
// }
|
// }
|
||||||
return Promise.reject(service.interceptors.response);
|
return Promise.reject(service.interceptors.response);
|
||||||
|
@ -106,8 +106,7 @@ const onSignIn = async () => {
|
|||||||
// 存储 token 到浏览器缓存
|
// 存储 token 到浏览器缓存
|
||||||
Session.set('token', res.data.token);
|
Session.set('token', res.data.token);
|
||||||
// usertype判断登录角色
|
// usertype判断登录角色
|
||||||
// Cookies.set('userName', res.data.user.usertype === 1 ? 'admin' : 'user');
|
Cookies.set('userName', res.data.user.usertype === 1 ? 'admin' : 'user');
|
||||||
Cookies.set('userName', 'admin');
|
|
||||||
if (!themeConfig.value.isRequestRoutes) {
|
if (!themeConfig.value.isRequestRoutes) {
|
||||||
// 前端控制路由,2、请注意执行顺序
|
// 前端控制路由,2、请注意执行顺序
|
||||||
const isNoPower = await initFrontEndControlRoutes();
|
const isNoPower = await initFrontEndControlRoutes();
|
||||||
@ -117,13 +116,7 @@ const onSignIn = async () => {
|
|||||||
// 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path "/"
|
// 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path "/"
|
||||||
const isNoPower = await initBackEndControlRoutes();
|
const isNoPower = await initBackEndControlRoutes();
|
||||||
// 执行完 initBackEndControlRoutes,再执行 signInSuccess
|
// 执行完 initBackEndControlRoutes,再执行 signInSuccess
|
||||||
// signInSuccess(isNoPower);
|
signInSuccess(isNoPower);
|
||||||
if (isNoPower) {
|
|
||||||
// 根据实际需求处理登录成功后的操作
|
|
||||||
signInSuccess(false); // 假设 signInSuccess 接收布尔值表示是否有权限问题
|
|
||||||
} else {
|
|
||||||
throw new Error('权限不足或路由加载失败');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
ElMessage.error(res.errorMsg||res.message);
|
ElMessage.error(res.errorMsg||res.message);
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<img :src="logoMini" />
|
<img :src="logoMini" />
|
||||||
<div class="login-left-logo-text">
|
<div class="login-left-logo-text">
|
||||||
<span>{{ getThemeConfig.globalTitle }}</span>
|
<span>{{ getThemeConfig.globalTitle }}</span>
|
||||||
<!-- <span class="login-left-logo-text-msg">{{ getThemeConfig.globalViceTitleMsg }}</span> -->
|
<span class="login-left-logo-text-msg">{{ getThemeConfig.globalViceTitleMsg }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-left-img">
|
<div class="login-left-img">
|
||||||
|
@ -49,9 +49,9 @@
|
|||||||
<el-image lazy :src="jpgFormatter(scope.row)" preview-teleported="true" :preview-src-list="[jpgFormatter(scope.row)]"/>
|
<el-image lazy :src="jpgFormatter(scope.row)" preview-teleported="true" :preview-src-list="[jpgFormatter(scope.row)]"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="moduleName" label="模块" show-overflow-tooltip width="220px" align="center"></el-table-column>
|
<el-table-column prop="moduleName" label="模块" show-overflow-tooltip width="200px" align="center"></el-table-column>
|
||||||
<el-table-column prop="labelName" label="标签" show-overflow-tooltip width="200px" align="center"></el-table-column>
|
<el-table-column prop="labelName" label="标签" show-overflow-tooltip width="200px" align="center"></el-table-column>
|
||||||
<el-table-column prop="uploadName" label="上传者" show-overflow-tooltip width="210px" align="center"></el-table-column>
|
<el-table-column prop="uploadName" label="上传者" show-overflow-tooltip width="200px" align="center"></el-table-column>
|
||||||
<el-table-column prop="createtime" label="创建时间" :formatter="dateFormatter" show-overflow-tooltip width="200px" align="center"></el-table-column>
|
<el-table-column prop="createtime" label="创建时间" :formatter="dateFormatter" show-overflow-tooltip width="200px" align="center"></el-table-column>
|
||||||
<el-table-column label="操作" width="250" align="center">
|
<el-table-column label="操作" width="250" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@ -322,14 +322,15 @@ const viteUrl = import.meta.env.VITE_API_URL;
|
|||||||
|
|
||||||
// 图片链接格式化
|
// 图片链接格式化
|
||||||
const jpgFormatter = (row: any) => {
|
const jpgFormatter = (row: any) => {
|
||||||
let newPath = row?.data ? row.data.path : row.path;
|
let newPath;
|
||||||
// if (row?.data) {
|
if (row?.data) {
|
||||||
// newPath = row.data.path.replaceAll('\\', '/')
|
newPath = row.data.path.replaceAll('\\', '/')
|
||||||
// } else {
|
} else {
|
||||||
// newPath = row.path.replaceAll('\\\\', '/')
|
newPath = row.path.replaceAll('\\\\', '/')
|
||||||
// }
|
}
|
||||||
newPath = newPath.includes(viteUrl)||newPath.includes('http://8.138.171.103/')||newPath.includes('http://guojunjie.oss-cn-hangzhou.aliyuncs.com/') ?
|
newPath = newPath.includes('http://8.138.171.103/')||newPath.includes('http://guojunjie.oss-cn-hangzhou.aliyuncs.com/') ?
|
||||||
newPath : encodeURI(newPath)
|
newPath : encodeURI(viteUrl + newPath)
|
||||||
|
console.log(newPath);
|
||||||
|
|
||||||
return `${newPath}`;
|
return `${newPath}`;
|
||||||
}
|
}
|
||||||
@ -419,7 +420,7 @@ const disabled = ref(false)
|
|||||||
|
|
||||||
const handleChange: UploadProps['onChange'] = async (file: uploadFile, uploadFiles) => {
|
const handleChange: UploadProps['onChange'] = async (file: uploadFile, uploadFiles) => {
|
||||||
state.formData.loading = true;
|
state.formData.loading = true;
|
||||||
if (file.raw.type === 'image/png' || file.raw.type === 'image/jpeg' || file.raw.type === 'image/jpg' || file.raw.type === 'image/gif') {
|
if (file.raw.type === 'image/png' || file.raw.type === 'image/jpeg' || file.raw.type === 'image/jpg') {
|
||||||
state.formData.fileList = uploadFiles;
|
state.formData.fileList = uploadFiles;
|
||||||
uploadDisabled.value = true;
|
uploadDisabled.value = true;
|
||||||
try {
|
try {
|
||||||
@ -474,16 +475,13 @@ const handleRemove = (file: UploadFile, uploadFiles) => {
|
|||||||
//下载图片
|
//下载图片
|
||||||
const download = async(row:any) =>{
|
const download = async(row:any) =>{
|
||||||
state.formData.loading = true;
|
state.formData.loading = true;
|
||||||
// let newPath;
|
let newPath;
|
||||||
// if (row?.data) {
|
if (row?.data) {
|
||||||
// newPath = row.data.path.replaceAll('\\', '/')
|
newPath = row.data.path.replaceAll('\\', '/')
|
||||||
// } else {
|
} else {
|
||||||
// newPath = row.path.replaceAll('\\\\', '/')
|
newPath = row.path.replaceAll('\\\\', '/')
|
||||||
// }
|
}
|
||||||
// newPath = newPath.includes('http://localhost:8888/') ? newPath : viteUrl + newPath
|
newPath = newPath.includes('http://localhost:8888/') ? newPath : viteUrl + newPath
|
||||||
let newPath = row?.data ? row.data.path : row.path;
|
|
||||||
newPath = newPath.includes(viteUrl)||newPath.includes('http://8.138.171.103/')||newPath.includes('http://guojunjie.oss-cn-hangzhou.aliyuncs.com/') ?
|
|
||||||
newPath : encodeURI(newPath);
|
|
||||||
try{
|
try{
|
||||||
await downloadPhoto(newPath);
|
await downloadPhoto(newPath);
|
||||||
}catch(error){
|
}catch(error){
|
||||||
|
@ -34,19 +34,18 @@
|
|||||||
<!-- <el-table-column prop="type" label="类型" show-overflow-tooltip></el-table-column> -->
|
<!-- <el-table-column prop="type" label="类型" show-overflow-tooltip></el-table-column> -->
|
||||||
<el-table-column prop="reviewStatus" align="center" label="审核结果" show-overflow-tooltip>
|
<el-table-column prop="reviewStatus" align="center" label="审核结果" show-overflow-tooltip>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag v-if="scope.row.reviewStatus === 1" type="warning">审核中</el-tag>
|
<el-tag v-if="scope.row.reviewStatus === 0">未发布</el-tag>
|
||||||
|
<el-tag v-else-if="scope.row.reviewStatus === 1" type="warning">审核中</el-tag>
|
||||||
<el-tag v-else-if="scope.row.reviewStatus === 2" type="success">通过</el-tag>
|
<el-tag v-else-if="scope.row.reviewStatus === 2" type="success">通过</el-tag>
|
||||||
<el-tag v-else-if="scope.row.reviewStatus === 3" type="danger">未通过</el-tag>
|
<el-tag v-else-if="scope.row.reviewStatus === 3" type="danger">未通过</el-tag>
|
||||||
<el-tag v-else>未发布</el-tag>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="createtime" align="center" label="时间" :formatter="dateFormatter" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="createtime" align="center" label="时间" :formatter="dateFormatter" show-overflow-tooltip></el-table-column>
|
||||||
<el-table-column label="操作" width="200" align="center">
|
<el-table-column label="操作" width="200" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<!-- <el-button size="small" text type="primary" @click="toShowDetail(scope.row.id)">查看详情</el-button> -->
|
<!-- <el-button size="small" text type="primary" @click="toShowDetail(scope.row.id)">查看详情</el-button> -->
|
||||||
<el-button size="small" v-if="scope.row.reviewStatus === 1" text type="primary" @click="audit(scope.row)">审核</el-button>
|
<el-button size="small" v-if="scope.row.reviewStatus === 0" text type="primary" @click="audit(scope.row)">审核</el-button>
|
||||||
<el-button size="small" v-else-if="scope.row.reviewStatus === null" text type="primary" @click="toPublic(scope.row)">发布</el-button>
|
<el-button size="small" v-else-if="scope.row.reviewStatus === 0" text type="primary" @click="toPublic(scope.row)">发布</el-button>
|
||||||
<el-button size="small" v-else text type="primary" @click="audit(scope.row)">重新审核</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -64,7 +63,7 @@
|
|||||||
>
|
>
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</el-card>
|
</el-card>
|
||||||
<!-- <MessageDialog ref="messageDialogRef" /> -->
|
<MessageDialog ref="messageDialogRef" />
|
||||||
<!-- 回复弹窗 -->
|
<!-- 回复弹窗 -->
|
||||||
<el-dialog style="height: 200px;" :title="state.auditDialog.title" v-model="state.auditDialog.show" width="400px">
|
<el-dialog style="height: 200px;" :title="state.auditDialog.title" v-model="state.auditDialog.show" width="400px">
|
||||||
<div class="dialog-content">
|
<div class="dialog-content">
|
||||||
@ -89,8 +88,8 @@ import { sharesApi } from '/@/api/service/shares';
|
|||||||
import { ElMessage, ElMessageBox, TableColumnCtx } from 'element-plus';
|
import { ElMessage, ElMessageBox, TableColumnCtx } from 'element-plus';
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
// const MessageDialog = defineAsyncComponent(() => import('/@/views/message/dialog.vue'));
|
const MessageDialog = defineAsyncComponent(() => import('/@/views/message/dialog.vue'));
|
||||||
// const messageDialogRef = ref();
|
const messageDialogRef = ref();
|
||||||
|
|
||||||
// 表格数据
|
// 表格数据
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
@ -118,7 +117,7 @@ const state = reactive({
|
|||||||
|
|
||||||
// 状态列表
|
// 状态列表
|
||||||
const statusList = ref([
|
const statusList = ref([
|
||||||
// {label: '未发布', value: ''},
|
{label: '未发布', value: 0},
|
||||||
{label: '审核中', value: 1},
|
{label: '审核中', value: 1},
|
||||||
{label: '通过', value: 2},
|
{label: '通过', value: 2},
|
||||||
{label: '未通过', value: 3},
|
{label: '未通过', value: 3},
|
||||||
@ -155,9 +154,9 @@ const reset = () =>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 文章详情
|
// 文章详情
|
||||||
// const toShowDetail = (id: any) => {
|
const toShowDetail = (id: any) => {
|
||||||
// messageDialogRef.value.openDialog(id);
|
messageDialogRef.value.openDialog(id);
|
||||||
// }
|
}
|
||||||
|
|
||||||
const replayFormRef = ref();
|
const replayFormRef = ref();
|
||||||
|
|
||||||
|
@ -197,6 +197,10 @@ const onSubmit = async() => {
|
|||||||
if(valid){
|
if(valid){
|
||||||
state.ruleForm.show = state.ruleForm.show ? 1 : 0;
|
state.ruleForm.show = state.ruleForm.show ? 1 : 0;
|
||||||
state.ruleForm.grouptypeid = 1;
|
state.ruleForm.grouptypeid = 1;
|
||||||
|
let body = {
|
||||||
|
actions:tree.value.getCheckedKeys(true, false),
|
||||||
|
groupid:state.ruleForm.id
|
||||||
|
}
|
||||||
if (state.dialog.type === 'add') {
|
if (state.dialog.type === 'add') {
|
||||||
try{
|
try{
|
||||||
const param = {
|
const param = {
|
||||||
@ -205,7 +209,12 @@ const onSubmit = async() => {
|
|||||||
}
|
}
|
||||||
const res = await roleapi.addRole(param);
|
const res = await roleapi.addRole(param);
|
||||||
if (res?.success) {
|
if (res?.success) {
|
||||||
|
try{
|
||||||
|
const data = await roleactionapi.setUprolePermission(body)
|
||||||
|
console.log(5555555,data);
|
||||||
|
}catch(error){
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
emit('reset');
|
emit('reset');
|
||||||
closeDialog();
|
closeDialog();
|
||||||
ElMessage.success('角色新建成功!');
|
ElMessage.success('角色新建成功!');
|
||||||
@ -225,10 +234,6 @@ const onSubmit = async() => {
|
|||||||
ElMessage.error('角色新建失败!')
|
ElMessage.error('角色新建失败!')
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let body = {
|
|
||||||
actions:tree.value.getCheckedKeys(true, false),
|
|
||||||
groupid:state.ruleForm.id
|
|
||||||
}
|
|
||||||
try{
|
try{
|
||||||
const res = await roleapi.updateRole(state.ruleForm);
|
const res = await roleapi.updateRole(state.ruleForm);
|
||||||
if(res?.success){
|
if(res?.success){
|
||||||
|
@ -30,10 +30,10 @@
|
|||||||
<el-table-column prop="createtime" label="创建时间" :formatter="dateFormatter" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="createtime" label="创建时间" :formatter="dateFormatter" show-overflow-tooltip></el-table-column>
|
||||||
<el-table-column label="操作" width="100">
|
<el-table-column label="操作" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button size="small" text type="primary" @click="onOpenEditRole('edit', scope.row)"
|
<el-button :disabled="scope.row.name === '管理员'" size="small" text type="primary" @click="onOpenEditRole('edit', scope.row)"
|
||||||
>修改</el-button
|
>修改</el-button
|
||||||
>
|
>
|
||||||
<el-button size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
|
<el-button :disabled="scope.row.name === '管理员'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -125,6 +125,15 @@ const getTableData = async() => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//查询角色
|
||||||
|
const getroleDetail = async() =>{
|
||||||
|
try{
|
||||||
|
const res = await roleapi.getRoleDetail();
|
||||||
|
}catch(error){
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 打开新增角色弹窗
|
// 打开新增角色弹窗
|
||||||
const onOpenAddRole = (type: string) => {
|
const onOpenAddRole = (type: string) => {
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ const getVideoDetail = async () => {
|
|||||||
// 下面这里处理一下,因为后端返回的是0和1,而前端需要的是true和false,到时候提交的时候再转换回来
|
// 下面这里处理一下,因为后端返回的是0和1,而前端需要的是true和false,到时候提交的时候再转换回来
|
||||||
// 这个报错没关系的,只是ts的语法检查,不影响运行
|
// 这个报错没关系的,只是ts的语法检查,不影响运行
|
||||||
if (state.data.path) {
|
if (state.data.path) {
|
||||||
const never: any = [{ name: state.data.name, url: state.data.path }];
|
const never: any = [{ name: state.data.name, url: viteUrl + state.data.path }];
|
||||||
state.fileArray = never;
|
state.fileArray = never;
|
||||||
state.coverHide = true;
|
state.coverHide = true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user