Certificate.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <view class="certification-card">
  3. <view class="serve-box flex_c_s hr-solid">
  4. <view v-if="viewStatus">请上传{{ data.businessName }}资质证件</view>
  5. <view v-else>{{ data.businessName }}资质证件</view>
  6. <view v-if="viewStatus">{{ fileCount }}/3</view>
  7. </view>
  8. <view class="serve-img-contnt">
  9. <view class="serve-img" v-for="item in files" :key="item">
  10. <view class="img-close" @click="deleteImg(item)" v-if="viewStatus"></view>
  11. <view class="serve-is-img flex_c_c">
  12. <image-viewer :src="item" :width="148" :height="200" :preview="true"></image-viewer>
  13. </view>
  14. </view>
  15. <view class="serve-up-img flex_c_c" @click="upImg" v-if="fileCount < 3 && viewStatus">
  16. <up-icon name="plus" color="#C9CDD4" size="16"></up-icon>
  17. </view>
  18. </view>
  19. </view>
  20. </template>
  21. <script setup>
  22. import { computed, ref, watch } from 'vue';
  23. import { wxUploadFile } from '@/utils/wxRequest.js';
  24. import ImageViewer from './image-viewer.vue'
  25. const props = defineProps({
  26. data: Object,
  27. viewStatus: {
  28. type: Boolean,
  29. default: true
  30. },
  31. })
  32. const fileList = ref([]);
  33. const maxImgCount = 3;
  34. const { data } = props;
  35. console.log("TCL: data", data)
  36. const fileCount = computed(() => {
  37. return data.files ? data.files.length : 0;
  38. });
  39. const files = computed(() => {
  40. console.log(' data.files || []', data.files || []);
  41. return data.files || [];
  42. });
  43. const deleteImg = (url) => {
  44. fileList.value = fileList.value.filter(item => item.url !== url);
  45. uni.$u.debounce(changeFile, 300)
  46. };
  47. const upImg = async () => {
  48. try {
  49. const res = await wxUploadFile('img', maxImgCount);
  50. fileCount.value < 3 ? fileList.value = [...fileList.value, ...res] : uni.showToast({
  51. title: `最多可上传${maxImgCount}个资质证件!`,
  52. icon: 'none',
  53. });
  54. } catch (error) {
  55. console.log("TCL: upImg -> error", error)
  56. } finally {
  57. uni.$u.debounce(changeFile, 300)
  58. }
  59. }
  60. // 存储上传的文件
  61. const changeFile = () => {
  62. data.files = fileList.value.map(item => item.url);
  63. }
  64. </script>
  65. <style lang="scss" scoped>
  66. @import "./index.scss";
  67. </style>