8 changed files with 270 additions and 9 deletions
			
			
		@ -0,0 +1,7 @@
				@@ -0,0 +1,7 @@
					 | 
				
			||||
{ | 
				
			||||
  "component": true, | 
				
			||||
  "usingComponents": { | 
				
			||||
    "van-popup": "@vant/weapp/popup/index", | 
				
			||||
    "van-uploader": "@vant/weapp/uploader/index" | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,30 @@
				@@ -0,0 +1,30 @@
					 | 
				
			||||
.button { | 
				
			||||
  padding: 0; | 
				
			||||
  line-height: 1; | 
				
			||||
  background-color: transparent; | 
				
			||||
  &::after { | 
				
			||||
    border: none; | 
				
			||||
    outline: none; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.popup1 { | 
				
			||||
  position: relative; | 
				
			||||
  width: 580rpx; | 
				
			||||
  height: 590rpx; | 
				
			||||
  box-sizing: border-box; | 
				
			||||
  .bg { | 
				
			||||
    width: 100%; | 
				
			||||
    height: 100%; | 
				
			||||
  } | 
				
			||||
  .sure { | 
				
			||||
    position: absolute; | 
				
			||||
    width: 100%; | 
				
			||||
    bottom: 40rpx; | 
				
			||||
    left: 0; | 
				
			||||
    text-align: center; | 
				
			||||
    font-size: 32rpx; | 
				
			||||
    color: rgba(0, 180, 197, 1); | 
				
			||||
    line-height: 48rpx; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
@ -0,0 +1,184 @@
				@@ -0,0 +1,184 @@
					 | 
				
			||||
const app = getApp<IAppOption>(); | 
				
			||||
 | 
				
			||||
// pages/story/a.ts
 | 
				
			||||
Component({ | 
				
			||||
  /** | 
				
			||||
   * 组件的属性列表 | 
				
			||||
   */ | 
				
			||||
  properties: { | 
				
			||||
    chooseAvatar: { | 
				
			||||
      type: Boolean, | 
				
			||||
      value: false, | 
				
			||||
    }, | 
				
			||||
    chooseMessage: { | 
				
			||||
      type: Boolean, | 
				
			||||
      value: false, | 
				
			||||
    }, | 
				
			||||
    accept: { | 
				
			||||
      type: String, | 
				
			||||
      value: "image", | 
				
			||||
    }, | 
				
			||||
    obscure: { | 
				
			||||
      type: Boolean, | 
				
			||||
      value: false, | 
				
			||||
    }, | 
				
			||||
    edit: { | 
				
			||||
      type: Boolean, | 
				
			||||
      value: false, | 
				
			||||
    }, | 
				
			||||
  }, | 
				
			||||
 | 
				
			||||
  /** | 
				
			||||
   * 组件的初始数据 | 
				
			||||
   */ | 
				
			||||
  data: { | 
				
			||||
    show1: false, | 
				
			||||
    fileTypeList: { | 
				
			||||
      doc: 5, | 
				
			||||
      docx: 5, | 
				
			||||
      pdf: 4, | 
				
			||||
      xls: 6, | 
				
			||||
      xlsx: 6, | 
				
			||||
      ppt: 7, | 
				
			||||
    }, | 
				
			||||
    cacheEditParams: {}, | 
				
			||||
  }, | 
				
			||||
 | 
				
			||||
  /** | 
				
			||||
   * 组件的方法列表 | 
				
			||||
   */ | 
				
			||||
  methods: { | 
				
			||||
    GetExtensionFileName(pathfilename) { | 
				
			||||
      const reg = /(\\+)/g; | 
				
			||||
      const pString = pathfilename.replace(reg, "#"); //用正则表达式来将\或\\替换成#
 | 
				
			||||
      const arr = pString.split("#"); // 以“#”为分隔符,将字符分解为数组 例如 D Program Files bg.png
 | 
				
			||||
      const lastString = arr[arr.length - 1]; //取最后一个字符
 | 
				
			||||
      const arr2 = lastString.split("."); //   再以"."作为分隔符
 | 
				
			||||
      return arr2[arr2.length - 1]; //将后缀名返回出来
 | 
				
			||||
    }, | 
				
			||||
    handleAfterRead(e, editEnd = false) { | 
				
			||||
      if (this.data.edit && !editEnd) { | 
				
			||||
        this.setData({ | 
				
			||||
          show1: true, | 
				
			||||
          cacheEditParams: e, | 
				
			||||
        }); | 
				
			||||
        return; | 
				
			||||
      } | 
				
			||||
      if (this.data.obscure) { | 
				
			||||
        wx.editImage({ | 
				
			||||
          src: e.detail.file.url || e.detail.file.tempFilePath, | 
				
			||||
          success: (res: any) => { | 
				
			||||
            this.uploadFile({ | 
				
			||||
              ...e.detail.file, | 
				
			||||
              tempFilePath: res.tempFilePath, | 
				
			||||
            }).then((res) => { | 
				
			||||
              this.triggerEvent("file", res as object); | 
				
			||||
            }); | 
				
			||||
          }, | 
				
			||||
          fail: (err) => { | 
				
			||||
            if (err.errMsg.includes("开发者工具")) { | 
				
			||||
              this.uploadFile(e.detail.file).then((res) => { | 
				
			||||
                this.triggerEvent("file", res as object); | 
				
			||||
              }); | 
				
			||||
            } | 
				
			||||
          }, | 
				
			||||
        }); | 
				
			||||
      } else { | 
				
			||||
        this.uploadFile(e.detail.file).then((res) => { | 
				
			||||
          this.triggerEvent("file", res as object); | 
				
			||||
        }); | 
				
			||||
      } | 
				
			||||
    }, | 
				
			||||
    handleEditEnd() { | 
				
			||||
      this.setData({ | 
				
			||||
        show1: false, | 
				
			||||
      }); | 
				
			||||
      this.handleAfterRead(this.data.cacheEditParams, true); | 
				
			||||
    }, | 
				
			||||
    handleChooseAvatar(e) { | 
				
			||||
      this.uploadFile({ | 
				
			||||
        fileType: "image", | 
				
			||||
        tempFilePath: e.detail.avatarUrl, | 
				
			||||
        size: 0, | 
				
			||||
      }).then((res) => { | 
				
			||||
        this.triggerEvent("file", res as object); | 
				
			||||
      }); | 
				
			||||
    }, | 
				
			||||
    handleChooseFile() { | 
				
			||||
      wx.chooseMessageFile({ | 
				
			||||
        type: "file", | 
				
			||||
        count: 1, | 
				
			||||
        success: (res) => { | 
				
			||||
          this.uploadFile({ | 
				
			||||
            ...res.tempFiles[0], | 
				
			||||
            fileType: res.tempFiles[0].type, | 
				
			||||
            tempFilePath: res.tempFiles[0].path, | 
				
			||||
          }).then((res) => { | 
				
			||||
            this.triggerEvent("file", res as object); | 
				
			||||
          }); | 
				
			||||
        }, | 
				
			||||
        fail() { | 
				
			||||
          wx.showToast({ | 
				
			||||
            icon: "none", | 
				
			||||
            title: "取消选择", | 
				
			||||
          }); | 
				
			||||
        }, | 
				
			||||
      }); | 
				
			||||
    }, | 
				
			||||
    uploadFile(item) { | 
				
			||||
      wx.showLoading({ | 
				
			||||
        title: "正在上传", | 
				
			||||
      }); | 
				
			||||
      return new Promise((resolve, reject) => { | 
				
			||||
        let url = `${app.globalData.upFileUrl}?r=file-service/upload-`; | 
				
			||||
        if (item.fileType === "image") { | 
				
			||||
          url += "img"; | 
				
			||||
        } else if (item.fileType === "video" || item.type === "video") { | 
				
			||||
          url += "video"; | 
				
			||||
          item.tempFilePath = item.url; | 
				
			||||
        } else if (item.fileType === "audio") { | 
				
			||||
          url += "audio"; | 
				
			||||
        } else { | 
				
			||||
          url += "doc"; | 
				
			||||
        } | 
				
			||||
        wx.uploadFile({ | 
				
			||||
          filePath: item.tempFilePath, | 
				
			||||
          name: "file", | 
				
			||||
          url, | 
				
			||||
          success: (res) => { | 
				
			||||
            wx.hideLoading(); | 
				
			||||
            const data = JSON.parse(res.data); | 
				
			||||
            const suffix = this.GetExtensionFileName(data.data.Url); | 
				
			||||
            const expandJson = { | 
				
			||||
              fileId: "", | 
				
			||||
              name: item.name || `病历相关文件.${suffix}`, | 
				
			||||
              size: (item.size / 1024).toFixed(2), | 
				
			||||
              fileUrl: data.data.Url, | 
				
			||||
              suffix, | 
				
			||||
              type: item.fileType, | 
				
			||||
              imgUrl: "", | 
				
			||||
              duration: 0, | 
				
			||||
              fileType: this.data.fileTypeList[suffix] || 99, | 
				
			||||
              videoUrl: "", | 
				
			||||
              hash: "", | 
				
			||||
            }; | 
				
			||||
            if (item.fileType === "image") { | 
				
			||||
              expandJson.imgUrl = data.data.Url; | 
				
			||||
            } else if (item.fileType === "video" || item.type === "video") { | 
				
			||||
              expandJson.imgUrl = data.data.SnapshotUrl; | 
				
			||||
            } else if (item.fileType === "audio") { | 
				
			||||
              expandJson.duration = Number.parseInt(String(item.duration / 1000)); | 
				
			||||
            } | 
				
			||||
            resolve(expandJson); | 
				
			||||
          }, | 
				
			||||
          fail() { | 
				
			||||
            wx.hideLoading(); | 
				
			||||
            reject(new Error("上传失败")); | 
				
			||||
          }, | 
				
			||||
        }); | 
				
			||||
      }); | 
				
			||||
    }, | 
				
			||||
  }, | 
				
			||||
}); | 
				
			||||
 | 
				
			||||
export {}; | 
				
			||||
@ -0,0 +1,19 @@
				@@ -0,0 +1,19 @@
					 | 
				
			||||
<button class="button" wx:if="{{chooseAvatar}}" open-type="chooseAvatar" bindchooseavatar="handleChooseAvatar"> | 
				
			||||
  <slot></slot> | 
				
			||||
</button> | 
				
			||||
<button class="button" wx:elif="{{chooseMessage}}" bind:tap="handleChooseFile"> | 
				
			||||
  <slot></slot> | 
				
			||||
</button> | 
				
			||||
<van-uploader wx:else accept="{{accept}}" max-count="{{1}}" bind:after-read="handleAfterRead"> | 
				
			||||
  <slot></slot> | 
				
			||||
</van-uploader> | 
				
			||||
 | 
				
			||||
<van-popup show="{{ show1 }}" bind:close="onClose" round> | 
				
			||||
  <view class="popup1"> | 
				
			||||
    <image class="bg" src="{{imageUrl}}daub.gif?t={{Timestamp}}"></image> | 
				
			||||
    <view class="sure" bind:tap="handleEditEnd"> | 
				
			||||
      我知道了 去涂抹 | 
				
			||||
      <van-icon name="arrow" /> | 
				
			||||
    </view> | 
				
			||||
  </view> | 
				
			||||
</van-popup> | 
				
			||||
@ -1,6 +1,7 @@
				@@ -1,6 +1,7 @@
					 | 
				
			||||
{ | 
				
			||||
  "usingComponents": { | 
				
			||||
    "van-icon": "@vant/weapp/icon/index", | 
				
			||||
    "global-toast":"/components/global-toast/index" | 
				
			||||
    "global-toast": "/components/global-toast/index", | 
				
			||||
    "uploadFile": "/components/uploadFile/index" | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
				 
					 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue