index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <template>
  2. <div class="myUpload">
  3. <div class="myUpload1">
  4. <div class="myDemo">
  5. <el-upload
  6. class="upload-demo"
  7. :drag="drag"
  8. :action="action"
  9. :multiple="multiple"
  10. :data="data"
  11. :name="name"
  12. :show-file-list="showFileList"
  13. :accept="accept"
  14. :list-type="listType"
  15. :auto-upload="autoUpload"
  16. :disabled="disabled"
  17. :limit="limit"
  18. :on-preview="onPreview"
  19. :on-remove="onRemove"
  20. :on-success="onSuccess"
  21. :on-error="onError"
  22. :on-progress="onProgress"
  23. :on-change="onChange"
  24. :on-exceed="onExceed"
  25. style="width: 100%"
  26. >
  27. <i class="el-icon-upload"></i>
  28. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  29. </el-upload>
  30. </div>
  31. <div class="line" v-if="fileList.length>0"></div>
  32. <div class="fileList" v-if="fileList.length>0">
  33. <ul>
  34. <li v-for="item in fileList" :key="item.id">
  35. <div><i class="el-icon-document" style="margin-right:10px"></i><span class="name" @click="checkFiles(item)">{{ item.name }}</span></div>
  36. <div class="type">{{ item.id?'已上传':'待上传' }}</div>
  37. <div class="icon" @click="onRemove(item,fileList)"><i class="el-icon-close"></i></div>
  38. </li>
  39. </ul>
  40. </div>
  41. </div>
  42. </div>
  43. </template>
  44. <script>
  45. export default {
  46. components: {},
  47. props: {
  48. action:{
  49. type:String,
  50. default:''
  51. },
  52. multiple:{
  53. type:Boolean
  54. },
  55. data:{
  56. type:Object
  57. },
  58. name:{
  59. type:String,
  60. default:''
  61. },
  62. showFileList:{
  63. type:Boolean
  64. },
  65. drag:{
  66. type:Boolean,
  67. default:true
  68. },
  69. accept:{
  70. type:String,
  71. default:''
  72. },
  73. listType:{
  74. type:String,
  75. default:'text'
  76. },
  77. autoUpload:{
  78. type:Boolean,
  79. default:true
  80. },
  81. fileList:{
  82. type:Array,
  83. default:()=>{
  84. return []
  85. }
  86. },
  87. disabled:{
  88. type:Boolean,
  89. default:false
  90. },
  91. limit:{
  92. type:Number,
  93. }
  94. },
  95. data() {
  96. return {};
  97. },
  98. watch: {},
  99. computed: {},
  100. created() {},
  101. mounted() {},
  102. methods: {
  103. onPreview(file){
  104. this.$emit('on-preview',file)
  105. },
  106. onRemove(){
  107. this.$emit('on-preview',file,fileList)
  108. },
  109. onSuccess(response,file,fileList){
  110. this.$emit('on-preview',response,file,fileList)
  111. },
  112. onError(err,file,fileList){
  113. this.$emit('on-preview',err,file,fileList)
  114. },
  115. onProgress(event,file,fileList){
  116. this.$emit('on-preview',event,file,fileList)
  117. },
  118. onChange(file,fileList){
  119. console.log(file)
  120. this.$emit('on-preview',file,fileList)
  121. },
  122. onExceed(file,fileList){
  123. this.$emit('on-preview',file,fileList)
  124. },
  125. //查看图片
  126. checkFiles(file){
  127. }
  128. },
  129. };
  130. </script>
  131. <style lang="scss">
  132. .myUpload1 {
  133. .el-upload {
  134. width: 100%;
  135. height: 100%;
  136. .el-upload-dragger {
  137. width: 100% !important;
  138. height: 100%;
  139. border: none;
  140. border-radius: 0px;
  141. }
  142. .el-upload-dragger:hover {
  143. border: none;
  144. }
  145. }
  146. .el-upload-list {
  147. display: none;
  148. }
  149. }
  150. </style>
  151. <style lang="scss" scoped>
  152. .myUpload{
  153. width: calc(100% - 0px);
  154. height: 100%;
  155. padding: 5px;
  156. }
  157. .myUpload1 {
  158. width: calc(100% - 20px);
  159. height: 100%;
  160. padding: 5px;
  161. display: flex;
  162. align-items: center;
  163. background: white;
  164. border: 1px dashed var(--bg);
  165. border-radius: 10px;
  166. .myDemo {
  167. width: 100%;
  168. height: 100%;
  169. flex: 1;
  170. }
  171. .line {
  172. width: 1px;
  173. height: 100%;
  174. background: var(--bg);
  175. }
  176. .fileList {
  177. width: 100%;
  178. height: 100%;
  179. overflow-y: auto;
  180. flex: 2;
  181. ul {
  182. list-style-type: none;
  183. padding: 0 10px;
  184. li{
  185. padding:5px 10px;
  186. border-radius: 5px;
  187. display: flex;
  188. justify-content: space-between;
  189. .type{
  190. display: block;
  191. color: #57a5f7;
  192. }
  193. .icon{
  194. display: none;
  195. }
  196. }
  197. li:hover{
  198. background: #f4f4f4;
  199. .name{
  200. color: #57a5f7;
  201. cursor: pointer;
  202. }
  203. .type{
  204. display: none;
  205. }
  206. .icon{
  207. display: block;
  208. cursor: pointer;
  209. }
  210. }
  211. }
  212. }
  213. }
  214. </style>