|
|
- <template>
- <view>
- <uv-upload
- :fileList="displayFileList"
- :accept="accept"
- :maxCount="maxCount"
- :width="width"
- :height="height"
- @afterRead="afterRead"
- @delete="deleteFile"
- >
- <button class="flex btn">
- <image class="btn-icon" src="@/pages_order/static/comment/icon-plus.png" mode="widthFix" />
- </button>
- </uv-upload>
- </view>
- </template>
-
-
- <script>
- export default {
- props: {
- value: {
- type: Array,
- default() {
- return []
- }
- },
- accept: {
- type: String,
- default: 'image' // all | media | image | file | video
- },
- width: {
- type: Number | String,
- default: 190,
- },
- height: {
- type: Number | String,
- default: 190,
- },
- maxCount: {
- type: Number | String,
- default: 100,
- }
- },
- data() {
- return {
- }
- },
- computed: {
- fileList: {
- set(val) {
- this.$emit('input', val)
- },
- get() {
- return this.value
- }
- },
- displayFileList() {
- return this.fileList.map(url => ({ url }))
- },
- },
- watch: {
- fileList: {
- handler(val) {
- console.log('watch fileList', val)
- },
- deep: true,
- },
- displayFileList: {
- handler(val) {
- console.log('watch displayFileList', val)
- },
- deep: true,
- },
- },
- methods: {
- deleteFile(e){
- console.log('deleteFile', e)
- const fileList = [...this.fileList]
- fileList.splice(e.index, 1)
- this.fileList = fileList
- },
- afterRead(e){
- this.$Oss.ossUpload(e.file.url).then(url => {
- this.fileList = this.fileList.concat(url)
- })
- },
- },
- }
- </script>
-
- <style scoped lang="scss">
- .btn {
- width: 190rpx;
- height: 190rpx;
- background: #F3F2F7;
- border-radius: 16rpx;
-
- &-icon {
- width: 61rpx;
- height: auto;
- }
- }
- </style>
|