❤ tailwindcss、登录实现(Vue3系统篇四)

940 阅读3分钟

❤ tailwindcss、登录实现(Vue3系统篇四)

1、tailwindcss的使用

❤React体系13-tailwindcss的安装和使用 juejin.cn/post/736684…

vue之中使用

yarn add tailwindcss
npx tailwindcss init
yarn add postcss
yarn add autoprefixer


add -D tailwindcss postcss autoprefixer

配置tailwind.config.js

/** @type {import('tailwindcss').Config} */
export default {
  content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
}


配置postcss.config.js

在项目根目录下创建或编辑 postcss.config.js 文件,并添加 Tailwind CSS 插件

module.exports = {
  plugins: [
    require('tailwindcss'),
    require('autoprefixer'),
    // 其他 PostCSS 插件
  ]
}

踩坑一:

如果项目中单独引入了全局样式文件,那么上面创建的tailwind.css文件在引入时务必放在全局样式文件上面,否者Tailwindcss不会生效。如下: image.png

踩坑二: vite.config.ts增加配置

import tailwindcss from 'tailwindcss'
import autoprefixer from 'autoprefixer'
 
export default defineConfig({
    css: {
      postcss: {
        plugins: [tailwindcss, autoprefixer],
      },
    },
})

3、登录页面的搭建

接下来我们简单搭建一下vite+vue3这部分的登录页面并实现功能

在我们的文件夹下面简单的搭建一下我们的路由NexusVue\src\router

import { createRouter, createWebHistory, RouteRecordRaw ,createWebHashHistory} from "vue-router"; // 导入路由
// 1. 配置路由  lintaibai--进来时候的初始页面
const routes = [
    {
        path: "/", // 默认路由 home页面
        name: '/',
        component: () => import('@/views/lintaibai.vue'),
    },
    {
        path: "/login", // 默认路由 home页面
        name: 'login',
        component: () => import('@/views/admin/login.vue'),
    },

];
// 2.返回一个 router 实列,为函数,配置 history 模式
const router = createRouter({
    history: createWebHistory(), //createWebHashHistory
    routes,
});

// 3.导出路由   去 main.ts 注册 router.ts
export default router

搭建一下我们的登录页面

image.png

// 处理表单提交的函数
    const handleSubmit = async (event) => {
        event.preventDefault();
        // 在实际应用中,这里可以发送注册请求到服务器进行用户注册
        // 这里简单地假设密码和确认密码相同才能注册成功
        if (form.value.username === '' || form.value.password === '') {
            return;
        }else{
            console.log(form.value, 'form.value');
            try {
                const res:any = await login(form.value);
              
                console.log(res,'res');
                
                if(res.code==200){
                }else{
                    // message.error(res.message);
                }
            } catch (error) {
                console.log('获取数据详情失败,请重试!',error);
            } finally {
                console.log('完!');
            }
        }
        return;
    };

image.png

这里我们检查一下,登录页面已经完成了!

4、使用js-cookie

使用本地的cookie来存储我们的token信息,一般我们会使用js-cookie

yarn add js-cookie

手写NexusVue\src\utils

import Cookies from 'js-cookie'

const TokenKey = 'Admin-Token'

export function getToken() {
  return Cookies.get(TokenKey)
}

export function setToken(token) {
  return Cookies.set(TokenKey, token)
}

export function removeToken() {
  return Cookies.remove(TokenKey)
}

5、Pinia的安装和使用

5-1 Pinia是什么(这部分后面会进行额外细致讲解)

Pinia 是一个为 Vue 3 设计的状态管理库,vue3建议使用pinia代替vuex进行状态管理。

理念上我觉得是对组合式API的扩展和衍生:

组合式API(Composable API)是一种设计和构建API的方式,思想就是让不同的API端的点和功能可以像积木一样组合,实现更复杂和定制化的功能。主要强调的其实是模块化、复用性、灵活性。

组合式API核心思想:

  1. 模块化设计:API被设计成独立的、可复用的模块,每个模块提供特定的功能或资源。低耦合度。
  2. 高内聚低耦合:每个API模块分管不同单一性功能,高度内聚。
  3. 灵活组合:开发者可以根据需求组合这些模块,从而构建出新的功能。这种组合可以是静态的(编写代码时确定)或者动态的(运行时确定)。
  4. 标准接口:定义一些标准化的接口和协议确保模块顺利组合。这些标准化接口使模块之间不需要了解对方的内部实现细节。
  5. 扩展性和可维护性:由于组合式API的模块化设计,添加新功能或修改现有功能风险更小。提高了系统的可扩展性和可维护性。

5-2安装

yarn add pinia

5-3 使用

创建一个 store,例如 counterStore

// src/stores/counterStore.js
import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++;
    },
    decrement() {
      this.count--;
    },
  },
});

在需要使用 store 的组件中导入并使用它

<template>
  <div>
    <p>Count: {{ counterStore.count }}</p>
    <button @click="counterStore.increment()">Increment</button>
    <button @click="counterStore.decrement()">Decrement</button>
  </div>
</template>

<script>
import { useCounterStore } from '@/stores/counterStore';

export default {
  setup() {
    const counterStore = useCounterStore();

    return { counterStore };
  },
};
</script>