#3 feat: 样式优化;

Merged
Fox merged 1 commits from fox into master 1 month ago
  1. +1
    -1
      api/api.js
  2. +26
    -0
      api/model/activity.js
  3. +19
    -0
      api/model/comment.js
  4. +16
    -0
      api/model/experience.js
  5. +31
    -0
      api/model/image.js
  6. +20
    -0
      api/model/index.js
  7. +0
    -109
      api/model/info.js
  8. +32
    -0
      api/model/order.js
  9. +40
    -0
      api/model/partner.js
  10. +0
    -20
      api/model/vip.js
  11. +8
    -0
      common.scss
  12. +9
    -9
      components/growing/userCard.vue
  13. +19
    -1
      components/home/categoryView.vue
  14. +25
    -18
      components/home/pictureLiveView.vue
  15. +23
    -10
      components/home/productView.vue
  16. +3
    -29
      components/partner/posterPopup.vue
  17. +54
    -29
      components/product/productCard.vue
  18. +12
    -0
      pages.json
  19. +68
    -54
      pages/index/category.vue
  20. +4
    -5
      pages/index/center.vue
  21. +9
    -17
      pages/index/growing.vue
  22. +57
    -46
      pages/index/index.vue
  23. +18
    -18
      pages/index/partner.vue
  24. +42
    -0
      pages_order/article/index.vue
  25. +45
    -16
      pages_order/article/search.vue
  26. +1
    -1
      pages_order/auth/wxLogin.vue
  27. +3
    -3
      pages_order/auth/wxUserInfo.vue
  28. +14
    -9
      pages_order/comment/commentCard.vue
  29. +6
    -2
      pages_order/comment/commentPopup.vue
  30. +3
    -3
      pages_order/comment/commentRecords.vue
  31. +2
    -2
      pages_order/comment/commentRecordsOfProduct.vue
  32. +8
    -4
      pages_order/comment/recordFormPopup.vue
  33. +19
    -5
      pages_order/components/formRate.vue
  34. +3
    -0
      pages_order/components/reloateProjectPopup.vue
  35. +2
    -2
      pages_order/coupon/couponList/index.vue
  36. +1
    -10
      pages_order/coupon/couponSelect/index.vue
  37. +9
    -9
      pages_order/growing/achievement/index.vue
  38. +4
    -4
      pages_order/growing/activity/applyEmail.vue
  39. +9
    -9
      pages_order/growing/activity/index.vue
  40. +12
    -10
      pages_order/growing/activity/markPopup.vue
  41. +2
    -2
      pages_order/growing/activity/reviewPopup.vue
  42. +9
    -9
      pages_order/growing/activity/search.vue
  43. +1
    -3
      pages_order/live/formPopup.vue
  44. +6
    -6
      pages_order/live/index.vue
  45. +3
    -3
      pages_order/live/list.vue
  46. +20
    -19
      pages_order/member/memberApplyCard.vue
  47. +21
    -0
      pages_order/member/memberBind.vue
  48. +12
    -37
      pages_order/member/memberList.vue
  49. +2
    -2
      pages_order/member/switch.vue
  50. +1
    -1
      pages_order/message/index.vue
  51. +2
    -2
      pages_order/message/list.vue
  52. +1
    -1
      pages_order/order/components/contactMentorPopup.vue
  53. +30
    -17
      pages_order/order/orderConfirm/index.vue
  54. +2
    -2
      pages_order/order/orderConfirm/timeCalendarSelect.vue
  55. +7
    -7
      pages_order/order/orderConfirm/timeOptionsSelect.vue
  56. +8
    -27
      pages_order/order/orderDetail/index.vue
  57. +1
    -1
      pages_order/order/orderList/index.vue
  58. +8
    -27
      pages_order/order/orderPay/index.vue
  59. +1
    -1
      pages_order/order/styles/style.scss
  60. +3
    -3
      pages_order/partner/apply.vue
  61. +14
    -14
      pages_order/partner/team.vue
  62. +1
    -1
      pages_order/partner/withdraw.vue
  63. +3
    -3
      pages_order/product/collectList.vue
  64. +51
    -56
      pages_order/product/productDetail.vue
  65. +41
    -38
      pages_order/product/search.vue
  66. BIN
      pages_order/static/auth/avatar.png
  67. BIN
      pages_order/static/auth/headImage.png
  68. BIN
      pages_order/static/auth/wx.png
  69. +0
    -0
      pages_order/static/comment/icon-comment.png
  70. +0
    -0
      pages_order/static/comment/icon-like-active.png
  71. +0
    -0
      pages_order/static/comment/icon-like.png
  72. BIN
      pages_order/static/help/uploading.png
  73. +0
    -0
      pages_order/static/icon-change.png
  74. +0
    -0
      pages_order/static/icon-require.png
  75. +0
    -0
      pages_order/static/order/icon-phone.png
  76. BIN
      pages_order/static/order/icon.png
  77. +0
    -0
      pages_order/static/partner/apply.png
  78. +0
    -0
      pages_order/static/partner/icon-cash.png
  79. +0
    -0
      pages_order/static/partner/icon-nav.png
  80. +0
    -0
      pages_order/static/partner/icon-qrcode.png
  81. +0
    -0
      pages_order/static/partner/icon-team.png
  82. +0
    -0
      pages_order/static/temp-29.png
  83. +0
    -0
      pages_order/static/temp-30.png
  84. +0
    -0
      pages_order/static/temp-38.png
  85. BIN
      pages_order/static/temp-47.png
  86. BIN
      pages_order/static/temp-49.png
  87. +1
    -1
      pages_order/traveler/travelerList.vue
  88. +7
    -7
      pages_order/traveler/travelerPopup.vue
  89. BIN
      static/image/bg.png
  90. BIN
      static/image/center-bg.png
  91. BIN
      static/image/temp-1.png
  92. BIN
      static/image/temp-10.png
  93. BIN
      static/image/temp-11.png
  94. BIN
      static/image/temp-12.png
  95. BIN
      static/image/temp-13.png
  96. BIN
      static/image/temp-14.png
  97. BIN
      static/image/temp-16.png
  98. BIN
      static/image/temp-17.png
  99. BIN
      static/image/temp-18.png
  100. BIN
      static/image/temp-19.png

+ 1
- 1
api/api.js View File

