payment-receipt.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <script setup lang="ts">
  2. import { ElForm, ElMessage, UploadProps } from "element-plus";
  3. import { reactive, ref } from "vue";
  4. import { receipt_rules } from "../../config/configs";
  5. import { httpImageUpload, baseUrl } from "/@/api/other";
  6. import { useResponseHandle } from "/@/hooks";
  7. import { useUserStore } from "/@/store/modules/user";
  8. const emit = defineEmits(["changeStatus"]);
  9. const formData = reactive({
  10. return_image: "",
  11. return_time: ""
  12. });
  13. const types = ["image/png", "image/jpg", "image/bmp", "image/jpeg"];
  14. const formRef = ref<InstanceType<typeof ElForm>>(null);
  15. const responseHandle = useResponseHandle();
  16. const userStore = useUserStore();
  17. const onBeforeReturnImageUpload: UploadProps["beforeUpload"] = ({
  18. type,
  19. size
  20. }) => {
  21. if (!types.includes(type)) {
  22. ElMessage.error("请上传jpg.png.bmp.jpeg类型图片");
  23. return false;
  24. }
  25. if (size / 1024 / 1024 > 1) {
  26. ElMessage.error("图片大小超过1M");
  27. return false;
  28. }
  29. };
  30. const handleRequeset: UploadProps["httpRequest"] = async ({ file }) => {
  31. const _formData = new FormData();
  32. _formData.append("img", file);
  33. _formData.append("token", userStore.token);
  34. const { message, code, data } = await httpImageUpload(_formData);
  35. responseHandle({
  36. message,
  37. code,
  38. handler: () => (formData.return_image = baseUrl + "/" + data[0].url)
  39. });
  40. };
  41. //付款回执 状态为4
  42. const handlePaymentReceipt = () => {
  43. formRef.value.validate(
  44. isValid => isValid && emit("changeStatus", "4", formData)
  45. );
  46. };
  47. </script>
  48. <template>
  49. <el-form ref="formRef" :model="formData" :rules="receipt_rules">
  50. <el-form-item label="回执图片" prop="return_image">
  51. <div>
  52. <el-upload
  53. class="upload"
  54. :before-upload="onBeforeReturnImageUpload"
  55. :http-request="handleRequeset"
  56. :show-file-list="false"
  57. >
  58. <img
  59. class="avatar"
  60. v-if="formData.return_image"
  61. :src="formData.return_image"
  62. />
  63. <div class="text" v-else>点击上传</div>
  64. </el-upload>
  65. <span>大小:小于1M; 尺寸:100*100; 类型:jpg.png.bmp.jpeg</span>
  66. </div>
  67. </el-form-item>
  68. <el-form-item label="回执时间" prop="return_time">
  69. <el-date-picker
  70. type="datetime"
  71. value-format="YYYY-MM-DD HH:mm:ss"
  72. v-model="formData.return_time"
  73. placeholder="请输入回执时间"
  74. />
  75. </el-form-item>
  76. <el-form-item w-full flex justify-end>
  77. <el-button type="primary" @click="handlePaymentReceipt">保存</el-button>
  78. </el-form-item>
  79. </el-form>
  80. </template>
  81. <style lang="scss">
  82. .upload {
  83. width: 178px;
  84. height: 178px;
  85. display: block;
  86. border: 1px dashed var(--el-border-color);
  87. .text {
  88. font-size: 28px;
  89. color: #8c939d;
  90. width: 178px;
  91. height: 178px;
  92. text-align: center;
  93. font-size: 22px;
  94. line-height: 178px;
  95. }
  96. &:hover {
  97. border-color: var(--el-color-primary);
  98. }
  99. .avatar {
  100. width: 178px;
  101. height: 178px;
  102. display: block;
  103. }
  104. }
  105. </style>