ImageMaterialBox.vue 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <div id="image-material-box">
  3. <el-dialog title="选择图片" :visible.sync="ImageMaterialBoxVisible" width="900px" >
  4. <el-row>
  5. <el-col :span="24" style="text-align: right;" >
  6. <el-upload
  7. class="media-uploader"
  8. :action="addMaterialUrl"
  9. :show-file-list="false"
  10. :with-credentials='true'
  11. :on-success="handleMediaSuccess"
  12. :before-upload="beforeMediaUpload"
  13. >
  14. <el-button type="primary" size="small" icon="el-icon-upload" >上传图片</el-button>
  15. </el-upload>
  16. </el-col>
  17. </el-row>
  18. <div class="material-box">
  19. <div class="mateial-item" v-for="(media, index) in medias" :key="index" @click="selectThis(media.media_id, media.media_url)">
  20. <div class="mateial-item-image" :class="selectId==media.media_id?'active':''">
  21. <img :src="'http://img01.store.sogou.com/net/a/04/link?appid=100520029&url='+media.media_url" alt="" srcset="">
  22. </div>
  23. </div>
  24. </div>
  25. <el-row style="clear:both">
  26. <el-pagination
  27. @size-change="handleSizeChange"
  28. @current-change="handleCurrentChange"
  29. :page-sizes="[20,50,100]"
  30. :page-size="20"
  31. :current-page="pageParams.page"
  32. background
  33. style="margin-top:20px;"
  34. align="right"
  35. layout="total, sizes, prev, pager, next, jumper"
  36. :total="total">
  37. </el-pagination>
  38. </el-row>
  39. <div slot="footer" class="dialog-footer">
  40. <el-button @click="ImageMaterialBoxVisible = false">取消</el-button>
  41. <el-button
  42. type="primary"
  43. @click="submitSelect"
  44. >保 存
  45. </el-button>
  46. </div>
  47. </el-dialog>
  48. </div>
  49. </template>
  50. <script>
  51. import {GetMaterials} from "@/api/mpwechat/material";
  52. export default {
  53. name:'imageMaterialBox',
  54. props:{
  55. currentMenu:{
  56. big_type:0,
  57. type:'',
  58. name:'',
  59. url:'',
  60. appid:'',
  61. pagepath:'',
  62. key:'',//key规则:V_[number]_click;VC_[number]_click
  63. message:'',
  64. sub_button:[],
  65. media_id:'',
  66. media_url:'',
  67. },
  68. },
  69. data(){
  70. return {
  71. addMaterialUrl: process.env.BASE_API + '/api/mpwechat/media/add_material',
  72. ImageMaterialBoxVisible:false,
  73. medias:[],
  74. selectId:'',
  75. selectUrl:'',
  76. total:0,
  77. pageParams:{
  78. page:1,
  79. limit:20,
  80. media_type:'image',
  81. },
  82. }
  83. },
  84. methods:{
  85. open:function(){
  86. this.pageParams={
  87. page:1,
  88. limit:20,
  89. media_type:'image',
  90. },
  91. this.selectId='',
  92. this.selectUrl='',
  93. this.GetMaterials();
  94. this.ImageMaterialBoxVisible = true;
  95. },
  96. submitSelect:function(){
  97. if (this.selectId.length==0) {
  98. this.$message.error('未选择图片');
  99. return false;
  100. }
  101. this.currentMenu.media_id = this.selectId;
  102. this.currentMenu.media_url = 'http://img01.store.sogou.com/net/a/04/link?appid=100520029&url=' + this.selectUrl;
  103. this.ImageMaterialBoxVisible = false;
  104. },
  105. selectThis(id, url) {
  106. this.selectId = id;
  107. this.selectUrl = url;
  108. },
  109. handleSizeChange(limit) {
  110. this.pageParams.limit = limit;
  111. this.GetMaterials();
  112. },
  113. handleCurrentChange(page) {
  114. this.pageParams.page = page;
  115. this.GetMaterials();
  116. },
  117. handleMediaSuccess:function(res, file) {
  118. if (res.state==1) {
  119. this.$message.success('上传成功');
  120. this.currentMenu.media_url = 'http://img01.store.sogou.com/net/a/04/link?appid=100520029&url=' + res.data.media.media_url;
  121. this.currentMenu.media_id = res.data.media.media_id;
  122. this.pageParams.page = 1;
  123. this.selectId='',
  124. this.selectUrl='',
  125. this.GetMaterials();
  126. }else {
  127. this.$message.error(res.msg);
  128. }
  129. },
  130. beforeMediaUpload:function(file) {
  131. var allow = {"image/bmp":1,"image/png":1,"image/jpeg":1,"image/jpg":1,"image/gif":1};
  132. // const isJPG = file.type === 'image/jpeg';
  133. const isImg = file.type in allow;
  134. const isLt2M = file.size / 1024 / 1024 < 2;
  135. if (!isImg) {
  136. this.$message.error('上传图片只能是 bmp/png/jpeg/jpg/gif 格式!');
  137. }
  138. if (!isLt2M) {
  139. this.$message.error('上传图片大小不能超过 2MB!');
  140. }
  141. return isImg && isLt2M;
  142. },
  143. GetMaterials:function(){
  144. GetMaterials(this.pageParams).then(response=>{
  145. var res = response.data;
  146. if (res.state==1) {
  147. this.medias = res.data.medias;
  148. this.total = res.data.total;
  149. }
  150. }).catch(e=>{});
  151. }
  152. }
  153. }
  154. </script>
  155. <style >
  156. #image-material-box .mateial-item {
  157. float: left;
  158. margin: 6px;
  159. }
  160. #image-material-box .mateial-item-image {
  161. width: 199px;
  162. height: 90px;
  163. position: relative;
  164. border: none;
  165. background: #dde1e4;
  166. color: #58a2ec;
  167. display: block;
  168. padding: 4px;
  169. line-height: 1.42857143;
  170. background-color: #fff;
  171. -webkit-transition: border .2s ease-in-out;
  172. transition: border .2s ease-in-out;
  173. }
  174. #image-material-box .mateial-item .active {
  175. border: 1px solid rgb(68, 181, 73);
  176. }
  177. #image-material-box .mateial-item-image img {
  178. width: 100%;
  179. height: 100%;
  180. position: relative;
  181. }
  182. </style>