123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- // mask
- Component({
- /**
- * 组件的属性列表
- */
- externalClasses: ['l-class', 'l-item-class'],
- behaviors: ['wx://form-field'],
- properties: {
- urls: {
- type: Array,
- value: []
- },
- // 最多可以选择的图片张数
- count: {
- type: [String, Number],
- value: 4
- },
- // 清除urls
- clear: {
- type: Boolean,
- value: false,
- observer: function (newVal, oldVal, changedPath) {
- if (newVal) {
- this.handleClear();
- }
- }
- },
- // 每行可显示的个数
- size: {
- type: [String, Number],
- value: 2
- },
- // 所选的图片的尺寸 ['original', 'compressed']
- // 选择图片的来源
- // sourceType: {
- // type: String,
- // value: '',
- // },
- // 图片裁剪、缩放的模式
- mode: {
- type: String,
- value: 'aspectFit', // 参考微信小程序 image 组件的mode属性列表
- },
- // 设置是否传入slot
- custom: {
- type: Boolean,
- value: false
- },
- // 是否可以预览
- isPreview: {
- type: Boolean,
- value: true
- }
- },
- /**
- * 组件的初始数据
- */
- data: {
- showBtn: true,
- tempFilePath: '',
- },
- /**
- * 组件的方法列表
- */
- methods: {
- handleClear() {
- this.setData({
- urls: [],
- clear: false,
- showBtn: true
- })
- let detail = true;
- let option = {};
- this.triggerEvent('linclear', detail, option);
- },
- // 预览 preview
- onPreviewTap(e) {
- const that = this
- const index = e.currentTarget.dataset.index
- const tempFilePath = this.data.urls[index]
- let detail = {
- index, // 下标
- current: tempFilePath, // 当前显示图片的http链接
- all: that.data.urls // 需要预览的图片http链接列表
- };
- let option = {};
- if (this.data.isPreview === true) {
- wx.previewImage({
- current: tempFilePath, // 当前显示图片的http链接
- urls: that.data.urls // 需要预览的图片http链接列表
- })
- }
- this.triggerEvent('linpreview', detail, option);
- },
- // 增加 add
- onAddTap(e) {
- const that = this;
- const count = this.data.count - this.data.urls.length
- if (count === 0 ) {
- return
- }
- wx.chooseImage({
- count,
- sizeType: ["compressed"],
- sourceType: ['album'],
- success(res) {
- // tempFilePath可以作为img标签的src属性显示图片
- const tempFilePath = res.tempFilePaths;
- const newtempFilePaths = that.data.urls.concat(tempFilePath)
- // 判断是否还能继续添加图片
- if (newtempFilePaths.length === parseInt(that.data.count)) {
- that.setData({
- showBtn: false
- })
- }
- that.setData({
- urls: newtempFilePaths,
- value: newtempFilePaths,
- tempFilePath
- })
- let detail = {
- current: tempFilePath,
- all: newtempFilePaths
- }
- let option = {};
- that.triggerEvent('linchange', detail, option);
- }
- })
- },
- // 删除 remove
- onDelTap(e) {
- const index = e.currentTarget.dataset.index
- const urls = this.data.urls
- const tempFilePath = urls[index]
- const tempFilePaths = this.handleSplice(urls, tempFilePath)
- // 判断是否还能继续添加图片
- if (tempFilePaths.length < parseInt(this.data.count)) {
- this.setData({
- showBtn: true
- })
- }
- this.setData({
- tempFilePath,
- urls: tempFilePaths,
- value: tempFilePaths,
- })
- let detail = {
- index,
- current: tempFilePath,
- all: tempFilePaths
- }
- let option = {};
- this.triggerEvent('linremove', detail, option);
- },
- handleSplice(arr, current) {
- const newArr = arr.filter(item => item!== current)
- return newArr
- },
- },
- attached: function () {
- },
- })
|