张田田 2 months ago
parent
commit
4cf5d6ab75

+ 30 - 0
miniprogram/module/order/pages/goods-evaluate/goods-evaluate.ts

@@ -135,6 +135,36 @@ Page({
     const videoContext = wx.createVideoContext("goods-video-" + index, this);
     videoContext.requestFullScreen({});
   },
+  /** 点击图片/视频:原生全屏预览(类似 test 页) */
+  onPreviewMedia(e: WechatMiniprogram.TouchEvent) {
+    const index = e.currentTarget.dataset.index as number;
+    const { mediaList } = this.data;
+    if (index < 0 || index >= mediaList.length) return;
+
+    const sources = mediaList.map((m) => ({
+      url: m.path,
+      type: m.type as "image" | "video",
+    }));
+
+    const previewMedia = (wx as any).previewMedia as
+      | ((option: { sources: { url: string; type: "image" | "video" }[]; current: number }) => void)
+      | undefined;
+
+    if (typeof previewMedia === "function") {
+      previewMedia({ sources, current: index });
+      return;
+    }
+
+    // 低版本兜底:图片用 previewImage,视频用 requestFullScreen
+    const current = mediaList[index];
+    if (current.type === "image") {
+      const urls = mediaList.filter((m) => m.type === "image").map((m) => m.path);
+      wx.previewImage({ current: current.path, urls });
+      return;
+    }
+    const ctx = wx.createVideoContext("goods-video-" + index, this);
+    ctx.requestFullScreen({});
+  },
   onVideoFullscreenChange(e: WechatMiniprogram.VideoFullScreenChange) {
     const fullScreen = !!(e.detail && e.detail.fullScreen);
     this.setData({ videoFullscreen: fullScreen });

+ 2 - 2
miniprogram/module/order/pages/goods-evaluate/goods-evaluate.wxml

@@ -48,8 +48,8 @@
     <view class="upload-section">
       <view class="media-grid">
         <view class="media-item" wx:for="{{mediaList}}" wx:key="path">
-          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewImage" data-url="{{item.path}}" />
-          <view wx:else class="media-item-video" bindtap="onPreviewVideo" data-index="{{index}}">
+          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewMedia" data-index="{{index}}" />
+          <view wx:else class="media-item-video" bindtap="onPreviewMedia" data-index="{{index}}">
             <video id="goods-video-{{index}}" class="media-thumb" src="{{item.path}}" show-center-play-btn="{{true}}" object-fit="cover" controls="{{true}}" bindfullscreenchange="onVideoFullscreenChange" />
             <view class="media-item-play"><t-icon name="play-circle-filled" size="56rpx" color="rgba(255,255,255,0.95)" /></view>
           </view>

+ 25 - 7
miniprogram/module/order/pages/goods-evaluateDetail/goods-evaluateDetail.ts

@@ -102,17 +102,35 @@ Page({
     const ctx = wx.createVideoContext("goods-detail-video-" + index, this);
     ctx.requestFullScreen({});
   },
-  /** 打开图片/视频统一轮播,从指定下标开始;轮播到视频时自动播放 */
+  /** 点击图片/视频:原生全屏预览(类似 test 页) */
   onPreviewMedia(e: WechatMiniprogram.TouchEvent) {
     const index = e.currentTarget.dataset.index as number;
     const { mediaList } = this.data;
     if (index < 0 || index >= mediaList.length) return;
-    this.setData(
-      { showMediaCarousel: true, mediaCarouselCurrent: index },
-      () => {
-        this._playVideoAtCarouselIndex(index);
-      }
-    );
+
+    const sources = mediaList.map((m) => ({
+      url: m.path,
+      type: m.type as "image" | "video",
+    }));
+
+    const previewMedia = (wx as any).previewMedia as
+      | ((option: { sources: { url: string; type: "image" | "video" }[]; current: number }) => void)
+      | undefined;
+
+    if (typeof previewMedia === "function") {
+      previewMedia({ sources, current: index });
+      return;
+    }
+
+    // 低版本兜底:图片用 previewImage,视频用 requestFullScreen
+    const current = mediaList[index];
+    if (current.type === "image") {
+      const urls = mediaList.filter((m) => m.type === "image").map((m) => m.path);
+      wx.previewImage({ current: current.path, urls });
+      return;
+    }
+    const ctx = wx.createVideoContext("goods-detail-video-" + index, this);
+    ctx.requestFullScreen({});
   },
   /** 轮播切换:暂停所有视频,若当前项是视频则播放 */
   onMediaCarouselChange(e: WechatMiniprogram.SwiperChange) {

+ 2 - 2
miniprogram/module/order/pages/goods-evaluateDetail/goods-evaluateDetail.wxml

@@ -38,8 +38,8 @@
     <view class="upload-section">
       <view class="media-grid media-list--readonly" wx:if="{{mediaList.length > 0}}">
         <view class="media-item" wx:for="{{mediaList}}" wx:key="path">
-          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewImage" data-url="{{item.path}}" />
-          <view wx:else class="media-item-video" bindtap="onPreviewVideo" data-index="{{index}}">
+          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewMedia" data-index="{{index}}" />
+          <view wx:else class="media-item-video" bindtap="onPreviewMedia" data-index="{{index}}">
             <video id="goods-detail-video-{{index}}" class="media-thumb" src="{{item.path}}" show-center-play-btn="{{true}}" object-fit="cover" controls="{{true}}" bindfullscreenchange="onVideoFullscreenChange" />
             <view class="media-item-play"><t-icon name="play-circle-filled" size="56rpx" color="rgba(255,255,255,0.95)" /></view>
           </view>

+ 31 - 8
miniprogram/module/order/pages/offline-evaluate/offline-evaluate.ts

@@ -146,20 +146,43 @@ Page({
     const videoContext = wx.createVideoContext("offline-video-" + index, this);
     videoContext.requestFullScreen({});
   },
+  /** 点击图片/视频:原生全屏预览(类似 test 页) */
+  onPreviewMedia(e: WechatMiniprogram.TouchEvent) {
+    const index = e.currentTarget.dataset.index as number;
+    const { mediaList } = this.data;
+    if (index < 0 || index >= mediaList.length) return;
+
+    const sources = mediaList.map((m) => ({
+      url: m.path,
+      type: m.type as "image" | "video",
+    }));
+
+    const previewMedia = (wx as any).previewMedia as
+      | ((option: { sources: { url: string; type: "image" | "video" }[]; current: number }) => void)
+      | undefined;
+
+    if (typeof previewMedia === "function") {
+      previewMedia({ sources, current: index });
+      return;
+    }
+
+    // 低版本兜底:图片用 previewImage,视频用 requestFullScreen
+    const current = mediaList[index];
+    if (current.type === "image") {
+      const urls = mediaList.filter((m) => m.type === "image").map((m) => m.path);
+      wx.previewImage({ current: current.path, urls });
+      return;
+    }
+    const ctx = wx.createVideoContext("offline-video-" + index, this);
+    ctx.requestFullScreen({});
+  },
   onVideoFullscreenChange(e: WechatMiniprogram.VideoFullScreenChange) {
     const fullScreen = !!(e.detail && e.detail.fullScreen);
     this.setData({ videoFullscreen: fullScreen });
   },
   onRemoveService() {
     this.setData({
-      service: {
-        patientConditioningRecordId: 0,
-        patientConditioningProgramId: 0,
-        operateTime: "",
-        operateBy: "",
-        conditioningProgramSupplierName: "",
-        image: "",
-      },
+      service: {} as OfflineEvaluateModel,
     });
   },
   async onPublish() {

+ 2 - 2
miniprogram/module/order/pages/offline-evaluate/offline-evaluate.wxml

@@ -79,8 +79,8 @@
     <view class="upload-section">
       <view class="media-grid">
         <view class="media-item" wx:for="{{mediaList}}" wx:key="path">
-          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewImage" data-url="{{item.path}}" />
-          <view wx:else class="media-item-video" bindtap="onPreviewVideo" data-index="{{index}}">
+          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewMedia" data-index="{{index}}" />
+          <view wx:else class="media-item-video" bindtap="onPreviewMedia" data-index="{{index}}">
             <video id="offline-video-{{index}}" class="media-thumb" src="{{item.path}}" show-center-play-btn="{{true}}" object-fit="cover" controls="{{true}}" bindfullscreenchange="onVideoFullscreenChange" />
             <view class="media-item-play"><t-icon name="play-circle-filled" size="56rpx" color="rgba(255,255,255,0.95)" /></view>
           </view>

+ 30 - 0
miniprogram/module/order/pages/offline-evaluateDetail/offline-evaluateDetail.ts

@@ -91,6 +91,36 @@ Page({
     const ctx = wx.createVideoContext("offline-detail-video-" + index, this);
     ctx.requestFullScreen({});
   },
+  /** 点击图片/视频:原生全屏预览(类似 test 页) */
+  onPreviewMedia(e: WechatMiniprogram.TouchEvent) {
+    const index = e.currentTarget.dataset.index as number;
+    const { mediaList } = this.data;
+    if (index < 0 || index >= mediaList.length) return;
+
+    const sources = mediaList.map((m) => ({
+      url: m.path,
+      type: m.type as "image" | "video",
+    }));
+
+    const previewMedia = (wx as any).previewMedia as
+      | ((option: { sources: { url: string; type: "image" | "video" }[]; current: number }) => void)
+      | undefined;
+
+    if (typeof previewMedia === "function") {
+      previewMedia({ sources, current: index });
+      return;
+    }
+
+    // 低版本兜底:图片用 previewImage,视频用 requestFullScreen
+    const current = mediaList[index];
+    if (current.type === "image") {
+      const urls = mediaList.filter((m) => m.type === "image").map((m) => m.path);
+      wx.previewImage({ current: current.path, urls });
+      return;
+    }
+    const ctx = wx.createVideoContext("offline-detail-video-" + index, this);
+    ctx.requestFullScreen({});
+  },
   onVideoFullscreenChange(e: WechatMiniprogram.VideoFullScreenChange) {
     const fullScreen = !!(e.detail && e.detail.fullScreen);
     this.setData({ videoFullscreen: fullScreen });

+ 2 - 2
miniprogram/module/order/pages/offline-evaluateDetail/offline-evaluateDetail.wxml

@@ -70,8 +70,8 @@
     <view class="upload-section">
       <view class="media-grid media-list--readonly" wx:if="{{mediaList.length > 0}}">
         <view class="media-item" wx:for="{{mediaList}}" wx:key="path">
-          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewImage" data-url="{{item.path}}" />
-          <view wx:else class="media-item-video" bindtap="onPreviewVideo" data-index="{{index}}">
+          <image wx:if="{{item.type === 'image'}}" class="media-thumb" src="{{item.path}}" mode="aspectFill" bindtap="onPreviewMedia" data-index="{{index}}" />
+          <view wx:else class="media-item-video" bindtap="onPreviewMedia" data-index="{{index}}">
             <video id="offline-detail-video-{{index}}" class="media-thumb" src="{{item.path}}" show-center-play-btn="{{true}}" object-fit="cover" controls="{{true}}" bindfullscreenchange="onVideoFullscreenChange" />
             <view class="media-item-play"><t-icon name="play-circle-filled" size="56rpx" color="rgba(255,255,255,0.95)" /></view>
           </view>

+ 5 - 0
miniprogram/pages/home/home.ts

@@ -296,6 +296,11 @@ Page({
       });
     }
   },
+  goceshi() {
+    wx.navigateTo({
+      url: `/module/order/pages/test/test`,
+    });
+  },
   // 去预约
   onAppointment(e: any) {
     const id = e.currentTarget.dataset.id;

+ 1 - 1
miniprogram/pages/home/home.wxml

@@ -79,7 +79,7 @@
       </view>
     </view>
 
-
+<view bindtap="goceshi">测试</view>
     <view class="care-container" wx:if="{{displayList.length>0 && i18n.home.__showDisplay__}}">
       <view class="care-box">
         <view class="care-header">