diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md index 2cd644e..c0793a8 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,7 @@ -# 鼎盛无际-访客系统-前端 +# Vue 3 + Vite +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + +
+ + + diff --git a/lib-flexible/base.css b/lib-flexible/base.css new file mode 100644 index 0000000..5df476d --- /dev/null +++ b/lib-flexible/base.css @@ -0,0 +1,62 @@ +html, +body, +ul, +li, +ol, +dl, +dd, +dt, +p, +h1, +h2, +h3, +h4, +h5, +h6, +form, +fieldset, +legend, +img,input{ + margin: 0; + padding: 0; +} + +fieldset, +img { + border: none; +} + +img { + display: block; +} + + + +ul, +ol { + list-style: none; +} + +body { + color: #333; + font: 12px/20px "SimSun", "宋体", "Arial Narrow", HELVETICA; + background: #fff; + /* overflow-y:scroll;*/ + /* overflow-x: hidden; */ +} + +a { + color: #666; + text-decoration: none; +} + +a:visited { + color: #666; +} + +a:hover, +a:active, +a:focus { + color: #ff8400; + text-decoration: underline; +} \ No newline at end of file diff --git a/lib-flexible/index.js b/lib-flexible/index.js new file mode 100644 index 0000000..4c793dd --- /dev/null +++ b/lib-flexible/index.js @@ -0,0 +1,44 @@ +(function flexible (window, document) { + var docEl = document.documentElement + var dpr = window.devicePixelRatio || 1 + + // adjust body font size + function setBodyFontSize () { + if (document.body) { + document.body.style.fontSize = (12 * dpr) + 'px' + } + else { + document.addEventListener('DOMContentLoaded', setBodyFontSize) + } + } + setBodyFontSize(); + + // set 1rem = viewWidth / 10 + function setRemUnit () { + var rem = docEl.clientWidth / 10 + docEl.style.fontSize = rem + 'px' + } + + setRemUnit() + + // reset rem unit on page resize + window.addEventListener('resize', setRemUnit) + window.addEventListener('pageshow', function (e) { + if (e.persisted) { + setRemUnit() + } + }) + + // detect 0.5px supports + if (dpr >= 2) { + var fakeBody = document.createElement('body') + var testElement = document.createElement('div') + testElement.style.border = '.5px solid transparent' + fakeBody.appendChild(testElement) + docEl.appendChild(fakeBody) + if (testElement.offsetHeight === 1) { + docEl.classList.add('hairlines') + } + docEl.removeChild(fakeBody) + } +}(window, document)) diff --git a/lib-flexible/index.min.js b/lib-flexible/index.min.js new file mode 100644 index 0000000..326327b --- /dev/null +++ b/lib-flexible/index.min.js @@ -0,0 +1 @@ +!function(e,t){function n(){t.body?t.body.style.fontSize=12*o+"px":t.addEventListener("DOMContentLoaded",n)}function d(){var e=i.clientWidth/10;i.style.fontSize=e+"px"}var i=t.documentElement,o=e.devicePixelRatio||1;if(n(),d(),e.addEventListener("resize",d),e.addEventListener("pageshow",function(e){e.persisted&&d()}),o>=2){var a=t.createElement("body"),s=t.createElement("div");s.style.border=".5px solid transparent",a.appendChild(s),i.appendChild(a),1===s.offsetHeight&&i.classList.add("hairlines"),i.removeChild(a)}}(window,document); \ No newline at end of file diff --git a/lib-flexible/js/rem.js b/lib-flexible/js/rem.js new file mode 100644 index 0000000..f4e8f38 --- /dev/null +++ b/lib-flexible/js/rem.js @@ -0,0 +1 @@ +!function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=window;t["default"]=i.flex=function(normal,e,t){var a=e||100,n=t||1,r=i.document,o=navigator.userAgent,d=o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),l=o.match(/U3\/((\d+|\.){5,})/i),c=l&&parseInt(l[1].split(".").join(""),10)>=80,p=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),s=i.devicePixelRatio||1;p||d&&d[1]>534||c||(s=1);var u=normal?1:1/s,m=r.querySelector('meta[name="viewport"]');m||(m=r.createElement("meta"),m.setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+u+",maximum-scale="+u+",minimum-scale="+u),r.documentElement.style.fontSize=normal?"50px": a/2*s*n+"px"},e.exports=t["default"]}]); flex(false,100, 1); diff --git a/lib-flexible/js/rem1.js b/lib-flexible/js/rem1.js new file mode 100644 index 0000000..6dad0ea --- /dev/null +++ b/lib-flexible/js/rem1.js @@ -0,0 +1,61 @@ +(function(doc, win) { + // html元素字体 + // 这里基础字体设置为10在uc, WX上没效果, 不知道为什么 + // 设置为10时, dpr=1的手机, 宽度360, 计算出来html的字体大小为5px, 可能是字体太小了 + // 尽量设置大一些, 这样避免12px字体大小的限制 + var _rootFontSize = window._rootFontSize || 100; + + // 默认不支持缩放 + var _remMetaScalable = typeof window._remMetaScalable === 'undefined' + ? false + : !!window._remMetaScalable; + + var docEl = doc.documentElement, + isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), + + // 只针对IOS设备 + // dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1, + dpr = 1, + // 计算缩放比 + scale = 1 / dpr, + + // 检测支持的"缩放"事件 + resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'; + docEl.dataset.dpr = dpr; + + // 被iframe引用时,禁止缩放 + dpr = window.top === window.self ? dpr : 1; + + var metaEl = doc.createElement('meta'); + metaEl.name = 'viewport'; + var metaElContent = 'width=device-width, '; + + // 支持缩放 + if (_remMetaScalable) { + metaElContent += 'initial-scale=' + scale; + } else { + metaElContent += ( + 'initial-scale=' + scale + + ',maximum-scale=' + scale + + ', minimum-scale=' + scale + + ', user-scalable=no'); + } + metaEl.content = metaElContent; + docEl.firstElementChild.appendChild(metaEl); + + // 缩放/旋转设备检测函数 + var recalc = function() { + var width = docEl.clientWidth; + + // 750为设计用的宽度, 比如它以iphone6标准(宽750) + // 此时, 按照设计稿的尺寸写就可以了 + // 如: 设计稿为100px, 那么就写4rem(100 / 25), 25是自己设置的 + // 也可以设置成100, 这样就写100px就写1rem + docEl.style.fontSize = _rootFontSize * (width / 375) + 'px'; + }; + recalc(); + + if (!doc.addEventListener) return; + win.addEventListener(resizeEvt, recalc, false); + doc.getElementsByTagName('body')[0].style.fontSize = '16px' +})(document, window); diff --git a/package.json b/package.json new file mode 100644 index 0000000..ae1aabb --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "styy-mobile", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.6.2", + "dingtalk-jsapi": "^3.0.29", + "html2canvas": "^1.4.1", + "vant": "^3.4.3", + "vite-plugin-style-import": "^1.4.1", + "vue": "^3.2.25", + "vue-router": "^4.0.14", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^2.3.0", + "sass": "^1.56.1", + "vite": "^2.9.0", + "vite-plugin-style-import": "^1.4.1" + } +} diff --git a/public/MP_verify_w4cYOalJ3cgAIxxF.txt b/public/MP_verify_w4cYOalJ3cgAIxxF.txt new file mode 100644 index 0000000..9bfcf92 --- /dev/null +++ b/public/MP_verify_w4cYOalJ3cgAIxxF.txt @@ -0,0 +1 @@ +w4cYOalJ3cgAIxxF \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..e9acacd --- /dev/null +++ b/src/App.vue @@ -0,0 +1,51 @@ + + + + + + + diff --git a/src/api/admin.js b/src/api/admin.js new file mode 100644 index 0000000..7f8c100 --- /dev/null +++ b/src/api/admin.js @@ -0,0 +1,32 @@ +import request from "./adminRequest.js"; +// 登录 +export function getToken(authCode){ + return request({ + method: "get", + url: "/user/getToken?code="+authCode, + data: { + } + }) +} + +// 获取访客记录 +export function getVisitorRecord(params ){ + return request({ + method: "get", + url: "/visitor/getVisitorRecordList", + params, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} +// 获取二维码 +export function getWhiteCode( ){ + return request({ + method: "get", + url: "/qr/getCommonBlackWhiteCode", + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} \ No newline at end of file diff --git a/src/api/adminRequest.js b/src/api/adminRequest.js new file mode 100644 index 0000000..cad7263 --- /dev/null +++ b/src/api/adminRequest.js @@ -0,0 +1,96 @@ +import axios from 'axios' +import { useRoute, useRouter } from 'vue-router' +import { useStore } from 'vuex'; +import { Toast, Dialog } from 'vant'; +// import { getItem, setItem, removeItem, dalert } from '@/com/index' +const errorCode = { + '401': '登录状态已过期,即将返回首页重新登录。', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} +const route = useRoute() +const router = useRouter() +const store = useStore() +const loadNoCloseArr = ['/upload/face', ] +// 判断当前的运行环境 process.env.NODE_ENV +// isDev 为真 开发环境 --- npm run serve +// isDev 为假 非开发环境(测试环境,生产环境)- npm run build +const isDev = process.env.NODE_ENV === 'development' +const request = axios.create({ + // 根据环境 设置不同的baseURL + // 如果配置了单个的反向代理 --- 字符串模式 + // 如果配置了多个的反向代理 --- 对象模式 + // baseURL: isDev ? 'http://visitor.scdswj.cn/prod-api' : 'http://visitor.scdswj.cn/prod-api' + baseURL: isDev ? 'http://192.168.31.118:8195' : 'http://visitor.scdswj.cn/prod-api' +}) +// 'http://rap2api.taobao.org/app/mock/297766/example/1643070528065' + +// 请求拦截器 - 所有的请求开始之前先到此处 +request.interceptors.request.use((config) => { + // 可以设置 加载的动画效果 的展示 + // 在必要的路由设置一些额外的参数 ---- token信息携带放在此处 + console.log(config) + return config +}, (error) => { + return Promise.reject(error) +}) + +// 响应拦截器 --- 所有请求的相应先到此处 +request.interceptors.response.use((response) => { + // 可以设置 加载的动画效果 的隐藏 + const code = response.data.code || 200; + const message = errorCode[code] || response.data.msg || errorCode['default'] + if(code == 200){ + if(loadNoCloseArr.includes(response.config.url)){ // 设置请求不关闭加载动画接口 + }else{ + Toast.clear() + } + }else{ + Toast.clear() + } + if (code === 401) { + Toast.fail(message) + setTimeout(()=>{ + localStorage.removeItem('token'); + localStorage.removeItem('user'); + const redirectUrl = localStorage.getItem('redirect') + if(redirectUrl){ + window.location.href = redirectUrl + }else{ + window.location.href = '/userHome' + } + },2000) + return Promise.reject('登录状态已过期,即将返回首页重新登录。') + } else if (code === 500) { + // Message({ message: msg, type: 'error' }) + Toast.fail(message) + return Promise.reject(response.data) + } else if (code === 601) { + // Message({ message: msg, type: 'warning' }) + Toast.fail(message) + return Promise.reject('error') + } else if (code != 200) { + Toast.fail(message) + return Promise.reject('error') + } else { + return response.data + } +}, error => { + Toast.clear() + console.log(error.message) + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + console.log(message) + Toast.fail(message) + return Promise.reject(error.response) + +}) + +export default request diff --git a/src/api/doorAdmin.js b/src/api/doorAdmin.js new file mode 100644 index 0000000..a36787c --- /dev/null +++ b/src/api/doorAdmin.js @@ -0,0 +1,97 @@ +import request from "./adminRequest.js"; +// 登录 +export function getToken(authCode){ + return request({ + method: "get", + url: "/user/getToken?code="+authCode, + data: { + } + }) +} + +// 获取部门列表 +export function getDept( ){ + return request({ + method: "get", + url: "/dept/getList", + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} +// 获取部门员工 +export function getUserListByDept( deptId){ + return request({ + method: "get", + url: "/user/getUserListByDept", + params:{ + deptId + }, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} + +// 内部员工上传照片后,提交url +export function putUserId( data){ + return request({ + method: "put", + url: "/user/updateByUserId", + data, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} + +// http://localhost:8190/special/getList +// 获取特殊人员 +export function getSpecial( params){ + return request({ + method: "get", + url: "/special/getList", + params, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} + +// 删除特殊人员 +export function putSpecial( id){ + return request({ + method: "put", + url: "/special/remove", + params: { + id + }, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} + +// 特殊人员新增 +export function postSpecial( data){ + return request({ + method: "post", + url: "/special/add", + data, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} + +// 修改特殊人员相片 +export function putSpecialFace( data){ + return request({ + method: "put", + url: "/special/update", + data, + headers:{ + 'Authorization': localStorage.getItem('token') + } + }) +} \ No newline at end of file diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..19fbf4e --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,98 @@ +import axios from 'axios' +import { useRoute, useRouter } from 'vue-router' +import { useStore } from 'vuex'; +import { Toast, Dialog } from 'vant'; +// import { getItem, setItem, removeItem, dalert } from '@/com/index' +const errorCode = { + '401': '登录状态已过期,即将返回首页重新登录。', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} +const route = useRoute() +const router = useRouter() +const store = useStore() +const loadNoCloseArr = ['/upload/face', ] +// 判断当前的运行环境 process.env.NODE_ENV +// isDev 为真 开发环境 --- npm run serve +// isDev 为假 非开发环境(测试环境,生产环境)- npm run build +const isDev = process.env.NODE_ENV === 'development' +const request = axios.create({ + // 根据环境 设置不同的baseURL + // 如果配置了单个的反向代理 --- 字符串模式 + // 如果配置了多个的反向代理 --- 对象模式 + // baseURL: isDev ? 'http://visitor.scdswj.cn/prod-api' : 'http://visitor.scdswj.cn/prod-api' + baseURL: isDev ? 'http://visitor.scdswj.cn/prod-api' : 'http://visitor.scdswj.cn/prod-api' +}) +// 'http://rap2api.taobao.org/app/mock/297766/example/1643070528065' + +// 请求拦截器 - 所有的请求开始之前先到此处 +request.interceptors.request.use((config) => { + // 可以设置 加载的动画效果 的展示 + // 在必要的路由设置一些额外的参数 ---- token信息携带放在此处 + console.log(config) + return config +}, (error) => { + return Promise.reject(error) +}) + +// 响应拦截器 --- 所有请求的相应先到此处 +request.interceptors.response.use((response) => { + // 可以设置 加载的动画效果 的隐藏 + const code = response.data.code || 200; + const message = errorCode[code] || response.data.msg || errorCode['default'] + if(code == 200){ + if(loadNoCloseArr.includes(response.config.url)){ // 设置请求不关闭加载动画接口 + }else{ + Toast.clear() + } + }else{ + Toast.clear() + } + if (code === 401) { + Toast.fail(message) + setTimeout(()=>{ + localStorage.removeItem('token'); + localStorage.removeItem('user'); + localStorage.removeItem('userToken'); + + const redirectUrl = localStorage.getItem('redirect') + if(redirectUrl){ + window.location.href = redirectUrl + }else{ + window.location.href = '/userHome' + } + },2000) + return Promise.reject('登录状态已过期,即将返回首页重新登录。') + } else if (code === 500) { + // Message({ message: msg, type: 'error' }) + Toast.fail(message) + return Promise.reject(response.data) + } else if (code === 601) { + // Message({ message: msg, type: 'warning' }) + Toast.fail(message) + return Promise.reject('error') + } else if (code != 200) { + Toast.fail(message) + return Promise.reject('error') + } else { + return response.data + } +}, error => { + Toast.clear() + console.log(error.message) + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + console.log(message) + Toast.fail(message) + return Promise.reject(error.response) + +}) + +export default request diff --git a/src/api/price.js b/src/api/price.js new file mode 100644 index 0000000..aa886f5 --- /dev/null +++ b/src/api/price.js @@ -0,0 +1,14 @@ +import request from "./index"; + +export function getShop(){ + return request({ + url: '/shop', + method: 'get' + }) +} +export function getKind(){ + return request({ + url: '/hotkind', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/upload.js b/src/api/upload.js new file mode 100644 index 0000000..7ec0830 --- /dev/null +++ b/src/api/upload.js @@ -0,0 +1,9 @@ +import request from "./index"; +// 来访预约接口 +export function uploadApi(data){ + return request({ + url: '/upload/face', + method: 'post', + data + }) +} \ No newline at end of file diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..b8287d3 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,69 @@ + +import request from "./index"; + +// 来访预约接口 +export function postApply(data){ + return request({ + url: '/visitor/add', + method: 'post', + data, + headers:{ + 'Authorization': localStorage.getItem('userToken') + } + }) +} +// 拜访人列表 +export function getVisitor(){ + return request({ + url: '/visitor/getVisitingInfo', + method: 'get', + headers:{ + 'Authorization': localStorage.getItem('userToken') + } + }) +} +// 手机号查询预约记录 +export function getByPhone(data){ + return request({ + url: '/visitor/getByPhone', + method: 'get', + params: data, + headers:{ + 'Authorization': localStorage.getItem('userToken') + } + }) +} +// 手机号拜访人姓名 +export function getUserNameByTel(phone){ + return request({ + url: '/user/getUserNameByTel', + method: 'get', + params: { + phone + }, + headers:{ + 'Authorization': localStorage.getItem('userToken') + } + + }) +} + +// 微信授权获得code +export function getWeChatCode(){ + return request({ + url: '/user/getWxLogin', + method: 'get' + }) +} +// 微信登录 +export function login(code){ + return request({ + url: '/user/getWxToken', + method: 'get', + params:{ + code + } + }) +} + + diff --git a/src/assets/caozuo.png b/src/assets/caozuo.png new file mode 100644 index 0000000..9a2b14d Binary files /dev/null and b/src/assets/caozuo.png differ diff --git a/src/assets/chenggong.png b/src/assets/chenggong.png new file mode 100644 index 0000000..ebfb044 Binary files /dev/null and b/src/assets/chenggong.png differ diff --git a/src/assets/fangzi.png b/src/assets/fangzi.png new file mode 100644 index 0000000..ca3a159 Binary files /dev/null and b/src/assets/fangzi.png differ diff --git a/src/assets/guanlibeijing.png b/src/assets/guanlibeijing.png new file mode 100644 index 0000000..7ee6a14 Binary files /dev/null and b/src/assets/guanlibeijing.png differ diff --git a/src/assets/huangseyuanquan.png b/src/assets/huangseyuanquan.png new file mode 100644 index 0000000..cf5d0a4 Binary files /dev/null and b/src/assets/huangseyuanquan.png differ diff --git a/src/assets/icon-shenfenzheng.png b/src/assets/icon-shenfenzheng.png new file mode 100644 index 0000000..ddf95d1 Binary files /dev/null and b/src/assets/icon-shenfenzheng.png differ diff --git a/src/assets/img/baiseshenfenzheng.png b/src/assets/img/baiseshenfenzheng.png new file mode 100644 index 0000000..5dd9140 Binary files /dev/null and b/src/assets/img/baiseshenfenzheng.png differ diff --git a/src/assets/img/dunpai.png b/src/assets/img/dunpai.png new file mode 100644 index 0000000..e7935d1 Binary files /dev/null and b/src/assets/img/dunpai.png differ diff --git a/src/assets/img/logo.jpg b/src/assets/img/logo.jpg new file mode 100644 index 0000000..bb902c9 Binary files /dev/null and b/src/assets/img/logo.jpg differ diff --git a/src/assets/img/renlianbeijing.png b/src/assets/img/renlianbeijing.png new file mode 100644 index 0000000..19ccfe8 Binary files /dev/null and b/src/assets/img/renlianbeijing.png differ diff --git a/src/assets/img/shenfenzheng.png b/src/assets/img/shenfenzheng.png new file mode 100644 index 0000000..63fcddd Binary files /dev/null and b/src/assets/img/shenfenzheng.png differ diff --git a/src/assets/img/shouyebeijing.png b/src/assets/img/shouyebeijing.png new file mode 100644 index 0000000..82dd975 Binary files /dev/null and b/src/assets/img/shouyebeijing.png differ diff --git a/src/assets/img/sousuo.png b/src/assets/img/sousuo.png new file mode 100644 index 0000000..25e3209 Binary files /dev/null and b/src/assets/img/sousuo.png differ diff --git a/src/assets/img/tixing.png b/src/assets/img/tixing.png new file mode 100644 index 0000000..0bb1c4a Binary files /dev/null and b/src/assets/img/tixing.png differ diff --git a/src/assets/img/xiabiao.png b/src/assets/img/xiabiao.png new file mode 100644 index 0000000..8b1e99c Binary files /dev/null and b/src/assets/img/xiabiao.png differ diff --git a/src/assets/img/xiangji.png b/src/assets/img/xiangji.png new file mode 100644 index 0000000..783f13a Binary files /dev/null and b/src/assets/img/xiangji.png differ diff --git a/src/assets/img/xinzengbeijing.png b/src/assets/img/xinzengbeijing.png new file mode 100644 index 0000000..e264895 Binary files /dev/null and b/src/assets/img/xinzengbeijing.png differ diff --git a/src/assets/lanseyuanquan.png b/src/assets/lanseyuanquan.png new file mode 100644 index 0000000..0bc26f0 Binary files /dev/null and b/src/assets/lanseyuanquan.png differ diff --git a/src/assets/log.png b/src/assets/log.png new file mode 100644 index 0000000..4de63e0 Binary files /dev/null and b/src/assets/log.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/assets/maomaochong.png b/src/assets/maomaochong.png new file mode 100644 index 0000000..a908d61 Binary files /dev/null and b/src/assets/maomaochong.png differ diff --git a/src/assets/nodata.png b/src/assets/nodata.png new file mode 100644 index 0000000..ed06221 Binary files /dev/null and b/src/assets/nodata.png differ diff --git a/src/assets/ren.png b/src/assets/ren.png new file mode 100644 index 0000000..b834271 Binary files /dev/null and b/src/assets/ren.png differ diff --git a/src/assets/shuben.png b/src/assets/shuben.png new file mode 100644 index 0000000..0925afb Binary files /dev/null and b/src/assets/shuben.png differ diff --git a/src/assets/style/base.css b/src/assets/style/base.css new file mode 100644 index 0000000..5df476d --- /dev/null +++ b/src/assets/style/base.css @@ -0,0 +1,62 @@ +html, +body, +ul, +li, +ol, +dl, +dd, +dt, +p, +h1, +h2, +h3, +h4, +h5, +h6, +form, +fieldset, +legend, +img,input{ + margin: 0; + padding: 0; +} + +fieldset, +img { + border: none; +} + +img { + display: block; +} + + + +ul, +ol { + list-style: none; +} + +body { + color: #333; + font: 12px/20px "SimSun", "宋体", "Arial Narrow", HELVETICA; + background: #fff; + /* overflow-y:scroll;*/ + /* overflow-x: hidden; */ +} + +a { + color: #666; + text-decoration: none; +} + +a:visited { + color: #666; +} + +a:hover, +a:active, +a:focus { + color: #ff8400; + text-decoration: underline; +} \ No newline at end of file diff --git a/src/assets/style/index.scss b/src/assets/style/index.scss new file mode 100644 index 0000000..c61eb43 --- /dev/null +++ b/src/assets/style/index.scss @@ -0,0 +1,10 @@ +$main-color: #30BF78; // 用户端主题色 + +// 字号大小 +$sm-size: .32rem /* 24/75 */; +$size26: .3467rem /* 26/75 */; +$md-size: .3733rem /* 28/75 */; +$size30: .4rem /* 30/75 */; +$lg-size: .4267rem /* 32/75 */; +// 颜色 +$white: #ffffff; \ No newline at end of file diff --git a/src/assets/userhome/beijign.png b/src/assets/userhome/beijign.png new file mode 100644 index 0000000..71415b5 Binary files /dev/null and b/src/assets/userhome/beijign.png differ diff --git a/src/assets/userhome/dianhua.png b/src/assets/userhome/dianhua.png new file mode 100644 index 0000000..d9bea16 Binary files /dev/null and b/src/assets/userhome/dianhua.png differ diff --git a/src/assets/userhome/dingsheng.png b/src/assets/userhome/dingsheng.png new file mode 100644 index 0000000..2b63be3 Binary files /dev/null and b/src/assets/userhome/dingsheng.png differ diff --git a/src/assets/userhome/dingwei.png b/src/assets/userhome/dingwei.png new file mode 100644 index 0000000..2ee0f36 Binary files /dev/null and b/src/assets/userhome/dingwei.png differ diff --git a/src/assets/userhome/ditu.png b/src/assets/userhome/ditu.png new file mode 100644 index 0000000..2253524 Binary files /dev/null and b/src/assets/userhome/ditu.png differ diff --git a/src/assets/userhome/fang.png b/src/assets/userhome/fang.png new file mode 100644 index 0000000..bad3d9d Binary files /dev/null and b/src/assets/userhome/fang.png differ diff --git a/src/assets/userhome/ren.png b/src/assets/userhome/ren.png new file mode 100644 index 0000000..0bfaa06 Binary files /dev/null and b/src/assets/userhome/ren.png differ diff --git a/src/assets/userhome/topbeijing.png b/src/assets/userhome/topbeijing.png new file mode 100644 index 0000000..a590327 Binary files /dev/null and b/src/assets/userhome/topbeijing.png differ diff --git a/src/assets/userhome/youjiantou.png b/src/assets/userhome/youjiantou.png new file mode 100644 index 0000000..b7edb29 Binary files /dev/null and b/src/assets/userhome/youjiantou.png differ diff --git a/src/assets/userhome/zhiengfangke.png b/src/assets/userhome/zhiengfangke.png new file mode 100644 index 0000000..21d7fde Binary files /dev/null and b/src/assets/userhome/zhiengfangke.png differ diff --git a/src/assets/woyaoyuyue.png b/src/assets/woyaoyuyue.png new file mode 100644 index 0000000..2a7cb0c Binary files /dev/null and b/src/assets/woyaoyuyue.png differ diff --git a/src/assets/xiangji.png b/src/assets/xiangji.png new file mode 100644 index 0000000..7e3ee7d Binary files /dev/null and b/src/assets/xiangji.png differ diff --git a/src/assets/yaoqingbeijing.png b/src/assets/yaoqingbeijing.png new file mode 100644 index 0000000..d63b37a Binary files /dev/null and b/src/assets/yaoqingbeijing.png differ diff --git a/src/assets/yaoqingbeijingtu.png b/src/assets/yaoqingbeijingtu.png new file mode 100644 index 0000000..8a0f42b Binary files /dev/null and b/src/assets/yaoqingbeijingtu.png differ diff --git a/src/assets/yinwen.png b/src/assets/yinwen.png new file mode 100644 index 0000000..361c735 Binary files /dev/null and b/src/assets/yinwen.png differ diff --git a/src/assets/youjiantou.png b/src/assets/youjiantou.png new file mode 100644 index 0000000..3b500cf Binary files /dev/null and b/src/assets/youjiantou.png differ diff --git a/src/assets/yuyuebeijing.png b/src/assets/yuyuebeijing.png new file mode 100644 index 0000000..8f9eb01 Binary files /dev/null and b/src/assets/yuyuebeijing.png differ diff --git a/src/assets/yuyuejilu.png b/src/assets/yuyuejilu.png new file mode 100644 index 0000000..c79bbb3 Binary files /dev/null and b/src/assets/yuyuejilu.png differ diff --git a/src/assets/zhinengfangke.png b/src/assets/zhinengfangke.png new file mode 100644 index 0000000..b396522 Binary files /dev/null and b/src/assets/zhinengfangke.png differ diff --git a/src/assets/二维码.png b/src/assets/二维码.png new file mode 100644 index 0000000..cff120d Binary files /dev/null and b/src/assets/二维码.png differ diff --git a/src/com/index.js b/src/com/index.js new file mode 100644 index 0000000..f2c23bf --- /dev/null +++ b/src/com/index.js @@ -0,0 +1,341 @@ +import { Dialog } from 'vant'; + +/* + 表单对象验证、 rulesForm + 重置表单对象、resetForm + 手机号验证、 rulesPhone + 身份证验证、 rulesIdCard + 计算器、 calculator + 时间格式化、formatDate + 获取星期几、weekDate + 检查数据类型、checkType + 表单去除空格、trimFrom + 数组是否包含数组、isIncludeArray + 根据id递归查询对象、recursion + 计算两个时间戳相差的时间、timeDiff + 判断开始时间是否大于结束时间 compareTime + */ + +/* +表单验证 + @param { Object } form(必填) 验证的表单 + @param { Object } rules(选填) 需要验证的字段 试例rules:{ name: '请输入名称' } name为需要验证的字段 + @return { Boolean } true 通过 false 失败 +*/ +export function rulesForm ( form, rules ) { + let flage = true + let JSONrules = JSON.stringify(rules) + if(JSONrules !== JSON.stringify({})){ + for( let key in rules){ + if(Array.isArray( form[key] ) && form[key].length == 0 ){ + // uni.showToast({ + // title: rules[key], + // }) + + Dialog.alert({ + message: rules[key], + }) + flage = false + return + break; + }else if( !form[key] && form[key] !== 0 ){ + // uni.showToast({ + // title: rules[key], + // }) + // Dialog(rules[key]) + Dialog.alert({ + message: rules[key], + }) + flage = false + break; + } + } + } + return flage +} +export function rulesFormFBoolean ( form ) { + let flage = true + let JSONform = JSON.stringify(form) + if(JSONform !== JSON.stringify({})){ + for( let key in form){ + if(Array.isArray( form[key] ) && form[key].length == 0 ){ + flage = false + return + break; + }else if( !form[key] && form[key] !== 0 ){ + flage = false + break; + } + } + } + return flage +} +/* +重置表单对象 + @param { Object } form(必填) 需要重置的表单 + @param { Object } rules(选填) 指定需要重置的值默认设为null 试例rules:{ name: 1 } name字段重置为1 + @return { Object } 重置后的值 +*/ +export function resetForm(form, rules = {}) { + for( let key in form){ + if(checkType(form[key]) == "Array"){ + if(rules.hasOwnProperty(key)){ // 是否包含需要更改的 + form[key] = rules[key] + }else{ + form[key] = [] + } + }else if(checkType(form[key]) == "Object"){ + if(rules.hasOwnProperty(key)){ // 是否包含需要更改的 + form[key] = rules[key] + }else{ + form[key] = {} + } + }else if(checkType(form[key]) == "Boolean"){ + if(rules.hasOwnProperty(key)){ // 是否包含需要更改的 + form[key] = rules[key] + }else{ + form[key] = false + } + }else{ + if(rules.hasOwnProperty(key)){ // 是否包含需要更改的 + form[key] = rules[key] + }else{ + form[key] = null + } + } + } + return form +} + + +/* 手机号验证 + @param { Number } IdcardVal(必填) 手机号 + @return { Boolean } true 通过 false 失败 +*/ +export function rulesPhone ( phoneVal ) { + let phoneReg = /(^1\d{10}$)|(^[0-9]\d{7}$)/; + if(!phoneReg.test(phoneVal)) { + Dialog.alert({ + message: '请输入正确的手机号!', + }) + return false; + }else{ + return true + } +} +/* + @param { Number } email(必填) 邮箱地址 + @return { Boolean } true 通过 false 失败 + */ +export function rulesEmail(email) { + var reg = /^([\w+\.])+@\w+([.]\w+)+$/ + return reg.test(email) +} + + +/* +身份证验证 + @param { String } IdcardVal(必填) 需要检查的参数 + @return { Boolean } true 通过 false 失败 +*/ +export function rulesIdCard ( IdcardVal ) { + var idCardReg = /^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/; + if(!idCardReg.test(IdcardVal)) { + // uni.showToast({ + // title: '身份证号码格式错误!', + // }) + Dialog.alert({ message: '身份证号码格式错误!' }) + return false; + } else{ + return true + } +} + +/* +计算器 + startNum 类型 Number||String 开始的参数 + endNum 类型 Number||String 结束参数 + operator 类型 String 计算方式 + - * ÷ + 返回值 为数值类型计算结果 + */ +export function calculator ( startNum, endNum, operator = '+'){ + if(operator == '+'){ + return (Number(startNum * 1000) + Number(endNum * 1000)) / 1000 + }else if( operator == '-' ){ + return (Number(startNum * 1000) - Number(endNum * 1000)) / 1000 + }else if( operator == '/' ){ + return (Number(startNum * 1000) / Number(endNum * 1000)) / 1000000 + }else if( operator == '*' ){ + return (Number(startNum * 1000) * Number(endNum * 1000)) / 1000000 + } +} + +/* +时间日期格式化 + @param { Date||String } timeStr(必填) 默认值当前时间 传入时间 + @param { String } separator(必填) 默认值 '-' 分隔符号 chinese返回中文汉字 + @param { String } type(选填) 是否返回时分秒 yaer表示只返回年月日 + @return { String } 日期 +*/ +export function formatDate (timeStr = (new Date()), separator = '-', type){ + const date = new Date(timeStr) + let yaer = date.getFullYear() + let month = date.getMonth() + 1 + let day = date.getDate() + let hour = date.getHours() + let minute = date.getMinutes() + let second = date.getSeconds() + if(separator == '-'){ + if(type == 'year'){ + return yaer + separator + (month >= 10 ? month : ('0' + month)) + separator + (day >= 10 ? day : ('0' + day)) + }else { + return yaer + separator + (month >= 10 ? month : ('0' + month)) + separator + (day >= 10 ? day : ('0' + day)) + ' ' + (hour >= 10 ? hour : ('0' + hour)) + ':' + (minute >= 10 ? minute : ('0' + minute)) + ':' + (second >= 10 ? second : ('0' + second)) + } + }else if (separator == 'chinese') { + if(type == 'year'){ + return yaer + '年' + month+ '月' + day+ '日' + }else { + return yaer + '年' + month+ '月' + day+ '日' + hour + '时' + minute + '分' + second + '秒' + } + } + +} +/* +获取星期几 + @param { Date||String } time(必填) 默认值当前时间 传入时间 + @return { String } 星期几 +*/ +export function weekDate (time = (new Date())){ + const date = new Date(time) + let arr = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'] + return arr[date.getDay()] +} + +/* +判断数据类型值 + @param { any } value(必填) 需要检查的参数 + @return { String } 'Number', 'String', 'Boolean', 'Array', 'Object', 'Function', 'Undefined', 'null' +*/ + export function checkType(value) { + const toString = Object.prototype.toString; + if(toString.call(value) === '[object Number]'){ + return 'Number' + }else if(toString.call(value) === '[object String]') { + return 'String' + }else if(toString.call(value) === '[object Boolean]') { + return 'Boolean' + }else if(toString.call(value) === '[object Array]') { + return 'Array' + }else if(toString.call(value) === '[object Object]') { + return 'Object' + }else if(toString.call(value) === '[object Function]') { + return 'Function' + }else if(toString.call(value) === '[object Undefined]') { + return 'Undefined' + }else if(toString.call(value) === '[object Null]') { + return 'null' + }else if(toString.call(value) === '[object Date]') { + return 'Date' + }else if(toString.call(value) === '[object Error]') { + return 'Error' + } + } +/* +表单去除二端空格 + 该方法需要依赖checkType方法 + @param { Object || Array } form(必填) 需要去除空格的表单 + @return { Object || Array } 为去空后的数据对象数组 +*/ + export function trimFrom ( form ) { + let newForm = null + if(checkType(form)== 'Object'){ + newForm = { ...form } + }else if(checkType(form)== 'Array') { + newForm = [...form ] + } + for( let key in form){ + if( checkType(form[key] ) == 'String' ){ + console.log(newForm[key]) + newForm[key] = form[key].trim() + }else if( checkType(form[key] ) == 'Object' ){ + newForm[key] = trim(form[key]) + }else if( checkType(form[key]) == 'Array' ) { + newForm[key] = trim(form[key]) + } + } + return newForm + } +/* +数组是否包含数组 + @param { Array } arr(必填) 包含数组 + @param { Array } arr2(必填) 被包含数组 + @return { Boolean } 包含true 不包含false +*/ + export function isIncludeArray(arr1, arr2) { + return arr2.every((item) => { + return arr1.includes(item) + }) + } + +/* +根据id递归查询对象 + @param { Array } arr(必填) 查询的数组 + @param { Number||String } value(必填) 查询的数组 + @param { Number||String } unique(选填) 默认值'id' 查询的字段名 + @param { Array } children(选填) 默认值'children' 查询递归数组 + @return { Object||null } 查询到的值 + */ + export function recursion (arr, value, unique = 'id', children = 'children' ) { + let obj = null + arr.forEach(( item, index ) => { + if(item[unique] == value){ + obj = item + }else { + if(item[children] && item[children].length != 0){ + if(recursion(item[children], value, unique, children)){ + obj = recursion(item[children], value, unique, children) + } + } + } + }); + return obj + } + /* +计算两个时间戳相差的时间 + @param { startTime, endTime } 一个时间,另一个时间 + @return { Object } 比较后对象返回 天时分秒对象集合 + */ + export function timeDiff (startTime, endTime) { + const time2 = new Date(endTime) + const time1 = new Date(startTime) + const diffTime = { + day: 0, + hour: 0, + min: 0, + sec: 0 + } + const diff = Math.abs(time2.getTime() - time1.getTime()); + const remain_hour = diff % (24 * 60 * 60 * 1000); + const remain_min = remain_hour % ( 60 * 60 * 1000); + diffTime.day = Math.floor(diff / (24 * 60 * 60 * 1000)); + diffTime.hour = Math.floor(remain_hour / (60 * 60 * 1000)); + diffTime.min = Math.floor(remain_min / (60* 1000)); + diffTime.sec = remain_min % (60 * 1000) / 1000; + return diffTime; + } + +/* +判断开始时间是否大于结束时间 compareTime + @param { startTime, endTime } 一个时间,另一个时间 + @return { boolean } 结束时间大于开始时间 返回true 否者false + + */ + export function compareTime (startTime, endTime) { + const time1 = new Date(startTime) + const time2 = new Date(endTime) + if(time2.getTime() - time1.getTime() > 0){ + return true + }else{ + return false + } + } \ No newline at end of file diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000..48a5ca9 --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/add-model.vue b/src/components/add-model.vue new file mode 100644 index 0000000..de7340a --- /dev/null +++ b/src/components/add-model.vue @@ -0,0 +1,191 @@ + + + + + \ No newline at end of file diff --git a/src/components/face-model.vue b/src/components/face-model.vue new file mode 100644 index 0000000..109a3df --- /dev/null +++ b/src/components/face-model.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/src/components/input-li.vue b/src/components/input-li.vue new file mode 100644 index 0000000..fff4ac9 --- /dev/null +++ b/src/components/input-li.vue @@ -0,0 +1,115 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/components/remove-model.vue b/src/components/remove-model.vue new file mode 100644 index 0000000..94da409 --- /dev/null +++ b/src/components/remove-model.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/src/components/save-success copy.vue b/src/components/save-success copy.vue new file mode 100644 index 0000000..427b3eb --- /dev/null +++ b/src/components/save-success copy.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/src/components/save-success.vue b/src/components/save-success.vue new file mode 100644 index 0000000..427b3eb --- /dev/null +++ b/src/components/save-success.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/src/components/select-li-date.vue b/src/components/select-li-date.vue new file mode 100644 index 0000000..55e5c37 --- /dev/null +++ b/src/components/select-li-date.vue @@ -0,0 +1,127 @@ + + + + + + + \ No newline at end of file diff --git a/src/components/select-li.vue b/src/components/select-li.vue new file mode 100644 index 0000000..0b2144f --- /dev/null +++ b/src/components/select-li.vue @@ -0,0 +1,163 @@ + + + + + + + + \ No newline at end of file diff --git a/src/components/success.vue b/src/components/success.vue new file mode 100644 index 0000000..e2127da --- /dev/null +++ b/src/components/success.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..d5ff8d4 --- /dev/null +++ b/src/main.js @@ -0,0 +1,9 @@ +import { createApp } from 'vue' +import router from './router' +import store from './store' + +import App from './App.vue' +const app = createApp(App) + +app.use(router).use(store).mount('#app') + diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..1e078c0 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,110 @@ +import { createRouter, createWebHistory } from 'vue-router' +import register from "../views/register.vue"; + +const routerHistory = createWebHistory() + +const routes = [ + { + path: '/login', + name:'login', + // redirect: '/login', + component: () => import('../views/login.vue') + }, + { + path: '/visitorApply', + name:'visitorApply', + // redirect: '/login', + component: () => import('../views/visitorApply.vue'), + meta: { title: '我要预约' } + }, + { + path: '/applyInquire', + name:'applyInquire', + component: () => import('../views/applyInquire.vue'), + meta: { title: '预约查询' } + }, + { + path: '/applyRecord', + name:'applyRecord', + // redirect: '/login', + component: () => import('../views/applyRecord.vue'), + meta: { title: '预约记录' } + }, + + { + path: '/apply', + name:'apply', + // redirect: '/login', + component: () => import('../views/apply.vue'), + meta: { title: '我要预约' } + }, + { + path: '/adminHome', + name:'adminHome', + // redirect: '/login', + component: () => import('../views/adminHome.vue'), + meta: { title: '智能访客' } + }, + { + path: '/visitorRecord', + name:'visitorRecord', + // redirect: '/login', + component: () => import('../views/visitorRecord.vue'), + meta: { title: '访客记录' } + }, + { + path: '/Invitation', + name:'Invitation', + // redirect: '/login', + component: () => import('../views/Invitation.vue'), + meta: { title: '我要邀约' } + }, + { + path: '/userHome', + name:'userHome', + // redirect: '/login', + component: () => import('../views/userHome.vue'), + meta: { title: '智能访客' } + }, + + { + path: '/register', + name:'register', + component: register + }, + { + path: '/home', + name:'home', + // redirect: '/login', + component: () => import('../views/home.vue'), + meta: { title: '员工信息' } + + }, + { + path: '/specialCrowd', + name:'specialCrowd', + // redirect: '/login', + component: () => import('../views/specialCrowd.vue'), + meta: { title: '特殊人员录入' } + }, + { + path:'/', + name:'', + component:()=>import('../views/userHome.vue'), + meta: { title: '智能访客' } + + }, + { path: '/:pathMatch(.*)', + redirect: '/userHome', + } +] +const router = createRouter({ + history: routerHistory, + routes +}) +const title = document.querySelector('title') +router.beforeEach((to, from, next) => { + title.innerText = to.meta.title + next() +}) +export default router \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..2da4e13 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,42 @@ +import { createStore } from 'vuex' + + +const store = createStore({ + state: { + name: '访客预约系统', + stateEnum: { + 0: { + statusName:'待审核', + className: 'status', + statusText: '您的来访预约还未审核,请耐心等待', + status: 0 + }, + 1: { + statusName: '已通过', + className: 'pass', + statusText: '预约审核通过', + status: 1 + + }, + 2: { + statusName:'未通过', + className: 'refuse', + statusText: '预约审核已拒绝', + status: 2 + } + } + }, + getters: { + + }, + mutations: { + + }, + actions: { + + }, + modules: { + } +}) + +export default store diff --git a/src/views/Invitation copy.vue b/src/views/Invitation copy.vue new file mode 100644 index 0000000..fb74438 --- /dev/null +++ b/src/views/Invitation copy.vue @@ -0,0 +1,310 @@ + + + + + \ No newline at end of file diff --git a/src/views/Invitation.vue b/src/views/Invitation.vue new file mode 100644 index 0000000..4241a12 --- /dev/null +++ b/src/views/Invitation.vue @@ -0,0 +1,143 @@ + + + + + \ No newline at end of file diff --git a/src/views/adminHome.vue b/src/views/adminHome.vue new file mode 100644 index 0000000..a5dcece --- /dev/null +++ b/src/views/adminHome.vue @@ -0,0 +1,321 @@ + + + + + \ No newline at end of file diff --git a/src/views/apply copy 2.vue b/src/views/apply copy 2.vue new file mode 100644 index 0000000..dbee729 --- /dev/null +++ b/src/views/apply copy 2.vue @@ -0,0 +1,720 @@ + + + + + \ No newline at end of file diff --git a/src/views/apply copy.vue b/src/views/apply copy.vue new file mode 100644 index 0000000..dbee729 --- /dev/null +++ b/src/views/apply copy.vue @@ -0,0 +1,720 @@ + + + + + \ No newline at end of file diff --git a/src/views/apply.vue b/src/views/apply.vue new file mode 100644 index 0000000..f35b6ac --- /dev/null +++ b/src/views/apply.vue @@ -0,0 +1,721 @@ + + + + + \ No newline at end of file diff --git a/src/views/applyInquire.vue b/src/views/applyInquire.vue new file mode 100644 index 0000000..ceac343 --- /dev/null +++ b/src/views/applyInquire.vue @@ -0,0 +1,124 @@ + + + + + \ No newline at end of file diff --git a/src/views/applyRecord.vue b/src/views/applyRecord.vue new file mode 100644 index 0000000..b12092b --- /dev/null +++ b/src/views/applyRecord.vue @@ -0,0 +1,196 @@ + + + + + \ No newline at end of file diff --git a/src/views/apply颠倒后.vue b/src/views/apply颠倒后.vue new file mode 100644 index 0000000..b59a329 --- /dev/null +++ b/src/views/apply颠倒后.vue @@ -0,0 +1,786 @@ + + + + + \ No newline at end of file diff --git a/src/views/home.vue b/src/views/home.vue new file mode 100644 index 0000000..e25b5cf --- /dev/null +++ b/src/views/home.vue @@ -0,0 +1,404 @@ + + + + \ No newline at end of file diff --git a/src/views/login.vue b/src/views/login.vue new file mode 100644 index 0000000..49efdce --- /dev/null +++ b/src/views/login.vue @@ -0,0 +1,14 @@ + + \ No newline at end of file diff --git a/src/views/register.vue b/src/views/register.vue new file mode 100644 index 0000000..f16958c --- /dev/null +++ b/src/views/register.vue @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/src/views/specialCrowd.vue b/src/views/specialCrowd.vue new file mode 100644 index 0000000..b313500 --- /dev/null +++ b/src/views/specialCrowd.vue @@ -0,0 +1,370 @@ + + + + + \ No newline at end of file diff --git a/src/views/userHome.vue b/src/views/userHome.vue new file mode 100644 index 0000000..aab4821 --- /dev/null +++ b/src/views/userHome.vue @@ -0,0 +1,340 @@ + + + + + \ No newline at end of file diff --git a/src/views/visitorApply.vue b/src/views/visitorApply.vue new file mode 100644 index 0000000..8740513 --- /dev/null +++ b/src/views/visitorApply.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/views/visitorRecord.vue b/src/views/visitorRecord.vue new file mode 100644 index 0000000..40b3aa0 --- /dev/null +++ b/src/views/visitorRecord.vue @@ -0,0 +1,192 @@ + + + + + \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f1a877a --- /dev/null +++ b/vite.config.js @@ -0,0 +1,56 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { resolve } from "path" + +import styleImport, { VantResolve } from 'vite-plugin-style-import'; + + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + styleImport({ + resolves: [VantResolve()], + libs: [ + { + libraryName: 'vant', + esModule: true, + resolveStyle: (name) => `../es/${name}/style`, //https://blog.csdn.net/yunchong_zhao/article/details/123552423 + }, + + ], + + }), + + ], + server: { + host: '0.0.0.0',//设置地址:http://localhost + port: 4000, // 设置服务启动端口号 + // open: true, // 设置服务启动时是否自动打开浏览器 + // cors: true, // 允许跨域 + // proxy: { + // '/api': { + // target: 'http://dining.lzyyj.com/prod-api',//代理的地址 + // changeOrigin: true, + // // 路径重写 pathRewrite无效使用rewrite + // // pathRewrite: { '/api': '' // 用'/api'代替target里面的地址 }, + // rewrite: path => path.replace(/^\/api/, '') + // } + // } + }, + resolve:{ + alias:{ + "@": resolve(__dirname, "src") + } + }, + css: { + // css预处理器 + preprocessorOptions: { + scss: { + charset: false, + additionalData: '@import "./src/assets/style/index.scss";', + }, + }, + }, + +}) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..3ca5e3e --- /dev/null +++ b/yarn.lock @@ -0,0 +1,823 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/parser@^7.23.0": + version "7.23.3" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@vant/icons@^1.8.0": + version "1.8.0" + resolved "https://registry.npmmirror.com/@vant/icons/-/icons-1.8.0.tgz#36b13f2e628b533f6523a93a168cf02f07056674" + integrity sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg== + +"@vant/popperjs@^1.2.1": + version "1.3.0" + resolved "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.3.0.tgz#e0eff017124b5b2352ef3b36a6df06277f4400f2" + integrity sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw== + +"@vant/use@^1.4.2": + version "1.6.0" + resolved "https://registry.npmmirror.com/@vant/use/-/use-1.6.0.tgz#237df3091617255519552ca311ffdfea9de59001" + integrity sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA== + +"@vitejs/plugin-vue@^2.3.0": + version "2.3.4" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz#966a6279060eb2d9d1a02ea1a331af071afdcf9e" + integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg== + +"@vue/compiler-core@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz#301bb60d0245265a88ed5b30e200fbf223acb313" + integrity sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g== + dependencies: + "@babel/parser" "^7.23.0" + "@vue/shared" "3.3.8" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b" + integrity sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ== + dependencies: + "@vue/compiler-core" "3.3.8" + "@vue/shared" "3.3.8" + +"@vue/compiler-sfc@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" + integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA== + dependencies: + "@babel/parser" "^7.23.0" + "@vue/compiler-core" "3.3.8" + "@vue/compiler-dom" "3.3.8" + "@vue/compiler-ssr" "3.3.8" + "@vue/reactivity-transform" "3.3.8" + "@vue/shared" "3.3.8" + estree-walker "^2.0.2" + magic-string "^0.30.5" + postcss "^8.4.31" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz#136eed54411e4694815d961048a237191063fbce" + integrity sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w== + dependencies: + "@vue/compiler-dom" "3.3.8" + "@vue/shared" "3.3.8" + +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": + version "6.5.1" + resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" + integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== + +"@vue/reactivity-transform@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz#6d07649013b0be5c670f0ab6cc7ddd3150ad03f2" + integrity sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw== + dependencies: + "@babel/parser" "^7.23.0" + "@vue/compiler-core" "3.3.8" + "@vue/shared" "3.3.8" + estree-walker "^2.0.2" + magic-string "^0.30.5" + +"@vue/reactivity@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.8.tgz#cce8a03a3fd3539c3eeda53e277ba365d160dd4d" + integrity sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw== + dependencies: + "@vue/shared" "3.3.8" + +"@vue/runtime-core@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz#fba5a632cbf2b5d29e171489570149cb6975dcdb" + integrity sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw== + dependencies: + "@vue/reactivity" "3.3.8" + "@vue/shared" "3.3.8" + +"@vue/runtime-dom@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz#e2d7aa795cf50914dda9a951887765a594b38af4" + integrity sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA== + dependencies: + "@vue/runtime-core" "3.3.8" + "@vue/shared" "3.3.8" + csstype "^3.1.2" + +"@vue/server-renderer@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz#9b1779010e75783edeed8fcfb97d9c95fc3ac5d2" + integrity sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg== + dependencies: + "@vue/compiler-ssr" "3.3.8" + "@vue/shared" "3.3.8" + +"@vue/shared@3.3.8": + version "3.3.8" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" + integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.6.2: + version "1.6.2" + resolved "https://registry.npmmirror.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + +"chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + +css-line-break@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" + integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== + dependencies: + utrie "^1.0.2" + +csstype@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +debug@^4.3.3: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dingtalk-jsapi@^3.0.29: + version "3.0.29" + resolved "https://registry.npmmirror.com/dingtalk-jsapi/-/dingtalk-jsapi-3.0.29.tgz#ecd56f9a41105c7fb64af553713abed5ac76ae1c" + integrity sha512-EWIvppWaLruMggjP85KRpM5TIDSfDkSgS4XOljD0Wf8A26wRxZw3oZIxKFaXiusSJuZsIJakj5FM178hpYi2SA== + dependencies: + promise-polyfill "^7.1.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +es-module-lexer@^0.9.3: + version "0.9.3" + resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.27: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + +html2canvas@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" + integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== + dependencies: + css-line-break "^2.1.0" + text-segmentation "^1.0.3" + +immutable@^4.0.0: + version "4.3.4" + resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.30.5: + version "0.30.5" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" + integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.6: + version "3.3.7" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss@^8.4.13, postcss@^8.4.31: + version "8.4.31" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +promise-polyfill@^7.1.0: + version "7.1.2" + resolved "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-7.1.2.tgz#ab05301d8c28536301622d69227632269a70ca3b" + integrity sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve@^1.22.0: + version "1.22.8" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +"rollup@>=2.59.0 <2.78.0": + version "2.77.3" + resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" + integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== + optionalDependencies: + fsevents "~2.3.2" + +sass@^1.56.1: + version "1.69.5" + resolved "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" + integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +text-segmentation@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" + integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== + dependencies: + utrie "^1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@^2.0.3: + version "2.6.2" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + +utrie@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" + integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== + dependencies: + base64-arraybuffer "^1.0.2" + +vant@^3.4.3: + version "3.6.12" + resolved "https://registry.npmmirror.com/vant/-/vant-3.6.12.tgz#a46045c74961744f27d5a6ffbc3bed592f0f4d0b" + integrity sha512-fLzwhpV0ZPQqxrTx6RU8mJVUqP7DSkpdXNeByKubp+O9vKYGcWRX9wFdEwApyy7qLZLLu+rU1Jw52d6lktPL4w== + dependencies: + "@vant/icons" "^1.8.0" + "@vant/popperjs" "^1.2.1" + "@vant/use" "^1.4.2" + +vite-plugin-style-import@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-1.4.1.tgz#47a66920cce5484640f2faacd73190aac0b91b94" + integrity sha512-lJCRvm7+So0hHdnSJiJPg9gD5mxtL6YY0jmhEph+k7ArpsyvqOh6han2kG5htbWWDZxHkUN9d1BuTFL//yCLLQ== + dependencies: + "@rollup/pluginutils" "^4.1.2" + change-case "^4.1.2" + debug "^4.3.3" + es-module-lexer "^0.9.3" + fs-extra "^10.0.0" + magic-string "^0.25.7" + +vite@^2.9.0: + version "2.9.16" + resolved "https://registry.npmmirror.com/vite/-/vite-2.9.16.tgz#daf7ba50f5cc37a7bf51b118ba06bc36e97898e9" + integrity sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup ">=2.59.0 <2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +vue-router@^4.0.14: + version "4.2.5" + resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== + dependencies: + "@vue/devtools-api" "^6.5.0" + +vue@^3.2.25: + version "3.3.8" + resolved "https://registry.npmmirror.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc" + integrity sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w== + dependencies: + "@vue/compiler-dom" "3.3.8" + "@vue/compiler-sfc" "3.3.8" + "@vue/runtime-dom" "3.3.8" + "@vue/server-renderer" "3.3.8" + "@vue/shared" "3.3.8" + +vuex@^4.0.2: + version "4.1.0" + resolved "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c" + integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11"