@@ -0,0 +1,9 @@ | |||||
## 开发环境 | |||||
# 变量必须以 VITE_ 为前缀才能暴露给外部读取 | |||||
NODE_ENV='development' | |||||
VITE_APP_TITLE = 'Metavatar-PC' | |||||
VITE_APP_PORT = 3000 | |||||
## VITE_APP_BASE_API = 'https://photo.metavatar.cc/C' | |||||
VITE_APP_BASE_API = 'https://test.metavatar.cc/C' |
@@ -0,0 +1,21 @@ | |||||
# Logs | |||||
logs | |||||
*.log | |||||
npm-debug.log* | |||||
yarn-debug.log* | |||||
yarn-error.log* | |||||
pnpm-debug.log* | |||||
lerna-debug.log* | |||||
node_modules | |||||
.DS_Store | |||||
dist | |||||
*.local | |||||
# Editor directories and files | |||||
.idea | |||||
*.suo | |||||
*.ntvs* | |||||
*.njsproj | |||||
*.sln | |||||
*.sw? |
@@ -0,0 +1,20 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8" /> | |||||
<script> | |||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || | |||||
CSS.supports('top: constant(a)')) | |||||
document.write( | |||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + | |||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />') | |||||
</script> | |||||
<title></title> | |||||
<!--preload-links--> | |||||
<!--app-context--> | |||||
</head> | |||||
<body> | |||||
<div id="app"><!--app-html--></div> | |||||
<script type="module" src="/src/main.js"></script> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,9 @@ | |||||
{ | |||||
"compilerOptions": { | |||||
"types": [ | |||||
"@dcloudio/types", | |||||
"miniprogram-api-typings", | |||||
"mini-types" | |||||
] | |||||
} | |||||
} |
@@ -0,0 +1,72 @@ | |||||
{ | |||||
"name": "uni-preset-vue", | |||||
"version": "0.0.0", | |||||
"scripts": { | |||||
"dev:app": "uni -p app", | |||||
"dev:app-android": "uni -p app-android", | |||||
"dev:app-ios": "uni -p app-ios", | |||||
"dev:custom": "uni -p", | |||||
"dev:h5": "uni", | |||||
"dev:h5:ssr": "uni --ssr", | |||||
"dev:mp-alipay": "uni -p mp-alipay", | |||||
"dev:mp-baidu": "uni -p mp-baidu", | |||||
"dev:mp-jd": "uni -p mp-jd", | |||||
"dev:mp-kuaishou": "uni -p mp-kuaishou", | |||||
"dev:mp-lark": "uni -p mp-lark", | |||||
"dev:mp-qq": "uni -p mp-qq", | |||||
"dev:mp-toutiao": "uni -p mp-toutiao", | |||||
"dev:mp-weixin": "uni -p mp-weixin", | |||||
"dev:quickapp-webview": "uni -p quickapp-webview", | |||||
"dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei", | |||||
"dev:quickapp-webview-union": "uni -p quickapp-webview-union", | |||||
"build:app": "uni build -p app", | |||||
"build:app-android": "uni build -p app-android", | |||||
"build:app-ios": "uni build -p app-ios", | |||||
"build:custom": "uni build -p", | |||||
"build:h5": "uni build", | |||||
"build:h5:ssr": "uni build --ssr", | |||||
"build:mp-alipay": "uni build -p mp-alipay", | |||||
"build:mp-baidu": "uni build -p mp-baidu", | |||||
"build:mp-jd": "uni build -p mp-jd", | |||||
"build:mp-kuaishou": "uni build -p mp-kuaishou", | |||||
"build:mp-lark": "uni build -p mp-lark", | |||||
"build:mp-qq": "uni build -p mp-qq", | |||||
"build:mp-toutiao": "uni build -p mp-toutiao", | |||||
"build:mp-weixin": "uni build -p mp-weixin", | |||||
"build:quickapp-webview": "uni build -p quickapp-webview", | |||||
"build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei", | |||||
"build:quickapp-webview-union": "uni build -p quickapp-webview-union" | |||||
}, | |||||
"dependencies": { | |||||
"@dcloudio/uni-app": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-app-plus": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-components": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-h5": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-alipay": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-baidu": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-jd": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-kuaishou": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-lark": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-qq": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-toutiao": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-mp-weixin": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-quickapp-webview": "3.0.0-3080720230703001", | |||||
"clipboard": "^2.0.11", | |||||
"dayjs": "^1.11.9", | |||||
"pinia": "2.0.33", | |||||
"pinia-plugin-persistedstate": "^3.2.0", | |||||
"uview-plus": "^3.1.34", | |||||
"vue": "3.2.45", | |||||
"vue-i18n": "^9.1.9" | |||||
}, | |||||
"devDependencies": { | |||||
"@dcloudio/types": "^3.3.2", | |||||
"@dcloudio/uni-automator": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-cli-shared": "3.0.0-3080720230703001", | |||||
"@dcloudio/uni-stacktracey": "3.0.0-3080720230703001", | |||||
"@dcloudio/vite-plugin-uni": "3.0.0-3080720230703001", | |||||
"sass": "^1.64.2", | |||||
"sass-loader": "13.2.2", | |||||
"vite": "4.1.4" | |||||
} | |||||
} |
@@ -0,0 +1,20 @@ | |||||
<style lang="scss"> | |||||
/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */ | |||||
@import "uview-plus/index.scss"; | |||||
</style> | |||||
<script setup> | |||||
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"; | |||||
onLaunch(() => { | |||||
console.log("App Launch!"); | |||||
}); | |||||
onShow(() => { | |||||
console.log("App Show!"); | |||||
}); | |||||
onHide(() => { | |||||
console.log("App Hide!"); | |||||
}); | |||||
</script> | |||||
<style> | |||||
/*每个页面公共css */ | |||||
</style> |
@@ -0,0 +1,8 @@ | |||||
import request from "../utils/request" | |||||
export function voiceTotalApi() { | |||||
return request({ | |||||
url: `api/voiceMould/voiceTotal`, | |||||
method: 'GET', | |||||
}) | |||||
} |
@@ -0,0 +1,18 @@ | |||||
// main.js | |||||
import uviewPlus from 'uview-plus' | |||||
import "./style/my.scss"; | |||||
//#region VUE3 | |||||
import { createSSRApp } from 'vue' | |||||
import { store } from '../src/store/index' | |||||
export function createApp() { | |||||
const app = createSSRApp(App) | |||||
app.use(uviewPlus) | |||||
app.use(store) | |||||
return { | |||||
app | |||||
} | |||||
} | |||||
//#endregion ----------------------- | |||||
@@ -0,0 +1,72 @@ | |||||
{ | |||||
"name" : "", | |||||
"appid" : "", | |||||
"description" : "", | |||||
"versionName" : "1.0.0", | |||||
"versionCode" : "100", | |||||
"transformPx" : false, | |||||
/* 5+App特有相关 */ | |||||
"app-plus" : { | |||||
"usingComponents" : true, | |||||
"nvueStyleCompiler" : "uni-app", | |||||
"compilerVersion" : 3, | |||||
"splashscreen" : { | |||||
"alwaysShowBeforeRender" : true, | |||||
"waiting" : true, | |||||
"autoclose" : true, | |||||
"delay" : 0 | |||||
}, | |||||
/* 模块配置 */ | |||||
"modules" : {}, | |||||
/* 应用发布信息 */ | |||||
"distribute" : { | |||||
/* android打包配置 */ | |||||
"android" : { | |||||
"permissions" : [ | |||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", | |||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", | |||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>", | |||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", | |||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", | |||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", | |||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", | |||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>", | |||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", | |||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", | |||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", | |||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", | |||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", | |||||
"<uses-feature android:name=\"android.hardware.camera\"/>", | |||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" | |||||
] | |||||
}, | |||||
/* ios打包配置 */ | |||||
"ios" : {}, | |||||
/* SDK配置 */ | |||||
"sdkConfigs" : {} | |||||
} | |||||
}, | |||||
/* 快应用特有相关 */ | |||||
"quickapp" : {}, | |||||
/* 小程序特有相关 */ | |||||
"mp-weixin" : { | |||||
"appid" : "", | |||||
"setting" : { | |||||
"urlCheck" : false | |||||
}, | |||||
"usingComponents" : true | |||||
}, | |||||
"mp-alipay" : { | |||||
"usingComponents" : true | |||||
}, | |||||
"mp-baidu" : { | |||||
"usingComponents" : true | |||||
}, | |||||
"mp-toutiao" : { | |||||
"usingComponents" : true | |||||
}, | |||||
"uniStatistics": { | |||||
"enable": false | |||||
}, | |||||
"vueVersion" : "3" | |||||
} |
@@ -0,0 +1,37 @@ | |||||
{ | |||||
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages | |||||
{ | |||||
"path": "pages/index/index", | |||||
"style": { | |||||
"navigationBarTitleText": "慧图" | |||||
} | |||||
}, | |||||
{ | |||||
"path": "pages/uploadPhoto/uploadPhoto", | |||||
"style": { | |||||
"navigationBarTitleText": "慧图" | |||||
} | |||||
} | |||||
, | |||||
{ | |||||
"path": "pages/closeStyle/closeStyle", | |||||
"style": { | |||||
"navigationBarTitleText": "慧图" | |||||
} | |||||
} | |||||
], | |||||
"easycom": { | |||||
// 注意一定要放在custom里,否则无效,https://ask.dcloud.net.cn/question/131175 | |||||
"custom": { | |||||
"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue", | |||||
"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue", | |||||
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue" | |||||
} | |||||
}, | |||||
"globalStyle": { | |||||
"navigationBarTextStyle": "black", | |||||
"navigationBarTitleText": "uni-app", | |||||
"navigationBarBackgroundColor": "#F8F8F8", | |||||
"backgroundColor": "#F8F8F8" | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
<template> | |||||
<div class="page"> | |||||
<view class="title">选择照片风格</view> | |||||
</div> | |||||
</template> | |||||
<script setup> | |||||
//#region 导入 | |||||
import { ref, reactive } from "vue"; | |||||
import { voiceTotalApi } from "../../api/login.js"; | |||||
//#endregion | |||||
//#region | |||||
//#endregion --------------------- | |||||
//#region | |||||
//#endregion --------------------- | |||||
</script> | |||||
<style lang="scss"></style> |
@@ -0,0 +1,79 @@ | |||||
<template> | |||||
<div class="page"> | |||||
<view class="title imgContenBox" | |||||
><image src="../../assets/text/closeStyleText.png" mode="scaleToFill" | |||||
/></view> | |||||
<u-list class="styleListBox" @scrolltolower="scrolltolower"> | |||||
<u-list-item | |||||
v-for="item in styleList" | |||||
:key="index" | |||||
class="styleListBoxItme" | |||||
> | |||||
<view class="styleInfo"> | |||||
<image src="../../assets/icon/uploadImg.png" /> | |||||
<text>样式风格</text> | |||||
</view> | |||||
</u-list-item> | |||||
</u-list> | |||||
</div> | |||||
</template> | |||||
<script setup> | |||||
//#region 导入 | |||||
import { ref, reactive } from "vue"; | |||||
import { voiceTotalApi } from "../../api/login.js"; | |||||
//#endregion | |||||
//#region | |||||
const styleList = ref([0, 1, 2, 3, 4, 5, 6, 7]); | |||||
const scrolltolower = () => { | |||||
loadmore(); | |||||
}; | |||||
const loadmore = () => { | |||||
styleList.value.push(...[8, 9, 10, 11]); | |||||
}; | |||||
//#endregion --------------------- | |||||
//#region | |||||
//#endregion --------------------- | |||||
</script> | |||||
<style lang="scss"> | |||||
.title { | |||||
width: 100%; | |||||
height: 80rpx; | |||||
image { | |||||
width: 40%; | |||||
height: 80rpx; | |||||
} | |||||
} | |||||
.u-list { | |||||
width: 100%; | |||||
view { | |||||
display: flex !important; | |||||
flex-direction: row !important; | |||||
flex-wrap: wrap !important; | |||||
justify-content: space-between !important; | |||||
.u-list-item { | |||||
} | |||||
} | |||||
.styleInfo { | |||||
width: 350rpx; | |||||
height: 400rpx; | |||||
margin-bottom: 50rpx; | |||||
image { | |||||
width: 350rpx; | |||||
height: 350rpx; | |||||
} | |||||
text { | |||||
width: 100%; | |||||
height: 50rpx; | |||||
text-align: center; | |||||
line-height: 50rpx; | |||||
} | |||||
} | |||||
} | |||||
</style> |
@@ -0,0 +1,91 @@ | |||||
<template> | |||||
<view class="page"> | |||||
<video | |||||
src="https://video.metavatar.cc/sv/d51a6f6-187fa2dff79/d51a6f6-187fa2dff79.mp4" | |||||
autoplay | |||||
muted | |||||
:controls="false" | |||||
/> | |||||
<up-button | |||||
type="primary" | |||||
text="开始制作我的数字分身" | |||||
color="linear-gradient(to right, rgb(66, 83, 216), rgb(213, 51, 186))" | |||||
@click="toCreate" | |||||
></up-button> | |||||
<u-checkbox-group v-model="checkboxValue1" placement="row"> | |||||
<u-checkbox | |||||
activeColor="red" | |||||
v-for="(item, index) in checkboxList1" | |||||
:key="index" | |||||
:label="item.name" | |||||
:name="item.name" | |||||
> | |||||
</u-checkbox> | |||||
</u-checkbox-group> | |||||
</view> | |||||
</template> | |||||
<script setup> | |||||
//#region 导入 | |||||
import { ref, reactive } from "vue"; | |||||
import { voiceTotalApi } from "../../api/login.js"; | |||||
//#endregion | |||||
//#region 勾选 | |||||
const checkboxValue1 = ref([]); | |||||
const checkboxList1 = reactive([ | |||||
{ | |||||
name: "同意慧图相机用户使用协议", | |||||
disabled: false, | |||||
}, | |||||
]); | |||||
function toCreate() { | |||||
if (checkboxValue1.value[0]) { | |||||
handleLogin(); | |||||
// uni.redirectTo({ | |||||
// url: "/pages/uploadPhoto/uploadPhoto", | |||||
// }); | |||||
} else { | |||||
uni.showToast({ | |||||
title: "请先勾选", | |||||
icon: "none", | |||||
}); | |||||
} | |||||
} | |||||
function handleLogin() { | |||||
uni.login({ | |||||
provider: "weixin", // 使用微信登录授权 | |||||
success: (res) => { | |||||
console.log(res); | |||||
if (res.code) { | |||||
// 获取到微信授权登录的code,将code发送给后端 | |||||
// this.loginWithCode(res.code); | |||||
} else { | |||||
console.log("登录失败:", res.errMsg); | |||||
} | |||||
}, | |||||
fail: (err) => { | |||||
console.log("登录失败:", err.errMsg); | |||||
}, | |||||
}); | |||||
} | |||||
//#endregion --------------------- | |||||
// voiceTotalApi(); | |||||
</script> | |||||
<style lang="scss"> | |||||
video { | |||||
width: 100%; | |||||
aspect-ratio: 9/16; | |||||
} | |||||
button { | |||||
margin-top: 50rpx; | |||||
} | |||||
.u-button { | |||||
width: 50% !important; | |||||
} | |||||
.u-checkbox-group { | |||||
margin-top: 70rpx; | |||||
} | |||||
</style> |
@@ -0,0 +1,101 @@ | |||||
<template> | |||||
<view class="page"> | |||||
<view class="title imgContenBox"> | |||||
<image | |||||
v-show="uploadState == 1" | |||||
src="../../assets/text/uploadText.png" | |||||
mode="aspectFit" /><image | |||||
aspectFit | |||||
v-show="uploadState == 2" | |||||
src="../../assets/text/uploadText2.png" | |||||
mode="aspectFit" /><image | |||||
v-show="uploadState == 3" | |||||
src="../../assets/text/uploadText3.png" | |||||
mode="aspectFit" | |||||
/></view> | |||||
<view class="uploadBox imgContenBox scan"> | |||||
<view class="scan-line"></view> | |||||
<image src="../../assets/icon/uploadImg.png" alt="" /> | |||||
</view> | |||||
<up-button | |||||
type="primary" | |||||
text="上传我的照片" | |||||
color="linear-gradient(to right, rgb(66, 83, 216), rgb(213, 51, 186))" | |||||
@click="toCreate" | |||||
></up-button> | |||||
<view class="tips">请按照样片上传您五官清晰的正面照片</view> | |||||
<view class="demoImgBox"> | |||||
<view class="demoImg1"></view> | |||||
<view class="demoImg2"></view> | |||||
<view class="demoImg1"></view> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script setup> | |||||
//#region 导入 | |||||
import { ref, reactive } from "vue"; | |||||
import { voiceTotalApi } from "../../api/login.js"; | |||||
//#endregion | |||||
//#region 上传 | |||||
const uploadState = ref(3); | |||||
//#endregion --------------------- | |||||
//#region | |||||
//#endregion --------------------- | |||||
</script> | |||||
<style lang="scss"> | |||||
.title { | |||||
width: 100%; | |||||
height: 80rpx; | |||||
image { | |||||
// min-width: 40%; | |||||
height: 80rpx; | |||||
} | |||||
} | |||||
.uploadBox { | |||||
width: 80%; | |||||
aspect-ratio: 1/1; | |||||
border: 5rpx solid #000; | |||||
border-radius: 50rpx; | |||||
margin-bottom: 50rpx; | |||||
image { | |||||
max-width: 30%; | |||||
max-height: 30%; | |||||
} | |||||
} | |||||
.scan { | |||||
position: relative; | |||||
overflow: hidden; | |||||
.scan-line { | |||||
position: absolute; | |||||
top: 0; | |||||
left: 0; | |||||
width: 100%; | |||||
height: 40%; | |||||
background: linear-gradient(180deg, rgba(0, 255, 51, 0) 50%, #00ff33 300%); | |||||
border-bottom: 2px solid #00ff33; | |||||
animation: scanAnimation 2s linear infinite; | |||||
} | |||||
@keyframes scanAnimation { | |||||
0% { | |||||
transform: translateY(-150%); | |||||
} | |||||
100% { | |||||
transform: translateY(150%); | |||||
} | |||||
} | |||||
} | |||||
.u-button { | |||||
width: 70% !important; | |||||
} | |||||
.tips { | |||||
margin-top: 20rpx; | |||||
margin-bottom: 20rpx; | |||||
} | |||||
</style> |
@@ -0,0 +1,6 @@ | |||||
export {}; | |||||
declare module "vue" { | |||||
type Hooks = App.AppInstance & Page.PageInstance; | |||||
interface ComponentCustomOptions extends Hooks {} | |||||
} |
@@ -0,0 +1,6 @@ | |||||
import { createPinia } from 'pinia' | |||||
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' | |||||
const store = createPinia(); | |||||
store.use(piniaPluginPersistedstate) | |||||
export { store }; |
@@ -0,0 +1,19 @@ | |||||
import { defineStore } from "pinia"; | |||||
export const userInfoModules = defineStore("userInfoStore", () => { | |||||
// state | |||||
const userInfo = ref(null) | |||||
// 登录获取用户信息 | |||||
async function getUserInfo() { | |||||
} | |||||
// 退出清除用户信息 | |||||
function loginOut(params) { | |||||
} | |||||
return { userInfo, getUserInfo, loginOut }; | |||||
}, | |||||
{ | |||||
persist: true, | |||||
}); |
@@ -0,0 +1,18 @@ | |||||
.page { | |||||
display: flex; | |||||
flex-direction: column; | |||||
align-items: center; | |||||
justify-content: center; | |||||
padding: 20rpx; | |||||
} | |||||
.imgContenBox { | |||||
position: relative; | |||||
image { | |||||
position: absolute; | |||||
top: 50%; | |||||
left: 50%; | |||||
transform: translate(-50%, -50%); | |||||
} | |||||
} |
@@ -0,0 +1,82 @@ | |||||
/** | |||||
* 这里是uni-app内置的常用样式变量 | |||||
* | |||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 | |||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App | |||||
* | |||||
*/ | |||||
/** | |||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 | |||||
* | |||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 | |||||
*/ | |||||
/* uni.scss */ | |||||
@import 'uview-plus/theme.scss'; | |||||
/* 颜色变量 */ | |||||
/* 行为相关颜色 */ | |||||
$uni-color-primary: #007aff; | |||||
$uni-color-success: #4cd964; | |||||
$uni-color-warning: #f0ad4e; | |||||
$uni-color-error: #dd524d; | |||||
/* 文字基本颜色 */ | |||||
$uni-text-color: #333; // 基本色 | |||||
$uni-text-color-inverse: #fff; // 反色 | |||||
$uni-text-color-grey: #999; // 辅助灰色,如加载更多的提示信息 | |||||
$uni-text-color-placeholder: #808080; | |||||
$uni-text-color-disable: #c0c0c0; | |||||
/* 背景颜色 */ | |||||
$uni-bg-color: #fff; | |||||
$uni-bg-color-grey: #f8f8f8; | |||||
$uni-bg-color-hover: #f1f1f1; // 点击状态颜色 | |||||
$uni-bg-color-mask: rgba(0, 0, 0, 0.4); // 遮罩颜色 | |||||
/* 边框颜色 */ | |||||
$uni-border-color: #c8c7cc; | |||||
/* 尺寸变量 */ | |||||
/* 文字尺寸 */ | |||||
$uni-font-size-sm: 12px; | |||||
$uni-font-size-base: 14px; | |||||
$uni-font-size-lg: 16; | |||||
/* 图片尺寸 */ | |||||
$uni-img-size-sm: 20px; | |||||
$uni-img-size-base: 26px; | |||||
$uni-img-size-lg: 40px; | |||||
/* Border Radius */ | |||||
$uni-border-radius-sm: 2px; | |||||
$uni-border-radius-base: 3px; | |||||
$uni-border-radius-lg: 6px; | |||||
$uni-border-radius-circle: 50%; | |||||
/* 水平间距 */ | |||||
$uni-spacing-row-sm: 5px; | |||||
$uni-spacing-row-base: 10px; | |||||
$uni-spacing-row-lg: 15px; | |||||
/* 垂直间距 */ | |||||
$uni-spacing-col-sm: 4px; | |||||
$uni-spacing-col-base: 8px; | |||||
$uni-spacing-col-lg: 12px; | |||||
/* 透明度 */ | |||||
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 | |||||
/* 文章场景相关 */ | |||||
$uni-color-title: #2c405a; // 文章标题颜色 | |||||
$uni-font-size-title: 20px; | |||||
$uni-color-subtitle: #555; // 二级标题颜色 | |||||
$uni-font-size-subtitle: 18px; | |||||
$uni-color-paragraph: #3f536e; // 文章段落颜色 | |||||
$uni-font-size-paragraph: 15px; |
@@ -0,0 +1,31 @@ | |||||
const BASE_URL = 'https://test.metavatar.cc/C/'; | |||||
// 通用的网络请求函数,接收请求的URL和请求参数,返回一个Promise | |||||
const request = (requestObj) => { | |||||
return new Promise((resolve, reject) => { | |||||
uni.request({ | |||||
url: BASE_URL + requestObj.url, | |||||
method: requestObj.method, // 这里可以根据需要更改请求方法 | |||||
data: requestObj.params, | |||||
success: (res) => { | |||||
if (res.statusCode === 200) { | |||||
resolve(res.data); | |||||
} else { | |||||
reject(new Error('请求失败')); | |||||
uni.showToast({ | |||||
title: '请求失败,请稍后再试', | |||||
icon: 'none', | |||||
}); | |||||
} | |||||
}, | |||||
fail: (err) => { | |||||
reject(err); | |||||
uni.showToast({ | |||||
title: '请求失败,请稍后再试', | |||||
icon: 'none', | |||||
}); | |||||
}, | |||||
}); | |||||
}); | |||||
}; | |||||
export default request |
@@ -0,0 +1,22 @@ | |||||
import { defineConfig } from 'vite' | |||||
import uni from '@dcloudio/vite-plugin-uni' | |||||
// https://vitejs.dev/config/ | |||||
export default defineConfig({ | |||||
transpileDependencies: ['uview-ui'], | |||||
plugins: [ | |||||
uni(), | |||||
], | |||||
// server: { | |||||
// host: "0.0.0.0", | |||||
// port: Number(env.VITE_APP_PORT), | |||||
// open: true, // 运行是否自动打开浏览器 | |||||
// proxy: { | |||||
// // 反向代理解决跨域 | |||||
// "/api": { | |||||
// target: env.VITE_APP_BASE_API, // 线上接口地址 | |||||
// changeOrigin: true, | |||||
// rewrite: (path) => path.replace(/^\/api/, ""), | |||||
// }, | |||||
// }, | |||||
// }, | |||||
}) |