addBannerDialog.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <div>
  3. <el-dialog
  4. :title="type == 'edit' ? '编辑Banner' : '添加Banner'"
  5. class="table"
  6. :visible.sync="show"
  7. :close-on-click-modal="false"
  8. width="800px"
  9. top="8vh"
  10. >
  11. <div v-loading="loading">
  12. <el-form ref="form" :model="form" label-width="100px">
  13. <el-form-item label="图片标题">
  14. <el-input style="width: 300px" v-model="form.title"></el-input>
  15. </el-form-item>
  16. <el-form-item label="图片链接">
  17. <span v-show="true" @click="addUrlIcon('src')" style="cursor: pointer;">上传</span>
  18. <el-input style="width: 100%" v-model="form.src"></el-input>
  19. </el-form-item>
  20. <el-form-item label="图片跳转链接">
  21. <el-input style="width: 100%" v-model="form.url"></el-input>
  22. </el-form-item>
  23. </el-form>
  24. </div>
  25. <!-- 按钮区域 -->
  26. <div slot="footer" class="el-dialog__footer">
  27. <el-button @click="close()">取 消</el-button>
  28. <el-button type="primary" @click="submit()">确认</el-button>
  29. </div>
  30. </el-dialog>
  31. </div>
  32. </template>
  33. <script>
  34. import "@/common/aws-sdk-2.235.1.min.js";
  35. export default {
  36. data() {
  37. return {
  38. show: false,
  39. loading: false,
  40. form: {
  41. src:"",
  42. title:"",
  43. url:""
  44. },
  45. type: null,
  46. };
  47. },
  48. methods: {
  49. open(data, type = "add") {
  50. if (data) {
  51. this.form = JSON.parse(JSON.stringify(data));
  52. } else {
  53. this.init();
  54. }
  55. this.type = type;
  56. this.show = true;
  57. },
  58. close() {
  59. this.show = false;
  60. this.init();
  61. },
  62. init() {
  63. this.form = {
  64. src:"",
  65. title:"",
  66. url:""
  67. };
  68. },
  69. submit() {
  70. if(!this.form.src)return this.$message.error("请完填写图片链接")
  71. this.$emit("success", {item:this.form,type:this.type});
  72. },
  73. async addUrlIcon(type = "src") {
  74. let _url = await this.uploadFile("image/*");
  75. if (_url) {
  76. this.form[type] = _url;
  77. } else {
  78. return console.log("无图片");
  79. }
  80. },
  81. uploadFile(accept = "*") {
  82. return new Promise((resolve) => {
  83. const input = document.createElement("input");
  84. input.type = "file";
  85. input.accept = accept;
  86. input.onchange = (event) => {
  87. const file = event.target.files[0];
  88. if (file) {
  89. let credentials = {
  90. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  91. secretAccessKey: "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",
  92. }; //秘钥形式的登录上传
  93. window.AWS.config.update(credentials);
  94. window.AWS.config.region = "cn-northwest-1"; //设置区域
  95. let bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  96. // let _name = file.name;
  97. // let size = file.size;
  98. let params = {
  99. Key:
  100. file.name.split(".")[0] +
  101. new Date().getTime() +
  102. "." +
  103. file.name.split(".")[file.name.split(".").length - 1],
  104. ContentType: file.type,
  105. Body: file,
  106. "Access-Control-Allow-Credentials": "*",
  107. ACL: "public-read",
  108. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  109. let options = {
  110. partSize: 2048 * 1024 * 1024,
  111. queueSize: 2,
  112. leavePartsOnError: true,
  113. };
  114. bucket
  115. .upload(params, options)
  116. .on("httpUploadProgress", (evt) => {
  117. console.log(evt);
  118. })
  119. .send((err, data) => {
  120. if (err) {
  121. this.$message.error("上传失败");
  122. return resolve("");
  123. } else {
  124. return resolve(data.Location);
  125. }
  126. });
  127. } else {
  128. resolve("");
  129. }
  130. };
  131. input.click();
  132. });
  133. },
  134. },
  135. };
  136. </script>
  137. <style scoped>
  138. .table >>> .el-dialog__header {
  139. padding: 15px 20px;
  140. background: #454545;
  141. }
  142. .table >>> .el-dialog__title {
  143. color: #fff;
  144. }
  145. </style>