first commit

This commit is contained in:
lxmou666 2022-11-20 13:00:40 +08:00
commit 63ff6da901
23 changed files with 3103 additions and 0 deletions

View File

@ -0,0 +1,3 @@
{
"globals": {}
}

19
.eslintrc.cjs Normal file
View File

@ -0,0 +1,19 @@
/* eslint-env node */
require("@rushstack/eslint-patch/modern-module-resolution");
module.exports = {
root: true,
globals: {
//uni:true
},
extends: [
"plugin:vue/vue3-essential",
"eslint:recommended",
"@vue/eslint-config-typescript",
"@vue/eslint-config-prettier",
"./.eslintrc-auto-import.json",
],
parserOptions: {
ecmaVersion: "latest",
},
};

28
.gitignore vendored Normal file
View File

@ -0,0 +1,28 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

1
.prettierrc.json Normal file
View File

@ -0,0 +1 @@
{}

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

46
README.md Normal file
View File

@ -0,0 +1,46 @@
# LockServer
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
## Type Support for `.vue` Imports in TS
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
1. Disable the built-in TypeScript Extension
1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette
2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
## Customize configuration
See [Vite Configuration Reference](https://vitejs.dev/config/).
## Project Setup
```sh
pnpm install
```
### Compile and Hot-Reload for Development
```sh
pnpm dev
```
### Type-Check, Compile and Minify for Production
```sh
pnpm build
```
### Lint with [ESLint](https://eslint.org/)
```sh
pnpm lint
```

5
auto-imports.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
// Generated by 'unplugin-auto-import'
export {}
declare global {
}

13
components.d.ts vendored Normal file
View File

@ -0,0 +1,13 @@
// generated by unplugin-vue-components
// We suggest you to commit this file into source control
// Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core'
export {}
declare module '@vue/runtime-core' {
export interface GlobalComponents {
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
}
}

7
env.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
/// <reference types="vite/client" />
export {};
declare global {
// const uni: any;
const subDir: string;
const appTitle: string;
}

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%= appTitle %></title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

37
package.json Normal file
View File

@ -0,0 +1,37 @@
{
"name": "lockserver",
"version": "0.0.0",
"scripts": {
"dev": "vite",
"build": "run-p type-check build-only",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --noEmit",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
},
"dependencies": {
"axios": "^1.1.3",
"element-plus": "^2.2.22",
"pinia": "^2.0.23",
"vue": "^3.2.41",
"vue-router": "^4.1.5"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.1.4",
"@types/node": "^16.11.68",
"@vitejs/plugin-vue": "^3.1.2",
"@vue/eslint-config-prettier": "^7.0.0",
"@vue/eslint-config-typescript": "^11.0.0",
"@vue/tsconfig": "^0.1.3",
"eslint": "^8.22.0",
"eslint-plugin-vue": "^9.3.0",
"npm-run-all": "^4.1.5",
"prettier": "^2.7.1",
"sass": "^1.56.1",
"typescript": "~4.7.4",
"unplugin-auto-import": "^0.11.4",
"unplugin-vue-components": "^0.22.9",
"vite": "^3.1.8",
"vue-tsc": "^1.0.8"
}
}

2660
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

7
src/App.vue Normal file
View File

@ -0,0 +1,7 @@
<script setup lang="ts"></script>
<template>
<div>1111</div>
</template>
<style scoped></style>

1
src/api.ts Normal file
View File

@ -0,0 +1 @@
export default {};

68
src/assets/base.css Normal file
View File

@ -0,0 +1,68 @@
/* color palette from <https://github.com/vuejs/theme> */
:root {
--vt-c-white: #ffffff;
--vt-c-white-soft: #f8f8f8;
--vt-c-white-mute: #f2f2f2;
--vt-c-black: #181818;
--vt-c-black-soft: #222222;
--vt-c-black-mute: #282828;
--vt-c-indigo: #2c3e50;
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
--vt-c-text-light-1: var(--vt-c-indigo);
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
--vt-c-text-dark-1: var(--vt-c-white);
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
/* semantic color variables for this project */
:root {
--color-background: var(--vt-c-white);
--color-background-soft: var(--vt-c-white-soft);
--color-background-mute: var(--vt-c-white-mute);
--color-border: var(--vt-c-divider-light-2);
--color-border-hover: var(--vt-c-divider-light-1);
--color-heading: var(--vt-c-text-light-1);
--color-text: var(--vt-c-text-light-1);
--section-gap: 160px;
}
@media (prefers-color-scheme: dark) {
:root {
--color-background: var(--vt-c-black);
--color-background-soft: var(--vt-c-black-soft);
--color-background-mute: var(--vt-c-black-mute);
--color-border: var(--vt-c-divider-dark-2);
--color-border-hover: var(--vt-c-divider-dark-1);
--color-heading: var(--vt-c-text-dark-1);
--color-text: var(--vt-c-text-dark-2);
}
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
position: relative;
font-weight: normal;
}
html,
body {
margin: 0;
padding: 0;
width: 100vw;
height: 100vh;
}

1
src/config.ts Normal file
View File

@ -0,0 +1 @@
export default {};

14
src/main.ts Normal file
View File

@ -0,0 +1,14 @@
import { createApp } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
import router from "./router";
import "./assets/base.css";
const app = createApp(App);
app.use(createPinia());
app.use(router);
app.mount("#app");

24
src/router/index.ts Normal file
View File

@ -0,0 +1,24 @@
import { createRouter, createWebHistory } from "vue-router";
// import HomeView from '../views/HomeView.vue'
const router = createRouter({
// history: createWebHistory(import.meta.env.BASE_URL),
history: createWebHistory(subDir),
routes: [
// {
// path: '/',
// name: 'home',
// component: HomeView
// },
// {
// path: '/about',
// name: 'about',
// // route level code-splitting
// // this generates a separate chunk (About.[hash].js) for this route
// // which is lazy-loaded when the route is visited.
// component: () => import('../views/AboutView.vue')
// }
],
});
export default router;

16
tsconfig.config.json Normal file
View File

@ -0,0 +1,16 @@
{
"extends": "@vue/tsconfig/tsconfig.node.json",
"include": [
"vite.config.*",
"vitest.config.*",
"cypress.config.*",
"playwright.config.*",
"./*.ts",
],
"compilerOptions": {
"composite": true,
"types": [
"node"
]
}
}

27
tsconfig.json Normal file
View File

@ -0,0 +1,27 @@
{
"extends": "@vue/tsconfig/tsconfig.web.json",
"include": [
"**/*.d.ts",
"./*.d.ts",
"src/**/*",
"src/**/*.vue"
],
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"allowJs": true,
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
},
"types": [
"element-plus/global"
]
},
"references": [
{
"path": "./tsconfig.config.json"
}
]
}

