vue项目个人配置

src/assets/base.css

:root {
  --html-bg-color: #ffffff;
}

html.dark {
  --html-bg-color: #242424;
}

src/assets/reset.css

/**
* Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
* http://cssreset.com
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video{
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  font-weight: normal;
  vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section{
  display: block;
}
ol, ul, li{
  list-style: none;
}
blockquote, q{
  quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after{
  content: '';
  content: none;
}
table{
  border-collapse: collapse;
  border-spacing: 0;
}

/* custom */
a{
  color: #7e8c8d;
  text-decoration: none;
  -webkit-backface-visibility: hidden;
}
::-webkit-scrollbar{
  width: 5px;
  height: 5px;
}
::-webkit-scrollbar-track-piece{
  background-color: rgba(0, 0, 0, 0.2);
  -webkit-border-radius: 6px;
}
::-webkit-scrollbar-thumb:vertical{
  height: 5px;
  background-color: rgba(125, 125, 125, 0.7);
  -webkit-border-radius: 6px;
}
::-webkit-scrollbar-thumb:horizontal{
  width: 5px;
  background-color: rgba(125, 125, 125, 0.7);
  -webkit-border-radius: 6px;
}
html, body{
  width: 100%;
  font-family: 'Microsoft YaHei';
}
body{
  line-height: 1;
  -webkit-text-size-adjust: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html{
  overflow-y: scroll;
}
hr {
  width: 100%;
  margin: 2px 0;
}

/*清除浮动*/
.clearfix:before,
.clearfix:after{
  content: " ";
  display: inline-block;
  height: 0;
  clear: both;
  visibility: hidden;
}
.clearfix{
  *zoom: 1;
}

/*隐藏*/
.dn{
  display: none;
}

src/router/index.ts

import { createRouter, createWebHistory } from "vue-router";

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/",
      name: "home",
      component: () => import("@/views/home.vue"),
      children: []
    }
  ],
});

export default router;

src/stores/index.ts

import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => {
    return {
      x: 0
    }
  },
  getters: {
    double_x(): Number {
      return this.x
    }
  },
  actions: {
    increment() {
      this.x ++
    }
  }
})

src/views/home.view

<template>
  <div class="container">
  </div>
</template>

<script setup lang="ts">
</script>

<style lang="scss" scoped>
.container {
  height: 100%;
  display: flex;
}
</style>

src/App.vue

<template>
  <RouterView></RouterView>
</template>

<script setup lang="ts">
import { RouterView } from "vue-router";
</script>

<style>
html, body, #app {
  height: 100%;
}
#app {
  background-color: var(--html-bg-color);
}
</style>

src/main.ts

import { createApp, toRaw } from "vue";
import { createPinia, type PiniaPluginContext } from "pinia";

import App from "./App.vue";
import router from "./router";

const app = createApp(App);

// global css
import "@/assets/reset.css";
import "@/assets/base.css";

// pinia
const __piniaKey = '__PINIAKEY__'

type Options = {
  key?: string
}

const setStorage = (key: string, value: any): void => {
  localStorage.setItem(key, JSON.stringify(value))
}
const getStorage = (key: string) => {
  return (localStorage.getItem(key) ? JSON.parse(localStorage.getItem(key) as string) : {})
}
const piniaPlugin = (options: Options) => {
  return (context: PiniaPluginContext) => {
    const { store } = context;
    const data = getStorage(`${options?.key ?? __piniaKey}-${store.$id}`)
    store.$subscribe(() => {
      setStorage(`${options?.key ?? __piniaKey}-${store.$id}`, toRaw(store.$state));
    })
    return {
      ...data
    }
  }
}

const store = createPinia()
store.use(piniaPlugin({
  key: 'pinia'
}))

app.use(store);
app.use(router);

app.mount("#app");
posted @ 2023-10-11 10:39  Astrawang  阅读(16)  评论(0)    收藏  举报