UserA.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <view class="certification-card">
  3. <view class="serve-box flex_c_s">
  4. <view>{{viewStatus?'请上传个人形象照':'个人形象照'}}</view>
  5. <view v-if="viewStatus">{{ fileCount }}/1</view>
  6. </view>
  7. <view class="serve-img-contnt">
  8. <view class="serve-img" v-for="item in files" :key="item">
  9. <view class="img-close" @click="deleteImg(item)" v-if="viewStatus"></view>
  10. <view class="serve-is-img flex_c_c">
  11. <image-viewer :src="item" :width="170" :height="227" :preview="true"></image-viewer>
  12. </view>
  13. </view>
  14. <view class="serve-up-img flex_c_c" @click="upImg" v-if="fileCount < maxImgCount && viewStatus">
  15. <up-icon name="plus" color="#C9CDD4" size="16"></up-icon>
  16. </view>
  17. </view>
  18. </view>
  19. </template>
  20. <script setup>
  21. import { computed, ref, watch } from 'vue';
  22. import { wxUploadFile } from '@/utils/wxRequest.js';
  23. import { inject } from 'vue';
  24. import ImageViewer from './image-viewer.vue'
  25. const props=defineProps({
  26. viewStatus: {
  27. type: Boolean,
  28. default: true
  29. },
  30. })
  31. const formData = inject('formData');
  32. const fileList = ref([]);
  33. const maxImgCount = 1;
  34. const fileCount = computed(() => {
  35. return formData.volunteerPicture ? 1 : 0;
  36. });
  37. const files = computed(() => {
  38. return formData.volunteerPicture?[formData.volunteerPicture] : [];
  39. });
  40. const deleteImg = () => {
  41. formData.volunteerPicture = '';
  42. };
  43. const upImg = async () => {
  44. try {
  45. const res = await wxUploadFile('img', maxImgCount);
  46. if(res && res.length >0 ){
  47. formData.volunteerPicture = res[0].url;
  48. fileList.value = [res];
  49. }
  50. } catch (error) {
  51. console.log("TCL: upImg -> error", error)
  52. }
  53. }
  54. </script>
  55. <style lang="scss" scoped>
  56. @import "./index.scss";
  57. .certification-card {
  58. margin-bottom: 20rpx;
  59. }
  60. .serve-is-img {
  61. height: 227rpx;
  62. }
  63. .serve-up-img {
  64. padding: 90rpx 0;
  65. }
  66. </style>