This commit is contained in:
Double-_-Z 2024-12-05 11:46:54 +08:00
parent 7aa290609f
commit 67f67d189a
14 changed files with 595 additions and 16 deletions

View File

@ -4,6 +4,9 @@ const install = (Vue, vm) => {
vm.$api.wxLogin = async (params = {}) => await vm.$u.get('/wxUser/wxPhoneLogin', params);// 手机号一键登录
// vm.$api.wxLogin = async (params = {}) => await vm.$u.get('/wxUser/wxPhoneLogin', params);// 手机号一键登录
// 留言板
vm.$api.addMessage = async (params = {}) => await vm.$u.post('/cpMessage', params);// 添加留言
// 百度ai调用
vm.$api.colouRize = async (params = {}) => await vm.$u.post('/AiPicture/Colourize', params);// 旧照修复
vm.$api.selfieAnime = async (params = {}) => await vm.$u.post('/AiPicture/selfie_anime', params);// 人像动漫化

View File

@ -5,7 +5,8 @@ let needLogin = [
// 多端通用路由
let filterRoute = [
"/uview-ui/components/u-avatar-cropper/u-avatar-cropper",
"/pages/index/rich-detail"
"/pages/index/rich-detail",
"/pages/index/webview",
];
// 拦截类型
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];

View File

@ -1,7 +1,7 @@
{
"name" : "pixel.ai制图",
"appid" : "__UNI__0B08B09",
"description" : "",
"description" : "给您带来有趣的制图体验!",
"versionName" : "1.5.0",
"versionCode" : "100",
"transformPx" : false,
@ -59,6 +59,9 @@
/* SDK */
"sdkConfigs" : {
"ad" : {}
},
"splashscreen" : {
"androidStyle" : "common"
}
}
},
@ -113,5 +116,6 @@
}
}
}
}
},
"locale" : "zh-Hans"
}

View File

@ -36,6 +36,12 @@
"style": {
"navigationBarTitleText": "协议内容"
}
},
{
"path": "webview"
// "style": {
// "navigationBarTitleText": ""
// }
}
]
},
@ -64,6 +70,23 @@
"style": {
"navigationBarTitleText": "工作室"
}
},
{
"path": "my/child_pages/login",
"style": {
"navigationBarTitleText": "登录"
}
}
]
},
{
"root": "pages/mobile_web/my/child_pages",
"pages": [
{
"path": "contact",
"style": {
"navigationBarTitleText": "联系客服"
}
}
]
}

View File

