Merge remote-tracking branch 'origin/master'

# Conflicts:
#	pages.json
This commit is contained in:
2025-10-17 14:17:25 +08:00
60 changed files with 1574 additions and 187 deletions

View File

@@ -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>

View File

@@ -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 {

View File

@@ -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 = {

View File

@@ -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 = {

View File

@@ -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",

View File

@@ -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
View 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
View 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>

View File

@@ -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;
}
}

View File

@@ -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>

View 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>

View File

@@ -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,

View File

@@ -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
View 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;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

File diff suppressed because one or more lines are too long

BIN
static/icon/Edit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

BIN
static/icon/Settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
static/icon/chose.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
static/mall/Home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

BIN
static/mall/Star.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/mall/Twitch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

BIN
static/my/01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/my/02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
static/my/03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
static/my/04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/my/05.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/my/06.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
static/my/07.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
static/my/08.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/shop/01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
static/shop/02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
static/shop/03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
static/shop/04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
static/shop/05.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
static/shop/06.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
static/shop/07.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
static/shop/08.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
static/shop/09.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
static/shop/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -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 = () => {