BasicUpload 图片上传

upload 组件进行封装

如果文档内没有,可以尝试在在线示例内寻找

基础使用

  1. <template>
  2. <div>
  3. <div class="n-layout-page-header">
  4. <n-card :bordered="false" title="上传图片"> 上传图片,用于向用户收集图片信息 </n-card>
  5. </div>
  6. <n-card :bordered="false" class="proCard mt-4">
  7. <n-grid cols="2 s:1 m:3 l:3 xl:3 2xl:3" responsive="screen">
  8. <n-grid-item offset="0 s:0 m:1 l:1 xl:1 2xl:1">
  9. <n-form
  10. :label-width="80"
  11. :model="formValue"
  12. :rules="rules"
  13. label-placement="left"
  14. ref="formRef"
  15. class="py-8"
  16. >
  17. <n-form-item label="预约姓名" path="name">
  18. <n-input v-model:value="formValue.name" placeholder="输入姓名" />
  19. </n-form-item>
  20. <n-form-item label="预约号码" path="mobile">
  21. <n-input placeholder="电话号码" v-model:value="formValue.mobile" />
  22. </n-form-item>
  23. <n-form-item label="病例图片" path="images">
  24. <BasicUpload
  25. :action="`${uploadUrl}/v1.0/files`"
  26. :headers="uploadHeaders"
  27. :data="{ type: 0 }"
  28. name="files"
  29. :width="100"
  30. :height="100"
  31. @uploadChange="uploadChange"
  32. v-model:value="formValue.images"
  33. helpText="单个文件不超过2MB,最多只能上传10个文件"
  34. />
  35. </n-form-item>
  36. <div style="margin-left: 80px">
  37. <n-space>
  38. <n-button type="primary" @click="formSubmit">提交预约</n-button>
  39. <n-button @click="resetForm">重置</n-button>
  40. </n-space>
  41. </div>
  42. </n-form>
  43. </n-grid-item>
  44. </n-grid>
  45. </n-card>
  46. </div>
  47. </template>
  48. <script lang="ts">
  49. import { defineComponent, ref, unref, reactive, toRefs } from 'vue';
  50. import { useMessage } from 'naive-ui';
  51. import { BasicUpload } from '@/components/Upload';
  52. import { useGlobSetting } from '@/hooks/setting';
  53. const globSetting = useGlobSetting();
  54. const rules = {
  55. name: {
  56. required: true,
  57. message: '请输入预约姓名',
  58. trigger: 'blur',
  59. },
  60. remark: {
  61. required: true,
  62. message: '请输入预约备注',
  63. trigger: 'blur',
  64. },
  65. images: {
  66. required: true,
  67. type: 'array',
  68. message: '请上传病例图片',
  69. trigger: 'change',
  70. },
  71. };
  72. export default defineComponent({
  73. components: { BasicUpload },
  74. setup() {
  75. const formRef: any = ref(null);
  76. const message = useMessage();
  77. const { uploadUrl } = globSetting;
  78. const state = reactive({
  79. formValue: {
  80. name: '',
  81. mobile: '',
  82. //图片列表 通常查看和编辑使用 绝对路径 | 相对路径都可以
  83. images: ['https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'],
  84. },
  85. uploadHeaders: {
  86. platform: 'miniPrograms',
  87. timestamp: new Date().getTime(),
  88. token: 'Q6fFCuhc1vkKn5JNFWaCLf6gRAc5n0LQHd08dSnG4qo=',
  89. },
  90. });
  91. function formSubmit() {
  92. formRef.value.validate((errors) => {
  93. if (!errors) {
  94. message.success('验证成功');
  95. } else {
  96. message.error('验证失败,请填写完整信息');
  97. }
  98. });
  99. }
  100. function resetForm() {
  101. formRef.value.restoreValidation();
  102. }
  103. function uploadChange(list: string[]) {
  104. state.formValue.images = unref(list);
  105. }
  106. return {
  107. ...toRefs(state),
  108. formRef,
  109. uploadUrl,
  110. rules,
  111. formSubmit,
  112. resetForm,
  113. uploadChange,
  114. };
  115. },
  116. });
  117. </script>

Props

::: tip 温馨提醒

  • 除以下参数外,官方文档内的 props 也都支持,具体可以参考 Upload :::
属性 类型 默认值 可选值 说明 版本
accept string .jpg,.png,.jpeg,.svg,.gif - 可接受图片类型
helpText string null - 帮助提示文本
maxSize number 2 - 图片单张大小 默认2,单位M
maxNumber infinity - - 最大可上传图片张数
value any[] - - 默认显示图片列表
width number 104 - 图片列表-宽度
height number 104 - 图片列表-高度

事件

::: tip 温馨提醒

除以下事件外,官方文档内的 event 也都支持,具体可以参考 Upload

:::

事件 回调参数 说明
uploadChange Function(fileList) 接口请求成功后触发
delete Function(fileList) 删除图片后触发