@ -11,7 +11,8 @@
<view class="rdt-top">
<view class="mobile-logo" :style="{backgroundColor: `rgba(255, 255, 255,${topLevel})`}">
<!-- #ifndef MP-WEIXIN -->
<u-icon name="arrow-left" size="40" color="#c2ea04" class="back" @click="back"></u-icon>
<u-icon name="arrow-left" size="40" class="back" @click="back"
:color="topLevel===0? '#f9f9f9' : `rgba(194, 234, 4,${topLevel})`"></u-icon>
<image :src="myFileUrl+logo"></image>
<view style="width: 75rpx;"></view>
<!-- #endif -->
@ -64,6 +65,10 @@
else that.topLevel = 1;
}
},
onHide() {
window.onscroll = null;
},
// #endif
methods:{
//
@ -102,9 +107,10 @@
justify-content: center;
// #ifndef MP-WEIXIN
justify-content: space-between;
align-items: baseline;
align-items: center;
.back{
margin-left: 35rpx;
margin-top: 5rpx
}
// #endif
position: fixed;

31
pages/index/webview.vue Normal file
View File

@ -0,0 +1,31 @@
<template>
<view v-if="src">
<!-- #ifdef H5 -->
<!-- <iframe style="width: 100%;min-height: 100vh;" :src="src" :title="title" /> -->
<web-view :src="src" />
<!-- #endif -->
<!-- #ifndef H5 -->
<web-view :webview-styles="wbStyles" :src="src" :fullscreen="false" />
<!-- #endif -->
</view>
</template>
<script>
export default {
data() {
return {
title: '',
src: '',
wbStyles: {
width: '100%',
height: '100vh',
},
}
},
onLoad(option) {
this.title = option?.title
this.src = option.src ? decodeURI(option.src) : '';
console.log(this.src);
},
}
</script>

View File

@ -11,7 +11,7 @@
<!-- #endif -->
<image :src="fileUrl+logo"></image>
</view>
<u-swiper height="420" :list="swiperList" name="picture" circular></u-swiper>
<u-swiper @click="linkTo" height="420" :list="swiperList" name="picture" circular></u-swiper>
<view class="mobile-content">
<view class="content-inner">
<!-- 功能栏 -->
@ -160,11 +160,11 @@ export default {
swiperList:[
{
picture: configService.fileUrl + 'pixel/home/banner.png',
path: ''
path: 'https://docs.qq.com/doc/DSXpVWGlJb01BS0VO'
},
{
picture: configService.fileUrl + 'pixel/home/banner.png',
path: ''
path: 'https://baidu.com/'
}
],
//
@ -266,6 +266,14 @@ export default {
toDeal({name, model}){
if(name && model)
uni.navigateTo({url: `/pages/mobile_web/workshops/index?name=${name}&model=${model}`});
},
//
linkTo(e){
if(this.swiperList[e].path){
uni.navigateTo({
url: `/pages/index/webview?src=${encodeURI(this.swiperList[e].path)}`
})
}
}
}
}

View File

@ -67,7 +67,7 @@ export default {
},
// #ifdef H5
mounted(){
onShow(){
let that = this;
window.onscroll = function () {
//
@ -78,6 +78,10 @@ export default {
else that.topLevel = 1;
}
},
onHide() {
window.onscroll = null;
},
// #endif
onLoad() {

View File

@ -1,11 +1,349 @@
<!-- 联系客服 -->
<template>
<view class="">
123
<!-- #ifdef APP -->
<view class="contact" :style="{ background: `linear-gradient(rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1)), url(${myFileUrl+background}) no-repeat 0% 20%/ cover`,paddingTop: CustomBar+'rpx' }">
<view class="app-top" :style="{ height: CustomBar+'rpx',
background: topLevel===0? '#ffffff00' : `rgba(255, 255, 255,${topLevel})` }"></view>
<!-- #endif -->
<!-- #ifndef APP -->
<view class="contact" :style="{ background: `linear-gradient(rgba(255, 255, 255, 0.8), rgba(0, 0, 0, 0.1)), url(${myFileUrl+background}) no-repeat 0% 20%/ cover` }">
<!-- #endif -->
<view class="ct-top">
<view class="mobile-logo" :style="{backgroundColor: `rgba(255, 255, 255,${topLevel})`}">
<!-- #ifndef MP-WEIXIN -->
<u-icon name="arrow-left" size="40" class="back" @click="back"
:color="topLevel===0? '#60547d' : `rgba(9, 9, 9,${topLevel})`"></u-icon>
<image :src="homeFileUrl+logo"></image>
<view style="width: 75rpx;"></view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<image :src="myFileUrl+logo"></image>
<!-- #endif -->
</view>
<view class="detail-content">
<form @submit="submit">
<u-divider bgColor="#ffffff00" fontSize="35" color="#424242" borderColor="#f8f9f9">问题反馈</u-divider>
<view class="blocks">
<view class="block_input">
<view><text>*</text>姓名</view>
<input type="text" name="name" v-model="form.name" placeholder="请输入您的姓名"/>
<view class="tip" v-show="tip.name">请输入您的姓名</view>
</view>
<view class="block_input">
<view><text>*</text>联系方式</view>
<input type="tel" name="phone" v-model="form.phone" placeholder="请输入您的联系方式"/>
<view class="tip" v-show="tip.phone">请输入正确的联系方式</view>
</view>
<view class="block_input">
<view><text>*</text>类型</view>
<picker @change="bindTypeChange" :value="messageType" :range="typeList">
<view>
<input disabled type="text" name="type" :value="typeList[messageType]" placeholder="请选择类型"/>
<u-icon class="type-icon" name="arrow-down" color="#CCCCCC" size="40"></u-icon>
</view>
</picker>
</view>
<view class="block_input">
<view><text>*</text>留言</view>
<view class="message-textarea">
<textarea name="message" v-model="form.message" placeholder="请输入留言内容" :maxlength="messageMaxlength"></textarea>
<view class="mt-tip">
{{ form.message.length }} / {{ messageMaxlength }}
</view>
</view>
<view class="tip" v-show="tip.message">请输入留言内容</view>
</view>
<u-button ripple :hairLine="false" class="messageSubmit" form-type="submit">提交</u-button>
</view>
</form>
</view>
</view>
<u-toast ref="uToast"></u-toast>
<Loading :show="loading" />
</view>
</template>
<script>
import configService from '@/common/config.service.js';
export default {
data() {
return {
loading: true, //
//
homeFileUrl: configService.fileUrl + 'pixel/home/',
myFileUrl: configService.fileUrl + 'pixel/my/',
//
background: 'silver-background.png',
// logo
logo: 'logo.png',
//
topLevel: 0,
form:{
name: '',//
phone: '',//
type: '',//
message: ''//
},
tip: {
name: false,
phone: false,
message: false
},
messageType: 0, //
typeList: [
"场地咨询",
"政策咨询",
"人才服务",
"赛事咨询",
"其他"
],
messageMaxlength: 300//
}
},
// #ifndef H5
onPageScroll(e) {
const level = e.scrollTop / 60;
if (level <= 1) this.topLevel = level;
else this.topLevel = 1;
},
// #endif
// #ifdef H5
mounted() {
let that = this;
window.onscroll = function() {
//
//scrollTop
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
const level = scrollTop / 60;
if (level <= 1) that.topLevel = level;
else that.topLevel = 1;
}
},
onHide() {
window.onscroll = null;
},
// #endif
methods: {
//
back() {
uni.navigateBack();
},
//
async submit(e){
try{
this.loading = true;
const { name, phone, type, message } = this.form;
this.tip = {
name: name==='',
phone: (phone==='') || (!(/^1[345789]\d{9}$/.test(phone))),
message:message===''
}
if(name===''){
this.$refs.uToast.show({type:'warning',title: "请输入姓名!"});
return;
}else if(!(/^1[345789]\d{9}$/.test(phone))){
this.$refs.uToast.show({type:'warning',title: "联系方式不正确!"});
return;
}else if(message===''){
this.$refs.uToast.show({type:'warning',title: "请输入留言内容!"});
return;
}
let res = await this.$api.addMessage(e.detail.value);
if(res.success){
this.$refs.uToast.show({type:'success',title: "提交成功!"});
this.clear();
}else{
this.$refs.uToast.show({type:'error',title: "提交失败!"});
}
}catch(e){
this.$refs.uToast.show({type:'error',title: "处理失败!"});
}finally{
this.loading = false;
}
},
//
clear(){
this.form= {
name: '',//
phone: '',//
type: '',//
message: ''//
};
this.messageType = 0;
this.tip={
name: false,
phone: false,
message: false
};
},
//
bindTypeChange(e) {
this.messageType = e.detail.value
},
},
onLoad(options) {
this.loading = false;
},
}
</script>
<style>
<style scoped lang="scss">
.contact {
display: flex;
flex-direction: column;
min-height: 100vh;
background-size: cover;
opacity: 0.9;
.ct-top {
// #ifdef APP
.app-top {
width: 100%;
position: fixed;
z-index: 81;
top: 0;
}
// #endif
.mobile-logo {
width: 100%;
display: flex;
justify-content: center;
// #ifndef MP-WEIXIN
justify-content: space-between;
align-items: center;
.back{
margin-left: 35rpx;
margin-top: 5rpx
}
// #endif
position: fixed;
z-index: 81;
padding: 15rpx 0;
image {
width: 200rpx;
height: 45rpx;
}
}
}
.detail-content{
margin: 80rpx 30rpx 32rpx;
// min-height: 90vh;
background: linear-gradient(rgba(160, 160, 160, 0.4), rgba(0, 0, 0, 0.1));
border-radius: 40rpx;
padding: 40rpx 25rpx 0rpx;
color: #f9f9f9;
.blocks{
display: flex;
flex-direction: column;
.block_title{
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 36rpx;
color: #000000;
line-height: 40rpx;
}
.block_input{
margin-bottom: 32rpx;
.tip{
color: #FE020E;
margin-top: 4rpx;
font-size: small;
margin-bottom: 0rpx !important;
}
view{
font-family: PingFang SC, PingFang SC;
font-size: 32rpx;
color: #000000;
line-height: 40rpx;
margin-bottom: 16rpx;
text{
vertical-align: middle;
color: #FE020E;
font-weight: bold;
margin-right: 8rpx;
}
}
input{
height: 92rpx;
background: #F8F9FB;
border-radius: 4rpx;
color: rgba(0,0,0,0.8);
padding:0 32rpx;
font-size: 32rpx;
border-radius: 15rpx;
}
.message-textarea{
width: 100%;
position: relative;
textarea{
padding: 32rpx;
width: 100%;
height: 400rpx;
background: #F8F9FB;
border-radius: 4rpx;
color: rgba(0,0,0,0.8);
font-size: 32rpx;
border-radius: 15rpx;
}
.mt-tip{
position: absolute;
font-size: 28rpx;
right: 32rpx;
bottom: 10rpx;
z-index: 2;
background-color: #f8f9fb;
padding: 5rpx;
border-radius: 8rpx;
}
}
}
}
}
}
.messageSubmit{
width: 100%;
background-size: 200% auto;
transition: 0.5s;
animation-duration: 1s;
animation-fill-mode: both;
border: none;
background-image: -webkit-linear-gradient( to right, #36D1DC 0%, #5B86E5 51%, #36D1DC 100%);
background-image: linear-gradient(to right, #36D1DC 0%, #5B86E5 51%, #36D1DC 100%);
height: 100rpx;
font-size: 30rpx;
font-weight: bold;
color: #fff;
border-radius: 56rpx;
margin-top: 20rpx;
margin-bottom: 60rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 35rpx;
&::after{
display: none;
}
&:active {
background-position: right center;
color: #f8f9fb;
text-decoration: none;
}
}
.type-icon{
z-index:90;
position: absolute;
right: 50rpx;
margin-top: -60rpx;
}
</style>

View File

@ -0,0 +1,123 @@
<!-- 纯富文本展示页 -->
<template>
<!-- #ifdef APP -->
<view class="login" :style="{ backgroundImage: `url(${myFileUrl+background})`,paddingTop: CustomBar+'rpx' }">
<view class="app-top" :style="{ height: CustomBar+'rpx',
background: topLevel===0? '#ffffff00' : `rgba(255, 255, 255,${topLevel})` }"></view>
<!-- #endif -->
<!-- #ifndef APP -->
<view class="login" :style="{ backgroundImage: `url(${myFileUrl+background})` }">
<!-- #endif -->
<view class="lg-top">
<view class="mobile-logo" :style="{backgroundColor: `rgba(255, 255, 255,${topLevel})`}">
<!-- #ifndef MP-WEIXIN -->
<u-icon name="arrow-left" size="40" class="back" @click="back"
:color="topLevel===0? '#f9f9f9' : `rgba(194, 234, 4,${topLevel})`"></u-icon>
<image :src="myFileUrl+logo"></image>
<view style="width: 75rpx;"></view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<image :src="myFileUrl+logo"></image>
<!-- #endif -->
</view>
<view class="lg-content">
</view>
</view>
<Loading :show="loading" />
</view>
</template>
<script>
import configService from '@/common/config.service.js';
export default {
data(){
return{
content: '',
loading: true,//
//
myFileUrl: configService.fileUrl + 'pixel/my/',
//
background: 'bluetext-background.png',
// logo
logo: 'logo.png',
//
topLevel: 0,
}
},
// #ifndef H5
onPageScroll(e) {
const level = e.scrollTop/60;
if(level<=1) this.topLevel = level;
else this.topLevel = 1;
},
// #endif
// #ifdef H5
mounted(){
let that = this;
window.onscroll = function () {
//
//scrollTop
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
const level = scrollTop/60;
if(level<=1) that.topLevel = level;
else that.topLevel = 1;
}
},
onHide() {
window.onscroll = null;
},
// #endif
methods:{
//
back(){
uni.navigateBack();
},
},
onLoad(options) {
this.loading = false;
},
}
</script>
<style scoped lang="scss">
.login{
display: flex;
flex-direction: column;
min-height: 100vh;
background-size: cover;
.lg-top{
// #ifdef APP
.app-top{
width: 100%;
position: fixed;
z-index: 81;
top: 0;
}
// #endif
.mobile-logo{
width: 100%;
display: flex;
justify-content: center;
// #ifndef MP-WEIXIN
justify-content: space-between;
align-items: center;
.back{
margin-left: 35rpx;
margin-top: 5rpx
}
// #endif
position: fixed;
z-index: 81;
padding: 15rpx 0;
image{
width: 200rpx;
height: 45rpx;
}
}
}
}
</style>

View File

@ -11,7 +11,7 @@
<image :src="fileUrl+logo"></image>
</view>
<view class="mm-identity">
<u-icon :name="fileUrl+avatar" label="你好, SSDFH!" size="107"
<u-icon @click="handleClickAvatar" :name="fileUrl+getAvatar" :label="getTopTip" size="107"
labelSize="45" labelColor="#bd8dfa" marginLeft="30"></u-icon>
</view>
<view class="mm-member">
@ -73,6 +73,8 @@ export default {
background: 'background.png',
//
avatar: 'avatar.png',
//
defaultLoginAvatar: 'login-avatar.png',
//
timeBox: 'time-box.png',
//
@ -119,7 +121,7 @@ export default {
{
icon: 'customer.png',
name: '联系客服',
path: '',
path: '/pages/mobile_web/my/child_pages/contact',
},
{
icon: 'agreement.png',
@ -141,13 +143,34 @@ export default {
// name: '',
// path: '',
// }
]
],
//
isLogin: this.$store.state.vuex_token,
}
},
// mounted() {
// console.log('isLogin',this.isLogin);
// },
computed:{
//
getAvatar(){
return this.isLogin ? this.defaultLoginAvatar : this.avatar;
},
// tip
getTopTip(){
return this.isLogin ? '你好, SSDFH!' : '请登录pixel.ai';
}
},
methods:{
//
toControl(item){
if(item.path) uni.navigateTo({ url: item.path });
},
//
handleClickAvatar(){
uni.navigateTo({
url: '/pages/mobile_web/my/child_pages/login'
})
}
}
}
@ -185,6 +208,9 @@ export default {
margin: 125rpx 70rpx 45rpx;
font-weight: bold;
word-spacing: 3px;
/deep/.u-icon__img{
border-radius: 100%;
}
}
.mm-member{
display: flex;

View File

@ -32,9 +32,16 @@ const commonUpload = (vm,path,params,success) =>{
name: 'image',
header:{'token':vm.$store.state.vuex_token},
success: (res) => {
if(res.data){
success(encodeURI(JSON.parse(res.data).data));
} else {
vm.$refs.uToast.show({type: 'error',title: "余额不足,请充值!"});
vm.dotLoading = false;
return;
}
},
fail: function (res) {
vm.$refs.uToast.show({type: 'error',title: "处理失败!"});
}
});
}

View File

@ -176,6 +176,10 @@ export default {
else that.topLevel = 1;
}
},
onHide() {
window.onscroll = null;
},
// #endif
onLoad(options) {
this.form.title = options.name;

View File

@ -31,6 +31,7 @@ const store = new Vuex.Store({
state: {
// 如果上面从本地获取的lifeData对象下有对应的属性就赋值给state中对应的变量
// 加上vuex_前缀是防止变量名冲突也让人一目了然
// fbc545a91cc94fe89296828a25a7e08e@9085553879028596738
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : 'fbc545a91cc94fe89296828a25a7e08e@9085553879028596738',
user_message:lifeData.user_message ? lifeData.user_message : {},
current_platform: lifeData.current_platform ? lifeData.current_platform : ''