treeRecord.vue 5.41 KB
<template>
  <view class="page-container">

    <!-- 内容区域 - 集成z-paging分页 -->
    <z-paging
        ref="pagingRef"
        v-model="rows"
        @query="fetchData"
        :auto-show-system-loading="true"
    >
      <!-- 空数据提示 -->
      <template #empty>
        <empty-view/>
      </template>
      <!-- 空数据组件 -->
      <!--    <up-empty v-if="rows.length === 0" text="暂无数据" marginTop="100"></up-empty>-->

      <!-- 树木列表:up-card重构 + 保留原始背景图写法 核心满足你的要求 -->
      <view class="record-wrap">
        <up-card
            v-for="i in rows"
            :key="i.treenumber"
            :border="false"
            :show-head="false"
            class="tree-card"
            :foot-border-top="false"
            @click="toEditPage(i.id)"
        >
          <template #body>
            <view class="card-body-inner">
              <view class="record-list-left" :style="`background-image: url(${i.treephoto});`"></view>

              <view class="record-list-right">
                <view class="up-flex up-flex-items-center up-flex-between">
                  <view class="u-line-1 treetypeName">{{ i.treetype }}</view>
                  <view class="record-time">{{ timeFormat(i.updatetime) }}</view>
                </view>
                <view class="record-kv">
                  <img src="../../../static/imgs/tree/tree-high.png" class="record-ico" alt=""> 高度:{{ i.treeheight }} 米
                </view>
                <view class="record-kv">
                  <img src="../../../static/imgs/tree/treearound.png" class="record-ico" alt="">胸径:{{ i.dbh }} 厘米
                </view>
              </view>
            </view>
            <view class="record-foot">
              <view class="record-tag">树木编号:{{ i.treenumber }}</view>
              <text class="record-link">查看</text>
            </view>
          </template>
        </up-card>
      </view>
    </z-paging>
    <!-- 底部新增按钮 -->
    <view class="fixed-bottom-btn-wrap">
      <up-button
          type="primary"
          @click="toAddTreePage"
          v-show="count > 0 && count > allCount"
      >
        新增树木录入
      </up-button>
    </view>

  </view>
</template>

<script setup>
import { ref } from 'vue'
import { onLoad, onShow, onUnload } from '@dcloudio/uni-app';
// onUnload(() => {
//   // 关闭所有页面,直接打开【行道树档案】主页面 【微信小程序完美兼容,无任何报错】
//   uni.reLaunch({
//     url: '/pages-sub/data/tree-archive/index'
//   })
// })
import { treeRoadReq } from "@/api/tree-archive/tree-archive.js";
import { timeFormat } from '@/uni_modules/uview-plus';
const rows = ref([])
const roadId = ref('')
const count = ref(0)
const allCount = ref(0)
onLoad((options) => {
  console.log(options)
  roadId.value = options.roadId
  count.value = options.count
})
onShow(() => {
  // 初始化分页数据
  pagingRef.value?.reload()
})
const toEditPage = (id) => {
  uni.navigateTo({
    url: `/pages-sub/data/tree-archive/editTree?id=${id}`
  })
}
const toAddTreePage = () => {
  uni.navigateTo({
    url: `/pages-sub/data/tree-archive/addTree?roadId=${roadId.value}`
  })
}
const pagingRef = ref(null) // z-paging实例
const fetchData = async (pageNo, pageSize) => {
  const res = await treeRoadReq({road: roadId.value, pageNo, pageSize})
  console.log(res)
  allCount.value = res.total
  // rows.value = res.list
  pagingRef.value?.complete(res?.list || [], res?.total)
}
</script>

<style scoped lang="scss">
/* 页面底色(设计稿 --page-bg) */
.page-container {
  min-height: 100vh;
  background-color: #F4F6FA;
  box-sizing: border-box;
}

/* 列表:左右 24rpx 留白,卡片之间 24rpx(设计稿 .body) */
.record-wrap {
  padding: 24rpx 0 180rpx; // 底部预留固定按钮高度
}

/* 树木卡片:白底 16rpx 圆角 + 浅投影(设计稿 .tcard) */
.tree-card {
  margin: 0 24rpx 24rpx !important;
  border-radius: 16rpx !important;
  background-color: #ffffff !important;
  box-shadow: 0 4rpx 16rpx rgba(17, 24, 39, 0.06) !important;
}
.tree-card :deep(.u-card__body) {
  padding: 24rpx !important;
}

.card-body-inner {
  display: flex;
  font-size: 26rpx;
}

.record-list-left {
  width: 128rpx;
  height: 128rpx;
  border-radius: 12rpx;
  background-color: #F4F6FA;
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  flex-shrink: 0;
}

.record-list-right {
  margin-left: 24rpx;
  flex: 1;
  min-width: 0;
  overflow: hidden;
}

.treetypeName {
  flex: 1;
  min-width: 0;
  font-size: 30rpx;
  font-weight: 500;
  color: #1F2937;
}

.record-time {
  flex-shrink: 0;
  margin-left: 16rpx;
  font-size: 22rpx;
  color: #9CA3AF;
}

.record-kv {
  display: flex;
  align-items: center;
  margin-top: 10rpx;
  font-size: 24rpx;
  color: #4B5563;
}
.record-ico {
  width: 24rpx;
  height: 24rpx;
  margin-right: 8rpx;
}

/* 卡片底部:编号标签 + 查看(设计稿 .tcard-foot) */
.record-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16rpx;
  margin-top: 16rpx;
  padding-top: 16rpx;
  border-top: 1rpx solid #E8EBF0;
}
.record-tag {
  display: inline-flex;
  align-items: center;
  height: 40rpx;
  padding: 0 16rpx;
  border-radius: 8rpx;
  background-color: #EAF7EF;
  color: #16A34A;
  font-size: 22rpx;
  font-weight: 500;
  line-height: 1;
}
.record-link {
  flex-shrink: 0;
  font-size: 24rpx;
  color: #2563EB;
}
</style>