151 lines
4.0 KiB
Vue
151 lines
4.0 KiB
Vue
<template>
|
||
<!-- 页面:展示指定渠道下所有来源列表 -->
|
||
<view class="page">
|
||
<!-- 顶部:状态栏安全区 + 渐变导航栏(连成一块) -->
|
||
<view class="top-bar">
|
||
<view class="nav-bar">
|
||
<uni-icons class="back" type="left" size="22" color="#fff" @click="goBack" />
|
||
<text class="title">{{ channel }} — 来源列表</text>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 列表:来源卡片 -->
|
||
<view class="source-list">
|
||
<view
|
||
v-for="s in sources"
|
||
:key="s.id"
|
||
class="source-card"
|
||
@click="goOrder(s)"
|
||
>
|
||
<text class="src-name">{{ s.name }}</text>
|
||
<uni-icons type="right" size="20" color="#666" />
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import request from '@/utils/request'
|
||
export default {
|
||
data(){return{
|
||
channelId:'', // ← 路由参数
|
||
channel:'',
|
||
dateType:'',
|
||
sources:[]
|
||
}},
|
||
onLoad({channelId='',channel='',dateType=''}) {
|
||
this.channelId = channelId
|
||
this.channel = decodeURIComponent(channel)
|
||
this.dateType = dateType
|
||
|
||
// 拉来源列表
|
||
request({
|
||
url:`/rescue-channel-source/sources/${channelId}`,
|
||
method:'get'
|
||
}).then(res=>{
|
||
// 后端返回数据结构自行调整
|
||
this.sources = res.data // [{id,name},…]
|
||
})
|
||
},
|
||
methods:{
|
||
goOrder(src){
|
||
const query = [
|
||
`dateType=${this.dateType}`,
|
||
`channel=${encodeURIComponent(this.channel)}`,
|
||
`source=${encodeURIComponent(src.name)}`
|
||
].join('&')
|
||
uni.navigateTo({ url:`/pages/rescue/businessManageOrder?${query}` })
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<!-- 只改动 <style> 部分,其余保持不变 -->
|
||
<style scoped lang="scss">
|
||
/* ===== 整页背景 ===== */
|
||
.page {
|
||
min-height: 100vh;
|
||
background: #f6f8fc;
|
||
}
|
||
|
||
/* ===== 顶部条:状态栏 + 渐变导航 ===== */
|
||
.top-bar {
|
||
width: 100%;
|
||
|
||
/* ⬇︎ 头部总高度 = 安全区 + 140rpx 导航本体 + 20rpx 额外留白 */
|
||
height: calc(env(safe-area-inset-top) + 140rpx + 20rpx);
|
||
|
||
/* ⬇︎ 只保留安全区的内边距,20rpx 额外留白改放到底部 */
|
||
padding-top: env(safe-area-inset-top);
|
||
padding-bottom: 20rpx;
|
||
|
||
background: linear-gradient(180deg, #3a8dff 0%, #579dff 100%);
|
||
box-sizing: border-box;
|
||
|
||
/* 关键:垂直方向末端对齐,把 nav-bar 推到底部 */
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: flex-end;
|
||
}
|
||
|
||
/* 导航栏本体 */
|
||
.nav-bar {
|
||
position: relative;
|
||
height: 100rpx;
|
||
display: flex;
|
||
align-items: flex-end; /* 关键:子元素整体贴底 */
|
||
align-items: center;
|
||
padding: 0 24rpx;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.back {
|
||
flex: 0 0 60rpx;
|
||
margin-right: 24rpx;
|
||
align-self: flex-end; /* 再次确保单独贴底 */
|
||
}
|
||
|
||
/* 标题水平居中即可,去掉垂直居中 */
|
||
.title {
|
||
position: absolute;
|
||
left: 50%;
|
||
bottom: 0; /* 紧贴 nav-bar 底部 */
|
||
transform: translateX(-50%);
|
||
font-size: 30rpx;
|
||
font-weight: 600;
|
||
color: #fff;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* ===== 列表区域 ===== */
|
||
.source-list {
|
||
padding: 24rpx;
|
||
display: flex;
|
||
flex-direction: column;
|
||
row-gap: 20rpx;
|
||
}
|
||
.source-card {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 28rpx 32rpx;
|
||
border-radius: 16rpx;
|
||
background: linear-gradient(180deg, #d9e6ff 0%, #ffffff 100%);
|
||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.06);
|
||
}
|
||
.src-name {
|
||
font-size: 28rpx;
|
||
font-weight: 600;
|
||
color: #101a3e;
|
||
}
|
||
</style>
|
||
|
||
|
||
<!-- ======================= 说明 =======================
|
||
1. 本页面只负责列出“来源”列表,没有任何数量/金额信息。
|
||
2. 示例数据写死在 data.sources;正式接接口时,按注释在 onLoad 中请求即可。
|
||
3. 点击来源卡片后,跳转到 /pages/order/OrderList,并把 dateType / channelName / sourceName 三个参数带过去。
|
||
4. 订单列表页 (OrderList.vue) 可在 onLoad 中:
|
||
const { dateType, channelName, sourceName } = query
|
||
// 调用你的订单详情接口 ...
|
||
===================================================== --> |