upload.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <template>
  2. <div>
  3. <el-form-item label="上传地址"
  4. v-if="!data.oss">
  5. <el-input v-model="data.action"
  6. clearable
  7. placeholder="上传地址"></el-input>
  8. </el-form-item>
  9. <el-form-item label="接受文件类型"
  10. label-width="110px"
  11. v-if="!data.oss">
  12. <el-input v-model="data.accept"
  13. clearable
  14. placeholder="接受文件类型,如:image/png,image/jpg"></el-input>
  15. </el-form-item>
  16. <el-form-item label="OSS">
  17. <template slot="label">
  18. <el-link :underline="false"
  19. href="https://avuejs.com/form/form-upload.html#%E9%98%BF%E9%87%8C%E4%BA%91oss%E4%B8%8A%E4%BC%A0"
  20. target="_blank">OSS <i class="el-icon-question"></i></el-link>
  21. </template>
  22. <el-select v-model="data.oss"
  23. placeholder="oss不写则为普通上传"
  24. clearable
  25. style="width: 100%">
  26. <el-option label="阿里"
  27. value="ali"></el-option>
  28. <el-option label="七牛"
  29. value="qiniu"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <template v-if="avueVersion('2.9.0')">
  33. <el-form-item label="是否拖拽上传"
  34. label-width="110px">
  35. <el-switch v-model="data.drag"></el-switch>
  36. </el-form-item>
  37. <el-form-item label="文件列表类型"
  38. label-width="110px"
  39. v-if="!data.drag">
  40. <el-select v-model="data.listType"
  41. placeholder="文件列表类型"
  42. clearable>
  43. <el-option label="附件"
  44. value="text"></el-option>
  45. <el-option label="照片墙"
  46. value="picture-card"></el-option>
  47. <el-option label="头像"
  48. value="picture-img"></el-option>
  49. <el-option label="缩略图"
  50. value="picture"></el-option>
  51. </el-select>
  52. </el-form-item>
  53. </template>
  54. <template v-else>
  55. <el-form-item label="拖拽上传"
  56. label-width="110px">
  57. <el-switch v-model="data.dragFile"></el-switch>
  58. </el-form-item>
  59. <el-form-item label="文件列表类型"
  60. label-width="110px"
  61. v-if="!data.dragFile">
  62. <el-select v-model="data.listType"
  63. placeholder="文件列表类型"
  64. clearable>
  65. <el-option label="附件"
  66. value="text"></el-option>
  67. <el-option label="照片墙"
  68. value="picture-card"></el-option>
  69. <el-option label="头像"
  70. value="picture-img"></el-option>
  71. <el-option label="缩略图"
  72. value="picture"></el-option>
  73. </el-select>
  74. </el-form-item>
  75. <el-form-item label="拖拽排序"
  76. label-width="110px">
  77. <el-switch v-model="data.drag"></el-switch>
  78. </el-form-item>
  79. </template>
  80. <div class="el-form-item el-form-item--small el-form--label-top">
  81. <label class="el-form-item__label"
  82. style="padding: 0;">参数设置:</label>
  83. <div class="el-form-item__content">
  84. 请求头
  85. <avue-dynamic v-model="data.headersConfig"
  86. :children="option"></avue-dynamic>
  87. 请求体
  88. <avue-dynamic v-model="data.dataConfig"
  89. :children="option"></avue-dynamic>
  90. </div>
  91. </div>
  92. <div class="el-form-item el-form-item--small el-form--label-top">
  93. <label class="el-form-item__label"
  94. style="padding: 0;">
  95. <el-link :underline="false"
  96. href="https://avuejs.com/form/form-upload.html"
  97. target="_blank">上传参数设置 <i class="el-icon-question"></i></el-link>
  98. </label>
  99. <div class="el-form-item__content">
  100. 上传成功返回结构体的图片地址
  101. <el-input v-model="data.propsHttp.url"
  102. size="small"
  103. placeholder="上传成功返回结构体的图片地址"></el-input>
  104. 上传成功返回结构体的图片的姓名
  105. <el-input v-model="data.propsHttp.name"
  106. size="small"
  107. placeholder="上传成功返回结构体的图片的姓名"></el-input>
  108. 返回结构体的层次
  109. <el-input v-model="data.propsHttp.res"
  110. size="small"
  111. placeholder="返回结构体的层次"></el-input>
  112. 文件名称
  113. <el-input v-model="data.propsHttp.fileName"
  114. size="small"
  115. placeholder="文件名称,默认file"></el-input>
  116. </div>
  117. </div>
  118. <el-form-item label="是否显示已上传文件列表"
  119. label-width="180px">
  120. <el-switch v-model="data.showFileList"></el-switch>
  121. </el-form-item>
  122. <el-form-item label="文件大小">
  123. <el-input-number v-model="data.fileSize"
  124. controls-position="right"
  125. placeholder="文件大小限制(字节)"
  126. :min="0"
  127. style="width: 100%;"></el-input-number>
  128. </el-form-item>
  129. <el-form-item label="上传限制提示"
  130. label-width="110px">
  131. <el-input v-model="data.tip"
  132. clearable
  133. placeholder="上传限制提示"></el-input>
  134. </el-form-item>
  135. <el-form-item label="上传中提示"
  136. label-width="110px">
  137. <el-input v-model="data.loadText"
  138. clearable
  139. placeholder="上传中提示"></el-input>
  140. </el-form-item>
  141. <el-form-item label="是否多文件上传"
  142. label-width="130px">
  143. <el-switch v-model="data.multiple"></el-switch>
  144. </el-form-item>
  145. <el-form-item v-if="data.multiple"
  146. label="多文件数量限制"
  147. label-width="130px">
  148. <el-input-number v-model="data.limit"
  149. controls-position="right"
  150. placeholder="多文件上传数量限制"
  151. :min="1"
  152. style="width: 100%;"></el-input-number>
  153. </el-form-item>
  154. <el-form-item label="水印配置,开启后只能上传图片"
  155. label-width="230px">
  156. <el-switch v-model="data.showCanvas"></el-switch>
  157. </el-form-item>
  158. <div class="el-form-item el-form-item--small el-form--label-top"
  159. v-if="data.canvasOption">
  160. <label class="el-form-item__label"
  161. style="padding: 0;">水印设置:</label>
  162. <div class="el-form-item__content">
  163. 水印文字
  164. <el-input v-model="data.canvasOption.text"
  165. size="small"
  166. clearable
  167. placeholder="水印文字"></el-input>
  168. 字体类型
  169. <el-input v-model="data.canvasOption.fontFamily"
  170. size="small"
  171. clearable
  172. placeholder="字体类型"></el-input>
  173. 字体颜色
  174. <avue-input-color v-model="data.canvasOption.color"
  175. size="small"
  176. placeholder="字体颜色"></avue-input-color>
  177. 字体大小
  178. <el-input-number v-model="data.canvasOption.fontSize"
  179. size="small"
  180. controls-position="right"
  181. placeholder="字体大小"></el-input-number>
  182. 文字的透明度
  183. <el-input-number v-model="data.canvasOption.opacity"
  184. size="small"
  185. controls-position="right"
  186. placeholder="文字的透明度"
  187. :step="10"
  188. :min="10"
  189. :max="100"></el-input-number>
  190. 文字距离图片底部的距离<br>
  191. <el-input-number v-model="data.canvasOption.bottom"
  192. controls-position="right"
  193. placeholder="文字距离图片底部的距离"
  194. size="small"></el-input-number>
  195. 文字距离图片右边的距离<br>
  196. <el-input-number v-model="data.canvasOption.right"
  197. controls-position="right"
  198. placeholder="文字距离图片右边的距离"
  199. size="small"></el-input-number>
  200. 压缩图片比率<br>
  201. <el-input-number v-model="data.canvasOption.ratio"
  202. controls-position="right"
  203. placeholder="压缩图片比率"
  204. :step="0.1"
  205. :min="0"
  206. :max="1"
  207. size="small"></el-input-number>
  208. </div>
  209. </div>
  210. </div>
  211. </template>
  212. <script>
  213. export default {
  214. name: "config-upload",
  215. props: ['data'],
  216. data() {
  217. return {
  218. option: {
  219. column: [{
  220. type: 'input',
  221. prop: 'key',
  222. label: 'key'
  223. }, {
  224. type: 'input',
  225. prop: 'value',
  226. label: 'value'
  227. }]
  228. },
  229. }
  230. },
  231. watch: {
  232. 'data.prop': {
  233. handler() {
  234. if (!this.avueVersion('2.9.0') && this.data.drag != undefined) {
  235. this.$set(this.data, 'dragFile', this.data.drag)
  236. this.$delete(this.data, 'drag')
  237. }
  238. },
  239. immediate: true
  240. },
  241. 'data.drag': function (val) {
  242. if (!this.avueVersion('2.9.0')) return
  243. if (val) this.$delete(this.data, 'listType')
  244. },
  245. 'data.dragFile': function (val) {
  246. if (val) this.$delete(this.data, 'listType')
  247. },
  248. 'data.showCanvas'(val) {
  249. if (val) {
  250. this.$set(this.data, 'canvasOption', {})
  251. this.$set(this.data, 'accept', 'image/*')
  252. } else {
  253. this.$delete(this.data, 'canvasOption')
  254. }
  255. }
  256. }
  257. }
  258. </script>