Explorar el Código

核销专员页面添加核销记录

1410417013 hace 6 meses
padre
commit
3f2014f9c8
Se han modificado 33 ficheros con 1565 adiciones y 571 borrados
  1. 10 0
      pages.json
  2. 310 0
      pages/hexiaolist/hexiaolist.vue
  3. 56 34
      pages/mine/mine.vue
  4. 107 0
      pages/select/select.vue
  5. 13 0
      uni_modules/uni-datetime-picker/changelog.md
  6. 20 9
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
  7. 4 4
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js
  8. 60 41
      uni_modules/uni-datetime-picker/package.json
  9. 4 0
      uni_modules/uni-icons/changelog.md
  10. 5 5
      uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
  11. 3 3
      uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  12. 66 43
      uni_modules/uni-icons/package.json
  13. 18 0
      uni_modules/uni-popup/changelog.md
  14. 21 7
      uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
  15. 5 4
      uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
  16. 23 8
      uni_modules/uni-popup/components/uni-popup/uni-popup.vue
  17. 105 86
      uni_modules/uni-popup/package.json
  18. 7 0
      uni_modules/uni-transition/changelog.md
  19. 263 257
      uni_modules/uni-transition/components/uni-transition/uni-transition.vue
  20. 65 38
      uni_modules/uni-transition/package.json
  21. 2 0
      unpackage/dist/dev/mp-weixin/app.js
  22. 3 1
      unpackage/dist/dev/mp-weixin/app.json
  23. 2 0
      unpackage/dist/dev/mp-weixin/common/vendor.js
  24. 145 0
      unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.js
  25. 4 0
      unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.json
  26. 1 0
      unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.wxml
  27. 84 0
      unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.wxss
  28. 52 30
      unpackage/dist/dev/mp-weixin/pages/mine/mine.js
  29. 1 1
      unpackage/dist/dev/mp-weixin/pages/mine/mine.wxml
  30. 59 0
      unpackage/dist/dev/mp-weixin/pages/select/select.js
  31. 6 0
      unpackage/dist/dev/mp-weixin/pages/select/select.json
  32. 1 0
      unpackage/dist/dev/mp-weixin/pages/select/select.wxml
  33. 40 0
      unpackage/dist/dev/mp-weixin/pages/select/select.wxss

+ 10 - 0
pages.json

@@ -33,6 +33,11 @@
 			"style": {
 				"navigationBarTitleText": "选择日期"
 			}
+		},{
+			"path": "pages/select/select",
+			"style": {
+				"navigationBarTitleText": "选择日期"
+			}
 		},
 		{
 			"path": "pages/chooseCar/chooseCar",
@@ -98,6 +103,11 @@
 			{
 				"navigationBarTitleText" : ""
 			}
+		},{
+			"path": "pages/hexiaolist/hexiaolist",
+			"style": {
+				"navigationBarTitleText": "核销记录"
+			}
 		}
 	],
 	"tabBar": {

+ 310 - 0
pages/hexiaolist/hexiaolist.vue

@@ -0,0 +1,310 @@
+<template>
+  <!-- 页面容器 -->
+  <view class="page-container">
+    <!-- 搜索区域:点击跳转时间选择页 -->
+	<view class="search-bar" @click="jumpToDateSelect">
+	  <view class="search-input-wrap">
+		<text class="search-input">
+		  {{ searchTime || '开始时间 ~ 结束时间' }}
+		</text>
+	  </view>
+	  <!-- 取消按钮:仅在已选择时间时显示 -->
+		<text 
+		  class="cancel-btn" 
+		  v-if="searchTime"
+		  @click.stop="cancelSearch"
+		>
+		  取消
+		</text>
+	</view>
+
+    <!-- 核销记录列表 -->
+    <view class="record-list">
+      <view 
+        class="record-item" 
+        v-for="(item, index) in recordList" 
+        :key="index"
+      >
+        <!-- 已乘车标签 -->
+        <view class="status-tag">
+			<text v-if="item.payState==0">待支付</text>
+			<text v-if="item.payState==2">退款中</text> 
+			<text v-if="item.payState==3">已取消</text>
+			<text v-if="item.payState==1">
+				<text v-if="item.byState==1">预约成功</text>
+				<text v-if="item.byState==2">已乘车</text>
+				<text v-if="item.byState==3">未乘车</text>
+			</text>
+		</view>
+        <!-- 记录内容 -->
+        <view class="record-content">
+          <text class="record-text">发车日期:{{ item.ciDate }}</text>
+          <text class="record-text">发车时间:{{ item.ciTime }}</text>
+		  <text class="record-text">车次:{{ item.carNumber }}</text>
+          <text class="record-text">预约人:{{ item.username }}</text>
+          <text class="record-text" @click.stop="bindphone(item.mobile)">手机号码:{{ item.mobile }}</text>
+          <text class="record-text">核销专员号码:{{ item.vertifyManMobile }}</text>
+          <text class="record-text">核销时间:{{ item.vertifyTime }}</text>
+        </view>
+      </view>
+    </view>
+    <!-- 无数据提示 -->
+	<view v-if="recordList.length === 0" class="empty-tip">
+	  暂无核销记录
+	</view>
+  </view>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { onLoad, onReachBottom, onShow, onUnload } from '@dcloudio/uni-app'
+import { myRequest } from '@/utils/api.ts'
+
+
+// 搜索时间显示文本
+const searchTime = ref('')
+// 接收时间选择页的参数(用于页面栈传递)
+const selectedDate = ref(null)
+// 用户信息
+const userInfo = ref()
+const startT=ref('')
+const endT=ref('')
+// 每页多少条
+const pageSize = ref(10)
+// 当前页
+const currentPage = ref(1)
+// 总条数
+const total = ref(0)
+// 核销记录数据
+const recordList = ref([]) // 初始化空数组,避免本地测试数据干扰
+// 跳转至时间选择页
+const jumpToDateSelect = () => {
+  uni.navigateTo({
+    url: '/pages/select/select' 
+  })
+}
+// 取消搜索(清空时间筛选)
+const cancelSearch = () => { 
+  // 清空时间相关参数
+  searchTime.value = ''
+  startT.value = ''
+  endT.value = ''
+  selectedDate.value = null
+  // 重置页码并重新加载全部数据
+  currentPage.value = 1
+  getCommonData()
+  // 提示用户
+  uni.showToast({ title: '已清空时间筛选', icon: 'none' })
+}
+// 拨打电话
+const bindphone = (e) => {
+  uni.makePhoneCall({
+    phoneNumber: e,
+    fail: (err) => {
+      uni.showToast({ title: '拨打电话失败', icon: 'none' })
+    }
+  })
+}
+onLoad(() => {
+	userInfo.value = uni.getStorageSync('carUserInfo')
+	console.log(userInfo.value)
+	getCommonData()
+})
+// 页面显示时(从时间选择页返回后触发)
+onShow(() => {
+  // 方式1:从storage获取参数
+  const dateRange = uni.getStorageSync('selectedDateRange')
+  // 方式2:从页面栈参数获取(优先级更高)
+  if (selectedDate.value) {
+    startT.value = selectedDate.value.startTime
+    endT.value = selectedDate.value.endTime
+    searchTime.value = selectedDate.value.showText
+  } else if (dateRange) {
+    startT.value = dateRange.startTime
+    endT.value = dateRange.endTime
+    searchTime.value = dateRange.showText
+    // 清空storage,避免重复读取
+    uni.removeStorageSync('selectedDateRange')
+  }
+  
+  // 有选中时间则重新查询数据
+  if (startT.value && endT.value) {
+    currentPage.value = 1 // 重置页码
+    getCommonData()
+  }
+})
+// 页面卸载时清空参数(避免缓存)
+onUnload(() => {
+  uni.removeStorageSync('selectedDateRange')
+})
+// 页面触底触发的回调
+onReachBottom(() => {
+	if (recordList.value.length < total.value) {
+		currentPage.value++
+		getCommonData()
+	} else {
+		uni.showToast({
+			title: '没有更多数据了',
+			icon: 'none'
+		})
+	}
+})
+// 获取常用旅客列表数据
+const getCommonData = async () => {
+	// 核心:根据时间参数是否存在动态组装请求数据
+	  let data = {}
+	  if (startT.value && endT.value) {
+		data = {
+		  page: currentPage.value,
+		  rows: pageSize.value,
+		  startTime: startT.value,
+		  endTime: endT.value
+		}
+	  } else {
+		data = {
+		  page: currentPage.value,
+		  rows: pageSize.value
+		}
+	  }
+	try {
+	    const res = await myRequest({
+	      url: '/carBook/brecblist.action',
+	      data
+	    })
+	    // 分页加载:第一页清空原有数据,后续页追加
+	    if (currentPage.value === 1) {
+	      recordList.value = res.rows
+	    } else {
+	      recordList.value = [...recordList.value, ...res.rows]
+	    }
+	    total.value = res.total
+	  } catch (err) {
+	    uni.showToast({ title: '数据加载失败', icon: 'none' })
+	  }
+}
+
+// 打开时间选择弹窗
+const openTimePopup = async () => {
+  await nextTick(); // 等待组件渲染完成
+  if (timePopupRef.value) {
+    timePopupRef.value.open();
+  }
+};
+
+// 关闭时间选择弹窗
+const closeTimePopup = () => {
+  timePopupRef.value.close()
+}
+
+// 确认选择时间(触发接口查询)
+const confirmTime = () => {
+  if (selectedTime.value.length < 2) {
+    uni.showToast({ title: '请选择完整时间范围', icon: 'none' })
+    return
+  }
+  // 格式化时间并更新参数
+  startT.value = formatDate(selectedTime.value[0])
+  endT.value = formatDate(selectedTime.value[1])
+  searchTime.value = `${startT.value} ~ ${endT.value}`
+  // 重置页码,重新查询
+  currentPage.value = 1
+  getCommonData()
+  // 关闭弹窗
+  closeTimePopup()
+}
+
+// 日期格式化工具函数
+const formatDate = (date) => {
+  const d = new Date(date)
+  const year = d.getFullYear()
+  const month = (d.getMonth() + 1).toString().padStart(2, '0')
+  const day = d.getDate().toString().padStart(2, '0')
+  return `${year}-${month}-${day}`
+}
+</script>
+
+<style scoped>
+/* 页面容器 */
+.page-container {
+  min-height: 100vh;
+  background-color: #f5f5f5;
+}
+
+/* 搜索区域 */
+.search-bar {
+  display: flex;
+  align-items: center;
+  padding: 15rpx;
+  background-color: #fff;
+  margin-bottom: 10rpx;
+}
+.search-input-wrap {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  background-color: #f5f5f5;
+  border-radius: 20rpx;
+  padding: 0 15rpx;
+  height: 35px;
+  /* 点击区域cursor */
+  cursor: pointer;
+}
+.search-icon {
+  color: #999;
+  margin-right: 10rpx;
+}
+.search-input {
+  flex: 1;
+  height: 100%;
+  font-size: 14px;
+  background-color: transparent;
+  line-height: 35px;
+}
+/* 占位符样式 */
+.placeholder {
+  color: #999;
+}
+.cancel-btn {
+  color: #007aff;
+  font-size: 16px;
+  margin-left: 15rpx;
+}
+
+/* 记录列表 */
+.record-list {
+  padding: 0 15rpx;
+}
+.record-item {
+  background-color: #fff;
+  border-radius: 10rpx;
+  padding: 20rpx;
+  margin-bottom: 15rpx;
+  position: relative;
+  border: 1px solid #eee;
+}
+/* 第一条记录高亮边框 */
+.active-item {
+  border: 2px solid #ffd700;
+}
+/* 已乘车标签 */
+.status-tag {
+  position: absolute;
+  top: 20rpx;
+  right: 20rpx;
+  background-color: #4cd964;
+  color: #fff;
+  font-size: 12px;
+  padding: 2rpx 8rpx;
+  border-radius: 4rpx;
+}
+/* 记录内容 */
+.record-content {
+  margin-top: 5rpx;
+}
+.record-text {
+  display: block;
+  font-size: 14px;
+  color: #333;
+  line-height: 45rpx;
+}
+</style>

+ 56 - 34
pages/mine/mine.vue

@@ -36,6 +36,10 @@
 					<image class="item_img" :src="item.imgUrl" mode="aspectFill" />
 					{{ item.text }}
 				</view>
+				<view class="list_item" @click="clickItem('hexiao')" v-if="roleType=='超级管理员'">
+					<image class="item_img" src="/static/images/mine/card.png" mode="aspectFill" />
+					核销记录
+				</view>
 			</view>
 		</view>
 	</view>
@@ -101,19 +105,19 @@ const commonList = [
 		text: '常用旅客',
 		imgUrl: '/static/images/mine/people.png',
 		path: '/pages/commonPeople/commonPeople',
-		isChcek: true
+		isChcek: true,
 	},
 	{
 		text: '优惠券',
 		imgUrl: '/static/images/mine/coupon.png',
 		path: '/pages/coupon/coupon',
-		isChcek: true
+		isChcek: true,
 	},
 	{
 		text: '联系客服',
 		imgUrl: '/static/images/mine/service.png',
 		path: '',
-		isChcek: false
+		isChcek: false,
 	},
 	{
 		text: '客服电话',
@@ -125,8 +129,8 @@ const commonList = [
 		text: '电子交通卡',
 		imgUrl: '/static/images/mine/card.png',
 		path: '/pages/transportation/transportation',
-		isChcek: true
-	}
+		isChcek: true,
+	},
 ]
 //客服信息 
 const worktime = ref('')
