Merge remote-tracking branch 'origin/master'
# Conflicts: # pages.json
8
App.vue
@@ -44,4 +44,12 @@
|
||||
|
||||
<style lang="scss">
|
||||
@import "./uni_modules/vk-uview-ui/index.scss";
|
||||
// @import "./static/fontsFamily/ht.css";
|
||||
// @import "./static/fontsFamily/fs.css";
|
||||
// @import "./static/fontsFamily/kt.css";
|
||||
// @import "./static/fontsFamily/bkt.css";
|
||||
// @import "./static/fontsFamily/hwfs.css";
|
||||
// @import "./static/fontsFamily/hwkt.css";
|
||||
// @import "./static/fontsFamily/st.css";
|
||||
// @import "./static/fontsFamily/wryh.css";
|
||||
</style>
|
||||
@@ -2,8 +2,12 @@ import {
|
||||
http
|
||||
} from "../util/api";
|
||||
|
||||
const baseUrl = "http://192.168.0.26:3000"
|
||||
|
||||
export const mallAPI = {
|
||||
getMallList: (params) => http.get('/mall', params)
|
||||
getMallList: (params) => http.get(baseUrl + '/api/products', params),
|
||||
getCategory: () => http.get(baseUrl + '/api/category'),
|
||||
getMallDetail: (id) => http.get(baseUrl + '/api/products/' + id)
|
||||
}
|
||||
|
||||
export default {
|
||||
|
||||
@@ -2,7 +2,8 @@ import {
|
||||
http
|
||||
} from "../util/api"
|
||||
|
||||
const baseURL = "http://192.168.0.12:3005/chat"
|
||||
// const baseURL = "http://192.168.0.12:3005/chat"
|
||||
const baseURL = "http://192.168.0.15:3007"
|
||||
|
||||
// 项目相关API
|
||||
export const messageAPI = {
|
||||
|
||||
@@ -2,7 +2,8 @@ import {
|
||||
http
|
||||
} from "../util/api"
|
||||
|
||||
const baseURL = "http://192.168.0.12:3005/term"
|
||||
// const baseURL = "http://192.168.0.12:3005/term"
|
||||
const baseURL = "http://192.168.0.15:3006"
|
||||
|
||||
// 项目相关API
|
||||
export const programAPI = {
|
||||
|
||||
16
pages.json
@@ -17,7 +17,8 @@
|
||||
{
|
||||
"path": "pages/my/my",
|
||||
"style": {
|
||||
"navigationBarTitleText": "我的"
|
||||
"navigationBarTitleText": "我的",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -36,7 +37,6 @@
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "pages/finance/finance",
|
||||
"style": {
|
||||
@@ -44,7 +44,7 @@
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"path":"pages/finance/production",
|
||||
"style": {
|
||||
@@ -52,7 +52,7 @@
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"path":"pages/finance/service",
|
||||
"style": {
|
||||
@@ -60,7 +60,7 @@
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"path": "pages/register/register",
|
||||
"style": {
|
||||
@@ -119,12 +119,6 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
],
|
||||
"globalStyle": {
|
||||
"navigationBarTextStyle": "black",
|
||||
|
||||
@@ -1,174 +1,339 @@
|
||||
<template>
|
||||
<view class="message-container">
|
||||
<!-- 固定背景的容器 -->
|
||||
<view class="background-container"></view>
|
||||
|
||||
<!-- 可滚动的内容区域 -->
|
||||
<view class="content-container" :style="'height:'+height+'px'">
|
||||
|
||||
<u-swiper class="u-m-t-60" :list="list" name="url" height="324"></u-swiper>
|
||||
<scroll-view scroll-y="true" style="height: 100%;">
|
||||
<view class="header-search">
|
||||
<u-search :action-style="searchBtn" shape="square" bg-color="#CADBFF" placeholder="输入商品名称或商品种类"
|
||||
v-model="keyword"></u-search>
|
||||
</view>
|
||||
|
||||
<view class="menu-list">
|
||||
<swiper class="swiper" @change="changeMenu">
|
||||
<swiper-item>
|
||||
<u-grid :col="4" :border="false">
|
||||
<u-grid-item bg-color="transparent">
|
||||
<u-icon name="/static/home/1.png" :size="120"></u-icon>
|
||||
<view class="grid-text">精选直播</view>
|
||||
</u-grid-item>
|
||||
<u-grid-item bg-color="transparent">
|
||||
<u-icon name="/static/home/2.png" :size="120"></u-icon>
|
||||
<view class="grid-text">订单数据</view>
|
||||
</u-grid-item>
|
||||
<u-grid-item bg-color="transparent" @click="openMall">
|
||||
<u-icon name="/static/home/3.png" :size="120"></u-icon>
|
||||
<view class="grid-text">商城好物</view>
|
||||
</u-grid-item>
|
||||
<u-grid-item bg-color="transparent">
|
||||
<u-icon name="/static/home/4.png" :size="120"></u-icon>
|
||||
<view class="grid-text">获得积分</view>
|
||||
</u-grid-item>
|
||||
</u-grid>
|
||||
</swiper-item>
|
||||
<swiper-item>
|
||||
<u-grid :col="4" :border="false">
|
||||
<u-grid-item bg-color="transparent">
|
||||
<u-icon name="/static/home/5.png" :size="120"></u-icon>
|
||||
<view class="grid-text">微信读书</view>
|
||||
</u-grid-item>
|
||||
</u-grid>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
|
||||
<view class="indicator-dots">
|
||||
<view class="indicator-dots-item" :class="current==0?'indicator-dots-active':''">
|
||||
<view class="menu-item" @click="handleCategory">
|
||||
<u-image src="/static/shop/01.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
商品分类
|
||||
</view>
|
||||
<view class="indicator-dots-item" :class="current==1?'indicator-dots-active':''">
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/02.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
观看直播
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/03.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
违规通告
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/04.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
百亿补贴
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/05.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
限时秒杀
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/06.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
会员专区
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/07.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
商品收藏
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/08.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
充值缴费
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/09.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
资质认证
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/shop/10.png" :width="iconWidth" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
联系客服
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<Tabbar id="tabbarId"></Tabbar>
|
||||
|
||||
<view class="mall-list">
|
||||
<u-waterfall v-model="mallList" ref="mallListRef">
|
||||
<template v-slot:left="{leftList}">
|
||||
<view class="mall-item u-m-r-10" v-for="(item, index) in leftList" :key="index"
|
||||
@click="handleCheck(item)">
|
||||
<u-lazy-load threshold="-450" border-radius="10" :image="getImageUrl(item.image)"
|
||||
:index="index"></u-lazy-load>
|
||||
<view class="mall-title u-m-l-5 u-m-r-5">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<del class="u-m-l-5 u-m-r-5" style="white-space: nowrap;">¥{{item.price}}</del>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="RDType(item.payment_methods)">
|
||||
<image src="/static/icon/rongdou.png" class="icon" mode=""></image>
|
||||
{{item.rongdou_price}}
|
||||
</view>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="pointsType(item.payment_methods)">
|
||||
<u-icon name="integral"></u-icon>
|
||||
{{item.points_price}}
|
||||
</view>
|
||||
<view class="mall-tag u-m-l-5 u-m-r-5">
|
||||
<view class="mall-tag-text" v-if="RDType(item.payment_methods)">
|
||||
融豆
|
||||
</view>
|
||||
<view class="mall-tag-owner" v-if="pointsType(item.payment_methods)">
|
||||
积分
|
||||
</view>
|
||||
</view>
|
||||
<view class="mall-shop u-m-l-5 u-m-r-5">
|
||||
{{item.category}}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-slot:right="{rightList}">
|
||||
<view class="mall-item u-m-l-10" v-for="(item, index) in rightList" :key="index"
|
||||
@click="handleCheck(item)">
|
||||
<u-lazy-load threshold="-450" border-radius="10" :image="getImageUrl(item.image)"
|
||||
:index="index"></u-lazy-load>
|
||||
<view class="mall-title u-m-l-5 u-m-r-5">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<del class="u-m-l-5 u-m-r-5" style="white-space: nowrap;">¥{{item.price}}</del>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="RDType(item.payment_methods)">
|
||||
<image src="/static/icon/rongdou.png" class="icon" mode=""></image>
|
||||
{{item.rongdou_price}}
|
||||
</view>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="pointsType(item.payment_methods)">
|
||||
<u-icon name="integral"></u-icon>
|
||||
{{item.points_price}}
|
||||
</view>
|
||||
<view class="mall-tag u-m-l-5 u-m-r-5">
|
||||
<view class="mall-tag-text" v-if="RDType(item.payment_methods)">
|
||||
融豆
|
||||
</view>
|
||||
<view class="mall-tag-owner" v-if="pointsType(item.payment_methods)">
|
||||
积分
|
||||
</view>
|
||||
</view>
|
||||
<view class="mall-shop u-m-l-5 u-m-r-5">
|
||||
{{item.category}}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-waterfall>
|
||||
<u-loadmore margin-top="20" :status="loadStatus"></u-loadmore>
|
||||
</view>
|
||||
|
||||
<view class="box-div"></view>
|
||||
|
||||
</scroll-view>
|
||||
</view>
|
||||
<Tabbar id="tabbarId"></Tabbar>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, getCurrentInstance } from 'vue';
|
||||
import {
|
||||
onReady
|
||||
} from '@dcloudio/uni-app';
|
||||
import { onReady as onUniReady } from '@dcloudio/uni-app';
|
||||
const instance = getCurrentInstance();
|
||||
ref, onMounted
|
||||
} from 'vue';
|
||||
import { mallAPI } from '../../api/mall';
|
||||
import { getImageUrl } from '../../util/common';
|
||||
|
||||
const height = ref(0)
|
||||
const keyword = ref('')
|
||||
const searchBtn = {
|
||||
background: 'linear-gradient(100.84deg, #7B99FF 0%, #002CC2 99.52%)',
|
||||
width: '128rpx',
|
||||
borderRadius: '198rpx',
|
||||
color: '#fff',
|
||||
fontSize: '28rpx',
|
||||
boxShadow: '0px 4px 4px 0px #FFFFFF40 inset',
|
||||
}
|
||||
const iconWidth = "65%"
|
||||
|
||||
const loadHeight = () => {
|
||||
uni.getSystemInfo({
|
||||
success(res) {
|
||||
let screenHeight = res.screenHeight
|
||||
uni.createSelectorQuery().in(instance.proxy).select("#tabbarId").boundingClientRect((data : any) => {
|
||||
height.value = screenHeight - data.height
|
||||
}).exec()
|
||||
const handleCategory = () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/home/mallCategory'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const params = ref({
|
||||
keyword: '',
|
||||
page: 1,
|
||||
limit: 5,
|
||||
category: ''
|
||||
})
|
||||
const mallList = ref([])
|
||||
const mallListRef = ref()
|
||||
const loadStatus = ref('loadmore') // nomore
|
||||
const maxPage = ref(1)
|
||||
|
||||
// 积分兑换
|
||||
const pointsType = (val : any) => {
|
||||
if (val && val.indexOf("points") >= 0) return true
|
||||
return false
|
||||
}
|
||||
// 融豆兑换
|
||||
const RDType = (val : any) => {
|
||||
if (val && val.indexOf("rongdou") >= 0) return true
|
||||
return false
|
||||
}
|
||||
|
||||
// 加载数据
|
||||
const loadMallData = () => {
|
||||
if (loadStatus.value == 'nomore') return
|
||||
mallAPI.getMallList(params.value).then((res) => {
|
||||
console.log(res.data);
|
||||
mallList.value = mallList.value.concat(res.data.products)
|
||||
maxPage.value = res.data.pagination.pages
|
||||
params.value.page++
|
||||
if (maxPage.value < params.value.page) {
|
||||
loadStatus.value = 'nomore'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const list = [
|
||||
{ url: '/static/banner/1.png' },
|
||||
{ url: '/static/banner/2.png' },
|
||||
{ url: '/static/banner/3.png' },
|
||||
]
|
||||
|
||||
const current = ref(0)
|
||||
const changeMenu = (val : any) => {
|
||||
current.value = val.detail.current
|
||||
}
|
||||
|
||||
const openMall = () => {
|
||||
const handleCheck = (item : any) => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/mall/mall'
|
||||
url: '/pages/home/mallDetail?id=' + item.id
|
||||
})
|
||||
}
|
||||
|
||||
onUniReady(() => {
|
||||
loadHeight()
|
||||
onMounted(() => {
|
||||
loadMallData()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.message-container {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
/* 防止容器本身滚动 */
|
||||
height: 100vh;
|
||||
padding: 60rpx 20rpx;
|
||||
background: #79AFFF;
|
||||
|
||||
/* 固定背景 */
|
||||
.background-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(180deg, #2F75F9 0%, #F0F3FF 34.13%);
|
||||
z-index: 1;
|
||||
/* 确保背景在内容下方 */
|
||||
.header-search {
|
||||
.search-btn {
|
||||
;
|
||||
box-shadow: 0px -4px 4px 0px #00000040 inset;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* 内容滚动区域 */
|
||||
.content-container {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
/* 确保内容在背景上方 */
|
||||
width: 100%;
|
||||
overflow-y: scroll;
|
||||
height: 100%;
|
||||
// padding: 32rpx;
|
||||
.menu-list {
|
||||
background: #FFFFFF80;
|
||||
margin-top: 32rpx;
|
||||
padding: 20rpx 0 0 0;
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.menu-list {
|
||||
border-top-left-radius: 32rpx;
|
||||
border-top-right-radius: 32rpx;
|
||||
box-shadow: 0rpx -8rpx 20rpx 0rpx #628AC080;
|
||||
padding-bottom: 20rpx;
|
||||
.menu-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 20%;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
.swiper {
|
||||
height: 200rpx;
|
||||
.menu-text {
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-style: Regular;
|
||||
font-size: 24rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
color: #2B2B2B;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.grid-text {
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-style: Regular;
|
||||
font-size: 28rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 32rpx;
|
||||
letter-spacing: -2%;
|
||||
text-align: center;
|
||||
|
||||
// 商城列表
|
||||
.mall-list {
|
||||
margin-top: 20rpx;
|
||||
|
||||
.mall-item {
|
||||
border-radius: 16rpx;
|
||||
background: #F0F5FF;
|
||||
position: relative;
|
||||
margin-top: 20rpx;
|
||||
box-shadow: 0px 4px 4px 0px #00000040;
|
||||
padding-bottom: 10rpx;
|
||||
|
||||
.mall-title {
|
||||
font-size: 30rpx;
|
||||
margin-top: 10rpx;
|
||||
color: $u-main-color;
|
||||
}
|
||||
|
||||
.mall-price {
|
||||
font-size: 30rpx;
|
||||
color: $u-type-error;
|
||||
margin-top: 10rpx;
|
||||
|
||||
.icon {
|
||||
height: 30rpx;
|
||||
width: 30rpx;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.indicator-dots {
|
||||
// margin-top: 40rpx;
|
||||
|
||||
.mall-tag {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-top: 5px;
|
||||
|
||||
.mall-tag-owner {
|
||||
background-color: $u-type-error;
|
||||
color: #FFFFFF;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 4rpx 14rpx;
|
||||
border-radius: 50rpx;
|
||||
font-size: 20rpx;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.mall-tag-text {
|
||||
margin-right: 10px;
|
||||
border: 1px solid $u-type-primary;
|
||||
color: $u-type-primary;
|
||||
border-radius: 50rpx;
|
||||
line-height: 1;
|
||||
padding: 4rpx 14rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 50rpx;
|
||||
font-size: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.indicator-dots-item {
|
||||
background-color: $u-tips-color;
|
||||
height: 6px;
|
||||
width: 6px;
|
||||
border-radius: 10px;
|
||||
margin: 0 3px;
|
||||
|
||||
|
||||
.mall-shop {
|
||||
font-size: 22rpx;
|
||||
color: $u-tips-color;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.indicator-dots-active {
|
||||
background-color: $u-type-primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.box-div {
|
||||
padding: 30rpx 0rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
319
pages/home/mallCategory.vue
Normal file
@@ -0,0 +1,319 @@
|
||||
<template>
|
||||
<view class="category-container">
|
||||
<u-navbar id="uNavbarId" title="商品详情" :background="{background: 'transparent' }" :border-bottom="false"
|
||||
back-icon-color="#000" title-color="#000">
|
||||
<template v-slot:right>
|
||||
<image class="collection" src="/static/icon/Settings.png" mode=""></image>
|
||||
</template>
|
||||
</u-navbar>
|
||||
<scroll-view scroll-y="true" :style="'height:'+scrollHeight+'px'">
|
||||
<view class="scroll-view">
|
||||
<view class="menu-level1">
|
||||
<view class="text" :class="{'active': currentCate==index}" v-for="(item, index) in categoryList"
|
||||
@click="handleChangeCategory(index)">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-level2" v-if="categoryList[currentCate]?.relative.length!=0">
|
||||
<view class="menu-item" v-for="item in categoryList[currentCate]?.relative">
|
||||
<u-image v-if="item.img" :fade="false" :src="getImageUrl(item.img)" :width="iconWidth"
|
||||
mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="mall-list">
|
||||
<u-waterfall v-model="mallList" ref="mallListRef">
|
||||
<template v-slot:left="{leftList}">
|
||||
<view class="mall-item u-m-r-10" v-for="(item, index) in leftList" :key="index"
|
||||
@click="handleCheck(item)">
|
||||
<u-lazy-load threshold="-450" border-radius="10" :image="getImageUrl(item.image)"
|
||||
:index="index"></u-lazy-load>
|
||||
<view class="mall-title u-m-l-5 u-m-r-5">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<del class="u-m-l-5 u-m-r-5" style="white-space: nowrap;">¥{{item.price}}</del>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="RDType(item.payment_methods)">
|
||||
<image src="/static/icon/rongdou.png" class="icon" mode=""></image>
|
||||
{{item.rongdou_price}}
|
||||
</view>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="pointsType(item.payment_methods)">
|
||||
<u-icon name="integral"></u-icon>
|
||||
{{item.points_price}}
|
||||
</view>
|
||||
<view class="mall-tag u-m-l-5 u-m-r-5">
|
||||
<view class="mall-tag-text" v-if="RDType(item.payment_methods)">
|
||||
融豆
|
||||
</view>
|
||||
<view class="mall-tag-owner" v-if="pointsType(item.payment_methods)">
|
||||
积分
|
||||
</view>
|
||||
</view>
|
||||
<view class="mall-shop u-m-l-5 u-m-r-5">
|
||||
{{item.category}}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-slot:right="{rightList}">
|
||||
<view class="mall-item u-m-l-10" v-for="(item, index) in rightList" :key="index"
|
||||
@click="handleCheck(item)">
|
||||
<u-lazy-load threshold="-450" border-radius="10" :image="getImageUrl(item.image)"
|
||||
:index="index"></u-lazy-load>
|
||||
<view class="mall-title u-m-l-5 u-m-r-5">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<del class="u-m-l-5 u-m-r-5" style="white-space: nowrap;">¥{{item.price}}</del>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="RDType(item.payment_methods)">
|
||||
<image src="/static/icon/rongdou.png" class="icon" mode=""></image>
|
||||
{{item.rongdou_price}}
|
||||
</view>
|
||||
<view class="mall-price u-m-l-5 u-m-r-5" v-if="pointsType(item.payment_methods)">
|
||||
<u-icon name="integral"></u-icon>
|
||||
{{item.points_price}}
|
||||
</view>
|
||||
<view class="mall-tag u-m-l-5 u-m-r-5">
|
||||
<view class="mall-tag-text" v-if="RDType(item.payment_methods)">
|
||||
融豆
|
||||
</view>
|
||||
<view class="mall-tag-owner" v-if="pointsType(item.payment_methods)">
|
||||
积分
|
||||
</view>
|
||||
</view>
|
||||
<view class="mall-shop u-m-l-5 u-m-r-5">
|
||||
{{item.category}}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-waterfall>
|
||||
<u-loadmore margin-top="20" :status="loadStatus"></u-loadmore>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
ref, onMounted, getCurrentInstance
|
||||
} from 'vue';
|
||||
import { mallAPI } from '../../api/mall';
|
||||
import { getImageUrl } from '../../util/common';
|
||||
|
||||
const instance = getCurrentInstance();
|
||||
|
||||
const currentCate = ref(0)
|
||||
const categoryList = ref([])
|
||||
const iconWidth = "65%"
|
||||
const loadCategory = () => {
|
||||
mallAPI.getCategory().then(res => {
|
||||
categoryList.value = res.data
|
||||
})
|
||||
}
|
||||
|
||||
const handleChangeCategory = (index) => {
|
||||
currentCate.value = index
|
||||
}
|
||||
|
||||
const params = ref({
|
||||
keyword: '',
|
||||
page: 1,
|
||||
limit: 5,
|
||||
category: ''
|
||||
})
|
||||
const mallList = ref([])
|
||||
const mallListRef = ref()
|
||||
const loadStatus = ref('loadmore') // nomore
|
||||
const maxPage = ref(1)
|
||||
|
||||
// 积分兑换
|
||||
const pointsType = (val : any) => {
|
||||
if (val && val.indexOf("points") >= 0) return true
|
||||
return false
|
||||
}
|
||||
// 融豆兑换
|
||||
const RDType = (val : any) => {
|
||||
if (val && val.indexOf("rongdou") >= 0) return true
|
||||
return false
|
||||
}
|
||||
|
||||
// 加载数据
|
||||
const loadMallData = () => {
|
||||
if (loadStatus.value == 'nomore') return
|
||||
mallAPI.getMallList(params.value).then((res) => {
|
||||
mallList.value = mallList.value.concat(res.data.products)
|
||||
maxPage.value = res.data.pagination.pages
|
||||
params.value.page++
|
||||
if (maxPage.value < params.value.page) {
|
||||
loadStatus.value = 'nomore'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleCheck = (item : any) => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/home/mallDetail?id=' + item.id
|
||||
})
|
||||
}
|
||||
|
||||
const scrollHeight = ref(0)
|
||||
const loadHeight = () => {
|
||||
uni.getSystemInfo({
|
||||
success(res) {
|
||||
let screenHeight = res.screenHeight
|
||||
uni.createSelectorQuery().in(instance.proxy).select("#uNavbarId").boundingClientRect((data : any) => {
|
||||
scrollHeight.value = screenHeight - data.height
|
||||
}).exec()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadHeight()
|
||||
loadCategory()
|
||||
loadMallData()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.category-container {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: #B9D5FF;
|
||||
|
||||
.collection {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
margin-right: 24rpx;
|
||||
}
|
||||
|
||||
.scroll-view {
|
||||
.menu-level1 {
|
||||
display: flex;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
overflow-x: scroll;
|
||||
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
font-family: Work Sans;
|
||||
font-weight: 600;
|
||||
font-style: SemiBold;
|
||||
|
||||
.text {
|
||||
margin: 22rpx;
|
||||
font-family: Work Sans;
|
||||
font-weight: 600;
|
||||
font-style: SemiBold;
|
||||
font-size: 14px;
|
||||
color: #F5F8FF;
|
||||
}
|
||||
|
||||
.active {
|
||||
font-size: 16px;
|
||||
color: var(--wz, #2938E0);
|
||||
}
|
||||
}
|
||||
|
||||
.menu-level2 {
|
||||
background: #F5F8FF;
|
||||
// background: #FFFFFF80;
|
||||
padding: 20rpx 0 0 0;
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.menu-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 20%;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
.menu-text {
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-style: Regular;
|
||||
font-size: 24rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
color: #2B2B2B;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 商城列表
|
||||
.mall-list {
|
||||
margin-top: 20rpx;
|
||||
padding: 0 20rpx;
|
||||
|
||||
.mall-item {
|
||||
border-radius: 16rpx;
|
||||
background: #F0F5FF;
|
||||
position: relative;
|
||||
margin-top: 20rpx;
|
||||
box-shadow: 0px 4px 4px 0px #00000040;
|
||||
padding-bottom: 10rpx;
|
||||
|
||||
.mall-title {
|
||||
font-size: 30rpx;
|
||||
margin-top: 10rpx;
|
||||
color: $u-main-color;
|
||||
}
|
||||
|
||||
.mall-price {
|
||||
font-size: 30rpx;
|
||||
color: $u-type-error;
|
||||
margin-top: 10rpx;
|
||||
|
||||
.icon {
|
||||
height: 30rpx;
|
||||
width: 30rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.mall-tag {
|
||||
display: flex;
|
||||
margin-top: 5px;
|
||||
|
||||
.mall-tag-owner {
|
||||
background-color: $u-type-error;
|
||||
color: #FFFFFF;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 4rpx 14rpx;
|
||||
border-radius: 50rpx;
|
||||
font-size: 20rpx;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.mall-tag-text {
|
||||
margin-right: 10px;
|
||||
border: 1px solid $u-type-primary;
|
||||
color: $u-type-primary;
|
||||
border-radius: 50rpx;
|
||||
line-height: 1;
|
||||
padding: 4rpx 14rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 50rpx;
|
||||
font-size: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.mall-shop {
|
||||
font-size: 22rpx;
|
||||
color: $u-tips-color;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
161
pages/home/mallDetail.vue
Normal file
@@ -0,0 +1,161 @@
|
||||
<template>
|
||||
<view class="detail-container">
|
||||
<u-navbar id="uNavbarId" title="商品详情" :background="{background: 'transparent' }" :border-bottom="false"
|
||||
back-icon-color="#000" title-color="#000">
|
||||
<template v-slot:right>
|
||||
<image class="collection" src="/static/icon/Settings.png" mode=""></image>
|
||||
</template>
|
||||
</u-navbar>
|
||||
<scroll-view scroll-y="true" :style="'height:'+scrollHeight+'px'">
|
||||
111
|
||||
</scroll-view>
|
||||
|
||||
<view class="bottom-view" id="bottomViewId">
|
||||
<view class="icon-btn">
|
||||
<view class="item">
|
||||
<u-image width="100%" :fade="false" src="/static/mall/Home.png" mode="widthFix"></u-image>
|
||||
店铺
|
||||
</view>
|
||||
<view class="item">
|
||||
<u-image width="100%" :fade="false" src="/static/mall/Twitch.png" mode="widthFix"></u-image>
|
||||
客服
|
||||
</view>
|
||||
<view class="item">
|
||||
<u-image width="100%" :fade="false" src="/static/mall/Star.png" mode="widthFix"></u-image>
|
||||
收藏
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-btn">
|
||||
<u-button class="add-car common" :hair-line="false" hover-class="none">加入购物车</u-button>
|
||||
<u-button class="buy common" :hair-line="false" hover-class="none">领券购买</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref, getCurrentInstance } from 'vue';
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app';
|
||||
import { mallAPI } from '../../api/mall';
|
||||
|
||||
const instance = getCurrentInstance();
|
||||
const scrollHeight = ref(0)
|
||||
const loadHeight = () => {
|
||||
uni.getSystemInfo({
|
||||
success(res) {
|
||||
let screenHeight = res.screenHeight
|
||||
uni.createSelectorQuery().in(instance.proxy).select("#uNavbarId").boundingClientRect((data : any) => {
|
||||
scrollHeight.value = screenHeight - data.height
|
||||
}).exec()
|
||||
uni.createSelectorQuery().in(instance.proxy).select("#bottomViewId").boundingClientRect((data : any) => {
|
||||
scrollHeight.value = scrollHeight.value - data.height
|
||||
}).exec()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const dataId = ref()
|
||||
|
||||
const loadData = () => {
|
||||
mallAPI.getMallDetail(dataId.value).then(res => {
|
||||
console.log(res);
|
||||
})
|
||||
}
|
||||
|
||||
onLoad((val) => {
|
||||
dataId.value = val.id
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
loadHeight()
|
||||
loadData()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.detail-container {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: linear-gradient(180deg, #2F75F9 0%, #F0F3FF 34.13%);
|
||||
|
||||
|
||||
.collection {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
margin-right: 24rpx;
|
||||
}
|
||||
|
||||
.bottom-view {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 116rpx;
|
||||
background: #F5F8FF;
|
||||
padding: 0 29rpx;
|
||||
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.icon-btn {
|
||||
display: flex;
|
||||
width: 228rpx;
|
||||
width: 30%;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
.item {
|
||||
margin-right: 20rpx;
|
||||
white-space: nowrap;
|
||||
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-style: Regular;
|
||||
font-size: 26rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
}
|
||||
}
|
||||
|
||||
.text-btn {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
justify-content: flex-end;
|
||||
|
||||
.common {
|
||||
border: none;
|
||||
width: 200rpx;
|
||||
height: 70rpx;
|
||||
margin: 0;
|
||||
color: #fff;
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-style: Regular;
|
||||
font-size: 26rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
}
|
||||
|
||||
.buy {
|
||||
background: #6287FF;
|
||||
border-top-right-radius: 12rpx;
|
||||
border-bottom-right-radius: 12rpx;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.add-car {
|
||||
background: #A8BCFF;
|
||||
border-top-right-radius: 0rpx;
|
||||
border-bottom-right-radius: 0rpx;
|
||||
border-top-left-radius: 12rpx;
|
||||
border-bottom-left-radius: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -569,16 +569,21 @@
|
||||
userId.value = uni.getStorageSync("user").id
|
||||
// 获取标题
|
||||
groupAPI.getById(groupId.value).then(res => {
|
||||
chatTitle.value = res.data.program.linkman.username + "(" + res.data.program.name + ")"
|
||||
// chatTitle.value = res.data.program.linkman.username + "(" + res.data.program.name + ")"
|
||||
chatTitle.value = res.data.program.name
|
||||
})
|
||||
|
||||
loadHistoryData() // 最近10条
|
||||
setTimeout(()=>{
|
||||
scrollToBottom()
|
||||
}, 1000)
|
||||
|
||||
// 未读变已读
|
||||
let data = { groupId: groupId.value, userId: userId.value }
|
||||
messageAPI.unread(data).then(res => {
|
||||
if (res.code == 200) {
|
||||
dataList.value = dataList.value.concat(res.data)
|
||||
}
|
||||
})
|
||||
// let data = { groupId: groupId.value, userId: userId.value }
|
||||
// messageAPI.unread(data).then(res => {
|
||||
// if (res.code == 200) {
|
||||
// dataList.value = dataList.value.concat(res.data)
|
||||
// }
|
||||
// })
|
||||
messageAPI.read({ groupId: groupId.value, userId: userId.value })
|
||||
}
|
||||
|
||||
@@ -590,10 +595,10 @@
|
||||
const loadFix = ref(true)
|
||||
|
||||
// 历史记录
|
||||
const loadHistoryData = () => {
|
||||
const loadHistoryData = async () => {
|
||||
params.value.groupId = groupId.value
|
||||
messageAPI.list(params.value).then(res => {
|
||||
console.log(res);
|
||||
await messageAPI.list(params.value).then(res => {
|
||||
// console.log(res);
|
||||
if (res.data.list.length != 0) {
|
||||
res.data.list.forEach(item => {
|
||||
dataList.value.unshift(item)
|
||||
@@ -799,6 +804,7 @@
|
||||
.img-content {
|
||||
margin-left: 10rpx;
|
||||
height: 200rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
308
pages/my/my.vue
@@ -1,12 +1,141 @@
|
||||
<template>
|
||||
<view class="my-container">
|
||||
<scroll-view scroll-y="true" style="height: 100%;">
|
||||
<view v-if="user!=null">
|
||||
<view class="header">
|
||||
<view class="header-user">
|
||||
<view class="header-avatar">
|
||||
<u-avatar :src="getImageUrl(user.avatar)"></u-avatar>
|
||||
</view>
|
||||
<view class="header-username u-m-l-20">
|
||||
{{user.real_name}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="header-setting">
|
||||
<image src="/static/icon/Settings.png" style="width: 100%;height: 100%;" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-if="user!=null">
|
||||
{{user.real_name}}
|
||||
</view>
|
||||
<view class="statistics">
|
||||
<view class="item">
|
||||
<view class="count">
|
||||
111
|
||||
</view>
|
||||
<view class="title">
|
||||
积分
|
||||
</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<view class="count">
|
||||
5
|
||||
</view>
|
||||
<view class="title">
|
||||
优惠券
|
||||
</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<view class="count">
|
||||
10
|
||||
</view>
|
||||
<view class="title">
|
||||
我的兑换
|
||||
</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<view class="count">
|
||||
283
|
||||
</view>
|
||||
<view class="title">
|
||||
我的收藏
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<u-button @click="loginOut">退出登录</u-button>
|
||||
<view class="open-vip">
|
||||
<view class="text-vip">
|
||||
<view class="title">
|
||||
vip专享
|
||||
</view>
|
||||
<view class="sub-title">
|
||||
立享价值1000元权益
|
||||
</view>
|
||||
</view>
|
||||
<u-button class="btn-vip" hover-class="none" :hair-line="false">298元开通</u-button>
|
||||
</view>
|
||||
|
||||
<view class="white-block">
|
||||
<view class="item">
|
||||
<view class="title">
|
||||
会员权益
|
||||
</view>
|
||||
<view class="sub-title">
|
||||
领取升级福利
|
||||
</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<view class="title">
|
||||
积分商城
|
||||
</view>
|
||||
<view class="sub-title">
|
||||
赚积分享福利
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="menu-list">
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/01.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
领券中心
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/02.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
积分兑换
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/03.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
我的客户
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/04.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
常见问题
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/05.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
充值中心
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item" @click="handleShippingAddress">
|
||||
<u-image src="/static/my/06.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
收货地址
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/07.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
我的订单
|
||||
</view>
|
||||
</view>
|
||||
<view class="menu-item">
|
||||
<u-image src="/static/my/08.png" width="40%" mode="widthFix"></u-image>
|
||||
<view class="menu-text">
|
||||
成为代理
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<u-button class="u-m-t-20" @click="loginOut">退出登录</u-button>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<Tabbar></Tabbar>
|
||||
</template>
|
||||
@@ -14,10 +143,19 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { getImageUrl } from '../../util/common';
|
||||
|
||||
const user = ref()
|
||||
|
||||
const handleShippingAddress = () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/shippingAddress'
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
user.value = uni.getStorageSync("user")
|
||||
console.log(user.value);
|
||||
})
|
||||
|
||||
const loginOut = () => {
|
||||
@@ -29,5 +167,165 @@
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.my-container {}
|
||||
.my-container {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: linear-gradient(180deg, #E3E8FF 0%, #E8EAF4 100%);
|
||||
background-blend-mode: lighten;
|
||||
padding: 60rpx 20rpx;
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
|
||||
.header-user {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 170rpx;
|
||||
padding-left: 60rpx;
|
||||
}
|
||||
|
||||
.header-setting {
|
||||
width: 52rpx;
|
||||
height: 52rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.statistics {
|
||||
display: flex;
|
||||
|
||||
font-family: SF Pro;
|
||||
font-weight: 510;
|
||||
font-style: Medium;
|
||||
font-size: 32rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 48rpx;
|
||||
letter-spacing: 0%;
|
||||
|
||||
margin: 40rpx 0 20rpx;
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 25%;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.open-vip {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
background: #2B2B2B;
|
||||
align-items: center;
|
||||
padding: 24rpx 0;
|
||||
border-top-left-radius: 24rpx;
|
||||
border-top-right-radius: 24rpx;
|
||||
|
||||
.text-vip {
|
||||
margin-left: 32rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
color: #FFDD9E;
|
||||
justify-content: flex-start;
|
||||
|
||||
.title {
|
||||
font-family: SF Pro;
|
||||
font-weight: 700;
|
||||
font-style: Bold;
|
||||
font-size: 32rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 48rpx;
|
||||
letter-spacing: 0%;
|
||||
}
|
||||
|
||||
.sub-title {
|
||||
font-family: SF Pro;
|
||||
font-weight: 274;
|
||||
font-style: Light;
|
||||
font-size: 32rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 48rpx;
|
||||
letter-spacing: 0%;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.btn-vip {
|
||||
margin-right: 42rpx;
|
||||
width: 180rpx;
|
||||
height: 56rpx;
|
||||
border: none;
|
||||
border-radius: 198rpx;
|
||||
background: linear-gradient(90deg, #FFCC5E 0%, #FFE9BA 47.27%, #FFCC5E 100%);
|
||||
}
|
||||
}
|
||||
|
||||
.white-block {
|
||||
margin-top: 44rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.item {
|
||||
width: 48%;
|
||||
background: #F5F8FF;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 30rpx 32rpx;
|
||||
border-radius: 24rpx;
|
||||
|
||||
.title {
|
||||
font-family: SF Pro;
|
||||
font-weight: 700;
|
||||
font-style: Bold;
|
||||
font-size: 32rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 48rpx;
|
||||
letter-spacing: 0%;
|
||||
}
|
||||
|
||||
.sub-title {
|
||||
margin-top: 14rpx;
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-size: 26rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
color: #8C8C8C;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.menu-list {
|
||||
background: #F5F8FF;
|
||||
margin-top: 20rpx;
|
||||
padding: 20rpx 0 0 0;
|
||||
border-radius: 24rpx;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.menu-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 25%;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
.menu-text {
|
||||
font-family: Work Sans;
|
||||
font-weight: 400;
|
||||
font-style: Regular;
|
||||
font-size: 20rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
268
pages/my/shippingAddress.vue
Normal file
@@ -0,0 +1,268 @@
|
||||
<template>
|
||||
<view class="shipping-container">
|
||||
<u-navbar id="uNavbarId" back-text="收货地址" :back-text-style="navBarTitle"
|
||||
:background="{background: 'transparent' }" :border-bottom="false" back-icon-color="#000" title-color="#000">
|
||||
<template v-slot:right>
|
||||
<view class="right-menu">
|
||||
<view @click="handleManage">
|
||||
{{isManage?'取消':'管理'}}
|
||||
</view>
|
||||
<view v-if="isManage" class="u-m-l-10 del-text" @click="showDelModel">
|
||||
删除
|
||||
</view>
|
||||
<view class="u-m-l-10 add-text">
|
||||
新增地址
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</u-navbar>
|
||||
<scroll-view scroll-y="true" :style="'height:'+scrollHeight+'px'" @scrolltolower="loadData">
|
||||
<view class="data-list">
|
||||
<view class="data-item" v-for="item in dataList" @click="handleClick(item)">
|
||||
<view class="item-text">
|
||||
<view class="address u-m-b-18">
|
||||
{{item.province + item.city + item.district}}
|
||||
</view>
|
||||
<view class="specific-address u-m-b-18">
|
||||
{{item.detailed_address}}
|
||||
</view>
|
||||
<view class="info">
|
||||
<div class="u-m-r-20">{{item.receiver_name}}</div>
|
||||
<div class="u-m-r-20">{{item.receiver_phone}}</div>
|
||||
<span v-if="item.is_default" class="u-m-r-10">默认</span>
|
||||
<span class="u-m-r-10">{{item.label}}</span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-icon">
|
||||
<image v-if="!isManage" style="width: 100%;height: 100%;" src="/static/icon/Edit.png" mode="">
|
||||
</image>
|
||||
<template v-else>
|
||||
<image v-if="!isIncludeId(item.id)" style="width: 100%;height: 100%;"
|
||||
src="/static/icon/chose.png" mode=""></image>
|
||||
<image v-else style="width: 100%;height: 100%;" src="/static/icon/chose-active.png" mode="">
|
||||
</image>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
<u-loadmore :status="status" />
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 确认是否删除 -->
|
||||
<u-modal v-model="showDel" content="是否删除选中的地址" :show-cancel-button="true" @confirm="handleDel"></u-modal>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, getCurrentInstance, onMounted, ref } from 'vue'
|
||||
|
||||
const navBarTitle = {
|
||||
fontWeight: '510',
|
||||
fontStyle: 'Medium',
|
||||
fontSize: '40rpx',
|
||||
lineHeight: '52px'
|
||||
}
|
||||
|
||||
const isManage = ref(false)
|
||||
const showDel = ref(false)
|
||||
|
||||
const handleManage = () => {
|
||||
if (isManage.value) {
|
||||
ids.value = []
|
||||
}
|
||||
isManage.value = !isManage.value
|
||||
}
|
||||
const showDelModel = () => {
|
||||
showDel.value = true
|
||||
}
|
||||
const handleDel = () => {
|
||||
// TODO 删除
|
||||
}
|
||||
|
||||
const scrollHeight = ref(0)
|
||||
const instance = getCurrentInstance();
|
||||
const loadHeight = () => {
|
||||
uni.getSystemInfo({
|
||||
success(res) {
|
||||
let screenHeight = res.screenHeight
|
||||
uni.createSelectorQuery().in(instance.proxy).select("#uNavbarId").boundingClientRect((data : any) => {
|
||||
scrollHeight.value = screenHeight - data.height
|
||||
}).exec()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const defaultSize = 10
|
||||
const params = ref({
|
||||
page: 1,
|
||||
size: defaultSize,
|
||||
keyword: ''
|
||||
})
|
||||
const status = ref('loadmore')
|
||||
const maxPage = ref()
|
||||
const dataList = ref([
|
||||
{
|
||||
id: 1,
|
||||
receiver_name: '张三',
|
||||
receiver_phone: '13800138000',
|
||||
province: '广东省',
|
||||
city: '深圳市',
|
||||
district: '南山区',
|
||||
detailed_address: '科技园南区1栋101室',
|
||||
label: '家',
|
||||
is_default: true,
|
||||
created_at: '2023-10-01 12:00:00'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
receiver_name: '李四',
|
||||
receiver_phone: '13900139000',
|
||||
province: '北京市',
|
||||
city: '北京市',
|
||||
district: '朝阳区',
|
||||
detailed_address: '建国门外大街1号',
|
||||
label: '公司',
|
||||
is_default: false,
|
||||
created_at: '2023-10-02 14:30:00'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
receiver_name: '王五',
|
||||
receiver_phone: '13700137000',
|
||||
province: '上海市',
|
||||
city: '上海市',
|
||||
district: '浦东新区',
|
||||
detailed_address: '陆家嘴环路1000号',
|
||||
label: '公司',
|
||||
is_default: false,
|
||||
created_at: '2023-10-03 09:15:00'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
receiver_name: '赵六',
|
||||
receiver_phone: '13600136000',
|
||||
province: '浙江省',
|
||||
city: '杭州市',
|
||||
district: '西湖区',
|
||||
detailed_address: '文三路100号',
|
||||
label: '学校',
|
||||
is_default: false,
|
||||
created_at: '2023-10-04 16:45:00'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
receiver_name: '钱七',
|
||||
receiver_phone: '13500135000',
|
||||
province: '江苏省',
|
||||
city: '南京市',
|
||||
district: '鼓楼区',
|
||||
detailed_address: '中山路1号',
|
||||
label: '家',
|
||||
is_default: false,
|
||||
created_at: '2023-10-05 11:20:00'
|
||||
}
|
||||
])
|
||||
const loadData = () => {
|
||||
if (status.value == 'nomore') return
|
||||
// programAPI.getList(params.value).then(res => {
|
||||
// programList.value = programList.value.concat(res.data.list)
|
||||
// maxPage.value = res.data.pages
|
||||
// params.value.page++
|
||||
// if (params.value.page > maxPage.value) {
|
||||
// status.value = 'nomore'
|
||||
// }
|
||||
// }).finally(() => {
|
||||
// uni.stopPullDownRefresh()
|
||||
// })
|
||||
}
|
||||
|
||||
const ids = ref([])
|
||||
const handleClick = (item : any) => {
|
||||
if (isManage.value) { // 开始管理
|
||||
ids.value.push(item.id)
|
||||
}
|
||||
}
|
||||
|
||||
const isIncludeId = (id : any) => {
|
||||
return ids.value.includes(id);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadHeight()
|
||||
loadData()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.shipping-container {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: #E5ECFD;
|
||||
|
||||
|
||||
.right-menu {
|
||||
display: flex;
|
||||
margin-right: 24rpx;
|
||||
font-family: Work Sans;
|
||||
font-weight: 500;
|
||||
font-style: Medium;
|
||||
font-size: 32rpx;
|
||||
leading-trim: NONE;
|
||||
line-height: 100%;
|
||||
letter-spacing: -2%;
|
||||
|
||||
.del-text {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.add-text {
|
||||
color: #305DEF;
|
||||
}
|
||||
}
|
||||
|
||||
.data-list {
|
||||
.data-item {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 28rpx 22rpx;
|
||||
background: #F5F8FF;
|
||||
margin-bottom: 4rpx;
|
||||
align-items: center;
|
||||
|
||||
.item-text {
|
||||
font-weight: 400;
|
||||
line-height: 100%;
|
||||
|
||||
.address {
|
||||
font-size: 20rpx;
|
||||
color: #7B7E8F;
|
||||
}
|
||||
|
||||
.specific-address {
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.info {
|
||||
font-size: 24rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
padding: 2rpx 8rpx;
|
||||
font-size: 16rpx;
|
||||
background: #DADDEA;
|
||||
color: #305DEF;
|
||||
border-radius: 2rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-icon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -7,14 +7,14 @@
|
||||
<u-search :show-action="false" placeholder="输入项目名称、企业名称" v-model="params.keyword" bgColor="#CADBFF"
|
||||
@search="handleSearch"></u-search>
|
||||
</view>
|
||||
<u-dropdown :duration="0" class="dropdown">
|
||||
<!-- <u-dropdown :duration="0" class="dropdown">
|
||||
<u-dropdown-item class="u-dropdown" v-model="areaFilter" title="区域筛选"
|
||||
:options="areaOptions"></u-dropdown-item>
|
||||
<u-dropdown-item class="u-dropdown" v-model="timeFilter" title="时间筛选"
|
||||
:options="timeOptions"></u-dropdown-item>
|
||||
<u-dropdown-item class="u-dropdown" v-model="typeFilter" title="类型筛选"
|
||||
:options="typeOptions"></u-dropdown-item>
|
||||
</u-dropdown>
|
||||
</u-dropdown> -->
|
||||
</view>
|
||||
|
||||
<view class="program-list" :style="'height:'+scrollHeight+'px'">
|
||||
@@ -37,9 +37,9 @@
|
||||
<view class="program-contact">
|
||||
项目联系人:{{maskPhoneNumber(item.user.username)}}
|
||||
</view>
|
||||
<view class="program-introduction">
|
||||
项目简介:{{item.introduction}}
|
||||
</view>
|
||||
<!-- <view class="program-introduction">
|
||||
项目简介:<span v-html="item.introduction"></span>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<u-loadmore color="#fff" :status="status" />
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
// 列表
|
||||
const programList = ref([])
|
||||
const defaultSize = 5
|
||||
const defaultSize = 10
|
||||
const params = ref({
|
||||
page: 1,
|
||||
size: defaultSize,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<view class="detail-contrainer">
|
||||
<scroll-view class="detail-contrainer" scroll-y="true">
|
||||
<u-navbar :is-fixed="false" title="项目详情" :background="{background: 'transparent' }" :border-bottom="false"
|
||||
back-icon-color="#fff" title-color="#fff">
|
||||
<template v-slot:right>
|
||||
@@ -47,6 +47,18 @@
|
||||
</view>
|
||||
|
||||
<view class="card">
|
||||
<view class="card-title">
|
||||
<view class="icon">
|
||||
<image style="width: 100%;height: 100%;" src="/static/icon/card-title-icon.png" mode=""></image>
|
||||
</view>
|
||||
项目需求<span>(4)</span>
|
||||
</view>
|
||||
<view class="u-m-t-10 editor-content-view">
|
||||
<view v-html="program.introduction"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- <view class="card">
|
||||
<view class="card-title">
|
||||
<view class="icon">
|
||||
<image style="width: 100%;height: 100%;" src="/static/icon/card-title-icon.png" mode=""></image>
|
||||
@@ -76,7 +88,6 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<view class="card">
|
||||
<view class="card-title">
|
||||
<view class="icon">
|
||||
@@ -94,7 +105,7 @@
|
||||
<u-col span="6" class="card-value">5家</u-col>
|
||||
</u-row>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<u-row justify="flex-end" class="u-m-r-40 btn-group">
|
||||
<u-col span="3"><u-button class="btn" type="primary"
|
||||
@@ -102,7 +113,13 @@
|
||||
<u-col span="3"><u-button class="btn" type="success" @click="handleOpen">立刻融</u-button></u-col>
|
||||
</u-row>
|
||||
|
||||
<u-link class="change-next" @click="handleChange">不感兴趣?换一个</u-link>
|
||||
<view class="change-next u-m-t-60">
|
||||
<u-link @click="handleChange">不感兴趣?换一个</u-link>
|
||||
</view>
|
||||
|
||||
<!-- 占位 -->
|
||||
<view style="height: 20rpx;">
|
||||
</view>
|
||||
|
||||
|
||||
<u-modal v-model="showWarning" border-radius="20" ref="warningRef" :mask-close-able="true"
|
||||
@@ -168,15 +185,29 @@
|
||||
</u-modal>
|
||||
|
||||
<u-toast ref="pdMsgRef" />
|
||||
</view>
|
||||
</scroll-view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { getUserInfo } from '../../util/common';
|
||||
import { programAPI } from '../../api/program';
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import { groupAPI } from '../../api/group';
|
||||
<script setup>
|
||||
import {
|
||||
onMounted,
|
||||
ref,
|
||||
} from 'vue';
|
||||
import {
|
||||
getUserInfo
|
||||
} from '../../util/common';
|
||||
import {
|
||||
programAPI
|
||||
} from '../../api/program';
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app';
|
||||
import {
|
||||
groupAPI
|
||||
} from '../../api/group';
|
||||
// #ifdef APP
|
||||
import '@/static/css/wangeditor.css'
|
||||
// #endif
|
||||
|
||||
const pdMsgRef = ref()
|
||||
|
||||
@@ -266,9 +297,19 @@
|
||||
})
|
||||
programAPI.getProgram(programId.value).then(res => {
|
||||
program.value = res.data
|
||||
// 解决上传视频宽度问题
|
||||
program.value.introduction = program.value.introduction.replace(
|
||||
/<video([^>]*)width\s*=\s*["'][^"']*["']([^>]*)>/gi,
|
||||
'<video$1width="100%"$2>'
|
||||
);
|
||||
|
||||
// 同时确保没有width属性的video也设置宽度
|
||||
program.value.introduction = program.value.introduction.replace(
|
||||
/<video((?!(width))[^>]*)>/gi,
|
||||
'<video width="100%" $1>'
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
onLoad((val) => {
|
||||
programId.value = val.programId
|
||||
let user = getUserInfo()
|
||||
@@ -283,7 +324,10 @@
|
||||
const handleChat = () => {
|
||||
if (isChat.value) {
|
||||
// 继续聊
|
||||
groupAPI.getOne({ programId: programId.value, userId: userId.value }).then(res => {
|
||||
groupAPI.getOne({
|
||||
programId: programId.value,
|
||||
userId: userId.value
|
||||
}).then(res => {
|
||||
if (res.code == 200) {
|
||||
// 进入聊天
|
||||
uni.redirectTo({
|
||||
@@ -293,7 +337,10 @@
|
||||
})
|
||||
} else {
|
||||
// 开启群组聊天
|
||||
groupAPI.add({ programId: programId.value, userId: userId.value }).then(res => {
|
||||
groupAPI.add({
|
||||
programId: programId.value,
|
||||
userId: userId.value
|
||||
}).then(res => {
|
||||
if (res.code == 200) {
|
||||
// 创建成功,进入聊天
|
||||
uni.redirectTo({
|
||||
@@ -336,6 +383,10 @@
|
||||
return
|
||||
}
|
||||
// TODO 同意协议
|
||||
pdMsgRef.value.show({
|
||||
title: '立刻融',
|
||||
type: 'success'
|
||||
})
|
||||
showWarning.value = false
|
||||
}
|
||||
|
||||
@@ -383,6 +434,14 @@
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
// @import "../../static/fontsFamily/ht.css";
|
||||
// @import "../../static/fontsFamily/fs.css";
|
||||
// @import "../../static/fontsFamily/kt.css";
|
||||
// @import "../../static/fontsFamily/bkt.css";
|
||||
// @import "../../static/fontsFamily/hwfs.css";
|
||||
// @import "../../static/fontsFamily/hwkt.css";
|
||||
// @import "../../static/fontsFamily/st.css";
|
||||
// @import "../../static/fontsFamily/wryh.css";
|
||||
.detail-contrainer {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
@@ -515,12 +574,7 @@
|
||||
}
|
||||
|
||||
.change-next {
|
||||
position: absolute;
|
||||
bottom: 0%;
|
||||
left: 0%;
|
||||
right: 0%;
|
||||
text-align: center;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
// 按钮设置
|
||||
|
||||
52
static/css/wangeditor.css
Normal file
@@ -0,0 +1,52 @@
|
||||
.editor-content-view {
|
||||
border: 3px solid #ccc;
|
||||
border-radius: 5px;
|
||||
padding: 0 10px;
|
||||
margin-top: 20px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.editor-content-view p,
|
||||
.editor-content-view li {
|
||||
white-space: pre-wrap; /* 保留空格 */
|
||||
}
|
||||
|
||||
.editor-content-view blockquote {
|
||||
border-left: 8px solid #d0e5f2;
|
||||
padding: 10px 10px;
|
||||
margin: 10px 0;
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
.editor-content-view code {
|
||||
font-family: monospace;
|
||||
background-color: #eee;
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.editor-content-view pre>code {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.editor-content-view table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.editor-content-view td,
|
||||
.editor-content-view th {
|
||||
border: 1px solid #ccc;
|
||||
min-width: 50px;
|
||||
height: 20px;
|
||||
}
|
||||
.editor-content-view th {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
.editor-content-view ul,
|
||||
.editor-content-view ol {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.editor-content-view input[type="checkbox"] {
|
||||
margin-right: 5px;
|
||||
}
|
||||
BIN
static/fontsFamily/FangSong_GB2312.woff
Normal file
BIN
static/fontsFamily/FangSong_GB2312.woff2
Normal file
BIN
static/fontsFamily/KaiTi.woff
Normal file
BIN
static/fontsFamily/KaiTi.woff2
Normal file
BIN
static/fontsFamily/STFangsong.woff
Normal file
BIN
static/fontsFamily/STFangsong.woff2
Normal file
BIN
static/fontsFamily/STKaiti.woff
Normal file
BIN
static/fontsFamily/STKaiti.woff2
Normal file
BIN
static/fontsFamily/SimHei.woff
Normal file
BIN
static/fontsFamily/SimHei.woff2
Normal file
BIN
static/fontsFamily/SongTi.woff
Normal file
BIN
static/fontsFamily/SongTi.woff2
Normal file
4
static/fontsFamily/bkt.css
Normal file
8
static/fontsFamily/fs.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: '仿宋';
|
||||
src: url('~@/static/fontsFamily/FangSong_GB2312.woff') format('woff'),
|
||||
url('~@/static/fontsFamily/FangSong_GB2312.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
8
static/fontsFamily/ht.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: '黑体';
|
||||
src: url('~@/static/fontsFamily/SimHei.woff') format('woff'),
|
||||
url('~@/static/fontsFamily/SimHei.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
8
static/fontsFamily/hwfs.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: '华文仿宋';
|
||||
src: url('~@/static/fontsFamily/STFangsong.woff') format('woff'),
|
||||
url('~@/static/fontsFamily/STFangsong.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
8
static/fontsFamily/hwkt.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: '华文楷体';
|
||||
src: url('~@/static/fontsFamily/STKaiti.woff') format('woff'),
|
||||
url('~@/static/fontsFamily/STKaiti.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
8
static/fontsFamily/kt.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: '楷体';
|
||||
src: url('~@/static/fontsFamily/KaiTi.woff') format('woff'),
|
||||
url('~@/static/fontsFamily/KaiTi.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
8
static/fontsFamily/st.css
Normal file
@@ -0,0 +1,8 @@
|
||||
@font-face {
|
||||
font-family: '宋体';
|
||||
src: url('~@/static/fontsFamily/SongTi.woff') format('woff'),
|
||||
url('~@/static/fontsFamily/SongTi.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
4
static/fontsFamily/wryh.css
Normal file
BIN
static/icon/Edit.png
Normal file
|
After Width: | Height: | Size: 732 B |
BIN
static/icon/Settings.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
static/icon/chose-active.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
static/icon/chose.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
static/mall/Home.png
Normal file
|
After Width: | Height: | Size: 834 B |
BIN
static/mall/Star.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
static/mall/Twitch.png
Normal file
|
After Width: | Height: | Size: 654 B |
BIN
static/my/01.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
static/my/02.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
static/my/03.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
static/my/04.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
static/my/05.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
static/my/06.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
static/my/07.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
static/my/08.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
static/shop/01.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
static/shop/02.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
static/shop/03.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
static/shop/04.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
static/shop/05.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
static/shop/06.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
static/shop/07.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
static/shop/08.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
static/shop/09.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
static/shop/10.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
@@ -7,18 +7,18 @@ export const validatePhone = (phone) => {
|
||||
|
||||
export const getImageUrl = (imagePath) => {
|
||||
if (!imagePath) return ''
|
||||
// 如果图片路径以/uploads开头,直接返回原路径
|
||||
const baseURL = "https://minio.zrbjr.com"
|
||||
if (imagePath.startsWith('/uploads')) {
|
||||
return `${baseURL}/jurongquan${imagePath}`
|
||||
}
|
||||
|
||||
if (imagePath.startsWith('http')) return imagePath
|
||||
|
||||
// const baseURL = "http://192.168.1.43:3000"
|
||||
// const baseURL = "https://www.zrbjr.com"
|
||||
const baseURL = "https://minio.zrbjr.com"
|
||||
|
||||
// 如果图片路径以/uploads开头,直接返回原路径
|
||||
if (imagePath.startsWith('/uploads')) {
|
||||
return `${baseURL}/jurongquan${imagePath}`
|
||||
}
|
||||
|
||||
return fullUrl
|
||||
return baseURL + imagePath
|
||||
}
|
||||
|
||||
export const getUserInfo = () => {
|
||||
|
||||