@ -5,7 +5,7 @@ import utils from '../utils/utils.js'
let limit = {}
let debounce = {}
const models = ['login', 'index', 'vip', 'info']
const models = ['login', 'index', 'image', 'activity', 'order', 'comment', 'experience', 'partner', 'info']
const config = {
// 示例


+ 26
- 0
api/model/activity.js View File

@ -0,0 +1,26 @@
// 研学活动相关接口
const api = {
// 首页&分类-查询研学活动列表
queryActivityList: {
url: '/activity/queryActivityList',
method: 'GET',
},
// 首页&分类-查询研学活动详情
queryActivityById: {
url: '/activity/queryActivityById',
method: 'GET',
},
// 首页&分类-查询我收藏的研学活动列表
queryCollectionActivityList: {
url: '/activity/queryCollectionActivityList',
method: 'GET',
},
// 首页&分类-收藏研学活动
collectionActivity: {
url: '/activity/collectionActivity',
method: 'GET',
},
}
export default api

+ 19
- 0
api/model/comment.js View File

@ -0,0 +1,19 @@
// 评论相关接口
const api = {
// 我的评论-查询我的评价列表
queryMyCommentList: {
url: '/comment/queryMyCommentList',
method: 'GET',
},
// 我的订单&&成长档案-添加订单评价&&添加心得
addComment: {
url: '/comment/addComment',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
}
export default api

+ 16
- 0
api/model/experience.js View File

@ -0,0 +1,16 @@
// 成长档案相关接口
const api = {
// 成长档案-查询成长档案列表
queryExperienceList: {
url: '/experience/queryExperienceList',
method: 'GET',
},
// 成长档案-查询成长档案详情
queryExperienceById: {
url: '/experience/queryExperienceById',
method: 'GET',
},
}
export default api

+ 31
- 0
api/model/image.js View File

@ -0,0 +1,31 @@
// 图片直播相关接口
const api = {
// 图片直播-查询图片直播列表
queryImageList: {
url: '/image/queryImageList',
method: 'GET',
},
// 图片直播-新增图片直播信息
addImage: {
url: '/image/addImage',
method: 'GET',
},
// 图片直播-查询图片直播内容列表
queryImageContentList: {
url: '/image/queryImageContentList',
method: 'GET',
},
// 图片直播-新增图片直播内容信息
addImageContent: {
url: '/image/addImageContent',
method: 'GET',
},
// 图片直播-标记有我
queryMarkmeList: {
url: '/image/queryMarkmeList',
method: 'GET',
},
}
export default api

+ 20
- 0
api/model/index.js View File

@ -6,6 +6,26 @@ const api = {
url: '/index/queryBannerList',
method: 'GET',
},
// 首页-查询公司动态列表
queryNewsList: {
url: '/index/queryNewsList',
method: 'GET',
},
// 首页-查询公司动态详情
queryNewsById: {
url: '/index/queryNewsById',
method: 'GET',
},
// 首页-查询研学政策列表
queryPolicyList: {
url: '/index/queryPolicyList',
method: 'GET',
},
// 首页-查询研学政策详情
queryPolicyById: {
url: '/index/queryPolicyById',
method: 'GET',
},
}
export default api

+ 0
- 109
api/model/info.js View File

@ -1,115 +1,6 @@
// 个人相关接口
const api = {
// 充值
recharge: {
url: '/info_common/withdraw',
method: 'GET',
auth: true,
limit: 1000,
showLoading: true,
},
// 提现
withdraw: {
url: '/info_common/withdraw',
method: 'GET',
auth: true,
limit: 1000,
showLoading: true,
},
// 获取地址列表带分页
getAddressPageList: {
url: '/info_common/getAddressPageList',
method: 'GET',
auth: true,
},
// 增加或修改地址信息
addOrUpdateAddress: {
url: '/info_common/addOrUpdateAddress',
method: 'POST',
limit: 500,
auth: true,
showLoading: true,
},
// 删除地址
deleteAddress: {
url: '/info_common/deleteAddress',
method: 'GET',
limit: 500,
auth: true,
showLoading: true,
},
// 修改默认地址
updateDefaultAddress: {
url: '/info_common/updateDefaultAddress',
method: 'GET',
auth: true,
limit: 1000,
},
// 获取粉丝列表带分页
getFansPageList: {
url: '/info_common/getFansPageList',
method: 'GET',
auth: true,
},
// 获取相关介绍
getInfoIntroduce: {
url: '/info_common/getInfoIntroduce',
method: 'GET',
auth: true,
},
// 获取个人邀请码
getInviteCode: {
url: '/info_common/getInviteCode',
method: 'GET',
auth: true,
},
// 获取订单列表带分页
getOrderPageList: {
url: '/info_common/getOrderPageList',
method: 'GET',
auth: true,
},
// 获取订单详情
getOrderDetail: {
url: '/info_common/getOrderDetail',
method: 'GET',
auth: true,
},
// 获取流水记录带分页
getWaterPageList: {
url: '/info_common/getWaterPageList',
method: 'GET',
auth: true,
},
// 获取相关介绍
getInfoIntroduce: {
url: '/info_common/getInfoIntroduce',
method: 'GET',
},
// 获取相关介绍详情
getInfoIntroduceDetail: {
url: '/info_common/getRiceNewsDetail',
method: 'GET',
},
// 查询个人信息相关
getRiceInfo: {
url: '/info_common/getRiceInfo',
method: 'GET',
limit: 500,
},
// 获取购物车信息列表带分页
getCartPageList: {
url: '/info_common/getCartPageList',
method: 'GET',
},
// 领取新人优惠券
getRiceCoupon: {
url: '/info_common/getRiceCoupon',
method: 'GET',
limit: 500,
auth: true,
},
}
export default api

+ 32
- 0
api/model/order.js View File

@ -0,0 +1,32 @@
// 订单相关接口
const api = {
// 我的订单-查询订单列表
queryOrderList: {
url: '/order/queryOrderList',
method: 'GET',
},
// 我的订单-查询订单详情
queryOrderById: {
url: '/order/queryOrderById',
method: 'GET',
},
// 我的订单-创建订单
createOrder: {
url: '/order/createOrder',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
// 我的订单-支付订单
createOrder: {
url: '/order/payOrder',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
}
export default api

+ 40
- 0
api/model/partner.js View File

@ -0,0 +1,40 @@
// 合伙人相关接口
const api = {
// 合伙人-申请成为合伙人
applyPartner: {
url: '/partner/applyPartner',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
// 合伙人-邀请二维码
getInviteCode: {
url: '/partner/getInviteCode',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
// 合伙人-提现
cashout: {
url: '/partner/cashout',
method: 'POST',
auth: true,
limit : 500,
showLoading : true,
},
// 我的团队-获取直推用户列表
queryDirectList: {
url: '/partner/queryDirectList',
method: 'GET',
},
// 我的团队-获取间推用户列表
queryDirectList: {
url: '/partner/queryIndirectList',
method: 'GET',
},
}
export default api

+ 0
- 20
api/model/vip.js View File

@ -1,20 +0,0 @@
// vip相关接口
const api = {
// 获取会员权益列表
getRiceVipList: {
url: '/index_common/getVipInfoList',
method: 'GET',
},
// 申请成为会员
applyRiceVip: {
url: '/rice_vip/applyRiceVip',
method: 'POST',
limit : 500,
auth : true,
showLoading : true,
},
}
export default api

+ 8
- 0
common.scss View File

@ -101,4 +101,12 @@
/deep/ .uv-steps-item__line {
background: #F3F3F3 !important;
transform: translateY(9px) !important;
}
/deep/ .tabs .uv-tabs__wrapper__nav__item__text.uv-tabs__wrapper__nav__item__text--disabled {
color: #191919 !important;
}
/deep/ .uv-rate__content__item__icon-wrap--half {
width: 50% !important;
}

+ 9
- 9
components/growing/userCard.vue View File

@ -16,7 +16,7 @@
<view class="card-content">
<view class="flex info">
<view class="avatar">
<image class="img" src="@/static/image/temp-30.png" mode="scaleToFill"></image>
<image class="img" src="@/pages_order/static/temp-30.png" mode="scaleToFill"></image>
<view :class="['tag', `tag-0`]">学生</view>
</view>
<view class="flex summary">
@ -35,14 +35,14 @@
</view>
</view>
<view class="flex medal">
<image class="medal-item" src="@/static/image/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-48.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-49.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-48.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-49.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/static/image/temp-48.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-49.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-49.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-47.png" mode="widthFix"></image>
<image class="medal-item" src="@/pages_order/static/temp-47.png" mode="widthFix"></image>
</view>
</view>
</view>


+ 19
- 1
components/home/categoryView.vue View File

@ -1,6 +1,6 @@
<template>
<view class="category">
<view class="flex flex-column category-item" v-for="item in categoryOptions" :key="item.id">
<view class="flex flex-column category-item" v-for="item in categoryOptions" :key="item.id" @click="onClick(item)">
<image class="img" :src="item.icon" mode="widthFix"></image>
<view>{{ item.label }}</view>
</view>
@ -27,26 +27,31 @@
id: '001',
icon: '/static/image/temp-1.png',
label: '主题研学',
path: `/pages/index/category?categoryId=009`,
},
{
id: '002',
icon: '/static/image/temp-2.png',
label: '社会实践',
path: `/pages/index/category?categoryId=008`,
},
{
id: '003',
icon: '/static/image/temp-3.png',
label: '研学交流',
path: `/pages/index/category?categoryId=010`,
},
{
id: '004',
icon: '/static/image/temp-4.png',
label: '周末研学',
path: `/pages/index/category?categoryId=006`,
},
{
id: '005',
icon: '/static/image/temp-5.png',
label: '假期专项',
path: `/pages/index/category?categoryId=011`,
},
{
id: '006',
@ -57,25 +62,38 @@
id: '007',
icon: '/static/image/temp-7.png',
label: '研学政策',
path: `/pages_order/article/search?api=queryPolicyList&title=研学政策`,
},
{
id: '008',
icon: '/static/image/temp-8.png',
label: '本地研学',
path: `/pages/index/category?categoryId=012`,
},
{
id: '009',
icon: '/static/image/temp-9.png',
label: '公司动态',
path: `/pages_order/article/search?api=queryNewsList&title=公司动态`,
},
{
id: '010',
icon: '/static/image/temp-10.png',
label: '全部',
path: `/pages/index/category`,
},
]
},
onClick(target) {
const { path } = target
if (path) {
uni.navigateTo({
url: path
})
}
},
},
}
</script>


+ 25
- 18
components/home/pictureLiveView.vue View File