@@ -146,19 +150,11 @@ onMounted(() => {
 
 // 点击每一个菜单的回调
 function clickItem(item) {
-	if (item.isChcek) {
+	if(item=='hexiao'){
 		if (userInfo.value) {
-			if (item.type) {
-				// 1. 存储参数到全局状态
-				tabParamStore.setType(item.type); // 替换为实际要传递的type值
-				uni.switchTab({
-					url: item.path
-				})
-			}else{
-				uni.navigateTo({
-					url: item.path
-				})
-			}
+			uni.navigateTo({
+				url: '/pages/hexiaolist/hexiaolist'
+			})
 		} else {
 			uni.showModal({
 				title: '提示',
@@ -170,24 +166,50 @@ function clickItem(item) {
 				}
 			})
 		}
-	} else {
-		if (item.text === '联系客服' || item.text === '客服电话') {
-			uni.showModal({  
-				title: '拨打客服电话:'+workTele.value,
-				content: '工作时间:'+worktime.value, 
-				cancelText: '关闭',
-				confirmText: '拨打',
-				confirmColor: '#FF8205',
-				success: (res) => {
-					if (res.confirm) {
-						uni.makePhoneCall({
-						  phoneNumber: workTele.value, // 仅支持数字,固定号码需加引号
-						  success: () => console.log("拨号功能调用成功"),
-						  fail: (err) => console.error("拨号失败:", err)
-						});
-					}
+	}else{
+		if (item.isChcek) {
+			if (userInfo.value) {
+				if (item.type) {
+					// 1. 存储参数到全局状态
+					tabParamStore.setType(item.type); // 替换为实际要传递的type值
+					uni.switchTab({
+						url: item.path
+					})
+				}else{
+					uni.navigateTo({
+						url: item.path
+					})
 				}
-			})
+			} else {
+				uni.showModal({
+					title: '提示',
+					content: '请先登录',
+					success: (res) => {
+						if (res.confirm) {
+							show.value = true
+						}
+					}
+				})
+			}
+		} else {
+			if (item.text === '联系客服' || item.text === '客服电话') {
+				uni.showModal({  
+					title: '拨打客服电话:'+workTele.value,
+					content: '工作时间:'+worktime.value, 
+					cancelText: '关闭',
+					confirmText: '拨打',
+					confirmColor: '#FF8205',
+					success: (res) => {
+						if (res.confirm) {
+							uni.makePhoneCall({
+							  phoneNumber: workTele.value, // 仅支持数字,固定号码需加引号
+							  success: () => console.log("拨号功能调用成功"),
+							  fail: (err) => console.error("拨号失败:", err)
+							});
+						}
+					}
+				})
+			}
 		}
 	}
 }

+ 107 - 0
pages/select/select.vue

@@ -0,0 +1,107 @@
+<template>
+  <view class="date-select-page">
+
+    <!-- 日历选择组件 -->
+    <view class="calendar-wrap">
+      <wd-calendar-view 
+        type="daterange"
+        v-model="dateRange"
+        :start-date="new Date('2025-01-01')"
+        :end-date="new Date()"
+        placeholder="开始时间 ~ 结束时间"
+        @change="handleDateChange"
+      />
+    </view>
+
+    <!-- 确认按钮 -->
+    <view class="confirm-btn" @click="confirmSelect">
+      确认选择
+    </view>
+  </view>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import dayjs from 'dayjs'
+
+// 绑定日历选择的时间范围(数组:[开始时间, 结束时间])
+const dateRange = ref([])
+// 格式化后的开始/结束时间
+const startT = ref('')
+const endT = ref('')
+
+// 日历选择变化回调
+const handleDateChange = ({ value }) => {
+  if (Array.isArray(value) && value.length === 2) {
+    startT.value = dayjs(value[0]).format('YYYY-MM-DD')
+    endT.value = dayjs(value[1]).format('YYYY-MM-DD')
+  }
+}
+
+// 确认选择并返回
+const confirmSelect = () => {
+  if (!startT.value || !endT.value) {
+    uni.showToast({ title: '请选择完整的时间范围', icon: 'none' })
+    return
+  }
+  // 方式1:通过uni.setStorageSync传递参数
+  uni.setStorageSync('selectedDateRange', {
+    startTime: startT.value,
+    endTime: endT.value,
+    showText: `${startT.value} ~ ${endT.value}`
+  })
+  // 方式2:通过页面栈传递参数(更推荐)
+  const pages = getCurrentPages()
+  const prevPage = pages[pages.length - 2] // 获取上一页实例
+  prevPage.$vm.selectedDate = {
+    startTime: startT.value,
+    endTime: endT.value,
+    showText: `${startT.value} ~ ${endT.value}`
+  }
+  
+  // 返回上一页
+  uni.navigateBack({ delta: 1 })
+}
+</script>
+
+<style scoped>
+.date-select-page {
+  min-height: 100vh;
+  background-color: #f5f5f5;
+}
+.nav-bar {
+  height: 44px;
+  line-height: 44px;
+  background-color: #fff;
+  padding: 0 15rpx;
+  display: flex;
+  align-items: center;
+  border-bottom: 1px solid #eee;
+}
+.back-btn {
+  color: #007aff;
+  font-size: 16px;
+}
+.nav-title {
+  flex: 1;
+  text-align: center;
+  font-size: 18px;
+  font-weight: 500;
+}
+.calendar-wrap {
+  padding: 15rpx;
+  background-color: #fff;
+  margin: 10rpx;
+  border-radius: 10rpx;
+}
+.confirm-btn {
+  margin: 20rpx 15rpx;
+  height: 45px;
+  line-height: 45px;
+  background-color: #007aff;
+  color: #fff;
+  text-align: center;
+  border-radius: 8rpx;
+  font-size: 16px;
+}
+</style>

+ 13 - 0
uni_modules/uni-datetime-picker/changelog.md

@@ -1,3 +1,16 @@
+## 2.2.42(2025-08-20)
+- 修复 datetime-picker 小程序样式警告
+## 2.2.41(2025-08-20)
+- 修复 uni-datetime-picker组件时间对比报错问题
+## 2.2.40(2025-04-14)
+- 修复 绑定字符串值的时,日历面板选中状态未重置到默认值的问题
+## 2.2.39(2025-04-14)
+- 修复 在 iOS 微信小程序上type='daterange'时,传入'YYYY-MM-DD'格式不生效的问题
+
+## 2.2.38(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 2.2.35(2024-09-21)
+- 修复 没有选中日期时点击确定直接报错的Bug [详情](https://ask.dcloud.net.cn/question/198168)
 ## 2.2.34(2024-04-24)
 - 新增 日期点击事件,在点击日期时会触发该事件。
 ## 2.2.33(2024-04-15)

+ 20 - 9
uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue

@@ -464,9 +464,16 @@
 					this.isPhone = navigator.userAgent.toLowerCase().indexOf('mobile') !== -1
 					return
 				}
+				// #ifdef MP-WEIXIN
+				const {
+					windowWidth
+				} = uni.getWindowInfo()
+				// #endif
+				// #ifndef MP-WEIXIN
 				const {
 					windowWidth
 				} = uni.getSystemInfoSync()
+				// #endif
 				this.isPhone = windowWidth <= 500
 				this.windowWidth = windowWidth
 			},
@@ -666,6 +673,7 @@
 						this.displayValue = e.fulldate
 					}
 					this.setEmit(this.displayValue)
+					this.calendarDate = this.displayValue;
 				}
 				this.$refs.mobile.close()
 			},
@@ -692,17 +700,25 @@
 				let startDateLaterRangeStartDate = false
 				let startDateLaterRangeEndDate = false
 				let startDate, startTime
+
+				let compareStartDateString = this.tempRange.startDate
+				let compareEndDateString = this.tempRange.endDate
+				if (this.hasTime) {
+					compareStartDateString = `${this.tempRange.startDate} ${this.tempRange.startTime}`
+					compareEndDateString = `${this.tempRange.endDate} ${this.tempRange.endTime}`
+				}
+
 				if (this.start) {
 					let startString = this.start
 					if (typeof this.start === 'number') {
 						startString = getDateTime(this.start, this.hideSecond)
 					}
 					[startDate, startTime] = startString.split(' ')
-					if (this.start && !dateCompare(this.start, this.tempRange.startDate)) {
+					if (this.start && !dateCompare(this.start, compareStartDateString)) {
 						startDateLaterRangeStartDate = true
 						this.tempRange.startDate = startDate
 					}
-					if (this.start && !dateCompare(this.start, this.tempRange.endDate)) {
+					if (this.start && !dateCompare(this.start, compareEndDateString)) {
 						startDateLaterRangeEndDate = true
 						this.tempRange.endDate = startDate
 					}
@@ -717,11 +733,11 @@
 					}
 					[endDate, endTime] = endString.split(' ')
 
-					if (this.end && !dateCompare(this.tempRange.startDate, this.end)) {
+					if (this.end && !dateCompare(compareStartDateString, this.end)) {
 						endDateEarlierRangeStartDate = true
 						this.tempRange.startDate = endDate
 					}
-					if (this.end && !dateCompare(this.tempRange.endDate, this.end)) {
+					if (this.end && !dateCompare(compareEndDateString, this.end)) {
 						endDateEarlierRangeEndDate = true
 						this.tempRange.endDate = endDate
 					}
@@ -1011,11 +1027,6 @@
 		border-bottom-width: 1px;
 	}
 
-	.uni-date-changed--time text {
-		height: 50px;
-		line-height: 50px;
-	}
-
 	.uni-date-changed .uni-date-changed--time {
 		flex: 1;
 	}

+ 4 - 4
uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js

@@ -182,8 +182,8 @@ class Calendar {
 		if (!date) {
 			date = new Date()
 		}
-
-		return this.calendar.find(item => item.fullDate === this.getDateObj(date).fullDate)
+		const res = this.calendar.find(item => item.fullDate === this.getDateObj(date).fullDate)
+		return res ? res : this.getDateObj(date)
 	}
 
 	/**
@@ -389,8 +389,8 @@ function getDefaultSecond(hideSecond) {
 }
 
 function dateCompare(startDate, endDate) {
-	startDate = new Date(fixIosDateFormat(startDate))
-	endDate = new Date(fixIosDateFormat(endDate))
+	startDate = new Date(fixIosDateFormat(typeof startDate === 'string' ? startDate.trim() : startDate))
+	endDate = new Date(fixIosDateFormat(typeof endDate === 'string' ? endDate.trim() : endDate))
 	return startDate <= endDate
 }
 

+ 60 - 41
uni_modules/uni-datetime-picker/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uni-datetime-picker",
   "displayName": "uni-datetime-picker 日期选择器",
-  "version": "2.2.34",
+  "version": "2.2.42",
   "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择",
   "keywords": [
     "uni-datetime-picker",
@@ -12,12 +12,14 @@
 ],
   "repository": "https://github.com/dcloudio/uni-ui",
   "engines": {
-    "HBuilderX": ""
+    "HBuilderX": "",
+    "uni-app": "^4.07",
+    "uni-app-x": ""
   },
   "directories": {
     "example": "../../temps/example_temps"
   },
-"dcloudext": {
+  "dcloudext": {
     "sale": {
       "regular": {
         "price": "0.00"
@@ -35,54 +37,71 @@
       "permissions": "无"
     },
     "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-    "type": "component-vue"
+    "type": "component-vue",
+    "darkmode": "x",
+    "i18n": "x",
+    "widescreen": "x"
   },
   "uni_modules": {
     "dependencies": [
-			"uni-scss",
-			"uni-icons"
-		],
+      "uni-scss",
+      "uni-icons"
+    ],
     "encrypt": [],
     "platforms": {
       "cloud": {
-        "tcb": "y",
-        "aliyun": "y",
-        "alipay": "n"
+        "tcb": "x",
+        "aliyun": "x",
+        "alipay": "x"
       },
       "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "n"
+        "uni-app": {
+          "vue": {
+            "vue2": "√",
+            "vue3": "√"
+          },
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "vue": "√",
+            "nvue": "√",
+            "android": "√",
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": "√",
+            "alipay": "√",
+            "toutiao": "√",
+            "baidu": "√",
+            "kuaishou": "-",
+            "jd": "-",
+            "harmony": "-",
+            "qq": "√",
+            "lark": "-"
+          },
+          "quickapp": {
+            "huawei": "√",
+            "union": "√"
+          }
         },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
+        "uni-app-x": {
+          "web": {
+            "safari": "-",
+            "chrome": "-"
+          },
+          "app": {
+            "android": "-",
+            "ios": "-",
+            "harmony": "-"
+          },
+          "mp": {
+            "weixin": "-"
+          }
         }
       }
     }
   }
-}
+}

+ 4 - 0
uni_modules/uni-icons/changelog.md

@@ -1,3 +1,7 @@
+## 2.0.12(2025-08-26)
+- 优化 uni-app x 下 size 类型问题
+## 2.0.11(2025-08-18)
+- 修复 图标点击事件返回
 ## 2.0.9(2024-01-12)
 fix: 修复图标大小默认值错误的问题
 ## 2.0.8(2023-12-14)

+ 5 - 5
uni_modules/uni-icons/components/uni-icons/uni-icons.uvue

@@ -29,8 +29,8 @@
 				default: '#333333'
 			},
 			size: {
-				type: Object,
-				default: 16
+        type: [Number, String],
+        default: 16
 			},
 			fontFamily: {
 				type: String,
@@ -51,9 +51,9 @@
 			iconSize() : string {
 				const size = this.size
 				if (typeof size == 'string') {
-					const reg = /^[0-9]*$/g
-					return reg.test(size as string) ? '' + size + 'px' : '' + size;
-					// return '' + this.size
+				  const reg = /^[0-9]*$/g
+				  return reg.test(size as string) ? '' + size + 'px' : '' + size;
+				  // return '' + this.size
 				}
 				return this.getFontSize(size as number)
 			},

+ 3 - 3
uni_modules/uni-icons/components/uni-icons/uni-icons.vue

@@ -85,8 +85,8 @@
 			}
 		},
 		methods: {
-			_onClick() {
-				this.$emit('click')
+			_onClick(e) {
+				this.$emit('click', e)
 			}
 		}
 	}
@@ -107,4 +107,4 @@
 		text-decoration: none;
 		text-align: center;
 	}
-</style>
+</style>

+ 66 - 43
uni_modules/uni-icons/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uni-icons",
   "displayName": "uni-icons 图标",
-  "version": "2.0.9",
+  "version": "2.0.12",
   "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
   "keywords": [
     "uni-ui",
@@ -11,12 +11,14 @@
 ],
   "repository": "https://github.com/dcloudio/uni-ui",
   "engines": {
-    "HBuilderX": "^3.2.14"
+    "HBuilderX": "^3.2.14",
+    "uni-app": "^4.08",
+    "uni-app-x": "^4.61"
   },
   "directories": {
     "example": "../../temps/example_temps"
   },
-"dcloudext": {
+  "dcloudext": {
     "sale": {
       "regular": {
         "price": "0.00"
@@ -34,55 +36,76 @@
       "permissions": "无"
     },
     "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-    "type": "component-vue"
+    "type": "component-vue",
+    "darkmode": "x",
+    "i18n": "x",
+    "widescreen": "x"
   },
   "uni_modules": {
-    "dependencies": ["uni-scss"],
+    "dependencies": [
+      "uni-scss"
+    ],
     "encrypt": [],
     "platforms": {
       "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
+        "tcb": "x",
+        "aliyun": "x",
+        "alipay": "x"
       },
       "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y",
-          "app-uvue": "y"
+        "uni-app": {
+          "vue": {
+            "vue2": "√",
+            "vue3": "√"
+          },
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "vue": "√",
+            "nvue": "-",
+            "android": {
+                "extVersion": "",
+                "minVersion": "29"
+            },
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": "√",
+            "alipay": "√",
+            "toutiao": "√",
+            "baidu": "√",
+            "kuaishou": "-",
+            "jd": "-",
+            "harmony": "-",
+            "qq": "√",
+            "lark": "-"
+          },
+          "quickapp": {
+            "huawei": "√",
+            "union": "√"
+          }
         },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y",
-					"钉钉": "y",
-					"快手": "y",
-					"飞书": "y",
-					"京东": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
+        "uni-app-x": {
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "android": {
+                "extVersion": "",
+                "minVersion": "29"
+            },
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": "√"
+          }
         }
       }
     }
   }
-}
+}

+ 18 - 0
uni_modules/uni-popup/changelog.md

@@ -1,3 +1,21 @@
+## 1.9.11(2025-08-20)
+- 修复 uni-popup-dialog组件设置 borderRadius 不生效的 Bug
+## 1.9.10(2025-07-18)
+- 修复 nvue 下弹窗样式错乱的问题 ,更新依赖 uni-transition 组件
+- 更新 示例取消 borderRadius 属性 ,如需内容圆角,用户应该直接在内容插槽中实现
+## 1.9.9(2025-06-11)
+- 修复 uni-popup-dialog 中 setVal 方法报错的问题
+- 修复 uni-popup-dialog 数据双向绑定问题。
+## 1.9.8(2025-04-16)
+- 修复 更新组件示例 ,解决更新数据或保存项目导致弹窗消失的问题
+## 1.9.7(2025-04-14)
+- 修复 uni-popup-dialog 弹出框在vue3中双向绑定问题
+## 1.9.6(2025-01-08)
+- 修复 示例中过期图片地址
+## 1.9.5(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.9.2(2024-09-21)
+- 修复 uni-popup在android上的重复点击弹出位置不正确的bug
 ## 1.9.1(2024-04-02)
 - 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
 ## 1.9.0(2024-03-28)

+ 21 - 7
uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="uni-popup-dialog">
+	<view class="uni-popup-dialog" :style="{ borderRadius }">
 		<view class="uni-dialog-title">
 			<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text>
 		</view>
@@ -124,6 +124,10 @@
 			focus: {
 				type: Boolean,
 				default: true,
+			},
+		    borderRadius: {
+				type: String,
+				default: '11px',
 			}
 		},
 		data() {
@@ -156,12 +160,13 @@
 				}
 			},
 			value(val) {
-				if (this.maxlength != -1 && this.mode === 'input') {
-					this.val = val.slice(0, this.maxlength);
-				} else {
-					this.val = val
-				}
+				this.setVal(val)
+			},
+			// #ifdef VUE3
+			modelValue(val) {
+				this.setVal(val)
 			},
+			// #endif
 			val(val) {
 				// #ifdef VUE2
 				// TODO 兼容 vue2
@@ -189,6 +194,16 @@
 		},
 		methods: {
 			/**
+			 * 给val属性赋值
+			 */
+			setVal(val) {
+				if (this.maxlength != -1 && this.mode === 'input') {
+					this.val = val.slice(0, this.maxlength);
+				} else {
+					this.val = val
+				}
+			},
+			/**
 			 * 点击确认按钮
 			 */
 			onOk() {
@@ -218,7 +233,6 @@
 <style lang="scss">
 	.uni-popup-dialog {
 		width: 300px;
-		border-radius: 11px;
 		background-color: #fff;
 	}
 

+ 5 - 4
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue

@@ -39,24 +39,25 @@
 		},
 		data() {
 			return {
+				// TODO 替换为自己的图标
 				bottomData: [{
 						text: '微信',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/c2b17470-50be-11eb-b680-7980c8a877b8.png',
+						icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
 						name: 'wx'
 					},
 					{
 						text: '支付宝',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png',
+						icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
 						name: 'ali'
 					},
 					{
 						text: 'QQ',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/e7a79520-50be-11eb-b997-9918a5dda011.png',
+						icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
 						name: 'qq'
 					},
 					{
 						text: '新浪',
-						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png',
+						icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
 						name: 'sina'
 					},
 					// {

+ 23 - 8
uni_modules/uni-popup/components/uni-popup/uni-popup.vue

@@ -192,6 +192,17 @@
 		},
 		mounted() {
 			const fixSize = () => {
+				// #ifdef MP-WEIXIN
+				const {
+					windowWidth,
+					windowHeight,
+					windowTop,
+					safeArea,
+					screenHeight,
+					safeAreaInsets
+				} = uni.getWindowInfo()
+				// #endif
+				// #ifndef MP-WEIXIN
 				const {
 					windowWidth,
 					windowHeight,
@@ -200,6 +211,7 @@
 					screenHeight,
 					safeAreaInsets
 				} = uni.getSystemInfoSync()
+				// #endif
 				this.popupWidth = windowWidth
 				this.popupHeight = windowHeight + (windowTop || 0)
 				// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
@@ -350,6 +362,7 @@
 				this.showPopup = true
 				this.showTrans = true
 				this.$nextTick(() => {
+					this.showPoptrans()
 					if (this.messageChild && this.type === 'message') {
 						this.messageChild.timerClose()
 					}
@@ -372,8 +385,7 @@
 				}
 				// TODO 兼容 type 属性 ,后续会废弃
 				if (type) return
-				this.showPopup = true
-				this.showTrans = true
+				this.showPoptrans()
 			},
 			/**
 			 * 中间弹出样式处理
@@ -403,8 +415,7 @@
 				}
 				// TODO 兼容 type 属性 ,后续会废弃
 				if (type) return
-				this.showPopup = true
-				this.showTrans = true
+				this.showPoptrans()
 			},
 			left(type) {
 				this.popupstyle = 'left'
@@ -423,8 +434,7 @@
 				}
 				// TODO 兼容 type 属性 ,后续会废弃
 				if (type) return
-				this.showPopup = true
-				this.showTrans = true
+				this.showPoptrans()
 			},
 			right(type) {
 				this.popupstyle = 'right'
@@ -443,8 +453,13 @@
 				}
 				// TODO 兼容 type 属性 ,后续会废弃
 				if (type) return
-				this.showPopup = true
-				this.showTrans = true
+				this.showPoptrans()
+			},
+			showPoptrans(){
+				this.$nextTick(()=>{
+					this.showPopup = true
+					this.showTrans = true
+				})
 			}
 		}
 	}

+ 105 - 86
uni_modules/uni-popup/package.json

@@ -1,88 +1,107 @@
 {
-	"id": "uni-popup",
-	"displayName": "uni-popup 弹出层",
-	"version": "1.9.1",
-	"description": " Popup 组件,提供常用的弹层",
-	"keywords": [
-        "uni-ui",
-        "弹出层",
-        "弹窗",
-        "popup",
-        "弹框"
+  "id": "uni-popup",
+  "displayName": "uni-popup 弹出层",
+  "version": "1.9.11",
+  "description": " Popup 组件,提供常用的弹层",
+  "keywords": [
+    "uni-ui",
+    "弹出层",
+    "弹窗",
+    "popup",
+    "弹框"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "",
+    "uni-app": "^4.07",
+    "uni-app-x": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue",
+    "darkmode": "x",
+    "i18n": "x",
+    "widescreen": "x"
+  },
+  "uni_modules": {
+    "dependencies": [
+      "uni-scss",
+      "uni-transition"
     ],
-	"repository": "https://github.com/dcloudio/uni-ui",
-	"engines": {
-		"HBuilderX": ""
-	},
-	"directories": {
-		"example": "../../temps/example_temps"
-	},
-    "dcloudext": {
-        "sale": {
-			"regular": {
-				"price": "0.00"
-			},
-			"sourcecode": {
-				"price": "0.00"
-			}
-		},
-		"contact": {
-			"qq": ""
-		},
-		"declaration": {
-			"ads": "无",
-			"data": "无",
-			"permissions": "无"
-		},
-        "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-        "type": "component-vue"
-	},
-	"uni_modules": {
-		"dependencies": [
-			"uni-scss",
-			"uni-transition"
-		],
-		"encrypt": [],
-		"platforms": {
-			"cloud": {
-				"tcb": "y",
-                "aliyun": "y",
-                "alipay": "n"
-			},
-			"client": {
-				"App": {
-					"app-vue": "y",
-					"app-nvue": "y"
-				},
-				"H5-mobile": {
-					"Safari": "y",
-					"Android Browser": "y",
-					"微信浏览器(Android)": "y",
-					"QQ浏览器(Android)": "y"
-				},
-				"H5-pc": {
-					"Chrome": "y",
-					"IE": "y",
-					"Edge": "y",
-					"Firefox": "y",
-					"Safari": "y"
-				},
-				"小程序": {
-					"微信": "y",
-					"阿里": "y",
-					"百度": "y",
-					"字节跳动": "y",
-					"QQ": "y"
-				},
-				"快应用": {
-					"华为": "u",
-					"联盟": "u"
-                },
-                "Vue": {
-                    "vue2": "y",
-                    "vue3": "y"
-                }
-			}
-		}
-	}
-}
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "x",
+        "aliyun": "x",
+        "alipay": "x"
+      },
+      "client": {
+        "uni-app": {
+          "vue": {
+            "vue2": "√",
+            "vue3": "√"
+          },
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "vue": "√",
+            "nvue": "√",
+            "android": "√",
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": "√",
+            "alipay": "√",
+            "toutiao": "√",
+            "baidu": "√",
+            "kuaishou": "-",
+            "jd": "-",
+            "harmony": "-",
+            "qq": "√",
+            "lark": "-"
+          },
+          "quickapp": {
+            "huawei": "-",
+            "union": "-"
+          }
+        },
+        "uni-app-x": {
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "android": "√",
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": "√"
+          }
+        }
+      }
+    }
+  }
+}

+ 7 - 0
uni_modules/uni-transition/changelog.md

@@ -1,3 +1,10 @@
+## 1.3.6(2025-07-18)
+- 修复 nvue 页面,样式错误问题
+## 1.3.5(2025-06-11)
+- 修复 第一次执行不显示动画的问题
+## 1.3.4(2025-04-16)
+- 修复 页面数据更新到底动画复原的问题
+- 修复 示例页面打开报错的问题
 ## 1.3.3(2024-04-23)
 - 修复 当元素会受变量影响自动隐藏的bug
 ## 1.3.2(2023-05-04)

+ 263 - 257
uni_modules/uni-transition/components/uni-transition/uni-transition.vue

@@ -1,286 +1,292 @@
 <template>
-  <!-- #ifndef APP-NVUE -->
-  <view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-  <!-- #endif -->
-  <!-- #ifdef APP-NVUE -->
-  <view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-  <!-- #endif -->
+	<!-- #ifndef APP-NVUE -->
+	<view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick">
+		<slot></slot>
+	</view>
+	<!-- #endif -->
+	<!-- #ifdef APP-NVUE -->
+	<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick">
+		<slot></slot>
+	</view>
+	<!-- #endif -->
 </template>
 
 <script>
-import { createAnimation } from './createAnimation'
+	import { createAnimation } from './createAnimation'
 
-/**
- * Transition 过渡动画
- * @description 简单过渡动画组件
- * @tutorial https://ext.dcloud.net.cn/plugin?id=985
- * @property {Boolean} show = [false|true] 控制组件显示或隐藏
- * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
- *  @value fade 渐隐渐出过渡
- *  @value slide-top 由上至下过渡
- *  @value slide-right 由右至左过渡
- *  @value slide-bottom 由下至上过渡
- *  @value slide-left 由左至右过渡
- *  @value zoom-in 由小到大过渡
- *  @value zoom-out 由大到小过渡
- * @property {Number} duration 过渡动画持续时间
- * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
- */
-export default {
-	name: 'uniTransition',
-	emits:['click','change'],
-	props: {
-		show: {
-			type: Boolean,
-			default: false
-		},
-		modeClass: {
-			type: [Array, String],
-			default() {
-				return 'fade'
-			}
-		},
-		duration: {
-			type: Number,
-			default: 300
-		},
-		styles: {
-			type: Object,
-			default() {
-				return {}
-			}
-		},
-		customClass:{
-			type: String,
-			default: ''
-		},
-		onceRender:{
-			type:Boolean,
-			default:false
-		},
-	},
-	data() {
-		return {
-			isShow: false,
-			transform: '',
-			opacity: 1,
-			animationData: {},
-			durationTime: 300,
-			config: {}
-		}
-	},
-	watch: {
-		show: {
-			handler(newVal) {
-				if (newVal) {
-					this.open()
-				} else {
-					// 避免上来就执行 close,导致动画错乱
-					if (this.isShow) {
-						this.close()
-					}
+	/**
+	 * Transition 过渡动画
+	 * @description 简单过渡动画组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=985
+	 * @property {Boolean} show = [false|true] 控制组件显示或隐藏
+	 * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
+	 *  @value fade 渐隐渐出过渡
+	 *  @value slide-top 由上至下过渡
+	 *  @value slide-right 由右至左过渡
+	 *  @value slide-bottom 由下至上过渡
+	 *  @value slide-left 由左至右过渡
+	 *  @value zoom-in 由小到大过渡
+	 *  @value zoom-out 由大到小过渡
+	 * @property {Number} duration 过渡动画持续时间
+	 * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
+	 */
+	export default {
+		name: 'uniTransition',
+		emits: ['click', 'change'],
+		props: {
+			show: {
+				type: Boolean,
+				default: false
+			},
+			modeClass: {
+				type: [Array, String],
+				default () {
+					return 'fade'
 				}
 			},
-			immediate: true
-		}
-	},
-	computed: {
-		// 生成样式数据
-		stylesObject() {
-			let styles = {
-				...this.styles,
-				'transition-duration': this.duration / 1000 + 's'
-			}
-			let transform = ''
-			for (let i in styles) {
-				let line = this.toLine(i)
-				transform += line + ':' + styles[i] + ';'
-			}
-			return transform
+			duration: {
+				type: Number,
+				default: 300
+			},
+			styles: {
+				type: Object,
+				default () {
+					return {}
+				}
+			},
+			customClass: {
+				type: String,
+				default: ''
+			},
+			onceRender: {
+				type: Boolean,
+				default: false
+			},
 		},
-		// 初始化动画条件
-		transformStyles() {
-			return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
-		}
-	},
-	created() {
-		// 动画默认配置
-		this.config = {
-			duration: this.duration,
-			timingFunction: 'ease',
-			transformOrigin: '50% 50%',
-			delay: 0
-		}
-		this.durationTime = this.duration
-	},
-	methods: {
-		/**
-		 *  ref 触发 初始化动画
-		 */
-		init(obj = {}) {
-			if (obj.duration) {
-				this.durationTime = obj.duration
+		data() {
+			return {
+				isShow: false,
+				transform: '',
+				opacity: 0,
+				animationData: {},
+				durationTime: 300,
+				config: {}
 			}
-			this.animation = createAnimation(Object.assign(this.config, obj),this)
 		},
-		/**
-		 * 点击组件触发回调
-		 */
-		onClick() {
-			this.$emit('click', {
-				detail: this.isShow
-			})
-		},
-		/**
-		 * ref 触发 动画分组
-		 * @param {Object} obj
-		 */
-		step(obj, config = {}) {
-			if (!this.animation) return
-			for (let i in obj) {
-				try {
-					if(typeof obj[i] === 'object'){
-						this.animation[i](...obj[i])
-					}else{
-						this.animation[i](obj[i])
+		watch: {
+			show: {
+				handler(newVal) {
+					if (newVal) {
+						this.open()
+					} else {
+						// 避免上来就执行 close,导致动画错乱
+						if (this.isShow) {
+							this.close()
+						}
 					}
-				} catch (e) {
-					console.error(`方法 ${i} 不存在`)
-				}
+				},
+				immediate: true
 			}
-			this.animation.step(config)
-			return this
 		},
-		/**
-		 *  ref 触发 执行动画
-		 */
-		run(fn) {
-			if (!this.animation) return
-			this.animation.run(fn)
-		},
-		// 开始过度动画
-		open() {
-			clearTimeout(this.timer)
-			this.transform = ''
-			this.isShow = true
-			let { opacity, transform } = this.styleInit(false)
-			if (typeof opacity !== 'undefined') {
-				this.opacity = opacity
+		computed: {
+			// 生成样式数据
+			stylesObject() {
+				let styles = {
+					...this.styles,
+					'transition-duration': this.duration / 1000 + 's'
+				}
+				let transform = ''
+				for (let i in styles) {
+					let line = this.toLine(i)
+					transform += line + ':' + styles[i] + ';'
+				}
+				return transform
+			},
+			// 初始化动画条件
+			transformStyles() {
+				return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
 			}
-			this.transform = transform
-			// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
-			this.$nextTick(() => {
-				// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
-				this.timer = setTimeout(() => {
-					this.animation = createAnimation(this.config, this)
-					this.tranfromInit(false).step()
-					this.animation.run()
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				}, 20)
-			})
 		},
-		// 关闭过度动画
-		close(type) {
-			if (!this.animation) return
-			this.tranfromInit(true)
-				.step()
-				.run(() => {
-					this.isShow = false
-					this.animationData = null
-					this.animation = null
-					let { opacity, transform } = this.styleInit(false)
-					this.opacity = opacity || 1
-					this.transform = transform
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				})
-		},
-		// 处理动画开始前的默认样式
-		styleInit(type) {
-			let styles = {
-				transform: ''
+		created() {
+			// 动画默认配置
+			this.config = {
+				duration: this.duration,
+				timingFunction: 'ease',
+				transformOrigin: '50% 50%',
+				delay: 0
 			}
-			let buildStyle = (type, mode) => {
-				if (mode === 'fade') {
-					styles.opacity = this.animationType(type)[mode]
-				} else {
-					styles.transform += this.animationType(type)[mode] + ' '
+			this.durationTime = this.duration
+		},
+		methods: {
+			/**
+			 *  ref 触发 初始化动画
+			 */
+			init(obj = {}) {
+				if (obj.duration) {
+					this.durationTime = obj.duration
 				}
-			}
-			if (typeof this.modeClass === 'string') {
-				buildStyle(type, this.modeClass)
-			} else {
-				this.modeClass.forEach(mode => {
-					buildStyle(type, mode)
+				this.animation = createAnimation(Object.assign(this.config, obj), this)
+			},
+			/**
+			 * 点击组件触发回调
+			 */
+			onClick() {
+				this.$emit('click', {
+					detail: this.isShow
 				})
-			}
-			return styles
-		},
-		// 处理内置组合动画
-		tranfromInit(type) {
-			let buildTranfrom = (type, mode) => {
-				let aniNum = null
-				if (mode === 'fade') {
-					aniNum = type ? 0 : 1
-				} else {
-					aniNum = type ? '-100%' : '0'
-					if (mode === 'zoom-in') {
-						aniNum = type ? 0.8 : 1
-					}
-					if (mode === 'zoom-out') {
-						aniNum = type ? 1.2 : 1
+			},
+			/**
+			 * ref 触发 动画分组
+			 * @param {Object} obj
+			 */
+			step(obj, config = {}) {
+				if (!this.animation) return this
+				Object.keys(obj).forEach(key => {
+					const value = obj[key]
+					if (typeof this.animation[key] === 'function') {
+						Array.isArray(value) ?
+							this.animation[key](...value) :
+							this.animation[key](value)
 					}
-					if (mode === 'slide-right') {
-						aniNum = type ? '100%' : '0'
+				})
+				this.animation.step(config)
+				return this
+			},
+			/**
+			 *  ref 触发 执行动画
+			 */
+			run(fn) {
+				if (!this.animation) return
+				this.animation.run(fn)
+			},
+			// 开始过度动画
+			open() {
+				clearTimeout(this.timer)
+				this.isShow = true
+				// 新增初始状态重置逻辑(关键)
+				this.transform = this.styleInit(false).transform || ''
+				this.opacity = this.styleInit(false).opacity || 0
+
+				// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
+				this.$nextTick(() => {
+					// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
+					this.timer = setTimeout(() => {
+						this.animation = createAnimation(this.config, this)
+						this.tranfromInit(false).step()
+						this.animation.run(() => {
+							// #ifdef APP-NVUE
+							this.transform = this.styleInit(false).transform || ''
+							this.opacity = this.styleInit(false).opacity || 1
+							// #endif
+							// #ifndef APP-NVUE
+							this.transform = ''
+							this.opacity = this.styleInit(false).opacity || 1
+							// #endif
+							this.$emit('change', {
+								detail: this.isShow
+							})
+						})
+					}, 80)
+				})
+			},
+			// 关闭过度动画
+			close(type) {
+				if (!this.animation) return
+				this.tranfromInit(true)
+					.step()
+					.run(() => {
+						this.isShow = false
+						this.animationData = null
+						this.animation = null
+						let { opacity, transform } = this.styleInit(false)
+						this.opacity = opacity || 1
+						this.transform = transform
+						this.$emit('change', {
+							detail: this.isShow
+						})
+					})
+			},
+			// 处理动画开始前的默认样式
+			styleInit(type) {
+				let styles = { transform: '', opacity: 1 }
+				const buildStyle = (type, mode) => {
+					const value = this.animationType(type)[mode] // 直接使用 type 控制状态
+					if (mode.startsWith('fade')) {
+						styles.opacity = value
+					} else {
+						styles.transform += value + ' '
 					}
-					if (mode === 'slide-bottom') {
-						aniNum = type ? '100%' : '0'
+				}
+
+				if (typeof this.modeClass === 'string') {
+					buildStyle(type, this.modeClass)
+				} else {
+					this.modeClass.forEach(mode => buildStyle(type, mode))
+				}
+				return styles
+			},
+			// 处理内置组合动画
+			tranfromInit(type) {
+				let buildTranfrom = (type, mode) => {
+					let aniNum = null
+					if (mode === 'fade') {
+						aniNum = type ? 0 : 1
+					} else {
+						aniNum = type ? '-100%' : '0'
+						if (mode === 'zoom-in') {
+							aniNum = type ? 0.8 : 1
+						}
+						if (mode === 'zoom-out') {
+							aniNum = type ? 1.2 : 1
+						}
+						if (mode === 'slide-right') {
+							aniNum = type ? '100%' : '0'
+						}
+						if (mode === 'slide-bottom') {
+							aniNum = type ? '100%' : '0'
+						}
 					}
+					this.animation[this.animationMode()[mode]](aniNum)
+				}
+				if (typeof this.modeClass === 'string') {
+					buildTranfrom(type, this.modeClass)
+				} else {
+					this.modeClass.forEach(mode => {
+						buildTranfrom(type, mode)
+					})
 				}
-				this.animation[this.animationMode()[mode]](aniNum)
-			}
-			if (typeof this.modeClass === 'string') {
-				buildTranfrom(type, this.modeClass)
-			} else {
-				this.modeClass.forEach(mode => {
-					buildTranfrom(type, mode)
-				})
-			}
 
-			return this.animation
-		},
-		animationType(type) {
-			return {
-				fade: type ? 0 : 1,
-				'slide-top': `translateY(${type ? '0' : '-100%'})`,
-				'slide-right': `translateX(${type ? '0' : '100%'})`,
-				'slide-bottom': `translateY(${type ? '0' : '100%'})`,
-				'slide-left': `translateX(${type ? '0' : '-100%'})`,
-				'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
-				'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
-			}
-		},
-		// 内置动画类型与实际动画对应字典
-		animationMode() {
-			return {
-				fade: 'opacity',
-				'slide-top': 'translateY',
-				'slide-right': 'translateX',
-				'slide-bottom': 'translateY',
-				'slide-left': 'translateX',
-				'zoom-in': 'scale',
-				'zoom-out': 'scale'
+				return this.animation
+			},
+			animationType(type) {
+				return {
+					fade: type ? 1 : 0,
+					'slide-top': `translateY(${type ? '0' : '-100%'})`,
+					'slide-right': `translateX(${type ? '0' : '100%'})`,
+					'slide-bottom': `translateY(${type ? '0' : '100%'})`,
+					'slide-left': `translateX(${type ? '0' : '-100%'})`,
+					'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
+					'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
+				}
+			},
+			// 内置动画类型与实际动画对应字典
+			animationMode() {
+				return {
+					fade: 'opacity',
+					'slide-top': 'translateY',
+					'slide-right': 'translateX',
+					'slide-bottom': 'translateY',
+					'slide-left': 'translateX',
+					'zoom-in': 'scale',
+					'zoom-out': 'scale'
+				}
+			},
+			// 驼峰转中横线
+			toLine(name) {
+				return name.replace(/([A-Z])/g, '-$1').toLowerCase()
 			}
-		},
-		// 驼峰转中横线
-		toLine(name) {
-			return name.replace(/([A-Z])/g, '-$1').toLowerCase()
 		}
 	}
-}
 </script>
 
 <style></style>

+ 65 - 38
uni_modules/uni-transition/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uni-transition",
   "displayName": "uni-transition 过渡动画",
-  "version": "1.3.3",
+  "version": "1.3.6",
   "description": "元素的简单过渡动画",
   "keywords": [
     "uni-ui",
@@ -12,12 +12,14 @@
 ],
   "repository": "https://github.com/dcloudio/uni-ui",
   "engines": {
-    "HBuilderX": ""
+    "HBuilderX": "",
+    "uni-app": "^4.12",
+    "uni-app-x": ""
   },
   "directories": {
     "example": "../../temps/example_temps"
   },
-"dcloudext": {
+  "dcloudext": {
     "sale": {
       "regular": {
         "price": "0.00"
@@ -35,49 +37,74 @@
       "permissions": "无"
     },
     "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
-    "type": "component-vue"
+    "type": "component-vue",
+    "darkmode": "x",
+    "i18n": "x",
+    "widescreen": "x"
   },
   "uni_modules": {
-    "dependencies": ["uni-scss"],
+    "dependencies": [
+      "uni-scss"
+    ],
     "encrypt": [],
     "platforms": {
       "cloud": {
-        "tcb": "y",
-        "aliyun": "y",
-        "alipay": "n"
+        "tcb": "x",
+        "aliyun": "x",
+        "alipay": "x"
       },
       "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
+        "uni-app": {
+          "vue": {
+            "vue2": "√",
+            "vue3": "√"
+          },
+          "web": {
+            "safari": "√",
+            "chrome": "√"
+          },
+          "app": {
+            "vue": "√",
+            "nvue": "√",
+            "android": "√",
+            "ios": "√",
+            "harmony": "√"
+          },
+          "mp": {
+            "weixin": {
+            },
+            "alipay": {
+            },
+            "toutiao": {
+            },
+            "baidu": {
+            },
+            "kuaishou": {
+            },
+            "jd": {
+            },
+            "harmony": "-",
+            "qq": "√",
+            "lark": "-"
+          },
+          "quickapp": {
+            "huawei": "√",
+            "union": "√"
+          }
         },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
+        "uni-app-x": {
+          "web": {
+            "safari": "-",
+            "chrome": "-"
+          },
+          "app": {
+            "android": "-",
+            "ios": "-",
+            "harmony": "-"
+          },
+          "mp": {
+            "weixin": "-"
+          }
         }
       }
     }

+ 2 - 0
unpackage/dist/dev/mp-weixin/app.js

@@ -7,6 +7,7 @@ if (!Math) {
   "./pages/mine/mine.js";
   "./pages/home/home.js";
   "./pages/date/date.js";
+  "./pages/select/select.js";
   "./pages/chooseCar/chooseCar.js";
   "./pages/handlePeople/handlePeople.js";
   "./pages/commonPeople/commonPeople.js";
@@ -17,6 +18,7 @@ if (!Math) {
   "./pages/useDetail/useDetail.js";
   "./pages/identity/identity.js";
   "./pages/authenticate/authenticate.js";
+  "./pages/hexiaolist/hexiaolist.js";
 }
 const _sfc_main = {
   onLaunch: function() {

+ 3 - 1
unpackage/dist/dev/mp-weixin/app.json

@@ -5,6 +5,7 @@
     "pages/mine/mine",
     "pages/home/home",
     "pages/date/date",
+    "pages/select/select",
     "pages/chooseCar/chooseCar",
     "pages/handlePeople/handlePeople",
     "pages/commonPeople/commonPeople",
@@ -14,7 +15,8 @@
     "pages/pay/pay",
     "pages/useDetail/useDetail",
     "pages/identity/identity",
-    "pages/authenticate/authenticate"
+    "pages/authenticate/authenticate",
+    "pages/hexiaolist/hexiaolist"
   ],
   "window": {
     "navigationBarTextStyle": "black",

+ 2 - 0
unpackage/dist/dev/mp-weixin/common/vendor.js

@@ -8373,6 +8373,7 @@ const createHook = (lifecycle) => (hook, target = getCurrentInstance()) => {
 };
 const onShow = /* @__PURE__ */ createHook(ON_SHOW);
 const onLoad = /* @__PURE__ */ createHook(ON_LOAD);
+const onUnload = /* @__PURE__ */ createHook(ON_UNLOAD);
 const onReachBottom = /* @__PURE__ */ createHook(ON_REACH_BOTTOM);
 var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
 function getDefaultExportFromCjs(x) {
@@ -8703,6 +8704,7 @@ exports.onLoad = onLoad;
 exports.onMounted = onMounted;
 exports.onReachBottom = onReachBottom;
 exports.onShow = onShow;
+exports.onUnload = onUnload;
 exports.onUnmounted = onUnmounted;
 exports.p = p;
 exports.provide = provide;

+ 145 - 0
unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.js

@@ -0,0 +1,145 @@
+"use strict";
+const common_vendor = require("../../common/vendor.js");
+const utils_api = require("../../utils/api.js");
+const _sfc_main = {
+  __name: "hexiaolist",
+  setup(__props) {
+    const searchTime = common_vendor.ref("");
+    const selectedDate = common_vendor.ref(null);
+    const userInfo = common_vendor.ref();
+    const startT = common_vendor.ref("");
+    const endT = common_vendor.ref("");
+    const pageSize = common_vendor.ref(10);
+    const currentPage = common_vendor.ref(1);
+    const total = common_vendor.ref(0);
+    const recordList = common_vendor.ref([]);
+    const jumpToDateSelect = () => {
+      common_vendor.index.navigateTo({
+        url: "/pages/select/select"
+      });
+    };
+    const cancelSearch = () => {
+      searchTime.value = "";
+      startT.value = "";
+      endT.value = "";
+      selectedDate.value = null;
+      currentPage.value = 1;
+      getCommonData();
+      common_vendor.index.showToast({ title: "已清空时间筛选", icon: "none" });
+    };
+    const bindphone = (e) => {
+      common_vendor.index.makePhoneCall({
+        phoneNumber: e,
+        fail: (err) => {
+          common_vendor.index.showToast({ title: "拨打电话失败", icon: "none" });
+        }
+      });
+    };
+    common_vendor.onLoad(() => {
+      userInfo.value = common_vendor.index.getStorageSync("carUserInfo");
+      console.log(userInfo.value);
+      getCommonData();
+    });
+    common_vendor.onShow(() => {
+      const dateRange = common_vendor.index.getStorageSync("selectedDateRange");
+      if (selectedDate.value) {
+        startT.value = selectedDate.value.startTime;
+        endT.value = selectedDate.value.endTime;
+        searchTime.value = selectedDate.value.showText;
+      } else if (dateRange) {
+        startT.value = dateRange.startTime;
+        endT.value = dateRange.endTime;
+        searchTime.value = dateRange.showText;
+        common_vendor.index.removeStorageSync("selectedDateRange");
+      }
+      if (startT.value && endT.value) {
+        currentPage.value = 1;
+        getCommonData();
+      }
+    });
+    common_vendor.onUnload(() => {
+      common_vendor.index.removeStorageSync("selectedDateRange");
+    });
+    common_vendor.onReachBottom(() => {
+      if (recordList.value.length < total.value) {
+        currentPage.value++;
+        getCommonData();
+      } else {
+        common_vendor.index.showToast({
+          title: "没有更多数据了",
+          icon: "none"
+        });
+      }
+    });
+    const getCommonData = async () => {
+      let data = {};
+      if (startT.value && endT.value) {
+        data = {
+          page: currentPage.value,
+          rows: pageSize.value,
+          startTime: startT.value,
+          endTime: endT.value
+        };
+      } else {
+        data = {
+          page: currentPage.value,
+          rows: pageSize.value
+        };
+      }
+      try {
+        const res = await utils_api.myRequest({
+          url: "/carBook/brecblist.action",
+          data
+        });
+        if (currentPage.value === 1) {
+          recordList.value = res.rows;
+        } else {
+          recordList.value = [...recordList.value, ...res.rows];
+        }
+        total.value = res.total;
+      } catch (err) {
+        common_vendor.index.showToast({ title: "数据加载失败", icon: "none" });
+      }
+    };
+    return (_ctx, _cache) => {
+      return common_vendor.e({
+        a: common_vendor.t(searchTime.value || "开始时间 ~ 结束时间"),
+        b: searchTime.value
+      }, searchTime.value ? {
+        c: common_vendor.o(cancelSearch)
+      } : {}, {
+        d: common_vendor.o(jumpToDateSelect),
+        e: common_vendor.f(recordList.value, (item, index, i0) => {
+          return common_vendor.e({
+            a: item.payState == 0
+          }, item.payState == 0 ? {} : {}, {
+            b: item.payState == 2
+          }, item.payState == 2 ? {} : {}, {
+            c: item.payState == 3
+          }, item.payState == 3 ? {} : {}, {
+            d: item.payState == 1
+          }, item.payState == 1 ? common_vendor.e({
+            e: item.byState == 1
+          }, item.byState == 1 ? {} : {}, {
+            f: item.byState == 2
+          }, item.byState == 2 ? {} : {}, {
+            g: item.byState == 3
+          }, item.byState == 3 ? {} : {}) : {}, {
+            h: common_vendor.t(item.ciDate),
+            i: common_vendor.t(item.ciTime),
+            j: common_vendor.t(item.carNumber),
+            k: common_vendor.t(item.username),
+            l: common_vendor.t(item.mobile),
+            m: common_vendor.o(($event) => bindphone(item.mobile), index),
+            n: common_vendor.t(item.vertifyManMobile),
+            o: common_vendor.t(item.vertifyTime),
+            p: index
+          });
+        }),
+        f: recordList.value.length === 0
+      }, recordList.value.length === 0 ? {} : {});
+    };
+  }
+};
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-efeec928"], ["__file", "D:/创海项目/CH2025/约车小程序/yueche_app/pages/hexiaolist/hexiaolist.vue"]]);
+wx.createPage(MiniProgramPage);

+ 4 - 0
unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "核销记录",
+  "usingComponents": {}
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.wxml


+ 84 - 0
unpackage/dist/dev/mp-weixin/pages/hexiaolist/hexiaolist.wxss

@@ -0,0 +1,84 @@
+
+/* 页面容器 */
+.page-container.data-v-efeec928 {
+  min-height: 100vh;
+  background-color: #f5f5f5;
+}
+
+/* 搜索区域 */
+.search-bar.data-v-efeec928 {
+  display: flex;
+  align-items: center;
+  padding: 15rpx;
+  background-color: #fff;
+  margin-bottom: 10rpx;
+}
+.search-input-wrap.data-v-efeec928 {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  background-color: #f5f5f5;
+  border-radius: 20rpx;
+  padding: 0 15rpx;
+  height: 35px;
+  /* 点击区域cursor */
+  cursor: pointer;
+}
+.search-icon.data-v-efeec928 {
+  color: #999;
+  margin-right: 10rpx;
+}
+.search-input.data-v-efeec928 {
+  flex: 1;
+  height: 100%;
+  font-size: 14px;
+  background-color: transparent;
+  line-height: 35px;
+}
+/* 占位符样式 */
+.placeholder.data-v-efeec928 {
+  color: #999;
+}
+.cancel-btn.data-v-efeec928 {
+  color: #007aff;
+  font-size: 16px;
+  margin-left: 15rpx;
+}
+
+/* 记录列表 */
+.record-list.data-v-efeec928 {
+  padding: 0 15rpx;
+}
+.record-item.data-v-efeec928 {
+  background-color: #fff;
+  border-radius: 10rpx;
+  padding: 20rpx;
+  margin-bottom: 15rpx;
+  position: relative;
+  border: 1px solid #eee;
+}
+/* 第一条记录高亮边框 */
+.active-item.data-v-efeec928 {
+  border: 2px solid #ffd700;
+}
+/* 已乘车标签 */
+.status-tag.data-v-efeec928 {
+  position: absolute;
+  top: 20rpx;
+  right: 20rpx;
+  background-color: #4cd964;
+  color: #fff;
+  font-size: 12px;
+  padding: 2rpx 8rpx;
+  border-radius: 4rpx;
+}
+/* 记录内容 */
+.record-content.data-v-efeec928 {
+  margin-top: 5rpx;
+}
+.record-text.data-v-efeec928 {
+  display: block;
+  font-size: 14px;
+  color: #333;
+  line-height: 45rpx;
+}

+ 52 - 30
unpackage/dist/dev/mp-weixin/pages/mine/mine.js

@@ -88,18 +88,11 @@ const _sfc_main = {
       getShen();
     });
     function clickItem(item) {
-      if (item.isChcek) {
+      if (item == "hexiao") {
         if (userInfo.value) {
-          if (item.type) {
-            tabParamStore.setType(item.type);
-            common_vendor.index.switchTab({
-              url: item.path
-            });
-          } else {
-            common_vendor.index.navigateTo({
-              url: item.path
-            });
-          }
+          common_vendor.index.navigateTo({
+            url: "/pages/hexiaolist/hexiaolist"
+          });
         } else {
           common_vendor.index.showModal({
             title: "提示",
@@ -112,24 +105,49 @@ const _sfc_main = {
           });
         }
       } else {
-        if (item.text === "联系客服" || item.text === "客服电话") {
-          common_vendor.index.showModal({
-            title: "拨打客服电话:" + workTele.value,
-            content: "工作时间:" + worktime.value,
-            cancelText: "关闭",
-            confirmText: "拨打",
-            confirmColor: "#FF8205",
-            success: (res) => {
-              if (res.confirm) {
-                common_vendor.index.makePhoneCall({
-                  phoneNumber: workTele.value,
-                  // 仅支持数字,固定号码需加引号
-                  success: () => console.log("拨号功能调用成功"),
-                  fail: (err) => console.error("拨号失败:", err)
-                });
-              }
+        if (item.isChcek) {
+          if (userInfo.value) {
+            if (item.type) {
+              tabParamStore.setType(item.type);
+              common_vendor.index.switchTab({
+                url: item.path
+              });
+            } else {
+              common_vendor.index.navigateTo({
+                url: item.path
+              });
             }
-          });
+          } else {
+            common_vendor.index.showModal({
+              title: "提示",
+              content: "请先登录",
+              success: (res) => {
+                if (res.confirm) {
+                  show.value = true;
+                }
+              }
+            });
+          }
+        } else {
+          if (item.text === "联系客服" || item.text === "客服电话") {
+            common_vendor.index.showModal({
+              title: "拨打客服电话:" + workTele.value,
+              content: "工作时间:" + worktime.value,
+              cancelText: "关闭",
+              confirmText: "拨打",
+              confirmColor: "#FF8205",
+              success: (res) => {
+                if (res.confirm) {
+                  common_vendor.index.makePhoneCall({
+                    phoneNumber: workTele.value,
+                    // 仅支持数字,固定号码需加引号
+                    success: () => console.log("拨号功能调用成功"),
+                    fail: (err) => console.error("拨号失败:", err)
+                  });
+                }
+              }
+            });
+          }
         }
       }
     }
@@ -248,8 +266,12 @@ const _sfc_main = {
             d: common_vendor.o(($event) => clickItem(item), index)
           };
         }),
-        m: common_vendor.o(handleClose),
-        n: common_vendor.p({
+        m: roleType.value == "超级管理员"
+      }, roleType.value == "超级管理员" ? {
+        n: common_vendor.o(($event) => clickItem("hexiao"))
+      } : {}, {
+        o: common_vendor.o(handleClose),
+        p: common_vendor.p({
           show: show.value
         })
       });

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/mine/mine.wxml


+ 59 - 0
unpackage/dist/dev/mp-weixin/pages/select/select.js

@@ -0,0 +1,59 @@
+"use strict";
+const common_vendor = require("../../common/vendor.js");
+if (!Array) {
+  const _easycom_wd_calendar_view2 = common_vendor.resolveComponent("wd-calendar-view");
+  _easycom_wd_calendar_view2();
+}
+const _easycom_wd_calendar_view = () => "../../uni_modules/wot-design-uni/components/wd-calendar-view/wd-calendar-view.js";
+if (!Math) {
+  _easycom_wd_calendar_view();
+}
+const _sfc_main = {
+  __name: "select",
+  setup(__props) {
+    const dateRange = common_vendor.ref([]);
+    const startT = common_vendor.ref("");
+    const endT = common_vendor.ref("");
+    const handleDateChange = ({ value }) => {
+      if (Array.isArray(value) && value.length === 2) {
+        startT.value = common_vendor.dayjs(value[0]).format("YYYY-MM-DD");
+        endT.value = common_vendor.dayjs(value[1]).format("YYYY-MM-DD");
+      }
+    };
+    const confirmSelect = () => {
+      if (!startT.value || !endT.value) {
+        common_vendor.index.showToast({ title: "请选择完整的时间范围", icon: "none" });
+        return;
+      }
+      common_vendor.index.setStorageSync("selectedDateRange", {
+        startTime: startT.value,
+        endTime: endT.value,
+        showText: `${startT.value} ~ ${endT.value}`
+      });
+      const pages = getCurrentPages();
+      const prevPage = pages[pages.length - 2];
+      prevPage.$vm.selectedDate = {
+        startTime: startT.value,
+        endTime: endT.value,
+        showText: `${startT.value} ~ ${endT.value}`
+      };
+      common_vendor.index.navigateBack({ delta: 1 });
+    };
+    return (_ctx, _cache) => {
+      return {
+        a: common_vendor.o(handleDateChange),
+        b: common_vendor.o(($event) => dateRange.value = $event),
+        c: common_vendor.p({
+          type: "daterange",
+          ["start-date"]: /* @__PURE__ */ new Date("2025-01-01"),
+          ["end-date"]: /* @__PURE__ */ new Date(),
+          placeholder: "开始时间 ~ 结束时间",
+          modelValue: dateRange.value
+        }),
+        d: common_vendor.o(confirmSelect)
+      };
+    };
+  }
+};
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-bb29bc01"], ["__file", "D:/创海项目/CH2025/约车小程序/yueche_app/pages/select/select.vue"]]);
+wx.createPage(MiniProgramPage);

+ 6 - 0
unpackage/dist/dev/mp-weixin/pages/select/select.json

@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "选择日期",
+  "usingComponents": {
+    "wd-calendar-view": "../../uni_modules/wot-design-uni/components/wd-calendar-view/wd-calendar-view"
+  }
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/select/select.wxml

@@ -0,0 +1 @@
+<view class="date-select-page data-v-bb29bc01"><view class="calendar-wrap data-v-bb29bc01"><wd-calendar-view wx:if="{{c}}" class="data-v-bb29bc01" bindchange="{{a}}" u-i="bb29bc01-0" bind:__l="__l" bindupdateModelValue="{{b}}" u-p="{{c}}"/></view><view class="confirm-btn data-v-bb29bc01" bindtap="{{d}}"> 确认选择 </view></view>

+ 40 - 0
unpackage/dist/dev/mp-weixin/pages/select/select.wxss

@@ -0,0 +1,40 @@
+
+.date-select-page.data-v-bb29bc01 {
+  min-height: 100vh;
+  background-color: #f5f5f5;
+}
+.nav-bar.data-v-bb29bc01 {
+  height: 44px;
+  line-height: 44px;
+  background-color: #fff;
+  padding: 0 15rpx;
+  display: flex;
+  align-items: center;
+  border-bottom: 1px solid #eee;
+}
+.back-btn.data-v-bb29bc01 {
+  color: #007aff;
+  font-size: 16px;
+}
+.nav-title.data-v-bb29bc01 {
+  flex: 1;
+  text-align: center;
+  font-size: 18px;
+  font-weight: 500;
+}
+.calendar-wrap.data-v-bb29bc01 {
+  padding: 15rpx;
+  background-color: #fff;
+  margin: 10rpx;
+  border-radius: 10rpx;
+}
+.confirm-btn.data-v-bb29bc01 {
+  margin: 20rpx 15rpx;
+  height: 45px;
+  line-height: 45px;
+  background-color: #007aff;
+  color: #fff;
+  text-align: center;
+  border-radius: 8rpx;
+  font-size: 16px;
+}