配置src别名
打开viteconfig.js文件进行配置
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// 引入node提供内置模块path:可以获取绝对路径
import path from "path";
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  // src文件夹配置别名
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "src"),
    },
  },
});
如果代码标红,需安装@types/node是TypeScript的一个声明文件包,用于描述Node.js核心模块和常用的第三方库的类型信息
pnpm i @types/node --save-dev

找到tsconfig.json配置文件,找到配置项compilerOptions添加配置,这一步的作用是让IDE可以对路径进行智能提示
// 路径提示
    "baseUrl": ".",
    "paths": {
     "@/*": ["src/*"]
    }

控制路由滚动行为
// 滚动行为:控制滚动条的位置
  scrollBehavior() {
    return {
      left: 0,
      top: 0,
    };
  },

 深度选择器:>>> /deep/ ::v-deep
服务器地址:http://syt.atguigu.cn
 医院接口:http://139.198.34.216:8201/swagger-ui.html
 公共数据接口:http://139.198.34.216:8202/swagger-ui.html
 会员接口:http://139.198.34.216:8203/swagger-ui.html
 短信验证码接口:http://139.198.34.216:8204/swagger-ui.html
 订单接口:http://139.198.34.216:8206/swagger-ui.html
 文件上传接口:http://139.198.34.216:8205/swagger-ui.html
 后台用户接口:http://139.198.34.216:8212/swagger-ui.html
vue3+ts代码标红
取消ts校验
// @ts-ignore

 安装sass
pnpm i sass
base64图片拼接调用
data:image/jpeg;base64
        <img:src="`data:image/jpeg;base64,${hospitalInfo.logoData}`" alt="">
隐藏滚动条
.rightNav {
      overflow: auto;
      &::-webkit-scrollbar{
        display:none;
      }
    }
scrollIntoView()方法属性
 在一个移动项目中遇到个这样的需求,一个表单填写页面,每项都有表单验证,并且点击提交按钮,未通过校验的输入框下边显示校验信息,同时页面滑动定位到第一个未通过校验的输入框.
 我们在完成这项需求时,使用的scrollIntoView()方法.
 alignToTop [可选],目前之前这个参数得到了良好的支持
 true 元素的顶部将对齐到可滚动祖先的可见区域的顶部。对应于scrollIntoViewOptions: {block: “start”, inline: “nearest”}。这是默认值
 false 元素的底部将与可滚动祖先的可见区域的底部对齐。对应于scrollIntoViewOptions: {block: “end”, inline: “nearest”}。
 scrollIntoViewOptions [可选],目前这个参数浏览器对它的支持并不好,可以查看下文兼容性详情
 behavior [可选]定义过渡动画。“auto”,“instant"或"smooth”。默认为"auto"。
 block [可选] “start”,“center”,“end"或"nearest”。默认为"center"。
 inline [可选] “start”,“center”,“end"或"nearest”。默认为"nearest"。
element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); //布尔参数
element.scrollIntoView(scrollIntoViewOptions); //对象参数

示例
var element = document.getElementById("box");
 
element.scrollIntoView();
element.scrollIntoView(false);
element.scrollIntoView({block: "end"});
element.scrollIntoView({behavior: "instant", block: "end", inline: "nearest"});
微信开放平台网址:https://open.weixin.qq.com/
 微信公众平台网址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/getting_started/terminology_introduce.html
 极简插件:https://chrome.zzzmh.cn/
 组件命名:npm i vite-plugin-vue-setup-extend -D
 vite.config.ts文件添加配置
import VueSetupExtend from "vite-plugin-vue-setup-extend";

 
pinia仓库数据持久化插件网址:
https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/why.html
element-plus中ElmessageBox弹窗没有样式报错原因及解决:引入了element plus,并没有引入css文件,所以导致了样式的缺失,只需要在main.js文件中添加如下代码:
import 'element-plus/dist/index.css'
如果还是没有效果记得重启一下项目
微信开放平台网址:https://open.weixin.qq.com/
微信公众平台:https://mp.weixin.qq.com/
对网址进行编码:
 let redirect_URL=encodeURIComponent(window.location.origin)
微信小程序图片体积过大压缩:https://tinypng.com/
qrcode
npm install -g qrcode
import QRCode from 'qrcode'
imgUrl.value=await QRCode.toDataURL(result.data.codeUrl)
console.log(imgUrl)
级联列表

 <el-cascader :props="props" />
// 级联选择器数据
const props:CascaderProps = {
  lazy: true,
  // 加载级联选择器数据的方法
 async lazyLoad(node, resolve) {
  let result:any=await reqCity(node.data.id||'86')
  let showData=result.data.map((item:any)=>{
    return{
      id:item.id,
      label:item.name,
      value:item.value,
      leaf: !item.hasChildren
    }
  })
  resolve(showData)
  },
}
进度条(https://www.npmjs.com/package/nprogress)
安装进度条
npm i nprogress
// 引入进度条
import NProgress from "nprogress";
// 引入进度条的样式
import "nprogress/nprogress.css"
// 设置无加载小圆圈
NProgress.configure({ showSpinner: false });
NProgress.start();
NProgress.done();
设置页面动态标题
const routes = [
  {
    path: "/home",
    component: () => import("@/pages/home/index.vue"),
    meta: { title: "首页" },
  },
}

document.title=`大一医院${to.meta.title}`
路由鉴权
// 路由鉴权
// 引入路由
import router from "@/router";
// 引入进度条
// @ts-ignore
import NProgress from "nprogress";
// 引入进度条的样式
import "nprogress/nprogress.css";
import pinia from "@/store"
// @ts-ignore
import useUserStore from "@/store/modules/user";
let userStore = useUserStore(pinia);
// 存储用户未登录可以访问的路由的路径
let whiteList = [
  "/home",
  "/hospital/register",
  "/hospital/detail",
  "/hospital/notice",
  "/hospital/close",
  "/hospital/search",
];
// 设置无加载小圆圈
NProgress.configure({ showSpinner: false });
// 添加相应的全局守卫
// 全局的前置守卫
router.beforeEach((to, from, next) => {
  // 访问路由组件之前,进度条开始动
  // 动态设置网页左上角的标题
  document.title = `大一医院${to.meta.title}`;
  NProgress.start();
  // 判断用户是否登录-token
  let token = userStore.userInfo.token;
  if (token) {
    // 用户登录了
    next();
  } else {
    // 用户未登录
    if (whiteList.includes(to.path)) {
      next();
    } else {
      // 登录组件显示
      userStore.visible = true;
      // 跳转至首页
      next({ path: "/home",query:{redirect:to.fullPath} });
    }
  }
});
// 后置路由
router.afterEach((to, from) => {
  // 访问路由组件成功,进度条消失
  NProgress.done();
});
登录操作
// 登录操作
const login = async () => {
  await form.value.validate();
  try {
    await userStore.userLogin(loginParam);
    // 关闭对话框
    userStore.visible = false;
    // 获取url的query参数
    let redirect=route.query.redirect
    if(redirect){
      router.push(redirect as string)
    }else{
      router.push('/home')
    }
  } catch (error) {
    ElMessage({
      type: "error",
      message: (error as Error).message
    });
  }
};



