@ -9,7 +9,7 @@
</view>
<!-- todo: auto scroll -->
<!-- <view class="live-content">
<view class="live-item" v-for="item in liveList" :key="item.id">
<view class="live-item" v-for="item in list" :key="item.id">
<image class="live-item-bg" :src="item.image" mode="aspectFill"></image>
<view class="live-item-info">
<view class="text-ellipsis live-item-info-title">{{ item.title }}</view>
@ -24,13 +24,13 @@
:autoplay="true"
:display-multiple-items="3.2"
>
<swiper-item v-for="item in liveList" :key="item.id" style="display: inline-block;">
<swiper-item v-for="item in list" :key="item.id" style="display: inline-block;">
<view class="swiper-item">
<view class="swiper-item-content" @click="jumpToLive(item.id)">
<image class="live-item-bg" :src="item.image" mode="aspectFill"></image>
<view class="live-item-info">
<view class="text-ellipsis live-item-info-title">{{ item.title }}</view>
<view class="live-item-info-time">{{ item.time }}</view>
<view class="live-item-info-time">{{ item.createTime }}</view>
</view>
</view>
</view>
@ -44,56 +44,63 @@
export default {
data() {
return {
liveList: [],
list: [],
}
},
created() {
this.getData()
},
methods: {
getData() {
// todo: fetch
async getData() {
this.liveList = [
this.list = [
{
id: '001',
image: '/static/image/temp-15.png',
title: '苕溪露营漂流',
time: '2025-04-18',
createTime: '2025-04-18',
},
{
id: '002',
image: '/static/image/temp-16.png',
image: '/static/image/temp-15.png',
title: '科技奇遇记',
time: '2025-04-18',
createTime: '2025-04-18',
},
{
id: '003',
image: '/static/image/temp-17.png',
image: '/static/image/temp-15.png',
title: '满陇桂雨',
time: '2025-04-18',
createTime: '2025-04-18',
},
{
id: '004',
image: '/static/image/temp-18.png',
image: '/static/image/temp-15.png',
title: '跟着皇帝游江南',
time: '2025-04-18',
createTime: '2025-04-18',
},
{
id: '005',
image: '/static/image/temp-15.png',
title: '苕溪露营漂流',
time: '2025-04-18',
createTime: '2025-04-18',
},
{
id: '006',
image: '/static/image/temp-16.png',
image: '/static/image/temp-15.png',
title: '科技奇遇记',
time: '2025-04-18',
createTime: '2025-04-18',
},
]
return
// todo: check
try {
this.list = await this.$fetch('queryImageList', { pageNo: 1, pageSize: 8 })
} catch (err) {
}
},
jumpToLive(id) {
this.$utils.navigateTo(`/pages_order/live/index?id=${id}`)


+ 23
- 10
components/home/productView.vue View File

@ -26,13 +26,15 @@
}"
lineWidth="0"
lineHeight="0"
@change="onTabChange"
:current="current"
@click="onClickTab"
></uv-tabs>
</view>
<view v-if="list.length" class="content">
<view v-for="item in list" :key="item.id">
<productCard
:data="item"
size="small"
></productCard>
</view>
</view>
@ -60,7 +62,7 @@
data() {
return {
tabs: [],
current: null,
current: 0,
}
},
created() {
@ -73,16 +75,27 @@
this.tabs = [
{ name: '全部' },
// todo: jump to detail
{ id: '001', name: '草原运动会' },
{ id: '002', name: '我的韶山行' },
{ id: '003', name: '出境游' },
{ id: '001', name: '草原运动会', disabled: true, },
{ id: '002', name: '我的韶山行', disabled: true, },
{ id: '003', name: '出境游', disabled: true, },
]
},
onTabChange(e) {
console.log('onTabChange', e.index)
this.current = e.index
// todo: jump to detail
// this.$emit('categoryChange', { classId: this.tabs[this.current].id })
onClickTab(e) {
console.log('onClickTab', e.index)
this.current = 0
const index = e.index
if (index > 0) {
this.$utils.navigateTo(`/pages_order/product/productDetail?id=${this.tabs[e.index].id}`)
}
this.$nextTick(() => {
this.current = 0
})
setTimeout(() => {
this.current = 0
}, 800)
},
},
}


+ 3
- 29
components/partner/posterPopup.vue View File

@ -265,9 +265,9 @@
ctx.restore();
ctx.save()
maxWidth = 540 * Ratio / dpr
maxWidth = 520 * Ratio / dpr
lineHeight = 60 * Ratio / dpr
ctx.font = "normal normal 600 17px normal";
ctx.font = "normal normal 600 16px normal";
ctx.fillStyle = "#181818";
text = '邀请您'
x = 40 * Ratio / dpr
@ -330,32 +330,6 @@
await this.drawQrCodeImg(canvas, ctx, x, y, size)
uni.hideLoading()
return
//
const paperImage = canvas.createImage()
console.log('paperImage', paperImage)
// todo: fetch
paperImage.src = 'https://i1.hdslb.com/bfs/archive/c0101b4ce06e6bdda803728408e79c8f8b8d0725.jpg'
paperImage.onload = () => {
console.log('paperImage onload')
const w = 566 * Ratio / dpr
const h = 400 * Ratio / dpr
ctx.drawImage(paperImage, 0, 0, w, h)
//
const coderImage = canvas.createImage()
coderImage.src = this.wxCodeImage
coderImage.onload = () => {
console.log('coderImage onload')
const x = 316 * Ratio / dpr
const y = 910 * Ratio / dpr
const size = 210 * Ratio / dpr
ctx.drawImage(coderImage, x, y, size, size)
uni.hideLoading()
}
}
})
@ -446,7 +420,7 @@
font-family: PingFang SC;
font-weight: 500;
font-size: 36rpx;
line-height: 1;
line-height: 1.4;
color: #FFFFFF;
background: linear-gradient(to right, #21FEEC, #019AF9);
border: 2rpx solid #00A9FF;


+ 54
- 29
components/product/productCard.vue View File

@ -1,5 +1,5 @@
<template>
<view class="product"
<view :class="['product', size]"
@touchstart="onTouchstart"
@touchmove="onTouchmove"
@touchend="onTouchend"
@ -7,8 +7,9 @@
<image class="product-img" :src="data.image" mode="aspectFill"></image>
<view class="flex flex-column product-info">
<view class="product-info-top">
<view class="product-name text-ellipsis-2">{{ data.name }}</view>
<view class="product-desc text-ellipsis">{{ data.desc }}</view>
<view class="product-name text-ellipsis-2">{{ data.title }}</view>
<!-- todo: check key -->
<view class="product-desc text-ellipsis">{{ data.tagList.join('·') }}</view>
</view>
<view class="flex product-info-bottom">
<view class="product-detail">
@ -18,22 +19,22 @@
<text class="highlight">{{ priceInt }}</text>
<text>{{ `${priceFrac}` }}</text>
</view>
<view class="product-price-bef" v-if="data.originalPrice">
{{ `¥${data.originalPrice}` }}
<view class="product-price-bef" v-if="data.priceOrigin">
{{ `¥${data.priceOrigin}` }}
</view>
</view>
<view class="product-registered">
{{ `${data.registered}人已报名` }}
{{ `${data.applyNum}人已报名` }}
</view>
</view>
<button class="btn" @click="onRegistrate">报名</button>
</view>
</view>
<button class="flex btn-collect"
<button class="flex btn btn-collect"
:style="collectBtnStyle"
@click.stop="onCollect"
@touchstart.stop="() => {}"
@touchstart.stop="onCollect"
>
<view>{{ isCollected ? '移除收藏' : '收藏' }}</view>
</button>
@ -49,9 +50,14 @@
return {}
}
},
// todo: fetch
isCollected: {
type: Boolean,
default: false,
},
size: {
type: String,
default: 'normal' // normal | small
}
},
data() {
@ -63,13 +69,16 @@
},
computed: {
priceInt() {
return parseInt(this.data.currentPrice)
return parseInt(this.data.priceDiscount)
},
priceFrac() {
return (this.data.currentPrice % this.priceInt).toFixed(2).slice(1)
return (this.data.priceDiscount % this.priceInt).toFixed(2).slice(1)
},
collectBtnWidth() {
return this.isCollected ? 80 : 56
},
collectBtnStyle() {
const width = this.isCollected ? 80 : 56
const width = this.collectBtnWidth
const background = this.isCollected ? '#26334E' : '#FF9035'
let display = Math.ceil(this.displayX / width * 100)
@ -101,7 +110,8 @@
this.isMove = true
},
onTouchend() {
if (this.displayX < 100) {
console.log('displayX', this.displayX, this.collectBtnWidth, this.displayX < this.collectBtnWidth)
if (this.displayX < this.collectBtnWidth) {
this.displayX = 0
}
@ -113,23 +123,31 @@
hiddenCollectBtn() {
this.displayX = 0
},
onCollect() {
async onCollect() {
console.log('onCollect')
if (this.isCollected) {
// todo: fetch cancel collect
uni.showToast({
icon: 'success',
title: '已移除收藏',
});
} else {
// todo: fetch collect
uni.showToast({
icon: 'success',
title: '已收藏',
});
try {
let succ
if (this.isCollected) {
// todo: fetch cancel collect
succ = true
uni.showToast({
icon: 'success',
title: '已移除收藏',
});
} else {
succ = await this.$store.dispatch('collect', this.data.id)
}
succ && this.hiddenCollectBtn()
this.$emit('collect', !this.isCollected)
} catch (err) {
console.log('collect err', err)
}
this.hiddenCollectBtn()
},
onRegistrate() {
this.$utils.navigateTo(`/pages_order/product/productDetail?id=${this.data.id}`)
@ -160,7 +178,7 @@
justify-content: space-between;
&-top {
width: 100%;
}
&-bottom {
@ -215,7 +233,7 @@
}
.btn {
padding: 11rpx 16rpx;
padding: 11rpx 32rpx;
font-size: 26rpx;
font-weight: 500;
color: #FFFFFF;
@ -223,9 +241,15 @@
border-radius: 24rpx;
}
&.small {
.btn {
padding: 11rpx 16rpx;
}
}
}
.btn-collect {
.btn.btn-collect {
position: absolute;
top: 0;
right: 0;
@ -236,6 +260,7 @@
line-height: 1;
color: #FFFFFF;
// background: #FF9035;
border-radius: 0;
}
</style>

+ 12
- 0
pages.json View File

@ -135,6 +135,18 @@
},
{
"path": "partner/withdraw"
},
{
"path": "article/search"
},
{
"path": "article/index"
},
{
"path": "message/list"
},
{
"path": "message/index"
}
]
}],


+ 68
- 54
pages/index/category.vue View File

@ -6,13 +6,9 @@
<view class="filter-header">
<view class="bar">
<view>
<button v-if="isFold" class="btn is-fold" @click="isFold = false">
<button :class="['btn', isFold ? 'is-fold' : '']" @click="isFold = !isFold">
<text>筛选</text>
<image class="btn-icon" src="@/static/image/icon-arrow-down.png" mode="widthFix"></image>
</button>
<button v-else class="btn" @click="isFold = true">
<text>筛选</text>
<image class="btn-icon" src="@/static/image/icon-arrow-up-light.png" mode="widthFix"></image>
<image class="btn-icon" :src="isFold ? '/static/image/icon-arrow-down.png' : '/static/image/icon-arrow-up-light.png'" mode="widthFix"></image>
</button>
</view>
<view class="title">分类</view>
@ -122,7 +118,7 @@
</view>
<view class="sort">
<sortBar></sortBar>
<sortBar v-model="queryParams.sort" @change="onSortChange"></sortBar>
</view>
</view>
@ -190,7 +186,7 @@
},
data() {
return {
current : 0,
current: 0,
startPrice: null,
endPrice: null,
startDate: null,
@ -199,14 +195,13 @@
queryParams: {
pageNo: 1,
pageSize: 1000,
// todo
sort: 'comprehensive',
},
categoryList: [],
filters: [],
isFold: true,
}
},
onShow() {
},
async onLoad({ categoryId }) {
@ -217,7 +212,12 @@
await this.initList()
if(this.categoryList.length > 0 && categoryId){
this.current = this.categoryList.findIndex(item => item.id === categoryId)
setTimeout(() => {
this.current = this.categoryList.findIndex(item => item.id === categoryId)
}, 800)
// this.$nextTick(() => {
// this.current = this.categoryList.findIndex(item => item.id === categoryId)
// })
}
},
methods: {
@ -265,12 +265,22 @@
},
{
id: '009',
name: '夏令营',
name: '主题研学',
children: [],
},
{
id: '010',
name: '周末活动',
name: '研学交流',
children: [],
},
{
id: '011',
name: '假期专项',
children: [],
},
{
id: '012',
name: '本地研学',
children: [],
},
]
@ -301,7 +311,7 @@
},
{
id: '002',
key: 'target',
key: 'addressId',
label: '目的地',
options: [
{
@ -335,7 +345,7 @@
},
{
id: '003',
key: 'age',
key: 'ageId',
label: '适合年龄',
options: [
{
@ -361,7 +371,7 @@
},
{
id: '004',
key: 'long',
key: 'timeId',
label: '活动时长',
options: [
{
@ -415,62 +425,61 @@
{
id: '001',
image: '/static/image/temp-20.png',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
title: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '002',
image: '/static/image/temp-24.png',
name: '坝上双草原6日|乌兰布统+锡林郭勒+长城',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '坝上双草原6日|乌兰布统+锡林郭勒+长城',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '003',
image: '/static/image/temp-25.png',
name: '牛湖线探秘 | 清远牛湖线徒步,探秘天坑与大草原',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '牛湖线探秘 | 清远牛湖线徒步,探秘天坑与大草原',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '004',
image: '/static/image/temp-26.png',
name: '低海拔藏区草原,汉藏文化大穿越',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '低海拔藏区草原,汉藏文化大穿越',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '005',
image: '/static/image/temp-27.png',
name: '新丝路到敦煌7日 | 甘青轻松穿越,沙漠+草原',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '新丝路到敦煌7日 | 甘青轻松穿越,沙漠+草原',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '006',
image: '/static/image/temp-28.png',
name: '呼伦贝尔6/8日|经典or环线双套餐可选',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '呼伦贝尔6/8日|经典or环线双套餐可选',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
]
return
try {
return (await this.$fetch('queryProductList', { ...this.queryParams, categoryId }))?.records || []
return (await this.$fetch('queryActivityList', { ...this.queryParams, categoryId }))?.records || []
} catch (err) {
return []
}
@ -547,6 +556,11 @@
delete this.queryParams.endDate
this.initList()
},
onSortChange(sort) {
console.log('onSortChange', sort)
// todo set sort
this.getData()
},
}
}


+ 4
- 5
pages/index/center.vue View File

@ -11,7 +11,7 @@
<template v-if="isLogin">
<view class="user-avatar">
<!-- todo: check key -->
<image class="user-avatar-img" src="@/static/image/temp-30.png" mode="scaleToFill"></image>
<image class="user-avatar-img" src="@/pages_order/static/temp-30.png" mode="scaleToFill"></image>
</view>
<view class="user-info">
<!-- todo: check key -->
@ -116,12 +116,11 @@
list1: [
{ id: '001', label: '我的收藏', icon: '/pages_order/static/center/icon-collect.png', path: '/pages_order/product/collectList' },
{ id: '004', label: '学员管理', icon: '/pages_order/static/center/icon-student.png', path: `/pages_order/member/memberList` },
{ id: '003', label: '我的优惠券', icon: '/pages_order/static/center/icon-coupon.png', path: `/pages_order/common?key=instruc&title=服用说明` },
{ id: '003', label: '我的优惠券', icon: '/pages_order/static/center/icon-coupon.png', path: `/pages_order/coupon/couponList/index` },
],
list2: [
{ id: '005', label: '我的评价', icon: '/pages_order/static/center/icon-comment.png', path: `/pages_order/comment/commentRecords` },
// todo: check key
{ id: '006', label: '开营通知', icon: '/pages_order/static/center/icon-msg.png', path: `/pages_order/common?key=aboutUs&title=关于我们` },
{ id: '006', label: '开营通知', icon: '/pages_order/static/center/icon-msg.png', path: `/pages_order/message/list` },
{ id: '007', label: '修改信息', icon: '/pages_order/static/center/icon-modifyInfo.png', path: `/pages_order/auth/wxUserInfo?mode=edit` },
{ id: '008', label: '退出登录', icon: '/pages_order/static/center/icon-logout.png', key: 'logout' },
],
@ -177,7 +176,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
/deep/ .nav-bar__view {


+ 9
- 17
pages/index/growing.vue View File

@ -75,9 +75,9 @@
id: '001',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
image: [
'/static/image/temp-38.png',
'/static/image/temp-39.png',
'/static/image/temp-40.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
createTime: '2025-07-12',
},
@ -85,9 +85,9 @@
id: '002',
name: '仙踪新昌·韩妃江古道|邂逅“江南小桂林”',
image: [
'/static/image/temp-41.png',
'/static/image/temp-42.png',
'/static/image/temp-43.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
createTime: '2025-06-18',
},
@ -95,9 +95,9 @@
id: '003',
name: '山水石窟·大佛寺|江南佛窟造像,新昌山水轻徒',
image: [
'/static/image/temp-44.png',
'/static/image/temp-45.png',
'/static/image/temp-46.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
createTime: '2025-06-15',
},
@ -123,14 +123,6 @@
</script>
<style scoped lang="scss">
.page__view {
/deep/ .tabbar-box {
.tabbar {
z-index: 10000;
}
}
}
.search {
$w: 474rpx;


+ 57
- 46
pages/index/index.vue View File

@ -93,21 +93,7 @@
}
},
onLoad() {
// this.$utils.navigateTo(`/pages_order/live/index`)
// uni.navigateTo({
// url: `/pages_order/order/orderConfirm/index`
// })
// return
// uni.navigateTo({
// url: `/pages_order/order/orderDetail/index`
// })
// let id = '1948353988875821058'
// uni.navigateTo({
// url: `/pages_order/thesis/createPdf?id=${id}`
// })
// return
this.fetchBanner()
},
computed: {
searchStyle() {
@ -127,56 +113,81 @@
return this.isFocusSearch ? focusStyle : blurStyle
},
},
methods: {
search() {
console.log('search', this.keyword)
uni.navigateTo({
url: '/pages_order/product/search?search=' + this.keyword
})
// this.keyword = ''
},
methods: {
// todo: delete
getData() {
this.list = [
{
id: '001',
image: '/static/image/temp-20.png',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
title: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '002',
image: '/static/image/temp-21.png',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '坝上双草原6日|乌兰布统+锡林郭勒+长城',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '003',
image: '/static/image/temp-22.png',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '牛湖线探秘 | 清远牛湖线徒步,探秘天坑与大草原',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '004',
image: '/static/image/temp-23.png',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '低海拔藏区草原,汉藏文化大穿越',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '005',
image: '/static/image/temp-20.png',
title: '新丝路到敦煌7日 | 甘青轻松穿越,沙漠+草原',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '006',
image: '/static/image/temp-20.png',
title: '呼伦贝尔6/8日|经典or环线双套餐可选',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
]
this.total = this.list.length
},
search() {
console.log('search', this.keyword)
uni.navigateTo({
url: '/pages_order/product/search?search=' + this.keyword
})
// this.keyword = ''
},
async fetchBanner() {
try {
await this.$fetch('queryBannerList')
} catch (err) {
}
},
},
}
</script>


+ 18
- 18
pages/index/partner.vue View File

@ -2,7 +2,7 @@
<view class="page__view">
<navbar>
<image class="icon-nav" src="@/static/image/partner/icon-nav.png" mode="widthFix"></image>
<image class="icon-nav" src="@/pages_order/static/partner/icon-nav.png" mode="widthFix"></image>
</navbar>
<view class="main">
@ -18,7 +18,7 @@
<view class="card">
<view class="flex user">
<view class="avatar">
<image class="img" src="@/static/image/temp-30.png" mode="scaleToFill"></image>
<image class="img" src="@/pages_order/static/temp-30.png" mode="scaleToFill"></image>
<view :class="['tag', `tag-1`]">家长</view>
</view>
<view class="flex summary">
@ -46,28 +46,28 @@
<view class="flex bar" v-if="isPartner">
<button class="flex col btn" @click="jumpToTeam">
<image class="icon" src="@/static/image/partner/icon-team.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/partner/icon-team.png" mode="widthFix"></image>
<view>我的团队</view>
</button>
<view class="flex divider">
<view class="line"></view>
</view>
<button class="flex col btn" @click="openPosterPopup">
<image class="icon" src="@/static/image/partner/icon-qrcode.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/partner/icon-qrcode.png" mode="widthFix"></image>
<view>邀请二维码</view>
</button>
<view class="flex divider">
<view class="line"></view>
</view>
<button class="flex col btn" @click="jumpToWithdraw">
<image class="icon" src="@/static/image/partner/icon-cash.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/partner/icon-cash.png" mode="widthFix"></image>
<view>提现</view>
</button>
</view>
<!-- todo: check -->
<button class="btn-apply" @click="onApplyPartner">
<image class="bg" src="@/static/image/partner/apply.png" mode="widthFix"></image>
<image class="bg" src="@/pages_order/static/partner/apply.png" mode="widthFix"></image>
</button>
<view class="list" v-if="isPartner && list.length">
@ -121,84 +121,84 @@
this.list = [
{
id: '001',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李世海',
price: 10,
createTime: '2025-07-15',
},
{
id: '002',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周静',
price: 10,
createTime: '2025-07-15',
},
{
id: '003',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周海',
price: 10,
createTime: '2025-07-15',
},
{
id: '004',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '冯启彬',
price: 10,
createTime: '2025-07-15',
},
{
id: '005',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李娉',
price: 10,
createTime: '2025-07-15',
},
{
id: '006',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李书萍',
price: 10,
createTime: '2025-07-15',
},
{
id: '007',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李世海',
price: 10,
createTime: '2025-07-15',
},
{
id: '008',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周静',
price: 10,
createTime: '2025-07-15',
},
{
id: '009',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周海',
price: 10,
createTime: '2025-07-15',
},
{
id: '010',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '冯启彬',
price: 10,
createTime: '2025-07-15',
},
{
id: '011',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李娉',
price: 10,
createTime: '2025-07-15',
},
{
id: '012',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李书萍',
price: 10,
createTime: '2025-07-15',


+ 42
- 0
pages_order/article/index.vue View File

@ -0,0 +1,42 @@
<template>
<view class="page__view">
<!-- 导航栏 -->
<navbar :title="details.title" leftClick @leftClick="$utils.navigateBack" />
<!-- <image class="img" :src="details.details" mode="widthFix"></image> -->
<uv-parse :content="details.details"></uv-parse>
</view>
</template>
<script>
export default {
data() {
return {
details: {},
}
},
onLoad({ api, id, idKey }) {
this.getData(api, id, idKey)
},
methods: {
async getData(api, id, idKey) {
try {
this.details = await this.$fetch(api, { [idKey]: id })
} catch (err) {
console.log('err', err)
}
},
},
}
</script>
<style scoped lang="scss">
.img {
width: 100vw;
height: auto;
}
</style>

+ 45
- 16
pages_order/article/search.vue View File

@ -23,34 +23,33 @@
</uv-search>
</view>
<view v-if="list.length" class="list">
<view class="list-item" v-for="item in list" :key="item.id">
<view class="cover">
<image class="img" :src="item.image" mode="aspectFill"></image>
<view class="list">
<template v-if="total">
<view class="list-item" v-for="item in list" :key="item.id" @click="jumpToDetail(item.id)">
<view class="cover">
<image class="img" :src="item.image" mode="aspectFill"></image>
</view>
<view class="info">
<view class="title">{{ item.title }}</view>
<view class="desc">{{ item.createTime }}</view>
</view>
</view>
<view class="info">
<view class="title text-ellipsis-2">{{ item.title }}</view>
<view class="desc">{{ item.createTime }}</view>
</view>
</view>
</template>
<template v-else>
<uv-empty mode="list"></uv-empty>
</template>
</view>
<template v-else>
<uv-empty mode="list"></uv-empty>
</template>
</view>
</template>
<script>
import mixinsList from '@/mixins/list.js'
import sortBar from './sortBar.vue'
import recordsView from '@/components/growing/recordsView.vue'
export default {
mixins: [mixinsList],
components: {
sortBar,
recordsView,
},
data() {
@ -63,7 +62,6 @@
pageSize: 10,
title: '',
},
// todo
mixinsListApi: '',
}
},
@ -74,12 +72,36 @@
this.getData()
},
methods: {
// todo: delete
getData() {
},
search() {
this.queryParams.pageNo = 1
this.queryParams.pageSize = 10
this.queryParams.title = this.keyword
this.getData()
},
jumpToDetail(id) {
let api
let idKey
switch(this.mixinsListApi) {
case 'queryNewsList':
api = 'queryNewsById',
idKey = 'newsId'
break
case 'queryPolicyList':
api = 'queryPolicyById',
idKey = 'policyId'
break
default:
break
}
uni.navigateTo({
url: `/pages_order/article/index?api=${api}&id=${id}&idKey=${idKey}`
})
},
},
}
</script>
@ -103,6 +125,13 @@
height: auto;
}
/deep/ .uv-search__content {
padding: 12rpx 0;
background: #FFFFFF !important;
border-color: #CFEFFF !important;
border: 4rpx solid transparent;
}
&.is-focus {
/deep/ .uv-search__action {
padding: 19rpx 24rpx;


+ 1
- 1
pages_order/auth/wxLogin.vue View File

@ -4,7 +4,7 @@
<view class="flex flex-column content">
<!-- todo: check key -->
<image class="logo" src="@/static/image/temp-29.png" mode="widthFix"></image>
<image class="logo" src="@/pages_order/static/temp-29.png" mode="widthFix"></image>
<!-- todo: check key -->
<view class="name">鸿宇研学生</view>


+ 3
- 3
pages_order/auth/wxUserInfo.vue View File

@ -1,7 +1,7 @@
<template>
<view class="page__view">
<navbar title="修改信息" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#FFFFFF" />
<navbar title="修改信息" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="main">
@ -52,7 +52,7 @@
<view v-if="form.avatar" class="avatar">
<image class="img" :src="form.avatar" mode="aspectFill"></image>
<view class="flex mask">
<image class="icon" src="@/static/image/icon-change.png" mode="widthFix" />
<image class="icon" src="@/pages_order/static/icon-change.png" mode="widthFix" />
</view>
</view>
<view v-else class="flex avatar is-empty">
@ -372,7 +372,7 @@
font-family: PingFang SC;
font-weight: 500;
font-size: 36rpx;
line-height: 1;
line-height: 1.4;
color: #FFFFFF;
background: linear-gradient(to right, #21FEEC, #019AF9);
border: 2rpx solid #00A9FF;


+ 14
- 9
pages_order/comment/commentCard.vue View File

@ -23,29 +23,29 @@
</view>
<view class="section score">
<view class="flex score-item">
<view class="score-item-label">产品服务度</view>
<uv-rate :value="data.productNum" size="48rpx" gutter="16rpx" activeColor="#F7BA1E" :allowHalf="true" :minCount="0.5" readonly></uv-rate>
<view class="score-item-label">行程</view>
<formRate :value="data.tripNum" :readonly="true"></formRate>
</view>
<view class="flex score-item">
<view class="score-item-label">问卷体验</view>
<uv-rate :value="data.paperNum" size="48rpx" gutter="16rpx" activeColor="#F7BA1E" :allowHalf="true" :minCount="0.5" readonly></uv-rate>
<view class="score-item-label">景点</view>
<formRate :value="data.spotNum" :readonly="true"></formRate>
</view>
<view class="flex score-item">
<view class="score-item-label">物流速度</view>
<uv-rate :value="data.logisticsNum" size="48rpx" gutter="16rpx" activeColor="#F7BA1E" :allowHalf="true" :minCount="0.5" readonly></uv-rate>
<view class="score-item-label">导师</view>
<formRate :value="data.mentorNum" :readonly="true"></formRate>
</view>
</view>
<view class="section operate">
<button class="flex btn" @click="onComment">
<image class="icon" src="@/static/image/icon-comment.png" mode="aspectFill"></image>
<image class="icon" src="@/pages_order/static/comment/icon-comment.png" mode="aspectFill"></image>
<view>评论</view>
</button>
<button v-if="data.liked" class="flex btn" @click="onLike">
<image class="icon" src="@/static/image/icon-like-active.png" mode="aspectFill"></image>
<image class="icon" src="@/pages_order/static/comment/icon-like-active.png" mode="aspectFill"></image>
<view>点赞</view>
</button>
<button v-else class="flex btn" @click="onCancelLike">
<image class="icon" src="@/static/image/icon-like.png" mode="aspectFill"></image>
<image class="icon" src="@/pages_order/static/comment/icon-like.png" mode="aspectFill"></image>
<view>点赞</view>
</button>
</view>
@ -67,7 +67,12 @@
</template>
<script>
import formRate from '@/pages_order/components/formRate.vue'
export default {
components: {
formRate,
},
props: {
data: {
type: Object,


+ 6
- 2
pages_order/comment/commentPopup.vue View File

@ -1,7 +1,7 @@
<template>
<view>
<uv-popup ref="popup" mode="bottom" bgColor="none" >
<view class="popup__view">
<uv-popup ref="popup" mode="bottom" bgColor="none" @change="onPopupChange">
<view class="popup__view" v-if="isShow">
<view class="flex header">
<view class="title">评价</view>
<button class="btn" @click="close">关闭</button>
@ -84,6 +84,7 @@
},
data() {
return {
isShow: false,
id: null,
// todo: fetch
detail: {},
@ -140,6 +141,9 @@
close() {
this.$refs.popup.close()
},
onPopupChange(e) {
this.isShow = e.show
},
onSelectContent(content) {
this.form.content = content
},


+ 3
- 3
pages_order/comment/commentRecords.vue View File

@ -1,11 +1,11 @@
<template>
<view class="page__view">
<navbar title="我的评价" leftClick @leftClick="$utils.navigateBack" />
<navbar title="我的评价" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="main">
<view class="list">
<view class="list" v-if="total">
<view class="list-item" v-for="item in list" :key="item.id">
<view class="flex list-item-header">
<view class="flex mark">
@ -58,7 +58,7 @@
<style scoped lang="scss">
.page__view {
background-color: $uni-bg-color;
background: $uni-bg-color;
}
.main {


+ 2
- 2
pages_order/comment/commentRecordsOfProduct.vue View File

@ -5,7 +5,7 @@
<view class="main">
<view class="list">
<view class="list" v-if="total">
<view class="list-item" v-for="item in list" :key="item.id">
<commentCard :data="item"></commentCard>
</view>
@ -50,7 +50,7 @@
<style scoped lang="scss">
.page__view {
background-color: $uni-bg-color;
background: $uni-bg-color;
}
.main {


+ 8
- 4
pages_order/comment/recordFormPopup.vue View File

@ -1,7 +1,7 @@
<template>
<view>
<uv-popup ref="popup" mode="bottom" bgColor="none" >
<view class="popup__view">
<uv-popup ref="popup" mode="bottom" bgColor="none" :zIndex="1000000" @change="onPopupChange">
<view class="popup__view" v-if="isShow">
<view class="flex header">
<view class="title">新增记录</view>
<button class="btn" @click="close">关闭</button>
@ -16,7 +16,7 @@
<view class="form-item">
<uv-form-item prop="project" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
关联项目
</view>
<view class="form-item-content">
@ -70,7 +70,7 @@
<view class="form-item" v-for="(item, index) in questions" :key="item.id">
<uv-form-item :prop="`texts[${index}]`" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
{{ item.label }}
</view>
<view class="form-item-content">
@ -103,6 +103,7 @@
},
data() {
return {
isShow: false,
form: {
project: null,
tripNum: null,
@ -195,6 +196,9 @@
close() {
this.$refs.popup.close()
},
onPopupChange(e) {
this.isShow = e.show
},
openRelatePojectPicker() {
this.$refs.reloateProjectPopup.open(this.form.project?.id || null)
},


+ 19
- 5
pages_order/components/formRate.vue View File

@ -1,15 +1,15 @@
<template>
<uv-rate
:value="value"
@input="$emit('input', $event)"
@change="$emit('input', $event)"
activeIcon="star-fill"
inactiveIcon="star-fill"
v-model="rate"
size="48rpx"
gutter="16rpx"
activeIcon="star-fill"
inactiveIcon="star-fill"
activeColor="#F7BA1E"
inactiveColor="#E3E3E3"
:allowHalf="true"
:minCount="0.5"
:readonly="readonly"
></uv-rate>
</template>
@ -19,6 +19,20 @@
value: {
default: null
},
readonly: {
type: Boolean,
default: false
},
},
computed: {
rate: {
set(val) {
this.$emit('input', val)
},
get() {
return this.value
}
},
},
}
</script>


+ 3
- 0
pages_order/components/reloateProjectPopup.vue View File

@ -103,7 +103,10 @@
}
.content {
max-height: 75vh;
padding: 8rpx 40rpx;
box-sizing: border-box;
overflow-y: auto;
}
.option {


+ 2
- 2
pages_order/coupon/couponList/index.vue View File

@ -1,7 +1,7 @@
<template>
<view class="page__view">
<navbar title="我的优惠券" leftClick @leftClick="$utils.navigateBack" />
<navbar title="我的优惠券" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="list">
<view class="list-item" v-for="item in list" :key="item.id">
@ -89,7 +89,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
}


+ 1
- 10
pages_order/coupon/couponSelect/index.vue View File

@ -11,12 +11,10 @@
size="36rpx"
iconSize="36rpx"
activeColor="#00A9FF"
@change="onRadioChange"
>
<view class="list-item" v-for="item in list" :key="item.id">
<couponCard
:data="item"
@select="onSelect"
></couponCard>
</view>
</uv-radio-group>
@ -105,13 +103,6 @@
]
},
onSelect(id) {
console.log('onSelect', id)
this.selectedId = id
},
onRadioChange(e) {
console.log('onRadioChange', e)
},
},
}
</script>
@ -120,7 +111,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
}


+ 9
- 9
pages_order/growing/achievement/index.vue View File

@ -12,7 +12,7 @@
<view class="tag">新获得</view>
</view>
<view class="icon">
<image class="img" src="@/static/image/temp-49.png" mode="widthFix"></image>
<image class="img" src="@/pages_order/static/temp-49.png" mode="widthFix"></image>
</view>
</view>
@ -59,19 +59,19 @@
children: [
{
id: '0011',
icon: '/static/image/temp-47.png',
icon: '/pages_order/static/temp-47.png',
label: '言值认证',
createTime: '2025-07-12',
},
{
id: '0012',
icon: '/static/image/temp-48.png',
icon: '/pages_order/static/temp-47.png',
label: '国际旅行',
createTime: '2025-07-12',
},
{
id: '0013',
icon: '/static/image/temp-48.png',
icon: '/pages_order/static/temp-47.png',
label: '萌新毕业证',
createTime: '2025-07-12',
},
@ -83,7 +83,7 @@
children: [
{
id: '0011',
icon: '/static/image/temp-48.png',
icon: '/pages_order/static/temp-47.png',
label: '言值认证',
createTime: '2025-05-15',
},
@ -95,13 +95,13 @@
children: [
{
id: '0011',
icon: '/static/image/temp-47.png',
icon: '/pages_order/static/temp-47.png',
label: '言值认证',
createTime: '2025-07-12',
},
{
id: '0012',
icon: '/static/image/temp-48.png',
icon: '/pages_order/static/temp-47.png',
label: '国际旅行',
createTime: '2025-07-12',
},
@ -113,13 +113,13 @@
children: [
{
id: '0012',
icon: '/static/image/temp-48.png',
icon: '/pages_order/static/temp-47.png',
label: '国际旅行',
createTime: '2025-07-12',
},
{
id: '0013',
icon: '/static/image/temp-47.png',
icon: '/pages_order/static/temp-47.png',
label: '萌新毕业证',
createTime: '2025-07-12',
},


+ 4
- 4
pages_order/growing/activity/applyEmail.vue View File

@ -18,7 +18,7 @@
<view class="form-item">
<uv-form-item prop="name" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
姓名
</view>
<view class="form-item-content">
@ -29,7 +29,7 @@
<view class="form-item">
<uv-form-item prop="phone" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
电话
</view>
<view class="form-item-content">
@ -40,7 +40,7 @@
<view class="form-item">
<uv-form-item prop="address" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
邮寄地址
</view>
<view class="form-item-content">
@ -217,7 +217,7 @@
font-family: PingFang SC;
font-weight: 500;
font-size: 36rpx;
line-height: 1;
line-height: 1.4;
color: #FFFFFF;
background: linear-gradient(to right, #21FEEC, #019AF9);
border: 2rpx solid #00A9FF;


+ 9
- 9
pages_order/growing/activity/index.vue View File

@ -116,15 +116,15 @@
this.detail = {
highlights: [
'/static/image/temp-38.png',
'/static/image/temp-39.png',
'/static/image/temp-40.png',
'/static/image/temp-41.png',
'/static/image/temp-42.png',
'/static/image/temp-43.png',
'/static/image/temp-44.png',
'/static/image/temp-45.png',
'/static/image/temp-46.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
thoughts: [],
}


+ 12
- 10
pages_order/growing/activity/markPopup.vue View File

@ -14,17 +14,17 @@
errorType="toast"
>
<view class="form-item">
<uv-form-item prop="image" :customStyle="formItemStyle">
<uv-form-item prop="imagePath" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
上传本人照片
</view>
<view class="form-item-content">
<button class="flex btn">
<view v-if="form.image" class="avatar">
<image class="img" :src="form.image" mode="aspectFill"></image>
<view v-if="form.imagePath" class="avatar">
<image class="img" :src="form.imagePath" mode="aspectFill"></image>
<view class="flex mask">
<image class="icon" src="@/static/image/icon-change.png" mode="widthFix" />
<image class="icon" src="@/pages_order/static/icon-change.png" mode="widthFix" />
</view>
</view>
<view v-else class="flex avatar is-empty">
@ -51,10 +51,10 @@
return {
id: null,
form: {
image: null,
imagePath: null,
},
rules: {
'image': {
'imagePath': {
type: 'string',
required: true,
message: '请上传图片',
@ -80,7 +80,7 @@
this.$Oss.ossUpload(image)
.then(url => {
this.form.image = url
this.form.imagePath = url
})
}
});
@ -90,13 +90,15 @@
await this.$refs.form.validate()
const {
imagePath,
} = this.form
const params = {
imagePath,
}
// todo: fetch
// await this.$fetch('updateAddress', params)
// todo: check
await this.$fetch('queryMarkmeList', params)
uni.showToast({
icon: 'success',


+ 2
- 2
pages_order/growing/activity/reviewPopup.vue View File

@ -16,7 +16,7 @@
<view class="form-item">
<uv-form-item prop="image" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
上传图片
</view>
<view class="form-item-content">
@ -24,7 +24,7 @@
<view v-if="form.image" class="avatar">
<image class="img" :src="form.image" mode="aspectFill"></image>
<view class="flex mask">
<image class="icon" src="@/static/image/icon-change.png" mode="widthFix" />
<image class="icon" src="@/pages_order/static/icon-change.png" mode="widthFix" />
</view>
</view>
<view v-else class="flex avatar is-empty">


+ 9
- 9
pages_order/growing/activity/search.vue View File

@ -79,9 +79,9 @@
id: '001',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
image: [
'/static/image/temp-38.png',
'/static/image/temp-39.png',
'/static/image/temp-40.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
createTime: '2025-07-12',
},
@ -89,9 +89,9 @@
id: '002',
name: '仙踪新昌·韩妃江古道|邂逅“江南小桂林”',
image: [
'/static/image/temp-41.png',
'/static/image/temp-42.png',
'/static/image/temp-43.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
createTime: '2025-06-18',
},
@ -99,9 +99,9 @@
id: '003',
name: '山水石窟·大佛寺|江南佛窟造像,新昌山水轻徒',
image: [
'/static/image/temp-44.png',
'/static/image/temp-45.png',
'/static/image/temp-46.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
'/pages_order/static/temp-38.png',
],
createTime: '2025-06-15',
},


+ 1
- 3
pages_order/live/formPopup.vue View File

@ -16,7 +16,7 @@
<view class="form-item">
<uv-form-item prop="project" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
关联项目
</view>
<view class="form-item-content">
@ -65,14 +65,12 @@
import reloateProjectPopup from '@/pages_order/components/reloateProjectPopup.vue'
import formTextarea from '@/pages_order/components/formTextarea.vue'
import formUpload from '@/pages_order/components/formUpload.vue'
import formRate from '@/pages_order/components/formRate.vue'
export default {
components: {
reloateProjectPopup,
formTextarea,
formUpload,
formRate,
},
data() {
return {


+ 6
- 6
pages_order/live/index.vue View File

@ -1,11 +1,11 @@
<template>
<view class="page__view highlight">
<navbar title="图片直播" leftClick @leftClick="$utils.navigateBack" />
<navbar :title="detail.title" leftClick @leftClick="$utils.navigateBack" />
<view class="header">
<image class="icon" :src="detail.image" mode="widthFix"></image>
<view class="flex">
<view class="flex" style="padding: 0 40rpx;">
<view class="flex">
<view class="title">{{ detail.title }}</view>
<view class="tag">{{ detail.createTime }}</view>
@ -22,7 +22,7 @@
<view class="section-header">
<view class="avatar">
<!-- todo: check key -->
<image class="avatar-img" src="@/static/image/temp-30.png" mode="scaleToFill"></image>
<image class="avatar-img" src="@/pages_order/static/temp-30.png" mode="scaleToFill"></image>
</view>
<view class="info">
<view class="flex title">
@ -94,17 +94,17 @@
async fetchDetail() {
this.bannerList = [
{
url: '/static/image/temp-23.png',
url: '/pages_order/static/temp-23.png',
title: '趣玩新加坡',
createTime: '2025-04-18',
},
{
url: '/static/image/temp-24.png',
url: '/pages_order/static/temp-24.png',
title: '坝上双草原',
createTime: '2025-04-18',
},
{
url: '/static/image/temp-25.png',
url: '/pages_order/static/temp-25.png',
title: '牛湖线',
createTime: '2025-04-18',
},


+ 3
- 3
pages_order/live/list.vue View File

@ -95,17 +95,17 @@
async fetchBanner() {
this.bannerList = [
{
url: '/static/image/temp-23.png',
url: '/pages_order/static/temp-23.png',
title: '趣玩新加坡',
createTime: '2025-04-18',
},
{
url: '/static/image/temp-24.png',
url: '/pages_order/static/temp-24.png',
title: '坝上双草原',
createTime: '2025-04-18',
},
{
url: '/static/image/temp-25.png',
url: '/pages_order/static/temp-25.png',
title: '牛湖线',
createTime: '2025-04-18',
},


+ 20
- 19
pages_order/member/memberApplyCard.vue View File

@ -1,23 +1,21 @@
<template>
<view class="flex card">
<view class="info">
<view class="title">绑定申请</view>
<view class="row">
<view class="row-label">绑定人</view>
<view class="row-content">{{ data.name }}</view>
</view>
<view class="row">
<view class="row-label">申请人ID</view>
<view class="row-content">{{ data.userId }}</view>
</view>
<view class="row">
<view class="row-label">申请时间</view>
<view class="row-content">{{ data.createTime }}</view>
</view>
<view class="btns">
<button class="btn" @click="onReject">拒绝</button>
<button class="btn" @click="onConfirm">同意</button>
</view>
<view class="card">
<view class="title">绑定申请</view>
<view class="row">
<view class="row-label">绑定人</view>
<view class="row-content">{{ data.name }}</view>
</view>
<view class="row">
<view class="row-label">申请人ID</view>
<view class="row-content">{{ data.userId }}</view>
</view>
<view class="row">
<view class="row-label">申请时间</view>
<view class="row-content">{{ data.createTime }}</view>
</view>
<view class="flex btns">
<button class="btn" @click="onReject">拒绝</button>
<button class="btn" @click="onConfirm">同意</button>
</view>
</view>
</template>
@ -63,9 +61,12 @@
.btns {
margin-top: 16rpx;
justify-content: flex-end;
}
.btn {
display: inline-block;
width: auto;
padding: 10rpx 50rpx;
font-family: PingFang SC;
font-size: 28rpx;


+ 21
- 0
pages_order/member/memberBind.vue View File

@ -192,6 +192,27 @@
}
}
.search {
padding: 16rpx 0 8rpx 0;
border-bottom: 2rpx solid #EEEEEE;
/deep/ .uv-search__content {
padding: 0;
}
/deep/ .uv-search__content__icon {
display: none;
}
/deep/ .uv-search__content__input {
margin: 0;
}
/deep/ .uv-search__action {
color: #00A9FF;
}
}
.list-item {
justify-content: flex-start;
column-gap: 24rpx;


+ 12
- 37
pages_order/member/memberList.vue View File

@ -1,7 +1,7 @@
<template>
<view class="page__view">
<navbar title="成员管理" leftClick @leftClick="$utils.navigateBack" />
<navbar title="成员管理" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="main">
@ -31,20 +31,18 @@
></uv-tabs>
</view>
<template v-if="current == 0">
<view class="list">
<view class="flex list-item" v-for="item in list" :key="item.id">
<view class="list">
<template v-if="current == 0">
<view class="list-item" v-for="item in list" :key="item.id">
<memberApplyCard :data="item" @submitted="getData"></memberApplyCard>
</view>
</view>
</template>
<template v-else>
<view class="list">
<view class="flex list-item" v-for="item in list" :key="item.id">
</template>
<template v-else>
<view class="list-item" v-for="item in list" :key="item.id">
<memberCard :data="item" ></memberCard>
</view>
</view>
</template>
</template>
</view>
</view>
@ -143,7 +141,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
/deep/ .nav-bar__view {
@ -174,34 +172,11 @@
.list {
background: #FFFFFF;
border-radius: 32rpx;
overflow: hidden;
&-item {
margin-top: 16rpx;
padding: 16rpx 32rpx;
font-size: 28rpx;
color: #333333;
background: #FFFFFF;
border-bottom: 2rpx solid #F1F1F1;
justify-content: flex-start;
column-gap: 24rpx;
&:last-child {
border: none;
}
.avatar {
width: 72rpx;
height: 72rpx;
border-radius: 50%;
overflow: hidden;
.img {
width: 100%;
height: 100%;
}
& + & {
margin-top: 32rpx;
}
}
}

+ 2
- 2
pages_order/member/switch.vue View File

@ -1,7 +1,7 @@
<template>
<view class="page__view">
<navbar title="我的优惠券" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#FFFFFF" />
<navbar title="切换档案" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#FFFFFF" />
<view class="list">
<uv-radio-group
@ -120,7 +120,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
}


+ 1
- 1
pages_order/message/index.vue View File

@ -130,7 +130,7 @@
font-family: PingFang SC;
font-weight: 500;
font-size: 36rpx;
line-height: 1;
line-height: 1.4;
color: #252545;
border: 2rpx solid #252545;
border-radius: 41rpx;


+ 2
- 2
pages_order/message/list.vue View File

@ -1,7 +1,7 @@
<template>
<view class="page__view">
<navbar title="开营通知" leftClick @leftClick="$utils.navigateBack" />
<navbar title="开营通知" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="list">
<view class="list-item" v-for="item in list" :key="item.id">
@ -38,7 +38,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
}


+ 1
- 1
pages_order/order/components/contactMentorPopup.vue View File

@ -9,7 +9,7 @@
<view class="flex content">
<view>{{ phone }}</view>
<button plain class="flex btn" @click="onCall">
<image class="btn-icon" src="@/static/image/icon-phone.png" mode="widthFix"></image>
<image class="btn-icon" src="@/pages_order/static/order/icon-phone.png" mode="widthFix"></image>
</button>
</view>
</view>


+ 30
- 17
pages_order/order/orderConfirm/index.vue View File

@ -16,7 +16,7 @@
<view class="form-item">
<uv-form-item prop="name" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
真实姓名
</view>
<view class="form-item-content">
@ -27,7 +27,7 @@
<view class="form-item">
<uv-form-item prop="phone" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
手机号码
</view>
<view class="form-item-content">
@ -61,11 +61,11 @@
<view class="card">
<view class="card-header">其他</view>
<view class="form-item">
<uv-form-item prop="coupon" :customStyle="formItemStyle">
<uv-form-item prop="couponId" :customStyle="formItemStyle">
<view class="form-item-label">选择优惠券</view>
<view class="form-item-content">
<view class="flex row" @click="jumpToSelectCoupon">
<view v-if="form.coupon" class="text">{{ couponInfo.label }}</view>
<view v-if="form.couponId" class="text">{{ couponInfo.label }}</view>
<view v-else class="text placeholder">请选择</view>
<uv-icon name="arrow-right" color="#C6C6C6" size="32rpx"></uv-icon>
</view>
@ -73,11 +73,11 @@
</uv-form-item>
</view>
<view class="form-item">
<uv-form-item prop="invoice" :customStyle="formItemStyle">
<uv-form-item prop="receiptId" :customStyle="formItemStyle">
<view class="form-item-label">选择发票类型</view>
<view class="form-item-content">
<view class="flex row" @click="jumpToSelectInvoice">
<view v-if="form.invoice" class="text">{{ getInvoiceDesc(form.invoice) }}</view>
<view v-if="form.receiptId" class="text">{{ getInvoiceDesc(form.receiptId) }}</view>
<view v-else class="text placeholder">请选择</view>
<uv-icon name="arrow-right" color="#C6C6C6" size="32rpx"></uv-icon>
</view>
@ -167,8 +167,8 @@
teenager: 0,
child: 0,
members: [],
coupon: null,
invoice: null,
couponId: null,
receiptId: null,
},
checkboxValue: [],
formItemStyle: { padding: 0 },
@ -188,7 +188,7 @@
return (adults || 0) + (teenager || 0) + (child || 0)
},
totalPrice() {
const { adults, teenager, child, coupon } = this.form
const { adults, teenager, child, couponId } = this.form
const { adultsPrice, teenagerPrice, childPrice } = this.productPackage
@ -198,7 +198,7 @@
teenager && (total += teenager * (teenagerPrice || 0))
child && (total += child * (childPrice || 0))
coupon && (total -= (this.couponInfo?.price || 0))
couponId && (total -= (this.couponInfo?.price || 0))
return total
},
@ -213,7 +213,7 @@
},
onShow() {
if (this.couponInfo) {
this.form.coupon = this.couponInfo.id
this.form.couponId = this.couponInfo.id
}
},
onLoad(arg) {
@ -278,8 +278,8 @@
teenager,
child,
members: members.map(item => ({ ...item, isSelected: true })),
coupon: null,
invoice: null,
couponId: null,
receiptId: null,
}
},
jumpToSelectCoupon() {
@ -327,10 +327,23 @@
teenager,
child,
members,
coupon,
invoice,
couponId,
receiptId,
} = this.form
const { startDate, endDate } = time
let params = {
activityId: product.id,
startDate,
endDate,
couponId,
receiptId,
name,
phone,
}
await this.$fetch('createOrder', params)
const orderInfo = {
product,
couponInfo: this.couponInfo,
@ -339,8 +352,8 @@
teenager,
child,
members,
coupon,
invoice,
couponId,
receiptId,
name,
phone,
}


+ 2
- 2
pages_order/order/orderConfirm/timeCalendarSelect.vue View File

@ -62,11 +62,11 @@
return day;
}
const { startDate, endDate, currentPrice } = this.options[index]
const { startDate, endDate, priceDiscount } = this.options[index]
// day.topInfo = `${startDate}-${endDate}`
day.topInfo = `~${endDate}`
day.bottomInfo = `¥${currentPrice}`
day.bottomInfo = `¥${priceDiscount}`
return day
},
open() {


+ 7
- 7
pages_order/order/orderConfirm/timeOptionsSelect.vue View File

@ -15,10 +15,10 @@
<view class="flex price">
<view class="price-val">
<text>¥</text>
<text class="highlight">{{ priceInt(item.currentPrice) }}</text>
<text>{{ `${priceFrac(item.currentPrice)}` }}</text>
<text class="highlight">{{ priceInt(item.priceDiscount) }}</text>
<text>{{ `${priceFrac(item.priceDiscount)}` }}</text>
</view>
<view class="price-bef" v-if="item.originalPrice">¥<text>{{ item.originalPrice }}</text></view>
<view class="price-bef" v-if="item.priceOrigin">¥<text>{{ item.priceOrigin }}</text></view>
</view>
</view>
<view class="flex option-item-bottom">
@ -57,11 +57,11 @@
},
},
methods: {
priceInt(currentPrice) {
return parseInt(currentPrice)
priceInt(priceDiscount) {
return parseInt(priceDiscount)
},
priceFrac(currentPrice) {
return (currentPrice % this.priceInt(currentPrice)).toFixed(2).slice(1)
priceFrac(priceDiscount) {
return (priceDiscount % this.priceInt(priceDiscount)).toFixed(2).slice(1)
},
},
}


+ 8
- 27
pages_order/order/orderDetail/index.vue View File

@ -138,16 +138,16 @@
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '每天车程4小时内,含一程高铁丨喀拉峻草原、夏塔古道、昭苏天马、赛里木湖、昭苏油菜花、伊犁薰衣草丨吐鲁番坎儿井&火焰山',
tags: ['坝上草原', '自然探索', '户外探索', '亲子游玩'],
currentPrice: 688.99,
originalPrice: 1200,
priceDiscount: 688.99,
priceOrigin: 1200,
registered: 4168,
timeOptions: [
{
id: '0011',
startDate: '08/25',
endDate: '09/01',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
@ -156,8 +156,8 @@
id: '0012',
startDate: '09/02',
endDate: '09/11',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
@ -166,32 +166,13 @@
id: '0013',
startDate: '09/12',
endDate: '09/19',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
},
],
itineraryHighlights: `
<p>
<img style="width: 100%;" src="/static/image/temp-31.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-32.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-33.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-34.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-35.png" mode="widthFix"/>
</p>
`,
courseObjectives: `
<p style="font-size: 36rpx;">
课程目标
<p>
`,
itineraryDetail: `
<p style="font-size: 36rpx;">
详细行程
<p>
`,
},
time: "0012",
adults: 2,


+ 1
- 1
pages_order/order/orderList/index.vue View File

@ -118,7 +118,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
/deep/ .nav-bar__view {


+ 8
- 27
pages_order/order/orderPay/index.vue View File

@ -138,16 +138,16 @@
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '每天车程4小时内,含一程高铁丨喀拉峻草原、夏塔古道、昭苏天马、赛里木湖、昭苏油菜花、伊犁薰衣草丨吐鲁番坎儿井&火焰山',
tags: ['坝上草原', '自然探索', '户外探索', '亲子游玩'],
currentPrice: 688.99,
originalPrice: 1200,
priceDiscount: 688.99,
priceOrigin: 1200,
registered: 4168,
timeOptions: [
{
id: '0011',
startDate: '08/25',
endDate: '09/01',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
@ -156,8 +156,8 @@
id: '0012',
startDate: '09/02',
endDate: '09/11',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
@ -166,32 +166,13 @@
id: '0013',
startDate: '09/12',
endDate: '09/19',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
},
],
itineraryHighlights: `
<p>
<img style="width: 100%;" src="/static/image/temp-31.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-32.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-33.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-34.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-35.png" mode="widthFix"/>
</p>
`,
courseObjectives: `
<p style="font-size: 36rpx;">
课程目标
<p>
`,
itineraryDetail: `
<p style="font-size: 36rpx;">
详细行程
<p>
`,
},
time: "0012",
adults: 2,


+ 1
- 1
pages_order/order/styles/style.scss View File

@ -145,7 +145,7 @@
font-family: PingFang SC;
font-weight: 500;
font-size: 36rpx;
line-height: 1;
line-height: 1.4;
color: #252545;
border: 2rpx solid #252545;
border-radius: 41rpx;


+ 3
- 3
pages_order/partner/apply.vue View File

@ -2,7 +2,7 @@
<view class="page__view">
<navbar leftClick @leftClick="$utils.navigateBack">
<image class="icon-nav" src="@/static/image/partner/icon-nav.png" mode="widthFix"></image>
<image class="icon-nav" src="@/pages_order/static/partner/icon-nav.png" mode="widthFix"></image>
</navbar>
<view class="main">
@ -27,7 +27,7 @@
<view class="form-item">
<uv-form-item prop="name" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
姓名
</view>
<view class="form-item-content">
@ -38,7 +38,7 @@
<view class="form-item">
<uv-form-item prop="phone" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
电话
</view>
<view class="form-item-content">


+ 14
- 14
pages_order/partner/team.vue View File

@ -1,7 +1,7 @@
<template>
<view class="page__view">
<navbar title="我的团队" leftClick @leftClick="$utils.navigateBack" />
<navbar title="我的团队" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="main">
@ -74,84 +74,84 @@
this.list = [
{
id: '001',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李世海',
price: 10,
createTime: '2025-07-15',
},
{
id: '002',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周静',
price: 10,
createTime: '2025-07-15',
},
{
id: '003',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周海',
price: 10,
createTime: '2025-07-15',
},
{
id: '004',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '冯启彬',
price: 10,
createTime: '2025-07-15',
},
{
id: '005',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李娉',
price: 10,
createTime: '2025-07-15',
},
{
id: '006',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李书萍',
price: 10,
createTime: '2025-07-15',
},
{
id: '007',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李世海',
price: 10,
createTime: '2025-07-15',
},
{
id: '008',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周静',
price: 10,
createTime: '2025-07-15',
},
{
id: '009',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '周海',
price: 10,
createTime: '2025-07-15',
},
{
id: '010',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '冯启彬',
price: 10,
createTime: '2025-07-15',
},
{
id: '011',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李娉',
price: 10,
createTime: '2025-07-15',
},
{
id: '012',
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '李书萍',
price: 10,
createTime: '2025-07-15',
@ -178,7 +178,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
/deep/ .nav-bar__view {


+ 1
- 1
pages_order/partner/withdraw.vue View File

@ -223,7 +223,7 @@
font-family: PingFang SC;
font-weight: 500;
font-size: 36rpx;
line-height: 1;
line-height: 1.4;
color: #FFFFFF;
background: linear-gradient(to right, #21FEEC, #019AF9);
border: 2rpx solid #00A9FF;


+ 3
- 3
pages_order/product/collectList.vue View File

@ -2,11 +2,11 @@
<view class="page__view">
<navbar title="我的收藏" leftClick @leftClick="$utils.navigateBack" />
<navbar title="我的收藏" leftClick @leftClick="$utils.navigateBack" bgColor="#FFFFFF" />
<view class="list">
<view class="list-item" v-for="item in list" :key="item.id">
<productCard :data="item" :isCollected="true" ></productCard>
<productCard :data="item" :isCollected="true" @collect="getData"></productCard>
</view>
</view>
</view>
@ -24,7 +24,7 @@
},
data() {
return {
// todo
// todo: queryCollectionActivityList
mixinsListApi: '',
}
},


+ 51
- 56
pages_order/product/productDetail.vue View File

@ -16,11 +16,12 @@
<view class="summary">
<view class="card info">
<view class="card-header">{{ detail.name }}</view>
<view class="card-header">{{ detail.title }}</view>
<view class="card-content">
<view class="desc">{{ detail.desc }}</view>
<view class="flex tags" v-if="detail.tags">
<view class="tag" v-for="(tag, tIdx) in detail.tags" :key="tIdx">
<!-- todo: check key -->
<view class="desc">{{ detail.brief }}</view>
<view class="flex tags" v-if="detail.tagDetails">
<view class="tag" v-for="(tag, tIdx) in detail.tagDetails" :key="tIdx">
{{ tag }}
</view>
</view>
@ -31,10 +32,10 @@
<text class="highlight">{{ priceInt }}</text>
<text>{{ `${priceFrac}` }}</text>
</view>
<view class="price-bef" v-if="detail.originalPrice">¥<text>{{ detail.originalPrice }}</text></view>
<view class="price-bef" v-if="detail.priceOrigin">¥<text>{{ detail.priceOrigin }}</text></view>
</view>
<view class="registered" v-if="detail.registered">
{{ `${detail.registered}人已报名` }}
<view class="registered" v-if="detail.applyNum">
{{ `${detail.applyNum}人已报名` }}
</view>
</view>
</view>
@ -43,6 +44,7 @@
<view class="card">
<view class="card-header">选择团期</view>
<view class="card-content">
<!-- todo: check key -->
<timeOptionsSelect v-model="selectTime" :options="detail.timeOptions"></timeOptionsSelect>
</view>
</view>
@ -146,24 +148,24 @@
return Array.isArray(image) ? image : image.split(',')
},
priceInt() {
return parseInt(this.detail.currentPrice)
return parseInt(this.detail.priceDiscount)
},
priceFrac() {
return (this.detail.currentPrice % this.priceInt).toFixed(2).slice(1)
return (this.detail.priceDiscount % this.priceInt).toFixed(2).slice(1)
},
displayContent() {
const {
itineraryHighlights,
courseObjectives,
itineraryDetail,
special,
target,
process,
} = this.detail
if (this.current == 0) {
return itineraryHighlights
return special
} else if (this.current == 1) {
return courseObjectives
return target
} else if (this.current == 2) {
return itineraryDetail
return process
}
return ''
@ -178,24 +180,24 @@
this.fetchComment(id)
},
methods: {
async fetchDetail(id) {
async fetchDetail(activityId) {
// todo: delete
this.detail = {
id: '001',
image: new Array(6).fill('/static/image/temp-20.png').join(','),
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '每天车程4小时内,含一程高铁丨喀拉峻草原、夏塔古道、昭苏天马、赛里木湖、昭苏油菜花、伊犁薰衣草丨吐鲁番坎儿井&火焰山',
tags: ['坝上草原', '自然探索', '户外探索', '亲子游玩'],
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
title: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
brief: '每天车程4小时内,含一程高铁丨喀拉峻草原、夏塔古道、昭苏天马、赛里木湖、昭苏油菜花、伊犁薰衣草丨吐鲁番坎儿井&火焰山',
tagDetails: ['坝上草原', '自然探索', '户外探索', '亲子游玩'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
timeOptions: [
{
id: '0011',
startDate: '08/25',
endDate: '09/01',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
@ -204,8 +206,8 @@
id: '0012',
startDate: '09/02',
endDate: '09/11',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
@ -214,28 +216,24 @@
id: '0013',
startDate: '09/12',
endDate: '09/19',
currentPrice: 1200.99,
originalPrice: 2300,
priceDiscount: 1200.99,
priceOrigin: 2300,
adultsPrice: 2400,
teenagerPrice: 1800,
childPrice: 1200.99,
},
],
itineraryHighlights: `
<p>
<img style="width: 100%;" src="/static/image/temp-31.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-32.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-33.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-34.png" mode="widthFix"/>
<img style="width: 100%;" src="/static/image/temp-35.png" mode="widthFix"/>
special: `
<p style="font-size: 36rpx;">
行程亮点
</p>
`,
courseObjectives: `
target: `
<p style="font-size: 36rpx;">
课程目标
<p>
`,
itineraryDetail: `
process: `
<p style="font-size: 36rpx;">
详细行程
<p>
@ -243,45 +241,42 @@
}
return
try {
const result = await this.$fetch('getProductDetail', { id })
const { specs } = result
let arr = specs
arr?.sort?.((a, b) => a.sortOrder - b.sortOrder)
const spec = arr?.[0]
this.detail = {
...result,
specId: spec?.id || null,
specName: spec?.specName || null,
}
const result = await this.$fetch('queryActivityById', { activityId })
// todo: init options
this.detail = result
} catch (err) {
}
},
async fetchComment(id) {
// todo: fetch by activity id
this.commentList = [
{
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '战斗世界',
createTime: '2025-07-12',
content: '凌玉姐姐很温柔很耐心很负责我很喜欢她龙哥知识渊博很幽默给我们讲解很多内容行程很有趣我学到了很多东西最难忘的就是库木塔格沙漠我们爬到了很高的顶端看夕阳绝美还有我也很喜欢夏塔古道我们爬到了第四个卡拉房子的最远端看到了壮观的雪山下次还想参加活动去南疆',
image: '/static/image/temp-36.png',
image: '/pages_order/static/temp-38.png',
},
{
avatar: '/static/image/temp-30.png',
avatar: '/pages_order/static/temp-30.png',
name: '战斗世界',
createTime: '2025-07-12',
content: '凌玉姐姐很温柔很耐心很负责我很喜欢她龙哥知识渊博很幽默给我们讲解很多内容行程很有趣我学到了很多东西最难忘的就是库木塔格沙漠我们爬到了很高的顶端看夕阳绝美还有我也很喜欢夏塔古道我们爬到了第四个卡拉房子的最远端看到了壮观的雪山下次还想参加活动去南疆',
image: '/static/image/temp-36.png',
image: '/pages_order/static/temp-38.png',
},
]
// todo: fetch
},
onCollect() {
this.$store.dispatch('collect', this.id)
// todo: set collectd and change btn to cancel collect?
},
onBuy() {
this.$refs.orderInfoPopup.open({ selectTime: this.selectTime })


+ 41
- 38
pages_order/product/search.vue View File

@ -30,6 +30,7 @@
<view v-for="item in list" :key="item.id">
<productCard
:data="item"
size="small"
></productCard>
</view>
</view>
@ -61,10 +62,10 @@
pageNo: 1,
pageSize: 10,
title: '',
// todo
sort: 'comprehensive',
},
// todo
mixinsListApi: '',
mixinsListApi: 'queryActivityList',
}
},
onLoad({ search }) {
@ -75,63 +76,63 @@
this.getData()
},
methods: {
methods: {
// todo: delete
getData() {
this.list = [
{
id: '001',
image: '/static/image/temp-20.png',
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
title: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '002',
image: '/static/image/temp-24.png',
name: '坝上双草原6日|乌兰布统+锡林郭勒+长城',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '坝上双草原6日|乌兰布统+锡林郭勒+长城',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '003',
image: '/static/image/temp-25.png',
name: '牛湖线探秘 | 清远牛湖线徒步,探秘天坑与大草原',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '牛湖线探秘 | 清远牛湖线徒步,探秘天坑与大草原',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '004',
image: '/static/image/temp-26.png',
name: '低海拔藏区草原,汉藏文化大穿越',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '低海拔藏区草原,汉藏文化大穿越',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '005',
image: '/static/image/temp-27.png',
name: '新丝路到敦煌7日 | 甘青轻松穿越,沙漠+草原',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '新丝路到敦煌7日 | 甘青轻松穿越,沙漠+草原',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
{
id: '006',
image: '/static/image/temp-28.png',
name: '呼伦贝尔6/8日|经典or环线双套餐可选',
desc: '国内游·7-9天·12岁+',
currentPrice: 688.99,
originalPrice: 1200,
registered: 4168,
image: '/static/image/temp-20.png',
title: '呼伦贝尔6/8日|经典or环线双套餐可选',
tagList: ['国内游','7-9天','12岁+'],
priceDiscount: 688.99,
priceOrigin: 1200,
applyNum: 4168,
},
]
this.total = this.list.length
@ -144,6 +145,8 @@
},
onSortChange(sort) {
console.log('onSortChange', sort)
// todo set sort
this.getData()
},
},
}


BIN
pages_order/static/auth/avatar.png View File

Before After
Width: 192  |  Height: 192  |  Size: 4.2 KiB

BIN
pages_order/static/auth/headImage.png View File

Before After
Width: 80  |  Height: 80  |  Size: 1.4 KiB

BIN
pages_order/static/auth/wx.png View File

Before After
Width: 22  |  Height: 18  |  Size: 453 B

static/image/icon-comment.png → pages_order/static/comment/icon-comment.png View File


static/image/icon-like-active.png → pages_order/static/comment/icon-like-active.png View File


static/image/icon-like.png → pages_order/static/comment/icon-like.png View File


BIN
pages_order/static/help/uploading.png View File

Before After
Width: 216  |  Height: 216  |  Size: 7.2 KiB

static/image/icon-change.png → pages_order/static/icon-change.png View File


static/image/icon-require.png → pages_order/static/icon-require.png View File


static/image/icon-phone.png → pages_order/static/order/icon-phone.png View File


BIN
pages_order/static/order/icon.png View File

Before After
Width: 82  |  Height: 82  |  Size: 3.0 KiB

static/image/partner/apply.png → pages_order/static/partner/apply.png View File


static/image/partner/icon-cash.png → pages_order/static/partner/icon-cash.png View File


static/image/partner/icon-nav.png → pages_order/static/partner/icon-nav.png View File


static/image/partner/icon-qrcode.png → pages_order/static/partner/icon-qrcode.png View File


static/image/partner/icon-team.png → pages_order/static/partner/icon-team.png View File


static/image/temp-29.png → pages_order/static/temp-29.png View File


static/image/temp-30.png → pages_order/static/temp-30.png View File


static/image/temp-38.png → pages_order/static/temp-38.png View File


BIN
pages_order/static/temp-47.png View File

Before After
Width: 55  |  Height: 55  |  Size: 8.0 KiB

BIN
pages_order/static/temp-49.png View File

Before After
Width: 80  |  Height: 80  |  Size: 11 KiB

+ 1
- 1
pages_order/traveler/travelerList.vue View File

@ -184,7 +184,7 @@
.page__view {
width: 100vw;
min-height: 100vh;
background-color: $uni-bg-color;
background: $uni-bg-color;
position: relative;
/deep/ .nav-bar__view {


+ 7
- 7
pages_order/traveler/travelerPopup.vue View File

@ -16,7 +16,7 @@
<view class="form-item">
<uv-form-item prop="name" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
姓名
</view>
<view class="form-item-content">
@ -27,7 +27,7 @@
<view class="form-item">
<uv-form-item prop="idNo" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
身份证号
</view>
<view class="form-item-content">
@ -38,7 +38,7 @@
<view class="form-item">
<uv-form-item prop="type" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
类型
</view>
<view class="form-item-content">
@ -63,7 +63,7 @@
<view class="form-item">
<uv-form-item prop="gender" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
性别
</view>
<view class="form-item-content">
@ -88,7 +88,7 @@
<view class="form-item">
<uv-form-item prop="phone" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
手机号
</view>
<view class="form-item-content">
@ -139,7 +139,7 @@
<view class="form-item">
<uv-form-item prop="emergencyContact" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
紧急联系人
</view>
<view class="form-item-content">
@ -150,7 +150,7 @@
<view class="form-item">
<uv-form-item prop="guardiancontact" :customStyle="formItemStyle">
<view class="form-item-label">
<image class="icon" src="@/static/image/icon-require.png" mode="widthFix"></image>
<image class="icon" src="@/pages_order/static/icon-require.png" mode="widthFix"></image>
监护人联系方式
</view>
<view class="form-item-content">


BIN
static/image/bg.png View File

Before After
Width: 900  |  Height: 424  |  Size: 613 KiB Width: 375  |  Height: 191  |  Size: 166 KiB

BIN
static/image/center-bg.png View File

Before After
Width: 1125  |  Height: 621  |  Size: 570 KiB Width: 375  |  Height: 207  |  Size: 68 KiB

BIN
static/image/temp-1.png View File

Before After
Width: 512  |  Height: 512  |  Size: 16 KiB Width: 37  |  Height: 36  |  Size: 1.0 KiB

BIN
static/image/temp-10.png View File

Before After
Width: 512  |  Height: 512  |  Size: 53 KiB Width: 37  |  Height: 36  |  Size: 1.6 KiB

BIN
static/image/temp-11.png View File

Before After
Width: 480  |  Height: 480  |  Size: 192 KiB Width: 28  |  Height: 29  |  Size: 1.2 KiB

BIN
static/image/temp-12.png View File

Before After
Width: 480  |  Height: 480  |  Size: 115 KiB Width: 29  |  Height: 29  |  Size: 1.2 KiB

BIN
static/image/temp-13.png View File

Before After
Width: 180  |  Height: 180  |  Size: 19 KiB Width: 29  |  Height: 29  |  Size: 1.4 KiB

BIN
static/image/temp-14.png View File

Before After
Width: 595  |  Height: 282  |  Size: 306 KiB Width: 343  |  Height: 114  |  Size: 88 KiB

BIN
static/image/temp-16.png View File

Before After
Width: 90  |  Height: 120  |  Size: 26 KiB

BIN
static/image/temp-17.png View File

Before After
Width: 90  |  Height: 120  |  Size: 27 KiB

BIN
static/image/temp-18.png View File

Before After
Width: 1000  |  Height: 563  |  Size: 940 KiB

BIN
static/image/temp-19.png View File

Before After
Width: 2016  |  Height: 864  |  Size: 1.9 MiB Width: 343  |  Height: 96  |  Size: 75 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save