index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <PageWrapper title="上传图片" content="上传图片,用于向用户收集图片信息">
  3. <el-card shadow="never" :bordered="false" class="mt-3 proCard">
  4. <el-row :gutter="20" justify="center">
  5. <el-col :xs="24" :sm="20" :md="14" :lg="12" :xl="8">
  6. <el-form
  7. :label-width="80"
  8. :model="formValue"
  9. :rules="rules"
  10. label-placement="left"
  11. ref="formRef"
  12. class="py-8"
  13. >
  14. <el-form-item label="预约姓名" prop="name">
  15. <el-input v-model="formValue.name" placeholder="输入姓名" />
  16. </el-form-item>
  17. <el-form-item label="预约号码" prop="mobile">
  18. <el-input placeholder="电话号码" v-model="formValue.mobile" />
  19. </el-form-item>
  20. <el-form-item label="病例图片" prop="images">
  21. <BasicUpload
  22. :action="`${uploadUrl}/api/admin/upload`"
  23. :headers="uploadHeaders"
  24. :data="{ type: 0 }"
  25. v-model:list="fileList"
  26. :limit="1"
  27. @upload-change="uploadChange"
  28. helpText="单个文件不超过2MB,最多只能上传10个文件"
  29. />
  30. </el-form-item>
  31. <el-form-item>
  32. <el-space>
  33. <el-button type="primary" @click="formSubmit">提交预约</el-button>
  34. <el-button @click="resetForm">重置</el-button>
  35. </el-space>
  36. </el-form-item>
  37. </el-form>
  38. </el-col>
  39. </el-row>
  40. </el-card>
  41. </PageWrapper>
  42. </template>
  43. <script lang="ts" setup>
  44. import { ref, unref, reactive } from 'vue';
  45. import { ElMessage } from 'element-plus';
  46. import { BasicUpload } from '@/components/Upload';
  47. import { useGlobSetting } from '@/hooks/setting';
  48. import { FormRules } from 'element-plus';
  49. const globSetting = useGlobSetting();
  50. const rules: FormRules = {
  51. name: {
  52. required: true,
  53. message: '请输入预约姓名',
  54. trigger: 'blur',
  55. },
  56. remark: {
  57. required: true,
  58. message: '请输入预约备注',
  59. trigger: 'blur',
  60. },
  61. images: {
  62. required: true,
  63. type: 'array',
  64. message: '请上传病例图片',
  65. trigger: 'change',
  66. },
  67. };
  68. const formRef: any = ref(null);
  69. const { uploadUrl } = globSetting;
  70. const fileList = ref([
  71. // {
  72. // name: 'food.jpeg',
  73. // url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
  74. // },
  75. // {
  76. // name: 'food2.jpeg',
  77. // url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
  78. // },
  79. ]);
  80. const formValue = reactive({
  81. name: '',
  82. mobile: '',
  83. //图片列表 通常查看和编辑使用 绝对路径 | 相对路径都可以
  84. images: ['https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'],
  85. });
  86. const uploadHeaders = reactive({
  87. authorization: 'Bearer Mvixk4yW3Mes8IJykW30BBJFI0c71233ZqG8PBWT',
  88. });
  89. function formSubmit() {
  90. formRef.value.validate((errors) => {
  91. if (!errors) {
  92. ElMessage.success('验证成功');
  93. } else {
  94. ElMessage.error('验证成功');
  95. }
  96. });
  97. }
  98. function resetForm() {
  99. formRef.value.restoreValidation();
  100. }
  101. function uploadChange(list: string[]) {
  102. console.log('🚀 ~ file: index.vue ~ line 118 ~ uploadChange ~ list', list);
  103. formValue.images = unref(list);
  104. }
  105. </script>