mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	fix: 修复标签页未根据权限显示
This commit is contained in:
		
							parent
							
								
									feb1498d29
								
							
						
					
					
						commit
						75afd44e7a
					
				@ -1,11 +1,11 @@
 | 
				
			|||||||
import { http } from "../utils/http";
 | 
					import { http } from "../utils/http";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 地图数据
 | 
					// 地图数据
 | 
				
			||||||
export const mapJson = (data?: object): any => {
 | 
					export const mapJson = (data?: object) => {
 | 
				
			||||||
  return http.request("get", "/getMapInfo", data);
 | 
					  return http.request("get", "/getMapInfo", data);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// echarts数据
 | 
					// echarts数据
 | 
				
			||||||
export const echartsJson = (data?: object): any => {
 | 
					export const echartsJson = (data?: object) => {
 | 
				
			||||||
  return http.request("get", "/getEchartsInfo", data);
 | 
					  return http.request("get", "/getEchartsInfo", data);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
import { http } from "../utils/http";
 | 
					import { http } from "../utils/http";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getAsyncRoutes = (data?: object): any => {
 | 
					export const getAsyncRoutes = (data?: object) => {
 | 
				
			||||||
  return http.request("get", "/getAsyncRoutes", data);
 | 
					  return http.request("get", "/getAsyncRoutes", data);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -1,16 +1,16 @@
 | 
				
			|||||||
import { http } from "../utils/http";
 | 
					import { http } from "../utils/http";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 获取验证码
 | 
					// 获取验证码
 | 
				
			||||||
export const getVerify = (): any => {
 | 
					export const getVerify = () => {
 | 
				
			||||||
  return http.request("get", "/captcha");
 | 
					  return http.request("get", "/captcha");
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 登录
 | 
					// 登录
 | 
				
			||||||
export const getLogin = (data: object): any => {
 | 
					export const getLogin = (data: object) => {
 | 
				
			||||||
  return http.request("post", "/login", data);
 | 
					  return http.request("post", "/login", data);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 注册
 | 
					// 注册
 | 
				
			||||||
export const getRegist = (data: object): any => {
 | 
					export const getRegist = (data: object) => {
 | 
				
			||||||
  return http.request("post", "/register", data);
 | 
					  return http.request("post", "/register", data);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -45,7 +45,7 @@
 | 
				
			|||||||
          :key="key"
 | 
					          :key="key"
 | 
				
			||||||
          style="display: flex; align-items: center"
 | 
					          style="display: flex; align-items: center"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
          <li v-if="item.show" @click="selectTag(item, key)">
 | 
					          <li v-if="item.show" @click="selectTag(key, item)">
 | 
				
			||||||
            <component :is="item.icon" :key="key" />
 | 
					            <component :is="item.icon" :key="key" />
 | 
				
			||||||
            {{ item.text }}
 | 
					            {{ item.text }}
 | 
				
			||||||
          </li>
 | 
					          </li>
 | 
				
			||||||
@ -112,6 +112,7 @@ let refreshButton = "refresh-button";
 | 
				
			|||||||
let routerArrays: Array<object> = [
 | 
					let routerArrays: Array<object> = [
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: "/welcome",
 | 
					    path: "/welcome",
 | 
				
			||||||
 | 
					    parentPath: "/",
 | 
				
			||||||
    meta: {
 | 
					    meta: {
 | 
				
			||||||
      title: "message.hshome",
 | 
					      title: "message.hshome",
 | 
				
			||||||
      icon: "el-icon-s-home",
 | 
					      icon: "el-icon-s-home",
 | 
				
			||||||
@ -215,6 +216,7 @@ export default {
 | 
				
			|||||||
            if (arrItem.path === value || pathConcat === value) {
 | 
					            if (arrItem.path === value || pathConcat === value) {
 | 
				
			||||||
              routerArrays.push({
 | 
					              routerArrays.push({
 | 
				
			||||||
                path: value,
 | 
					                path: value,
 | 
				
			||||||
 | 
					                parentPath: `/${parentPath.split("/")[1]}`,
 | 
				
			||||||
                meta: arrItem.meta
 | 
					                meta: arrItem.meta
 | 
				
			||||||
              });
 | 
					              });
 | 
				
			||||||
              st.routesInStorage = routerArrays;
 | 
					              st.routesInStorage = routerArrays;
 | 
				
			||||||
@ -255,6 +257,7 @@ export default {
 | 
				
			|||||||
          st.routesInStorage = routerArrays = [
 | 
					          st.routesInStorage = routerArrays = [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              path: "/welcome",
 | 
					              path: "/welcome",
 | 
				
			||||||
 | 
					              parentPath: "/",
 | 
				
			||||||
              meta: {
 | 
					              meta: {
 | 
				
			||||||
                title: "message.hshome",
 | 
					                title: "message.hshome",
 | 
				
			||||||
                icon: "el-icon-s-home",
 | 
					                icon: "el-icon-s-home",
 | 
				
			||||||
@ -294,7 +297,7 @@ export default {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function deleteMenu(item, tag?: string) {
 | 
					    function deleteMenu(item, tag?: string) {
 | 
				
			||||||
      deleteDynamicTag(item, route.path, tag);
 | 
					      deleteDynamicTag(item, item.path, tag);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function onClickDrop(key, item, selectRoute) {
 | 
					    function onClickDrop(key, item, selectRoute) {
 | 
				
			||||||
@ -360,8 +363,8 @@ export default {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 触发右键中菜单的点击事件
 | 
					    // 触发右键中菜单的点击事件
 | 
				
			||||||
    function selectTag(item, key) {
 | 
					    function selectTag(key, item) {
 | 
				
			||||||
      onClickDrop(key, {}, currentSelect.value);
 | 
					      onClickDrop(key, item, currentSelect.value);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function closeMenu() {
 | 
					    function closeMenu() {
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,7 @@ app.use(Storage, {
 | 
				
			|||||||
    default: Storage.getData(undefined, "routesInStorage") ?? [
 | 
					    default: Storage.getData(undefined, "routesInStorage") ?? [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: "/welcome",
 | 
					        path: "/welcome",
 | 
				
			||||||
 | 
					        parentPath: "/",
 | 
				
			||||||
        meta: {
 | 
					        meta: {
 | 
				
			||||||
          title: "message.hshome",
 | 
					          title: "message.hshome",
 | 
				
			||||||
          icon: "el-icon-s-home",
 | 
					          icon: "el-icon-s-home",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,25 +1,27 @@
 | 
				
			|||||||
import {
 | 
					import {
 | 
				
			||||||
  createRouter,
 | 
					 | 
				
			||||||
  createWebHashHistory,
 | 
					 | 
				
			||||||
  Router,
 | 
					  Router,
 | 
				
			||||||
  RouteComponent
 | 
					  createRouter,
 | 
				
			||||||
 | 
					  RouteComponent,
 | 
				
			||||||
 | 
					  createWebHashHistory
 | 
				
			||||||
} from "vue-router";
 | 
					} from "vue-router";
 | 
				
			||||||
 | 
					 | 
				
			||||||
import Layout from "/@/layout/index.vue";
 | 
					 | 
				
			||||||
import homeRouter from "./modules/home";
 | 
					 | 
				
			||||||
import flowChartRouter from "./modules/flowchart";
 | 
					 | 
				
			||||||
import editorRouter from "./modules/editor";
 | 
					 | 
				
			||||||
import componentsRouter from "./modules/components";
 | 
					 | 
				
			||||||
import nestedRouter from "./modules/nested";
 | 
					 | 
				
			||||||
import errorRouter from "./modules/error";
 | 
					 | 
				
			||||||
import externalLink from "./modules/externalLink";
 | 
					 | 
				
			||||||
import remainingRouter from "./modules/remaining"; //静态路由
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { i18n } from "/@/plugins/i18n";
 | 
					import { i18n } from "/@/plugins/i18n";
 | 
				
			||||||
import { getAsyncRoutes } from "/@/api/routes";
 | 
					import NProgress from "/@/utils/progress";
 | 
				
			||||||
import { storageSession } from "../utils/storage";
 | 
					import { storageSession, storageLocal } from "/@/utils/storage";
 | 
				
			||||||
import { usePermissionStoreHook } from "/@/store/modules/permission";
 | 
					import { usePermissionStoreHook } from "/@/store/modules/permission";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 静态路由
 | 
				
			||||||
 | 
					import homeRouter from "./modules/home";
 | 
				
			||||||
 | 
					import Layout from "/@/layout/index.vue";
 | 
				
			||||||
 | 
					import errorRouter from "./modules/error";
 | 
				
			||||||
 | 
					import editorRouter from "./modules/editor";
 | 
				
			||||||
 | 
					import nestedRouter from "./modules/nested";
 | 
				
			||||||
 | 
					import externalLink from "./modules/externalLink";
 | 
				
			||||||
 | 
					import remainingRouter from "./modules/remaining";
 | 
				
			||||||
 | 
					import flowChartRouter from "./modules/flowchart";
 | 
				
			||||||
 | 
					import componentsRouter from "./modules/components";
 | 
				
			||||||
 | 
					// 动态路由
 | 
				
			||||||
 | 
					import { getAsyncRoutes } from "/@/api/routes";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// https://cn.vitejs.dev/guide/features.html#glob-import
 | 
					// https://cn.vitejs.dev/guide/features.html#glob-import
 | 
				
			||||||
const modulesRoutes = import.meta.glob("/src/views/*/*/*.vue");
 | 
					const modulesRoutes = import.meta.glob("/src/views/*/*/*.vue");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -41,12 +43,12 @@ export const ascending = arr => {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 将所有静态路由导出
 | 
					// 将所有静态路由导出
 | 
				
			||||||
export const constantRoutesArr = ascending(constantRoutes).concat(
 | 
					export const constantRoutesArr: Array<RouteComponent> = ascending(
 | 
				
			||||||
  ...remainingRouter
 | 
					  constantRoutes
 | 
				
			||||||
);
 | 
					).concat(...remainingRouter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 过滤后端传来的动态路由 重新生成规范路由
 | 
					// 过滤后端传来的动态路由 重新生成规范路由
 | 
				
			||||||
export const addAsyncRoutes = (arrRoutes: Array<string>) => {
 | 
					export const addAsyncRoutes = (arrRoutes: Array<RouteComponent>) => {
 | 
				
			||||||
  if (!arrRoutes || !arrRoutes.length) return;
 | 
					  if (!arrRoutes || !arrRoutes.length) return;
 | 
				
			||||||
  arrRoutes.forEach((v: any) => {
 | 
					  arrRoutes.forEach((v: any) => {
 | 
				
			||||||
    if (v.redirect) {
 | 
					    if (v.redirect) {
 | 
				
			||||||
@ -61,7 +63,7 @@ export const addAsyncRoutes = (arrRoutes: Array<string>) => {
 | 
				
			|||||||
  return arrRoutes;
 | 
					  return arrRoutes;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const router = createRouter({
 | 
					const router: Router = createRouter({
 | 
				
			||||||
  history: createWebHashHistory(),
 | 
					  history: createWebHashHistory(),
 | 
				
			||||||
  routes: ascending(constantRoutes).concat(...remainingRouter),
 | 
					  routes: ascending(constantRoutes).concat(...remainingRouter),
 | 
				
			||||||
  scrollBehavior(to, from, savedPosition) {
 | 
					  scrollBehavior(to, from, savedPosition) {
 | 
				
			||||||
@ -79,7 +81,7 @@ const router = createRouter({
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const initRouter = (name, next?, to?) => {
 | 
					export const initRouter = name => {
 | 
				
			||||||
  return new Promise(resolve => {
 | 
					  return new Promise(resolve => {
 | 
				
			||||||
    getAsyncRoutes({ name }).then(({ info }) => {
 | 
					    getAsyncRoutes({ name }).then(({ info }) => {
 | 
				
			||||||
      if (info.length === 0) {
 | 
					      if (info.length === 0) {
 | 
				
			||||||
@ -98,7 +100,6 @@ export const initRouter = (name, next?, to?) => {
 | 
				
			|||||||
            // 最终路由进行升序
 | 
					            // 最终路由进行升序
 | 
				
			||||||
            ascending(router.options.routes);
 | 
					            ascending(router.options.routes);
 | 
				
			||||||
            router.addRoute(v.name, v);
 | 
					            router.addRoute(v.name, v);
 | 
				
			||||||
            if (next && to) next({ ...to, replace: true });
 | 
					 | 
				
			||||||
            usePermissionStoreHook().changeSetting(info);
 | 
					            usePermissionStoreHook().changeSetting(info);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          resolve(router);
 | 
					          resolve(router);
 | 
				
			||||||
@ -122,8 +123,6 @@ export function resetRouter() {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import NProgress from "../utils/progress";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const whiteList = ["/login", "/register"];
 | 
					const whiteList = ["/login", "/register"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.beforeEach((to, _from, next) => {
 | 
					router.beforeEach((to, _from, next) => {
 | 
				
			||||||
@ -137,9 +136,24 @@ router.beforeEach((to, _from, next) => {
 | 
				
			|||||||
    if (_from?.name) {
 | 
					    if (_from?.name) {
 | 
				
			||||||
      next();
 | 
					      next();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
					      // 刷新
 | 
				
			||||||
      if (usePermissionStoreHook().wholeRoutes.length === 0)
 | 
					      if (usePermissionStoreHook().wholeRoutes.length === 0)
 | 
				
			||||||
        initRouter(name.username, next, to).then((router: Router) => {
 | 
					        initRouter(name.username).then((router: Router) => {
 | 
				
			||||||
          router.push(to.path);
 | 
					          router.push(to.path);
 | 
				
			||||||
 | 
					          // 刷新页面更新标签栏与页面路由匹配
 | 
				
			||||||
 | 
					          const localRoutes = storageLocal.getItem(
 | 
				
			||||||
 | 
					            "responsive-routesInStorage"
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					          const optionsRoutes = router.options?.routes;
 | 
				
			||||||
 | 
					          const newLocalRoutes = [];
 | 
				
			||||||
 | 
					          optionsRoutes.forEach(ors => {
 | 
				
			||||||
 | 
					            localRoutes.forEach(lrs => {
 | 
				
			||||||
 | 
					              if (ors.path === lrs.parentPath) {
 | 
				
			||||||
 | 
					                newLocalRoutes.push(lrs);
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          storageLocal.setItem("responsive-routesInStorage", newLocalRoutes);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
      next();
 | 
					      next();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,8 @@ import { constantRoutesArr, ascending } from "/@/router/index";
 | 
				
			|||||||
export const usePermissionStore = defineStore({
 | 
					export const usePermissionStore = defineStore({
 | 
				
			||||||
  id: "pure-permission",
 | 
					  id: "pure-permission",
 | 
				
			||||||
  state: () => ({
 | 
					  state: () => ({
 | 
				
			||||||
    constantRoutes: constantRoutesArr, //静态路由
 | 
					    // 静态路由
 | 
				
			||||||
 | 
					    constantRoutes: constantRoutesArr,
 | 
				
			||||||
    wholeRoutes: [],
 | 
					    wholeRoutes: [],
 | 
				
			||||||
    buttonAuth: []
 | 
					    buttonAuth: []
 | 
				
			||||||
  }),
 | 
					  }),
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,5 @@
 | 
				
			|||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import Flop from "/@/components/ReFlop";
 | 
					 | 
				
			||||||
import { ref, computed, onMounted, nextTick } from "vue";
 | 
					import { ref, computed, onMounted, nextTick } from "vue";
 | 
				
			||||||
import { deviceDetection } from "/@/utils/deviceDetection";
 | 
					 | 
				
			||||||
import { useEventListener, tryOnUnmounted, useTimeoutFn } from "@vueuse/core";
 | 
					import { useEventListener, tryOnUnmounted, useTimeoutFn } from "@vueuse/core";
 | 
				
			||||||
import { echartsJson } from "/@/api/mock";
 | 
					import { echartsJson } from "/@/api/mock";
 | 
				
			||||||
import echarts from "/@/plugins/echarts";
 | 
					import echarts from "/@/plugins/echarts";
 | 
				
			||||||
@ -9,7 +7,6 @@ import { ECharts } from "echarts";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//折线图实例
 | 
					//折线图实例
 | 
				
			||||||
let brokenLine: ECharts;
 | 
					let brokenLine: ECharts;
 | 
				
			||||||
let mobile = ref<boolean>(deviceDetection());
 | 
					 | 
				
			||||||
let date: Date = new Date();
 | 
					let date: Date = new Date();
 | 
				
			||||||
let loading = ref<boolean>(true);
 | 
					let loading = ref<boolean>(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -167,8 +164,7 @@ tryOnUnmounted(() => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="welcome">
 | 
					  <div class="welcome">
 | 
				
			||||||
    <el-affix>
 | 
					    <el-card class="top-content">
 | 
				
			||||||
      <div class="top-content">
 | 
					 | 
				
			||||||
      <div class="left-mark">
 | 
					      <div class="left-mark">
 | 
				
			||||||
        <img
 | 
					        <img
 | 
				
			||||||
          src="https://avatars.githubusercontent.com/u/44761321?s=400&u=30907819abd29bb3779bc247910873e7c7f7c12f&v=4"
 | 
					          src="https://avatars.githubusercontent.com/u/44761321?s=400&u=30907819abd29bb3779bc247910873e7c7f7c12f&v=4"
 | 
				
			||||||
@ -178,18 +174,31 @@ tryOnUnmounted(() => {
 | 
				
			|||||||
        />
 | 
					        />
 | 
				
			||||||
        <span>{{ greetings }}</span>
 | 
					        <span>{{ greetings }}</span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
        <Flop v-if="!mobile" />
 | 
					    </el-card>
 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </el-affix>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- 图表 -->
 | 
					    <!-- 图表 -->
 | 
				
			||||||
    <el-card class="box-card">
 | 
					
 | 
				
			||||||
 | 
					    <el-space wrap>
 | 
				
			||||||
 | 
					      <el-card class="box-card" style="width: 250px" v-for="i in 3" :key="i">
 | 
				
			||||||
 | 
					        <template #header>
 | 
				
			||||||
 | 
					          <div class="card-header">
 | 
				
			||||||
 | 
					            <span>Card name</span>
 | 
				
			||||||
 | 
					            <el-button class="button" type="text">Operation button</el-button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div v-for="o in 4" :key="o" class="text item">
 | 
				
			||||||
 | 
					          {{ "List item " + o }}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </el-card>
 | 
				
			||||||
 | 
					    </el-space>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- <el-card class="box-card">
 | 
				
			||||||
      <el-skeleton style="height: 50vh" :rows="8" :loading="loading" animated>
 | 
					      <el-skeleton style="height: 50vh" :rows="8" :loading="loading" animated>
 | 
				
			||||||
        <template #default>
 | 
					        <template #default>
 | 
				
			||||||
          <div id="brokenLine"></div>
 | 
					          <div id="brokenLine"></div>
 | 
				
			||||||
        </template>
 | 
					        </template>
 | 
				
			||||||
      </el-skeleton>
 | 
					      </el-skeleton>
 | 
				
			||||||
    </el-card>
 | 
					    </el-card> -->
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -197,16 +206,13 @@ tryOnUnmounted(() => {
 | 
				
			|||||||
.welcome {
 | 
					.welcome {
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
  height: 100%;
 | 
					  height: 100%;
 | 
				
			||||||
  margin-top: 1px;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .top-content {
 | 
					  .top-content {
 | 
				
			||||||
    display: flex;
 | 
					    display: flex;
 | 
				
			||||||
    justify-content: space-between;
 | 
					    justify-content: space-between;
 | 
				
			||||||
    align-items: center;
 | 
					    align-items: center;
 | 
				
			||||||
    height: 120px;
 | 
					    height: 60px;
 | 
				
			||||||
    background: #fff;
 | 
					    background: #fff;
 | 
				
			||||||
    padding: 20px;
 | 
					 | 
				
			||||||
    border-bottom: 0.5px solid rgba($color: #ccc, $alpha: 0.3);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .left-mark {
 | 
					    .left-mark {
 | 
				
			||||||
      display: flex;
 | 
					      display: flex;
 | 
				
			||||||
@ -214,12 +220,16 @@ tryOnUnmounted(() => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      img {
 | 
					      img {
 | 
				
			||||||
        display: block;
 | 
					        display: block;
 | 
				
			||||||
        width: 72px;
 | 
					        width: 50px;
 | 
				
			||||||
        height: 72px;
 | 
					        height: 50px;
 | 
				
			||||||
        border-radius: 50%;
 | 
					        border-radius: 50%;
 | 
				
			||||||
        margin-right: 10px;
 | 
					        margin-right: 10px;
 | 
				
			||||||
        cursor: pointer;
 | 
					        cursor: pointer;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span {
 | 
				
			||||||
 | 
					        font-size: 14px;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user