add.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <el-card shadow="never" style="border: 0;">
  3. <div class="form-body">
  4. <el-form ref="formRef" :model="addform" :rules="addformRules" label-width="120px">
  5. <el-form-item label="{:__('所属类别')}:">
  6. <el-select v-model="addform.category" placeholder="请选择所属类别" :clearable="true" style="width: 100%">
  7. {foreach name="categoryList" id="item"}
  8. <el-option key="{$key}" label="{$item}" value="{$key}"></el-option>
  9. {/foreach}
  10. </el-select>
  11. </el-form-item>
  12. <el-form-item label="{:__('存储方式')}:" prop="disks">
  13. <el-select v-model="addform.disks" placeholder="请选择存储方式" :clearable="true" style="width: 100%">
  14. {foreach name="disksList" id="item"}
  15. <el-option key="{$key}" label="{$item}" value="{$key}"></el-option>
  16. {/foreach}
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="{:__('上传文件')}:" prop="files">
  20. <el-upload
  21. :multiple="true"
  22. ref="uploadRef"
  23. :accept="accept"
  24. :limit="10"
  25. :on-change="fileUploadChange"
  26. action="{$config.baseUrl}{$config.upload.uploadurl}"
  27. :headers="{'x-requested-with': 'XMLHttpRequest'}"
  28. :data="{disks:addform.disks,category:addform.category}"
  29. :auto-upload="false"
  30. list-type="picture-card">
  31. <i class="fa fa-plus"></i>
  32. <template #file="{file}">
  33. <div class="fileupload-thumb">
  34. <i class="fa fa-times" @click.stop="removeFile(file)"></i>
  35. <img :src="showFileThumb(file)" class="thumb" style="width: 100%;height: 100%"/>
  36. <el-progress status="success" :text-inside="true" :stroke-width="20" :percentage="file.percentage"></el-progress>
  37. </div>
  38. </template>
  39. </el-upload>
  40. </el-form-item>
  41. <el-form-item class="form-footer">
  42. <el-button type="primary" @click="submit"><i class="fa fa-check"></i>&nbsp;提交</el-button>
  43. <el-button type="info" @click="reset"><i class="fa fa-reply"></i>&nbsp;重置</el-button>
  44. </el-form-item>
  45. </el-form>
  46. </div>
  47. </el-card>
  48. </template>
  49. <script>
  50. import form from "@components/Form.js";
  51. import {inArray} from "@util.js";
  52. export default{
  53. components:{'YunForm':form},
  54. data:{
  55. addform:{
  56. category:'',
  57. disks:'',
  58. ready:0,
  59. success:0
  60. },
  61. addformRules:{
  62. disks:[{required:true,message:'请选择存储方式',trigger:'change'}],
  63. ready:[{required:true,min:1,message:'请上传文件',trigger:'change'}]
  64. },
  65. accept:''
  66. },
  67. onLoad:function (){
  68. let mimetype=Yunqi.config.upload.mimetype.split(',');
  69. let accept=[];
  70. mimetype.forEach(res=>{
  71. accept.push('.'+res);
  72. });
  73. this.accept=accept.join(',');
  74. },
  75. methods: {
  76. //添加页面
  77. showFileThumb:function (file) {
  78. let filename=file.name.toLowerCase();
  79. let icon=filename.slice(filename.lastIndexOf('.')+1);
  80. if(inArray(['jpg','jpeg','png','gif','bmp'],icon)){
  81. return file.url;
  82. }else if(inArray(['doc','docx'],icon)){
  83. let iconpath=location.origin+'/assets/img/fileicon/doc.png';
  84. return iconpath;
  85. }else if(inArray(['ppt','pptx'],icon)){
  86. let iconpath=location.origin+'/assets/img/fileicon/ppt.png';
  87. return iconpath;
  88. }else if(inArray(['xls','xlsx'],icon)){
  89. let iconpath=location.origin+'/assets/img/fileicon/xls.png';
  90. return iconpath;
  91. }else if(inArray(['mp3','wav','wma','ogg'],icon)){
  92. let iconpath=location.origin+'/assets/img/fileicon/audio.png';
  93. return iconpath;
  94. }else if(inArray(['mp4', 'avi', 'rmvb','swf', 'flv','rm', 'ram', 'mpeg', 'mpg', 'wmv', 'mov'],icon)){
  95. let iconpath=location.origin+'/assets/img/fileicon/video.png';
  96. return iconpath;
  97. }else if(inArray(['zip', 'rar', '7z', 'gz', 'tar'],icon)){
  98. let iconpath=location.origin+'/assets/img/fileicon/zip.png';
  99. return iconpath;
  100. }else if(inArray(['apk','tiff','exe','html','pdf','psd','visio','svg','txt','xml'],icon)){
  101. let iconpath=location.origin+'/assets/img/fileicon/'+icon+'.png';
  102. return iconpath;
  103. }else{
  104. let iconpath=location.origin+'/assets/img/fileicon/wz.png';
  105. return iconpath;
  106. }
  107. },
  108. submit:function (){
  109. let elloading=Yunqi.loading({background:'rgba(255,255,255,0.3)',text:'请求中..'});
  110. this.$refs.formRef.validate((valid, fields)=>{
  111. if(valid){
  112. this.$refs.uploadRef.submit();
  113. setInterval(()=>{
  114. if(this.addform.success==this.addform.ready){
  115. Yunqi.api.closelayer(Yunqi.config.window.id,true);
  116. elloading.close();
  117. }
  118. },100);
  119. }else{
  120. elloading.close();
  121. }
  122. });
  123. },
  124. reset:function () {
  125. this.addform={
  126. category:'',
  127. disks:'',
  128. files:[]
  129. };
  130. },
  131. removeFile:function (file) {
  132. this.$refs.uploadRef.handleRemove(file);
  133. this.addform.ready--;
  134. },
  135. fileUploadChange:function (file) {
  136. if(file.status=='ready'){
  137. let maxsize=Number(Yunqi.config.upload.maxsize);
  138. if(file.size>1024*1024*maxsize){
  139. Yunqi.message.error(__('文件大小不能超过'+maxsize+'mb'));
  140. return false;
  141. }
  142. this.addform.ready++;
  143. }
  144. if(file.status=='success'){
  145. this.addform.success++;
  146. }
  147. }
  148. }
  149. }
  150. </script>
  151. <style>
  152. .fileupload-thumb{
  153. overflow: hidden;
  154. position: relative;
  155. }
  156. .fa-times{
  157. position: absolute;
  158. right: 0px;
  159. top: 0px;
  160. background: var(--el-color-danger);
  161. color: #fff;
  162. padding:2px 4px;
  163. border-radius: 50%;
  164. cursor: pointer;
  165. }
  166. </style>