upload.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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/doc/form/form-upload-qiniu"
  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. <el-form-item label="是否拖拽上传"
  33. label-width="110px">
  34. <el-switch v-model="data.drag"></el-switch>
  35. </el-form-item>
  36. <el-form-item label="文檔列表类型"
  37. label-width="110px"
  38. v-if="!data.drag">
  39. <el-select v-model="data.listType"
  40. placeholder="文檔列表类型"
  41. clearable>
  42. <el-option label="附件"
  43. value="text"></el-option>
  44. <el-option label="照片墙"
  45. value="picture-card"></el-option>
  46. <el-option label="头像"
  47. value="picture-img"></el-option>
  48. <el-option label="缩略图"
  49. value="picture"></el-option>
  50. </el-select>
  51. </el-form-item>
  52. <div class="el-form-item el-form-item--small el-form--label-top">
  53. <label class="el-form-item__label"
  54. style="padding: 0;">参数设置:</label>
  55. <div class="el-form-item__content">
  56. 請求头
  57. <avue-dynamic v-model="data.headersConfig"
  58. :children="option"></avue-dynamic>
  59. 請求体
  60. <avue-dynamic v-model="data.dataConfig"
  61. :children="option"></avue-dynamic>
  62. </div>
  63. </div>
  64. <div class="el-form-item el-form-item--small el-form--label-top">
  65. <label class="el-form-item__label"
  66. style="padding: 0;">
  67. <el-link :underline="false"
  68. href="https://avuejs.com/doc/form/form-upload"
  69. target="_blank">上传参数设置 <i class="el-icon-question"></i></el-link>
  70. </label>
  71. <div class="el-form-item__content">
  72. 上传成功返回结构体的图片地址
  73. <el-input v-model="data.propsHttp.url"
  74. size="small"
  75. placeholder="上传成功返回结构体的图片地址"></el-input>
  76. 上传成功返回结构体的图片的姓名
  77. <el-input v-model="data.propsHttp.name"
  78. size="small"
  79. placeholder="上传成功返回结构体的图片的姓名"></el-input>
  80. 返回结构体的层次
  81. <el-input v-model="data.propsHttp.res"
  82. size="small"
  83. placeholder="返回结构体的层次"></el-input>
  84. 文檔名稱
  85. <el-input v-model="data.propsHttp.fileName"
  86. size="small"
  87. placeholder="文檔名稱,默认file"></el-input>
  88. </div>
  89. </div>
  90. <el-form-item label="是否显示已上传文檔列表"
  91. label-width="180px">
  92. <el-switch v-model="data.showFileList"></el-switch>
  93. </el-form-item>
  94. <el-form-item label="文檔大小">
  95. <el-input-number v-model="data.fileSize"
  96. controls-position="right"
  97. placeholder="文檔大小限制(字节)"
  98. :min="0"
  99. style="width: 100%;"></el-input-number>
  100. </el-form-item>
  101. <el-form-item label="上传限制提示"
  102. label-width="110px">
  103. <el-input v-model="data.tip"
  104. clearable
  105. placeholder="上传限制提示"></el-input>
  106. </el-form-item>
  107. <el-form-item label="上传中提示"
  108. label-width="110px">
  109. <el-input v-model="data.loadText"
  110. clearable
  111. placeholder="上传中提示"></el-input>
  112. </el-form-item>
  113. <el-form-item label="是否多文檔上传"
  114. label-width="130px">
  115. <el-switch v-model="data.multiple"></el-switch>
  116. </el-form-item>
  117. <el-form-item v-if="data.multiple"
  118. label="多文檔数量限制"
  119. label-width="130px">
  120. <el-input-number v-model="data.limit"
  121. controls-position="right"
  122. placeholder="多文檔上传数量限制"
  123. :min="1"
  124. style="width: 100%;"></el-input-number>
  125. </el-form-item>
  126. <div class="el-form-item el-form-item--small el-form--label-top">
  127. <label class="el-form-item__label"
  128. style="padding: 0;">水印设置:</label>
  129. <div class="el-form-item__content">
  130. 水印文字
  131. <el-input v-model="data.canvasOption.text"
  132. size="small"
  133. clearable
  134. placeholder="水印文字"></el-input>
  135. 字体类型
  136. <el-input v-model="data.canvasOption.fontFamily"
  137. size="small"
  138. clearable
  139. placeholder="字体类型"></el-input>
  140. 字体颜色
  141. <avue-input-color v-model="data.canvasOption.color"
  142. size="small"
  143. placeholder="字体颜色"></avue-input-color>
  144. 字体大小
  145. <el-input-number v-model="data.canvasOption.fontSize"
  146. size="small"
  147. controls-position="right"
  148. placeholder="字体大小"></el-input-number>
  149. 文字的透明度
  150. <el-input-number v-model="data.canvasOption.opacity"
  151. size="small"
  152. controls-position="right"
  153. placeholder="文字的透明度"
  154. :step="10"
  155. :min="10"
  156. :max="100"></el-input-number>
  157. 文字距离图片底部的距离<br>
  158. <el-input-number v-model="data.canvasOption.bottom"
  159. controls-position="right"
  160. placeholder="文字距离图片底部的距离"
  161. size="small"></el-input-number>
  162. 文字距离图片右边的距离<br>
  163. <el-input-number v-model="data.canvasOption.right"
  164. controls-position="right"
  165. placeholder="文字距离图片右边的距离"
  166. size="small"></el-input-number>
  167. 压缩图片比率<br>
  168. <el-input-number v-model="data.canvasOption.ratio"
  169. controls-position="right"
  170. placeholder="压缩图片比率"
  171. :step="0.1"
  172. :min="0"
  173. :max="1"
  174. size="small"></el-input-number>
  175. </div>
  176. </div>
  177. <el-form-item label="是否禁用">
  178. <el-switch v-model="data.disabled"></el-switch>
  179. </el-form-item>
  180. <el-form-item label="是否可见">
  181. <el-switch v-model="data.display"></el-switch>
  182. </el-form-item>
  183. <el-form-item label="是否必填">
  184. <el-switch v-model="data.required"></el-switch>
  185. </el-form-item>
  186. </div>
  187. </template>
  188. <script>
  189. export default {
  190. name: "config-upload",
  191. props: ['data'],
  192. data() {
  193. return {
  194. validator: {
  195. type: null,
  196. required: null,
  197. pattern: null,
  198. length: null
  199. },
  200. option: {
  201. column: [{
  202. type: 'input',
  203. prop: 'key',
  204. label: 'key'
  205. }, {
  206. type: 'input',
  207. prop: 'value',
  208. label: 'value'
  209. }]
  210. },
  211. }
  212. },
  213. methods: {
  214. generateRule() {
  215. const rules = [];
  216. Object.keys(this.validator).forEach(key => {
  217. if (this.validator[key]) rules.push(this.validator[key])
  218. })
  219. this.data.rules = rules
  220. },
  221. },
  222. watch: {
  223. 'data.required': function (val) {
  224. if (val) this.validator.required = { required: true, message: `${this.data.label}必须填写` }
  225. else this.validator.required = null
  226. this.generateRule()
  227. },
  228. 'data.drag': function (val) {
  229. if (val) delete this.data.listType
  230. }
  231. }
  232. }
  233. </script>