107 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Vue
		
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Vue
		
	
| <template>
 | ||
|     <view class="design-feedback">
 | ||
|         <view class="remark-area">
 | ||
|             <textarea
 | ||
|                 :value="innerValue"
 | ||
|                 :placeholder="placeholder"
 | ||
|                 :auto-height="autoHeight"
 | ||
|                 @input="handleInput"
 | ||
|                 class="w-full"
 | ||
|             ></textarea>
 | ||
|         </view>
 | ||
|         <view class="picture-area">
 | ||
|             <u-upload
 | ||
|                 class="upload-wrapper"
 | ||
|                 :fileList="fileList['repairImage']"
 | ||
|                 name="repairImage"
 | ||
|                 :maxCount="9"
 | ||
|                 multiple
 | ||
|                 @beforeRead="beforeRead"
 | ||
|                 @afterRead="afterRead"
 | ||
|                 @delete="deletePic"
 | ||
|                 :width="80"
 | ||
|                 :height="80"
 | ||
|                 :class="setClassName"
 | ||
|             ></u-upload>
 | ||
|         </view>
 | ||
|     </view>
 | ||
| </template>
 | ||
| 
 | ||
| <script setup lang="ts">
 | ||
| import { ref, watch, unref, computed } from 'vue'
 | ||
| import { useUploadValidate } from '@/hooks/useUploadValidate'
 | ||
| 
 | ||
| const props = defineProps({
 | ||
|     placeholder: {
 | ||
|         type: String,
 | ||
|         default: '请输入备注信息,最多250字'
 | ||
|     },
 | ||
|     autoHeight: {
 | ||
|         type: Boolean,
 | ||
|         default: true
 | ||
|     },
 | ||
|     remark: {
 | ||
|         type: String,
 | ||
|         default: ''
 | ||
|     },
 | ||
|     maxlength: {
 | ||
|         type: Number,
 | ||
|         default: 250
 | ||
|     },
 | ||
|     imageList: {
 | ||
|         type: Object,
 | ||
|         default: () => ({})
 | ||
|     }
 | ||
| })
 | ||
| const emit = defineEmits(['update:remark', 'update:imageList'])
 | ||
| 
 | ||
| const innerValue = ref('')
 | ||
| const handleInput = e => {
 | ||
|     const { value } = e.detail
 | ||
|     innerValue.value = value
 | ||
|     emit('update:remark', value)
 | ||
| }
 | ||
| 
 | ||
| const { fileList, beforeRead, afterRead, deletePic } = useUploadValidate()
 | ||
| 
 | ||
| const setClassName = computed(() => (fileList.value['repairImage'].length <= 4 ? 'column-4' : ''))
 | ||
| 
 | ||
| watch(
 | ||
|     fileList,
 | ||
|     val => {
 | ||
|         emit('update:imageList', unref(val))
 | ||
|     },
 | ||
|     {
 | ||
|         deep: true
 | ||
|     }
 | ||
| )
 | ||
| watch(
 | ||
|     () => props.remark,
 | ||
|     val => {
 | ||
|         innerValue.value = val
 | ||
|     }
 | ||
| )
 | ||
| watch(
 | ||
|     () => props.imageList,
 | ||
|     val => {
 | ||
|         fileList.value = val
 | ||
|     },
 | ||
|     { deep: true }
 | ||
| )
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| .design-feedback {
 | ||
|     padding: 32rpx 24rpx 20rpx;
 | ||
|     background-color: $white-1;
 | ||
|     border-radius: 16rpx;
 | ||
|     textarea {
 | ||
|         font-size: 28rpx;
 | ||
|         min-height: 200rpx;
 | ||
|     }
 | ||
|     .picture-area {
 | ||
|         margin-top: 20rpx;
 | ||
|     }
 | ||
| }
 | ||
| </style>
 |