commit 28f0cd9227070b1fde342fbc3d8164867c091841 Author: bunny <1319900154@qq.com> Date: Tue Feb 27 14:51:41 2024 +0800 test: 测试: ✅ 添加docker和一些基础配置 diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..dc3bc09 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..fe95096 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] # 表示所有文件适用 +charset = utf-8 # 设置文件字符集为 utf-8 +end_of_line = lf # 控制换行类型(lf | cr | crlf) +insert_final_newline = false # 始终在文件末尾插入一个新行 +indent_style = tab # 缩进风格(tab | space) +indent_size = 2 # 缩进大小 +max_line_length = 130 # 最大行长度 + +[*.md] # 表示仅 md 文件适用以下规则 +max_line_length = off # 关闭最大行长度限制 +trim_trailing_whitespace = false # 关闭末尾空格修剪 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..c70717e --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +vue.config.js +list +.prettierrc.js +.stylelintrc.js +src/utils/request.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..712f877 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + root: true, + env: { + node: true, + }, + extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/typescript/recommended', 'plugin:prettier/recommended'], + parserOptions: { + ecmaVersion: 2020, + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'vue/multi-word-component-names': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..403adbc --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..1a089f4 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..a4fee1c --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run lint:lint-staged diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..e48b39a --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +list \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..d17413e --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,39 @@ +// @see: https://www.prettier.cn + +module.exports = { + // 超过最大值换行 + printWidth: 130, + // 缩进字节数 + tabWidth: 1, + // 使用制表符而不是空格缩进行 + useTabs: true, + // 结尾不用分号(true有,false没有) + semi: true, + // 使用单引号(true单引号,false双引号) + singleQuote: true, + // 更改引用对象属性的时间 可选值"" + quoteProps: 'as-needed', + // 在对象,数组括号与文字之间加空格 "{ foo: bar }" + bracketSpacing: true, + // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认none + trailingComma: 'all', + // 在JSX中使用单引号而不是双引号 + jsxSingleQuote: true, + // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 ,always:不省略括号 + arrowParens: 'avoid', + // 如果文件顶部已经有一个 doclock,这个选项将新建一行注释,并打上@format标记。 + insertPragma: false, + // 指定要使用的解析器,不需要写文件开头的 @prettier + requirePragma: false, + // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行 + proseWrap: 'preserve', + // 在html中空格是否是敏感的 "css" - 遵守CSS显示属性的默认值, "strict" - 空格被认为是敏感的 ,"ignore" - 空格被认为是不敏感的 + htmlWhitespaceSensitivity: 'css', + // 换行符使用 lf 结尾是 可选值"" + endOfLine: 'auto', + // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 + rangeStart: 0, + rangeEnd: Infinity, + + vueIndentScriptAndStyle: false, // Vue文件脚本和样式标签缩进 +}; diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 0000000..612f148 --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,49 @@ +// npm i stylelint-config-standard stylelint-config-standard-scss stylelint-config-recess-order stylelint-config-prettier +// npm i stylelint-config-html stylelint-config-recommended-vue + +// @see: https://stylelint.io +module.exports = { + /* 继承某些已有的规则 */ + extends: [ + 'stylelint-config-standard', // 配置stylelint拓展插件 + 'stylelint-config-html/vue', // 配置 vue 中 template 样式格式化 + 'stylelint-config-standard-scss', // 配置stylelint scss插件 + 'stylelint-config-recommended-vue/scss', // 配置 vue 中 scss 样式格式化 + 'stylelint-config-recess-order', // 配置stylelint css属性书写顺序插件, + 'stylelint-config-prettier', // 配置stylelint和prettier兼容 + ], + overrides: [ + // 扫描 .vue/html 文件中的 diff --git a/src/api/test.ts b/src/api/test.ts new file mode 100644 index 0000000..7e408c2 --- /dev/null +++ b/src/api/test.ts @@ -0,0 +1,8 @@ +import Request from '@/utils/request'; + +export const reqGetLoadBoard = () => { + return Request({ + url: '/board/loadBoard', + method: 'GET', + }); +}; diff --git a/src/assets/css/index.css b/src/assets/css/index.css new file mode 100644 index 0000000..0ca2592 --- /dev/null +++ b/src/assets/css/index.css @@ -0,0 +1,3 @@ +body { + background-color: #000; +} diff --git a/src/assets/css/reset.css b/src/assets/css/reset.css new file mode 100644 index 0000000..5e28c75 --- /dev/null +++ b/src/assets/css/reset.css @@ -0,0 +1,82 @@ +/* 选中文字颜色 */ +*::selection { + color: #1f1f1f; + background: #b3d4fc; +} + +/*定义滚动条高宽及背景高宽分别对应横竖滚动条的尺寸*/ +::-webkit-scrollbar { + width: 8px; + height: 8px; + background-color: #f5f5f5; +} +/*定义滚动条轨道内阴影+圆角*/ +::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px #ccc; + border-radius: 5px; + background-color: #f5f5f5; +} +/*定义滑块内阴影+圆角*/ +::-webkit-scrollbar-thumb { + border-radius: 5px; + -webkit-box-shadow: inset 0 0 6px #ccc; + background-color: #ccc; +} + +html,body{height:100%;} +html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu{margin:0;padding:0;} +header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block;} +table{border-collapse:collapse;border-spacing:0;} +caption,th{text-align:left;font-weight:normal;} +html,body,fieldset,img,iframe,abbr{border:0;} +i,cite,em,var,address,dfn{font-style:normal;} +[hidefocus],summary{outline:0;} +li{list-style:none;} +h1,h2,h3,h4,h5,h6,small{font-size:100%;} +sup,sub{font-size:83%;} +pre,code,kbd,samp{font-family:inherit;} +q:before,q:after{content:none;} +textarea{overflow:auto;resize:none;} +label,summary{cursor:default;} +a,button{cursor:pointer;} +h1,h2,h3,h4,h5,h6,em,strong,b{font-weight:bold;} +del,ins,u,s,a,a:hover{text-decoration:none;} +body,textarea,input,button,select,keygen,legend{font: Microsoft YaHei,arial,\5b8b\4f53;color:#333;outline:0;} +body{background:#fff;} +a,a:hover{color:#333;} +*{box-sizing: border-box;} + +/* 去除input默认填充的背景颜色 */ +input:-webkit-autofill { + -webkit-box-shadow: 0 0 0px 1000px white inset; +} + +/* 清除input[type=number]的默认样式 */ +input[type=number] { + -moz-appearance:textfield; +} +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* 清除移动端 a 标签等点击区域变色 */ +*{ + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); +} + +/* 清除移动端 input 样式 */ +input{ + border: none; + -moz-appearance:none; + -webkit-appearance : none ; /*解决ios上按钮的圆角问题*/ + border-radius: 0; /*解决ios上输入框圆角问题*/ + outline:medium; /*去掉鼠标点击的默认黄色边框*/ + background-color: transparent; +} + +/* 避免ios滑动滚动条卡顿 */ +*{ + -webkit-overflow-scrolling : touch +} \ No newline at end of file diff --git a/src/assets/images/tip/404.png b/src/assets/images/tip/404.png new file mode 100644 index 0000000..3b6c493 Binary files /dev/null and b/src/assets/images/tip/404.png differ diff --git a/src/assets/images/tip/404页面丢失.png b/src/assets/images/tip/404页面丢失.png new file mode 100644 index 0000000..28b1359 Binary files /dev/null and b/src/assets/images/tip/404页面丢失.png differ diff --git a/src/assets/images/tip/loading.gif b/src/assets/images/tip/loading.gif new file mode 100644 index 0000000..1bf54a9 Binary files /dev/null and b/src/assets/images/tip/loading.gif differ diff --git a/src/assets/images/tip/你还未登录哦.png b/src/assets/images/tip/你还未登录哦.png new file mode 100644 index 0000000..786ef0f Binary files /dev/null and b/src/assets/images/tip/你还未登录哦.png differ diff --git a/src/assets/images/tip/加载失败.png b/src/assets/images/tip/加载失败.png new file mode 100644 index 0000000..42759bc Binary files /dev/null and b/src/assets/images/tip/加载失败.png differ diff --git a/src/assets/images/tip/图片加载中.png b/src/assets/images/tip/图片加载中.png new file mode 100644 index 0000000..86ca46b Binary files /dev/null and b/src/assets/images/tip/图片加载中.png differ diff --git a/src/assets/images/tip/图片加载失败.png b/src/assets/images/tip/图片加载失败.png new file mode 100644 index 0000000..0cb5de5 Binary files /dev/null and b/src/assets/images/tip/图片加载失败.png differ diff --git a/src/assets/images/tip/推送失败.png b/src/assets/images/tip/推送失败.png new file mode 100644 index 0000000..6baaa22 Binary files /dev/null and b/src/assets/images/tip/推送失败.png differ diff --git a/src/assets/images/tip/推送成功.png b/src/assets/images/tip/推送成功.png new file mode 100644 index 0000000..aac7d1f Binary files /dev/null and b/src/assets/images/tip/推送成功.png differ diff --git a/src/assets/images/tip/搜索不到信息.png b/src/assets/images/tip/搜索不到信息.png new file mode 100644 index 0000000..85d3555 Binary files /dev/null and b/src/assets/images/tip/搜索不到信息.png differ diff --git a/src/assets/images/tip/暂无任务.png b/src/assets/images/tip/暂无任务.png new file mode 100644 index 0000000..b7121b9 Binary files /dev/null and b/src/assets/images/tip/暂无任务.png differ diff --git a/src/assets/images/tip/暂无会员卡.png b/src/assets/images/tip/暂无会员卡.png new file mode 100644 index 0000000..748dd18 Binary files /dev/null and b/src/assets/images/tip/暂无会员卡.png differ diff --git a/src/assets/images/tip/暂无信号.png b/src/assets/images/tip/暂无信号.png new file mode 100644 index 0000000..5a513d6 Binary files /dev/null and b/src/assets/images/tip/暂无信号.png differ diff --git a/src/assets/images/tip/暂无充值记录.png b/src/assets/images/tip/暂无充值记录.png new file mode 100644 index 0000000..e3241cf Binary files /dev/null and b/src/assets/images/tip/暂无充值记录.png differ diff --git a/src/assets/images/tip/暂无内容.png b/src/assets/images/tip/暂无内容.png new file mode 100644 index 0000000..f5e7522 Binary files /dev/null and b/src/assets/images/tip/暂无内容.png differ diff --git a/src/assets/images/tip/暂无发票.png b/src/assets/images/tip/暂无发票.png new file mode 100644 index 0000000..b18bc6a Binary files /dev/null and b/src/assets/images/tip/暂无发票.png differ diff --git a/src/assets/images/tip/暂无导航.png b/src/assets/images/tip/暂无导航.png new file mode 100644 index 0000000..e45330c Binary files /dev/null and b/src/assets/images/tip/暂无导航.png differ diff --git a/src/assets/images/tip/暂无岗位.png b/src/assets/images/tip/暂无岗位.png new file mode 100644 index 0000000..775f2ac Binary files /dev/null and b/src/assets/images/tip/暂无岗位.png differ diff --git a/src/assets/images/tip/暂无影片.png b/src/assets/images/tip/暂无影片.png new file mode 100644 index 0000000..14459d4 Binary files /dev/null and b/src/assets/images/tip/暂无影片.png differ diff --git a/src/assets/images/tip/暂无打印纸张.png b/src/assets/images/tip/暂无打印纸张.png new file mode 100644 index 0000000..8586762 Binary files /dev/null and b/src/assets/images/tip/暂无打印纸张.png differ diff --git a/src/assets/images/tip/暂无提现记录.png b/src/assets/images/tip/暂无提现记录.png new file mode 100644 index 0000000..3fb5831 Binary files /dev/null and b/src/assets/images/tip/暂无提现记录.png differ diff --git a/src/assets/images/tip/暂无搜索结果.png b/src/assets/images/tip/暂无搜索结果.png new file mode 100644 index 0000000..a334f1d Binary files /dev/null and b/src/assets/images/tip/暂无搜索结果.png differ diff --git a/src/assets/images/tip/暂无数据3.png b/src/assets/images/tip/暂无数据3.png new file mode 100644 index 0000000..aa16d32 Binary files /dev/null and b/src/assets/images/tip/暂无数据3.png differ diff --git a/src/assets/images/tip/暂无权限.png b/src/assets/images/tip/暂无权限.png new file mode 100644 index 0000000..2a93b82 Binary files /dev/null and b/src/assets/images/tip/暂无权限.png differ diff --git a/src/assets/images/tip/暂无消息.png b/src/assets/images/tip/暂无消息.png new file mode 100644 index 0000000..96707a3 Binary files /dev/null and b/src/assets/images/tip/暂无消息.png differ diff --git a/src/assets/images/tip/暂无添加银行卡.png b/src/assets/images/tip/暂无添加银行卡.png new file mode 100644 index 0000000..2394d5b Binary files /dev/null and b/src/assets/images/tip/暂无添加银行卡.png differ diff --git a/src/assets/images/tip/暂无详情页.png b/src/assets/images/tip/暂无详情页.png new file mode 100644 index 0000000..a07f160 Binary files /dev/null and b/src/assets/images/tip/暂无详情页.png differ diff --git a/src/assets/images/tip/暂无邀请.png b/src/assets/images/tip/暂无邀请.png new file mode 100644 index 0000000..cb6c697 Binary files /dev/null and b/src/assets/images/tip/暂无邀请.png differ diff --git a/src/assets/images/tip/暂无配送.png b/src/assets/images/tip/暂无配送.png new file mode 100644 index 0000000..05c4bee Binary files /dev/null and b/src/assets/images/tip/暂无配送.png differ diff --git a/src/assets/images/tip/暂无阅读.png b/src/assets/images/tip/暂无阅读.png new file mode 100644 index 0000000..3a0ecbc Binary files /dev/null and b/src/assets/images/tip/暂无阅读.png differ diff --git a/src/assets/images/tip/正在建设中.png b/src/assets/images/tip/正在建设中.png new file mode 100644 index 0000000..0166f1d Binary files /dev/null and b/src/assets/images/tip/正在建设中.png differ diff --git a/src/assets/images/tip/系统出错了.png b/src/assets/images/tip/系统出错了.png new file mode 100644 index 0000000..082ef83 Binary files /dev/null and b/src/assets/images/tip/系统出错了.png differ diff --git a/src/assets/images/tip/访问页面不存在.png b/src/assets/images/tip/访问页面不存在.png new file mode 100644 index 0000000..b522e83 Binary files /dev/null and b/src/assets/images/tip/访问页面不存在.png differ diff --git a/src/assets/images/tip/购物车空空如也.png b/src/assets/images/tip/购物车空空如也.png new file mode 100644 index 0000000..d490dce Binary files /dev/null and b/src/assets/images/tip/购物车空空如也.png differ diff --git a/src/assets/images/tip/链接迷路.png b/src/assets/images/tip/链接迷路.png new file mode 100644 index 0000000..bf1a896 Binary files /dev/null and b/src/assets/images/tip/链接迷路.png differ diff --git a/src/assets/images/tip/页面抢修中.png b/src/assets/images/tip/页面抢修中.png new file mode 100644 index 0000000..f94f1ca Binary files /dev/null and b/src/assets/images/tip/页面抢修中.png differ diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..1126d2b --- /dev/null +++ b/src/main.ts @@ -0,0 +1,14 @@ +import 'echarts'; +import { createPinia } from 'pinia'; +import { createApp } from 'vue'; +import ECharts from 'vue-echarts'; +import App from './App.vue'; +import './assets/css/reset.css'; +import router from './router'; +import './utils/lib-flexible.js'; +import './utils/rem'; + +const app = createApp(App); +app.component('VChart', ECharts); + +app.use(router).use(createPinia()).mount('#app'); diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..08baa11 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,20 @@ +import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router'; + +const routes: Array = [ + { + path: '/', + name: 'layout', + component: () => import(/* webpackChunkName: "layout" */ '@/views/layout.vue'), + }, +]; + +/** + * 如果需要打包成app,则要将路由改为Hash路由,createWebHashHistory + * 如果不需要 createWebHistory + */ +const router = createRouter({ + history: createWebHashHistory(process.env.BASE_URL), + routes, +}); + +export default router; diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts new file mode 100644 index 0000000..3804a43 --- /dev/null +++ b/src/shims-vue.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable */ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/src/store/test.ts b/src/store/test.ts new file mode 100644 index 0000000..f9837a0 --- /dev/null +++ b/src/store/test.ts @@ -0,0 +1,11 @@ +import { defineStore } from 'pinia'; + +export const testStore = defineStore('testStore', { + state: () => { + return { + count: 0, + }; + }, + getters: {}, + actions: {}, +}); diff --git a/src/utils/lib-flexible.js b/src/utils/lib-flexible.js new file mode 100644 index 0000000..cd67438 --- /dev/null +++ b/src/utils/lib-flexible.js @@ -0,0 +1,135 @@ +(function (win, lib) { + var doc = win.document; + var docEl = doc.documentElement; + var metaEl = doc.querySelector('meta[name="viewport"]'); + var flexibleEl = doc.querySelector('meta[name="flexible"]'); + var dpr = 0; + var scale = 0; + var tid; + var flexible = lib.flexible || (lib.flexible = {}); + + if (metaEl) { + console.warn('将根据已有的meta标签来设置缩放比例'); + var match = metaEl + .getAttribute('content') + // eslint-disable-next-line no-useless-escape + .match(/initial\-scale=([\d\.]+)/); + if (match) { + scale = parseFloat(match[1]); + dpr = parseInt(1 / scale); + } + } else if (flexibleEl) { + var content = flexibleEl.getAttribute('content'); + if (content) { + // eslint-disable-next-line no-useless-escape + var initialDpr = content.match(/initial\-dpr=([\d\.]+)/); + // eslint-disable-next-line no-useless-escape + var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/); + if (initialDpr) { + dpr = parseFloat(initialDpr[1]); + scale = parseFloat((1 / dpr).toFixed(2)); + } + if (maximumDpr) { + dpr = parseFloat(maximumDpr[1]); + scale = parseFloat((1 / dpr).toFixed(2)); + } + } + } + + if (!dpr && !scale) { + // var isAndroid = win.navigator.appVersion.match(/android/gi); + var isIPhone = win.navigator.appVersion.match(/iphone/gi); + var devicePixelRatio = win.devicePixelRatio; + if (isIPhone) { + // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案 + if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { + dpr = 3; + } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) { + dpr = 2; + } else { + dpr = 1; + } + } else { + // 其他设备下,仍旧使用1倍的方案 + dpr = 1; + } + scale = 1 / dpr; + } + + docEl.setAttribute('data-dpr', dpr); + if (!metaEl) { + metaEl = doc.createElement('meta'); + metaEl.setAttribute('name', 'viewport'); + metaEl.setAttribute( + 'content', + 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no', + ); + if (docEl.firstElementChild) { + docEl.firstElementChild.appendChild(metaEl); + } else { + var wrap = doc.createElement('div'); + wrap.appendChild(metaEl); + doc.write(wrap.innerHTML); + } + } + + function refreshRem() { + var width = docEl.getBoundingClientRect().width; + if (width / dpr > 540) { + width = width * dpr; + } + var rem = width / 24; + docEl.style.fontSize = rem + 'px'; + flexible.rem = win.rem = rem; + } + + win.addEventListener( + 'resize', + function () { + clearTimeout(tid); + tid = setTimeout(refreshRem, 300); + }, + false, + ); + win.addEventListener( + 'pageshow', + function (e) { + if (e.persisted) { + clearTimeout(tid); + tid = setTimeout(refreshRem, 300); + } + }, + false, + ); + + if (doc.readyState === 'complete') { + doc.body.style.fontSize = 12 * dpr + 'px'; + } else { + doc.addEventListener( + 'DOMContentLoaded', + function () { + doc.body.style.fontSize = 12 * dpr + 'px'; + }, + false, + ); + } + + refreshRem(); + + flexible.dpr = win.dpr = dpr; + flexible.refreshRem = refreshRem; + flexible.rem2px = function (d) { + var val = parseFloat(d) * this.rem; + if (typeof d === 'string' && d.match(/rem$/)) { + val += 'px'; + } + return val; + }; + flexible.px2rem = function (d) { + var val = parseFloat(d) / this.rem; + if (typeof d === 'string' && d.match(/px$/)) { + val += 'rem'; + } + return val; + }; +})(window, window['lib'] || (window['lib'] = {})); diff --git a/src/utils/rem.ts b/src/utils/rem.ts new file mode 100644 index 0000000..34be341 --- /dev/null +++ b/src/utils/rem.ts @@ -0,0 +1,12 @@ +(function init(screenRatioByDesign = 16 / 9) { + const docEle = document.documentElement; + + function setHtmlFontSize() { + const screenRatio = docEle.clientWidth / docEle.clientHeight; + const fontSize = ((screenRatio > screenRatioByDesign ? screenRatioByDesign / screenRatio : 1) * docEle.clientWidth) / 24; + docEle.style.fontSize = fontSize.toFixed(3) + 'px'; + } + + setHtmlFontSize(); + window.addEventListener('resize', setHtmlFontSize); +})(); diff --git a/src/utils/request.ts b/src/utils/request.ts new file mode 100644 index 0000000..30e4c38 --- /dev/null +++ b/src/utils/request.ts @@ -0,0 +1,23 @@ +import axios from 'axios'; + +const request = axios.create({ + baseURL: '/api', + timeout: 10000, +}); + +// 请求拦截器 +request.interceptors.request.use(config => { + return config; +}); + +// 响应拦截器 +request.interceptors.response.use( + response => { + return response.data; + }, + error => { + return Promise.reject(new Error('网络错误')); + }, +); + +export default request; diff --git a/src/views/layout.vue b/src/views/layout.vue new file mode 100644 index 0000000..5257ab6 --- /dev/null +++ b/src/views/layout.vue @@ -0,0 +1,90 @@ + + + + diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9772821 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,40 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "moduleResolution": "node", + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "useDefineForClassFields": true, + "sourceMap": true, + "baseUrl": ".", + "types": [ + "webpack-env" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..0516ca6 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,12 @@ +const { defineConfig } = require('@vue/cli-service'); +const WebpackBar = require('webpackbar'); +module.exports = defineConfig({ + transpileDependencies: true, + configureWebpack: { + plugins: [ + // 设置进度条颜色 + new WebpackBar({ color: '#F6DCE0', profile: true }), + ], + }, + publicPath: process.env.NODE_ENV === 'production' ? './' : './', +});