From ee58452db191f476388bb28679131b65b894745c Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Wed, 7 Aug 2024 21:48:57 +0800 Subject: [PATCH] =?UTF-8?q?init=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/env.d.ts | 1 + frontend/index.html | 105 ++++++++++++++++++++++++ frontend/package.json | 41 +++++++++ frontend/postcss.config.js | 6 ++ frontend/src/api/main.js | 13 +++ frontend/src/assets/logo.png | Bin 0 -> 33553 bytes frontend/src/assets/styles/tailMain.css | 3 + frontend/src/constants/localStore.ts | 2 + frontend/src/main.ts | 37 +++++++++ frontend/src/router/index.ts | 20 +++++ frontend/src/router/routerMap.ts | 15 ++++ frontend/src/utils/ipcRenderer.js | 33 ++++++++ frontend/src/views/Child.vue | 15 ++++ frontend/src/views/Login.vue | 36 ++++++++ frontend/tailwind.config.js | 9 ++ frontend/tsconfig.app.json | 13 +++ frontend/tsconfig.json | 16 ++++ frontend/tsconfig.node.json | 19 +++++ frontend/vite.config.ts | 44 ++++++++++ 19 files changed, 428 insertions(+) create mode 100644 frontend/env.d.ts create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/api/main.js create mode 100644 frontend/src/assets/logo.png create mode 100644 frontend/src/assets/styles/tailMain.css create mode 100644 frontend/src/constants/localStore.ts create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/router/index.ts create mode 100644 frontend/src/router/routerMap.ts create mode 100644 frontend/src/utils/ipcRenderer.js create mode 100644 frontend/src/views/Child.vue create mode 100644 frontend/src/views/Login.vue create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..9de13bc --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,105 @@ + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..499cab7 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,41 @@ +{ + "name": "frontend", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --host --port 18091", + "serve": "vite --host --port 18091", + "build-staging": "vite build --mode staging", + "build": "vite build", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build --force", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "element-plus": "^2.7.8", + "pinia": "^2.1.7", + "vue": "^3.4.29", + "vue-router": "^4.3.3" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.8.0", + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.14.14", + "@vitejs/plugin-vue": "^5.0.5", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/tsconfig": "^0.5.1", + "autoprefixer": "^10.4.20", + "eslint": "^8.57.0", + "eslint-plugin-vue": "^9.23.0", + "npm-run-all2": "^6.2.0", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.7", + "typescript": "~5.4.0", + "vite": "^5.3.1", + "vite-plugin-node-polyfills": "^0.22.0", + "vue-tsc": "^2.0.21" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/src/api/main.js b/frontend/src/api/main.js new file mode 100644 index 0000000..d3adbbb --- /dev/null +++ b/frontend/src/api/main.js @@ -0,0 +1,13 @@ + +/** + * 主进程与渲染进程通信频道定义 + * Definition of communication channels between main process and rendering process + */ +const ipcApiRoute = { + test: 'controller.example.test', +} + +export { + ipcApiRoute +} + diff --git a/frontend/src/assets/logo.png b/frontend/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..95dc60bb3dcbe69708f271e26af349bfcd522b9f GIT binary patch literal 33553 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 { + app + .use(Router) // 使用路由 + .use(ElementPlus) // 使用ele-plus组件 + .use(createPinia()) // 使用pinia + + // 自动引入图标 + Object.keys(ElementPlusIconsVue).forEach((key) => { + app.component(key, ElementPlusIconsVue[key]); + }); + + //待路由初始化完毕后,挂载app + await Router.isReady() +} + +//挂载app +setupAll().then(() => { + app.mount('#app') +}) \ No newline at end of file diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts new file mode 100644 index 0000000..1db417b --- /dev/null +++ b/frontend/src/router/index.ts @@ -0,0 +1,20 @@ +import { createRouter, createWebHashHistory } from 'vue-router' +import routerMap from './routerMap' + +const Router = createRouter({ + history: createWebHashHistory(), + routes: routerMap, +}) + + +Router.beforeEach((to, from, next) => { + next() +}) + +// 路由加载后 +Router.afterEach(() => { + +}) + + +export default Router diff --git a/frontend/src/router/routerMap.ts b/frontend/src/router/routerMap.ts new file mode 100644 index 0000000..45da679 --- /dev/null +++ b/frontend/src/router/routerMap.ts @@ -0,0 +1,15 @@ +import Login from '@/views/Login.vue' + +/** + * 基础路由 + * @type { *[] } + */ +const constantRouterMap = [ + { + path: '/', + name: 'login', + component: Login + }, +] + +export default constantRouterMap \ No newline at end of file diff --git a/frontend/src/utils/ipcRenderer.js b/frontend/src/utils/ipcRenderer.js new file mode 100644 index 0000000..b229b36 --- /dev/null +++ b/frontend/src/utils/ipcRenderer.js @@ -0,0 +1,33 @@ +const Renderer = (window.require && window.require('electron')) || window.electron || {}; + +/** + * ipc + * 官方api说明:https://www.electronjs.org/zh/docs/latest/api/ipc-renderer + * + * 属性/方法 + * ipc.invoke(channel, param) - 发送异步消息(invoke/handle 模型) + * ipc.sendSync(channel, param) - 发送同步消息(send/on 模型) + * ipc.on(channel, listener) - 监听 channel, 当新消息到达,调用 listener + * ipc.once(channel, listener) - 添加一次性 listener 函数 + * ipc.removeListener(channel, listener) - 为特定的 channel 从监听队列中删除特定的 listener 监听者 + * ipc.removeAllListeners(channel) - 移除所有的监听器,当指定 channel 时只移除与其相关的所有监听器 + * ipc.send(channel, ...args) - 通过channel向主进程发送异步消息 + * ipc.postMessage(channel, message, [transfer]) - 发送消息到主进程 + * ipc.sendTo(webContentsId, channel, ...args) - 通过 channel 发送消息到带有 webContentsId 的窗口 + * ipc.sendToHost(channel, ...args) - 消息会被发送到 host 页面上的 元素 + */ + +/** + * ipc + */ +const ipc = Renderer.ipcRenderer || undefined; + +/** + * 是否为EE环境 + */ +const isEE = ipc ? true : false; + +export { + Renderer, ipc, isEE +}; + diff --git a/frontend/src/views/Child.vue b/frontend/src/views/Child.vue new file mode 100644 index 0000000..f76de52 --- /dev/null +++ b/frontend/src/views/Child.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue new file mode 100644 index 0000000..d164cab --- /dev/null +++ b/frontend/src/views/Login.vue @@ -0,0 +1,36 @@ + + + + diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..6ec11f7 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ["index.html", "./src/**/*.{html,js,ts,jsx,tsx,vue}"], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..db4bf17 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..06df06c --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,16 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ], + "compilerOptions": { + "types": [ + "node" + ] + } +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..f094063 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node20/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..53403c4 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,44 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + // 基础配置 + base: './', + publicDir: 'public', + resolve: { + alias: { + '@': path.resolve(__dirname, 'src') + } + }, + css: { + preprocessorOptions: { + less: { + modifyVars: { + '@border-color-base': '#dce3e8', + }, + javascriptEnabled: true, + }, + }, + }, + build: { + outDir: 'dist', + assetsDir: 'assets', + assetsInlineLimit: 4096, + cssCodeSplit: true, + brotliSize: false, + sourcemap: false, + minify: 'terser', + terserOptions: { + compress: { + // 生产环境去除console及debug + drop_console: false, + drop_debugger: true, + }, + }, + }, +})