54
vite.config.extend.ts Normal file
View File

@ -0,0 +1,54 @@
import fs from "node:fs";
import path from "node:path";
import type { ResolvedConfig } from "vite";
export interface ViteConfitExtendOptions {
indexPath: string;
}
export default function viteConfitExtend(options?: ViteConfitExtendOptions) {
let _config: ResolvedConfig;
const _options = options;
return {
name: "file-manager",
writeBundle: () => {
if (_config.command == "build") {
//入口文件注入常量<%=xxx%>
const defines = _config.define;
if (defines) {
const indexFile = path.resolve(
_config.root,
_config.build.outDir,
"index.html"
);
let htmlStr = fs.readFileSync(indexFile, "utf-8");
const reg = new RegExp("<%=([\\s]*)([\\S]+?)([\\s]*)%>", "g");
for (const item of htmlStr.matchAll(reg)) {
const key = item[2];
if (key && key in defines) {
const val = defines[key];
const rep = new RegExp(item[0], "g");
htmlStr = htmlStr.replace(rep, val);
}
}
fs.writeFileSync(indexFile, htmlStr);
}
}
},
configResolved(config: ResolvedConfig) {
_config = config;
},
closeBundle() {
if (_config.command == "build" && _options) {
if (_options.indexPath) {
fs.renameSync(
path.resolve(_config.root, _config.build.outDir, "index.html"),
path.resolve(_config.root, _config.build.outDir, _options.indexPath)
);
console.warn(`indexPath: ${_options.indexPath}`);
}
}
},
};
}

56
vite.config.ts Normal file
View File

@ -0,0 +1,56 @@
import { fileURLToPath, URL } from "node:url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import viteConfitExtend from "./vite.config.extend";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
const subDir: string = "adminlockui"; //输出到子目录
const appTitle: string = "温德姆酒店远程开门小程序后台管理"; //全局变量
export default defineConfig({
// https://vitejs.dev/config/
build: {
outDir: "dist",
assetsDir: subDir,
copyPublicDir: true,
},
define: {
appTitle: JSON.stringify(appTitle),
subDir: JSON.stringify(subDir),
},
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
// 解决eslint报错问题
eslintrc: {
enabled: true,
},
}),
Components({
resolvers: [ElementPlusResolver()],
}),
viteConfitExtend({
indexPath: `${subDir}/index.html`,
}),
],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
server: {
open: true,
proxy: {
"/api": {
target: "http://192.168.1.2:3101",
},
"/fileserver": {
target: "http://192.168.1.2:3101",
},
},
},
});