| @@ -0,0 +1,6 @@ | |||||
| ## 开发环境 | |||||
| NODE_ENV='development' | |||||
| VITE_APP_TITLE = 'Metavatar-PC' | |||||
| VITE_APP_PORT = 3000 | |||||
| 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,11 @@ | |||||
| # Suimang-wxapp | |||||
| # setStorageSync 键名 | |||||
| wx-"appid": "", | |||||
| git commit -m "feat: " | |||||
| git commit --no-verify -m "提交时的注释" 跳过检验 | |||||
| git merge origin/dev_ | |||||
| @@ -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,71 @@ | |||||
| { | |||||
| "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-3081220230817001", | |||||
| "@dcloudio/uni-app-plus": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-components": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-h5": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-alipay": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-baidu": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-jd": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-kuaishou": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-lark": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-qq": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-toutiao": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-quickapp-webview": "3.0.0-3081220230817001", | |||||
| "clipboard": "^2.0.11", | |||||
| "dayjs": "^1.11.10", | |||||
| "uview-plus": "^3.1.37", | |||||
| "vue": "^3.2.45", | |||||
| "vue-i18n": "^9.1.9" | |||||
| }, | |||||
| "devDependencies": { | |||||
| "@dcloudio/types": "^3.3.2", | |||||
| "@dcloudio/uni-automator": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001", | |||||
| "@dcloudio/uni-stacktracey": "3.0.0-3081220230817001", | |||||
| "@dcloudio/vite-plugin-uni": "3.0.0-3081220230817001", | |||||
| "@vue/runtime-core": "^3.2.45", | |||||
| "sass": "^1.68.0", | |||||
| "sass-loader": "^13.3.2", | |||||
| "vite": "4.1.4" | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,10 @@ | |||||
| /// <reference types='@dcloudio/types' /> | |||||
| import 'vue' | |||||
| declare module '@vue/runtime-core' { | |||||
| type Hooks = App.AppInstance & Page.PageInstance; | |||||
| interface ComponentCustomOptions extends Hooks { | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,21 @@ | |||||
| <script> | |||||
| export default { | |||||
| onLaunch: function () { | |||||
| // console.log('App Launch') | |||||
| }, | |||||
| onShow: function () { | |||||
| // console.log('App Show') | |||||
| }, | |||||
| onHide: function () { | |||||
| // console.log('App Hide') | |||||
| }, | |||||
| }; | |||||
| </script> | |||||
| <style> | |||||
| /*每个页面公共css */ | |||||
| </style> | |||||
| <style lang="scss"> | |||||
| /* 注意要写在第一行,同时给style标签加入lang="scss"属性 */ | |||||
| @import "uview-plus/index.scss"; | |||||
| </style> | |||||
| @@ -0,0 +1,34 @@ | |||||
| import { request } from "../utils/request" | |||||
| // 获取风格列表 | |||||
| export function getListApi(pageNum, pageSize, sex) { | |||||
| return request({ | |||||
| url: `api/digitalAvatarMould/list?pageNum=${pageNum}&pageSize=${pageSize}&sex=${sex}`, | |||||
| method: 'GET', | |||||
| }) | |||||
| } | |||||
| // 根据iD获取详情 | |||||
| export function findByIdApi(id) { | |||||
| return request({ | |||||
| url: `api/digitalAvatarMould/findById?id=${id}`, | |||||
| method: 'GET', | |||||
| }) | |||||
| } | |||||
| // 查询用户头像照片,生成写真时需要 | |||||
| export function findImageApi() { | |||||
| return request({ | |||||
| url: `api/userDigital/findImage`, | |||||
| method: 'GET', | |||||
| }) | |||||
| } | |||||
| // 生成写真 | |||||
| export function createPhotoApi(data) { | |||||
| return request({ | |||||
| url: `api/digitalAvatarPhoto/createPhoto`, | |||||
| method: 'POST', | |||||
| data | |||||
| }) | |||||
| } | |||||
| @@ -0,0 +1,42 @@ | |||||
| import { request } from "../utils/request" | |||||
| // 微信登录 | |||||
| export function loginApi(data) { | |||||
| return request({ | |||||
| url: `api/miniApp/login`, | |||||
| method: 'POST', | |||||
| data | |||||
| }) | |||||
| } | |||||
| // 授权手机号登陆 | |||||
| export function loginPhoneApi(data) { | |||||
| return request({ | |||||
| url: `api/miniApp/loginPhone`, | |||||
| method: 'POST', | |||||
| data | |||||
| }) | |||||
| } | |||||
| // 获取短信验证码 | |||||
| export function getCodeApi(phone) { | |||||
| return request({ | |||||
| url: `api/user/sendLoginPhoneCode?phone=${phone}`, | |||||
| method: 'get', | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description:短信登录 | |||||
| * @param {*} (appId, openId,phone,code) | |||||
| * @return: list | |||||
| */ | |||||
| export function loginByCodeApi(data) { | |||||
| return request({ | |||||
| url: `api/miniApp/loginPhoneCode`, | |||||
| method: 'POST', | |||||
| data | |||||
| }) | |||||
| } | |||||
| @@ -0,0 +1,13 @@ | |||||
| import { | |||||
| createSSRApp | |||||
| } from "vue"; | |||||
| import uviewPlus from 'uview-plus' | |||||
| import "./style/my.scss"; | |||||
| import App from "./App.vue"; | |||||
| export function createApp() { | |||||
| const app = createSSRApp(App); | |||||
| app.use(uviewPlus) | |||||
| return { | |||||
| app, | |||||
| }; | |||||
| } | |||||
| @@ -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,43 @@ | |||||
| { | |||||
| "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages | |||||
| { | |||||
| "path": "pages/login/index", | |||||
| "style": { | |||||
| "navigationBarTitleText": "智像相册" | |||||
| } | |||||
| }, | |||||
| { | |||||
| "path": "pages/chooseStyle/index", | |||||
| "style": { | |||||
| "navigationBarTitleText": "智像相册" | |||||
| } | |||||
| }, | |||||
| { | |||||
| "path": "pages/createing/index", | |||||
| "style": { | |||||
| "navigationBarTitleText": "智像相册" | |||||
| } | |||||
| }, | |||||
| { | |||||
| "path": "pages/created/index", | |||||
| "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": "智像相册", | |||||
| "navigationBarBackgroundColor": "#F8F8F8", | |||||
| "backgroundColor": "#F8F8F8", | |||||
| "navigationStyle": "custom" | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,328 @@ | |||||
| <template> | |||||
| <view class="page"> | |||||
| <!-- tab栏 --> | |||||
| <view class="tabBox"> | |||||
| <u-tabs | |||||
| :list="tabList" | |||||
| lineWidth="50" | |||||
| lineColor="#ff4f00" | |||||
| :itemStyle="{ width: '150rpx', height: '90rpx', padding: '0' }" | |||||
| :activeStyle="{ color: '#ff4f00' }" | |||||
| :inactiveStyle="{ color: '#fff' }" | |||||
| @click="chooseTab" | |||||
| ></u-tabs> | |||||
| <view class="moreTabs"> | |||||
| <view class="moreIcon" @click="showPopup = true"> 更多 </view> | |||||
| </view> | |||||
| </view> | |||||
| <!-- 更多tab弹出层 --> | |||||
| <u-popup | |||||
| closeable="true" | |||||
| mode="top" | |||||
| :round="20" | |||||
| :show="showPopup" | |||||
| @close="closePopup" | |||||
| @open="openPopup" | |||||
| > | |||||
| <view class="popupBox"> | |||||
| <view class="type">类型</view> | |||||
| <view class="typeBox"> | |||||
| <view | |||||
| v-show="item.name" | |||||
| class="typeBox-item" | |||||
| :class="item.id == sex ? 'itemActive' : ''" | |||||
| @click="sex = item.id" | |||||
| v-for="item in tabList" | |||||
| :key="item.id" | |||||
| >{{ item.name }}</view | |||||
| > | |||||
| </view> | |||||
| <view class="type">风格</view> | |||||
| <view class="typeBox"> | |||||
| <view | |||||
| v-show="item.name" | |||||
| class="typeBox-item" | |||||
| :class="item.id == sex ? 'itemActive' : ''" | |||||
| @click="sex = item.id" | |||||
| v-for="item in tabList" | |||||
| :key="item.id" | |||||
| >{{ item.name }}</view | |||||
| > | |||||
| </view> | |||||
| </view> | |||||
| </u-popup> | |||||
| <!-- 模版选择 --> | |||||
| <u-list | |||||
| class="styleListBox" | |||||
| @scrolltolower="scrolltolower" | |||||
| lowerThreshold="100" | |||||
| > | |||||
| <u-list-item class="glodYBox"> | |||||
| <u-list-item | |||||
| v-for="item in styleList" | |||||
| :key="item.id" | |||||
| class="styleListBoxItme" | |||||
| > | |||||
| <view class="styleInfo" @click="createPhoto(item)"> | |||||
| <image :src="item.coverImg" mode="aspectFit" /> | |||||
| <text class="name">{{ item.title }}</text> | |||||
| <text class="single">{{ peopleNum(item.mouldType) }}</text> | |||||
| </view> | |||||
| </u-list-item> | |||||
| <view v-if="styleList.length == 0">暂无数据</view> | |||||
| </u-list-item> | |||||
| </u-list> | |||||
| </view> | |||||
| </template> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { ref, reactive, watch } from "vue"; | |||||
| import { getListApi } from "../../api/closeStyle"; | |||||
| //#endregion ----------------------- | |||||
| //#region tab栏 | |||||
| const sex = ref(2); | |||||
| const tabList = ref([ | |||||
| { name: "女", id: 2 }, | |||||
| { name: "男", id: 1 }, | |||||
| { name: "多人", id: 3 }, | |||||
| { name: "电影明星", id: 4 }, | |||||
| { name: "体育", id: 5 }, | |||||
| { name: "多人", id: 6 }, | |||||
| // { name: "电影明星", id: 7 }, | |||||
| { name: "体育", id: 8 }, | |||||
| { name: "", id: 999, disabled: true }, | |||||
| ]); | |||||
| function chooseTab(item) { | |||||
| sex.value = item.id; | |||||
| } | |||||
| //#endregion | |||||
| //#region 更多tab弹出层 | |||||
| const showPopup = ref(false); | |||||
| function closePopup() { | |||||
| showPopup.value = false; | |||||
| } | |||||
| function openPopup() {} | |||||
| //#endregion ----------------------- | |||||
| //#region 列表加载 | |||||
| const pageNum = ref(1); | |||||
| const pageSize = ref(20); | |||||
| // const sex = ref(2); //1男2女 | |||||
| const styleList = ref([]); | |||||
| // 得到列表 | |||||
| async function getList() { | |||||
| try { | |||||
| uni.showLoading({ | |||||
| title: "加载中...", | |||||
| mask: true, | |||||
| }); | |||||
| const res = await getListApi(pageNum.value, pageSize.value, sex.value); | |||||
| styleList.value = res.data.list; | |||||
| uni.hideLoading(); | |||||
| } catch (error) { | |||||
| uni.hideLoading(); | |||||
| uni.showToast({ | |||||
| title: "获取列表失败,请重试", | |||||
| icon: "none", | |||||
| }); | |||||
| } | |||||
| } | |||||
| // 监听性别tab变化 | |||||
| watch( | |||||
| () => sex.value, | |||||
| (sex) => { | |||||
| pageNum.value = 1; | |||||
| pageSize.value = 20; | |||||
| getList(); | |||||
| } | |||||
| ); | |||||
| getList(); | |||||
| // 触底加载更多 | |||||
| const scrolltolower = async () => { | |||||
| try { | |||||
| uni.showLoading({ | |||||
| title: "加载中...", | |||||
| mask: true, | |||||
| }); | |||||
| pageNum.value += 1; | |||||
| const res = await getListApi(pageNum.value, pageSize.value, sex.value); | |||||
| styleList.value.push(...res.data.list); | |||||
| setTimeout(function () { | |||||
| uni.hideLoading(); | |||||
| }, 500); | |||||
| if (res.data.list.length == 0) { | |||||
| pageNum.value -= 1; | |||||
| uni.showToast({ | |||||
| title: "已加载全部内容", | |||||
| icon: "none", | |||||
| }); | |||||
| } | |||||
| } catch (error) { | |||||
| setTimeout(function () { | |||||
| uni.hideLoading(); | |||||
| }, 500); | |||||
| uni.showToast({ | |||||
| title: "获取数据失败,请重试", | |||||
| icon: "none", | |||||
| }); | |||||
| } | |||||
| }; | |||||
| // 处理单人双人多人 | |||||
| function peopleNum(num) { | |||||
| if (num == 1) { | |||||
| return "单人"; | |||||
| } else if (num == 2) { | |||||
| return "双人"; | |||||
| } else if (num == 3) { | |||||
| return "三人"; | |||||
| } | |||||
| } | |||||
| //#endregion --------------------- | |||||
| //#region 点击图片 | |||||
| function createPhoto(item) { | |||||
| if (item.mouldType == 1) { | |||||
| uni.navigateTo({ | |||||
| url: `/pages/closeStyle/goCreatePhoto?id=${item.id}`, | |||||
| }); | |||||
| } else { | |||||
| uni.navigateTo({ | |||||
| url: `/pages/closeStyle/multiplayer?id=${item.id}`, | |||||
| }); | |||||
| } | |||||
| } | |||||
| //#endregion --------------------- | |||||
| //#region | |||||
| //#endregion ----------------------- | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| // <!-- tab栏 --> | |||||
| .tabBox { | |||||
| position: relative; | |||||
| width: 100vw; | |||||
| .u-tabs { | |||||
| // width: calc(100% - 100rpx); | |||||
| width: 100%; | |||||
| color: #fff !important; | |||||
| margin-bottom: 30rpx; | |||||
| // :deep(.u-tabs__wrapper__nav__item-7) { | |||||
| // color: #00ff33 !important; | |||||
| // margin-right: 90rpx !important; | |||||
| // } | |||||
| } | |||||
| .moreTabs { | |||||
| position: absolute; | |||||
| top: 0; | |||||
| right: 0; | |||||
| width: 200rpx; | |||||
| height: 90rpx; | |||||
| background: linear-gradient(90deg, transparent 20%, #333 100%); | |||||
| // background-color: red; | |||||
| .moreIcon { | |||||
| margin-left: 50rpx; | |||||
| margin-top: 20rpx; | |||||
| width: 130rpx; | |||||
| height: 60rpx; | |||||
| border-radius: 40rpx; | |||||
| background-color: #ff4f00; | |||||
| text-align: center; | |||||
| line-height: 60rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| // <!-- 更多tab弹出层 --> | |||||
| .popupBox { | |||||
| padding-bottom: 30rpx; | |||||
| .type { | |||||
| padding: 30rpx 30rpx 0 30rpx; | |||||
| color: #000; | |||||
| font-weight: 900; | |||||
| font-size: 32rpx; | |||||
| } | |||||
| .typeBox { | |||||
| padding: 0 0 0 30rpx; | |||||
| display: flex; | |||||
| flex-wrap: wrap; | |||||
| justify-content: flex-start; | |||||
| color: #1f1212; | |||||
| font-size: 26rpx; | |||||
| &-item { | |||||
| margin-top: 20rpx; | |||||
| margin-right: 30rpx; | |||||
| height: 60rpx; | |||||
| line-height: 60rpx; | |||||
| text-align: center; | |||||
| // margin: 0 30rpx; | |||||
| width: 200rpx; | |||||
| border: 2rpx solid #ccc; | |||||
| border-radius: 30rpx; | |||||
| } | |||||
| .itemActive { | |||||
| color: #ff4f00; | |||||
| border: 2rpx solid #ff4f00; | |||||
| } | |||||
| } | |||||
| } | |||||
| // <!-- 模版选择 --> | |||||
| .u-list { | |||||
| overflow: hidden; | |||||
| height: calc(100vh - 200rpx) !important; | |||||
| width: 650rpx; | |||||
| .glodYBox { | |||||
| display: flex !important; | |||||
| flex-direction: row !important; | |||||
| flex-wrap: wrap !important; | |||||
| justify-content: space-between !important; | |||||
| } | |||||
| .u-list-item { | |||||
| display: flex !important; | |||||
| flex-direction: row !important; | |||||
| flex-wrap: wrap !important; | |||||
| justify-content: space-between !important; | |||||
| } | |||||
| .styleInfo { | |||||
| position: relative; | |||||
| display: flex !important; | |||||
| flex-wrap: wrap !important; | |||||
| width: 300rpx; | |||||
| height: 480rpx; | |||||
| margin-bottom: 50rpx; | |||||
| border-radius: 24rpx; | |||||
| overflow: hidden; | |||||
| image { | |||||
| width: 300rpx; | |||||
| height: 400rpx; | |||||
| } | |||||
| .name { | |||||
| background-color: #393b3d; | |||||
| width: 100%; | |||||
| height: 80rpx; | |||||
| text-align: center; | |||||
| line-height: 80rpx; | |||||
| font-size: 30rpx; | |||||
| font-weight: bold; | |||||
| } | |||||
| .single { | |||||
| position: absolute; | |||||
| top: 11rpx; | |||||
| right: 13rpx; | |||||
| width: 72rpx; | |||||
| height: 41rpx; | |||||
| text-align: center; | |||||
| line-height: 41rpx; | |||||
| background: rgba(0, 0, 0, 0.4); | |||||
| font-size: 22rpx; | |||||
| // opacity: 0.4; | |||||
| border-radius: 12rpx; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,7 @@ | |||||
| <template> | |||||
| <view> 主页 </view> | |||||
| </template> | |||||
| <script setup> | |||||
| import { ref } from "vue"; | |||||
| </script> | |||||
| <style lang="scss" scoped></style> | |||||
| @@ -0,0 +1,7 @@ | |||||
| <template> | |||||
| <view> 主页 </view> | |||||
| </template> | |||||
| <script setup> | |||||
| import { ref } from "vue"; | |||||
| </script> | |||||
| <style lang="scss" scoped></style> | |||||
| @@ -0,0 +1,52 @@ | |||||
| <template> | |||||
| <view class="page"> | |||||
| <image src="../../assets/img/homeImg.jpg" mode="scaleToFill" /> | |||||
| <view class="bottomBox"> | |||||
| <view class="orangeBtn" @click="toChooseStyle">开始体验</view> | |||||
| </view> | |||||
| </view> | |||||
| </template> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { ref } from "vue"; | |||||
| //#endregion ---------------------------------- | |||||
| function toChooseStyle() { | |||||
| uni.navigateTo({ url: "/pages/chooseStyle/index" }); | |||||
| } | |||||
| //#region 初始化 | |||||
| //#endregion ---------------------------------- | |||||
| //#region 授权 | |||||
| //#endregion ---------------------------------- | |||||
| //#region 登录 | |||||
| //#endregion ---------------------------------- | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .page { | |||||
| position: relative; | |||||
| width: 100vw; | |||||
| height: 100vh; | |||||
| image { | |||||
| position: absolute; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| } | |||||
| .bottomBox { | |||||
| position: absolute; | |||||
| bottom: 0; | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| align-items: center; | |||||
| padding: 100rpx 0; | |||||
| width: 100%; | |||||
| height: 400rpx; | |||||
| background-color: rgba($color: #000000, $alpha: 0.5); | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,6 @@ | |||||
| export {}; | |||||
| declare module "vue" { | |||||
| type Hooks = App.AppInstance & Page.PageInstance; | |||||
| interface ComponentCustomOptions extends Hooks {} | |||||
| } | |||||
| @@ -0,0 +1,74 @@ | |||||
| .page { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| align-items: center; | |||||
| // justify-content: center; | |||||
| padding: 30rpx; | |||||
| // background-color: #fff; | |||||
| font-size: 26rpx; | |||||
| color: #fff; | |||||
| position: relative; | |||||
| min-height: 100vh; | |||||
| background-color: rgba(0, 0, 0, 0.8); | |||||
| } | |||||
| // 毛玻璃 | |||||
| .glass { | |||||
| position: fixed; | |||||
| width: 100vw; | |||||
| height: 100vh; | |||||
| z-index: -9; | |||||
| image { | |||||
| width: 100vw; | |||||
| height: 100vh; | |||||
| // position: fixed; | |||||
| // background-size: 100% 100%; | |||||
| // z-index: -1; | |||||
| /* 通过滤镜增加毛玻璃效果 */ | |||||
| filter: blur(20rpx); | |||||
| } | |||||
| } | |||||
| view { | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .imgContenBox { | |||||
| position: relative; | |||||
| image { | |||||
| position: absolute; | |||||
| top: 50%; | |||||
| left: 50%; | |||||
| transform: translate(-50%, -50%); | |||||
| } | |||||
| } | |||||
| .orangeBtn { | |||||
| background-color: #FF4F00; | |||||
| width: 520rpx; | |||||
| height: 100rpx; | |||||
| line-height: 100rpx; | |||||
| font-size: 30rpx; | |||||
| font-weight: bold; | |||||
| text-align: center; | |||||
| border-radius: 100rpx; | |||||
| } | |||||
| .grayBtn { | |||||
| position: relative; | |||||
| margin-top: 30rpx; | |||||
| background-color: transparent; | |||||
| width: 520rpx; | |||||
| height: 100rpx; | |||||
| line-height: 100rpx; | |||||
| font-size: 30rpx; | |||||
| font-weight: bold; | |||||
| text-align: center; | |||||
| border-radius: 100rpx; | |||||
| color: #FF4F00; | |||||
| border: 2rpx solid #FF4F00; | |||||
| } | |||||
| @@ -0,0 +1,77 @@ | |||||
| /** | |||||
| * 这里是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,50 @@ | |||||
| // import { userInfoModules } from "@/store/modules/userInfo"; | |||||
| // import { store } from '@/store/index'; | |||||
| const BASE_URL = 'https://test.metavatar.cc/C/'; | |||||
| // const userInfoModulesPinia = userInfoModules(store); | |||||
| // const BASE_URL = 'https://test.metavatar.cc/'; | |||||
| // 通用的网络请求函数,接收请求的URL和请求参数,返回一个Promise | |||||
| const request = (requestObj) => { | |||||
| return new Promise((resolve, reject) => { | |||||
| uni.request({ | |||||
| url: BASE_URL + requestObj.url, | |||||
| method: requestObj.method, // 这里可以根据需要更改请求方法 | |||||
| data: requestObj.data, | |||||
| header: { | |||||
| // Authorization: userInfoModulesPinia.token, | |||||
| // token: userInfoModulesPinia.token, | |||||
| // token: uni.getStorageSync("token"), | |||||
| }, | |||||
| success: (res) => { | |||||
| if (res.data.code == 1052) { | |||||
| uni.setStorageSync("token", null) | |||||
| uni.reLaunch({ | |||||
| url: "/pages/login/index?type=tokenFfalse", | |||||
| }); | |||||
| return | |||||
| } | |||||
| if (res.statusCode == 200) { | |||||
| // if (res.data.code == 200) { | |||||
| resolve(res.data) | |||||
| } else { | |||||
| reject(new Error('请求失败')); | |||||
| uni.showToast({ | |||||
| title: '请求失败,请稍后再试', | |||||
| icon: 'none', | |||||
| }) | |||||
| } | |||||
| }, | |||||
| fail: (err) => { | |||||
| reject(err, "拦截器返回错误"); | |||||
| uni.showToast({ | |||||
| title: '请求失败,请稍后再试', | |||||
| icon: 'none', | |||||
| }) | |||||
| }, | |||||
| }) | |||||
| }) | |||||
| }; | |||||
| export { BASE_URL, request } | |||||
| @@ -0,0 +1,26 @@ | |||||
| export default { | |||||
| onShareAppMessage() { | |||||
| return { | |||||
| title: "邃芒智像", | |||||
| path: `/pages/login/index?userId=${uni.getStorageSync('userId')}`, | |||||
| }; | |||||
| }, | |||||
| // 分享到朋友圈 | |||||
| onShareTimeline() { | |||||
| return { | |||||
| title: "邃芒智像", | |||||
| path: `/pages/login/index?userId=${uni.getStorageSync('userId')}`, | |||||
| }; | |||||
| }, | |||||
| // 收藏 | |||||
| onAddToFavorites() { | |||||
| return { | |||||
| title: "邃芒智像", | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| import { defineConfig, loadEnv } from 'vite' | |||||
| import uni from '@dcloudio/vite-plugin-uni' | |||||
| // https://vitejs.dev/config/ | |||||
| export default defineConfig(({ command, mode }) => { | |||||
| const env = loadEnv(mode, process.cwd()) // 获取 .env里面定义是参数 | |||||
| console.log('env', env, mode, command) | |||||
| return { | |||||
| transpileDependencies: ['uview-ui'], | |||||
| plugins: [ | |||||
| uni(), | |||||
| ], | |||||
| server: { | |||||
| host: "0.0.0.0", | |||||
| port: '8591', | |||||
| open: false, // 运行是否自动打开浏览器 | |||||
| proxy: { | |||||
| // 反向代理解决跨域 | |||||
| "/api": { | |||||
| target: env.VITE_APP_BASE_URL, // 线上接口地址 | |||||
| changeOrigin: true, | |||||
| rewrite: (path) => path.replace(/^\/api/, ""), | |||||
| }, | |||||
| }, | |||||
| } | |||||
| } | |||||
| }) | |||||