banner.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <div class="app-container">
  3. <!--
  4. 使用element-ui表单
  5. 可以保存banner,移动端banner和pc端banner单独上传
  6. 跳转方式支持无、上传图片、链接,图片支持单独上传
  7. -->
  8. <div class="form-container">
  9. <el-form ref="form" :model="form" :rules="rules" label-width="140px">
  10. <el-form-item label="移动端banner:" prop="pcImage">
  11. <div class="banner" :style="pcImageStyle">
  12. <img v-if="pcImage" :src="pcImage">
  13. <span class="tip">请上传图片(1920*530px)</span>
  14. </div>
  15. </el-form-item>
  16. <el-form-item label="PC端banner:" prop="appImage">
  17. <div class="banner" :style="mobileImageStyle">
  18. <img v-if="appImage" :src="appImage">
  19. <span class="tip">请上传图片(800*800px)</span>
  20. </div>
  21. </el-form-item>
  22. <el-form-item label="跳转方式:" prop="region">
  23. <el-radio-group v-model="form.region">
  24. <el-radio :label="0">无</el-radio>
  25. <el-radio :label="1">图片</el-radio>
  26. <el-radio :label="2">链接</el-radio>
  27. </el-radio-group>
  28. </el-form-item>
  29. <el-form-item v-if="form.region === 1" label="跳转图片:" prop="linkImage">
  30. <UploadImage
  31. :image-list="linkImageList"
  32. :limit="1"
  33. @success="uploadLinkImageSuccess"
  34. @remove="handleLinkImageRemove"
  35. />
  36. </el-form-item>
  37. <el-form-item v-if="form.region === 2" label="跳转链接:" prop="link">
  38. <el-input v-model="form.link" />
  39. </el-form-item>
  40. </el-form>
  41. <!-- 表单提交 返回 -->
  42. <div class="control-box">
  43. <el-button type="primary" @click="submit">保存</el-button>
  44. <el-button type="warning" @click="navigateBack">返回</el-button>
  45. </div>
  46. </div>
  47. <UploadImage v-show="false" @success="uploadImageSuccess" @remove="handleImageRemove" />
  48. </div>
  49. </template>
  50. <script>
  51. import UploadImage from '@/components/UploadImage'
  52. export default {
  53. name: 'PersonalBanner',
  54. components: {
  55. UploadImage
  56. },
  57. data() {
  58. return {
  59. form: {
  60. region: 0,
  61. link: '',
  62. pcImage: '',
  63. appImage: '',
  64. linkImage: ''
  65. },
  66. rules: {
  67. pcImage: [{ required: true, message: '请上传图片', trigger: 'change' }],
  68. appImage: [{ required: true, message: '请上传图片', trigger: 'change' }],
  69. linkImage: [{ required: true, message: '请上传图片', trigger: 'change' }],
  70. link: [{ required: true, message: '请输入链接', trigger: 'blur' }]
  71. },
  72. linkImageList: []
  73. }
  74. },
  75. computed: {
  76. pcImageStyle() {
  77. const scale = 0.32
  78. return {
  79. width: 1920 * scale + 'px',
  80. height: 530 * scale + 'px'
  81. }
  82. },
  83. mobileImageStyle() {
  84. const scale = 0.32
  85. return {
  86. width: 1000 * scale + 'px',
  87. height: 1000 * scale + 'px'
  88. }
  89. }
  90. },
  91. methods: {
  92. submit() {},
  93. uploadImageSuccess({ response, file, fileList }) {
  94. this.imageList = fileList
  95. this.formData.linkImage = fileList.length > 0 ? fileList.length : ''
  96. },
  97. handleImageRemove({ file, fileList }) {
  98. this.linkImageList = fileList
  99. this.formData.linkImage = fileList.length > 0 ? fileList.length : ''
  100. },
  101. uploadLinkImageSuccess({ response, file, fileList }) {
  102. this.linkImageList = fileList
  103. this.formData.linkImage = fileList.length > 0 ? fileList.length : ''
  104. },
  105. handleLinkImageRemove({ file, fileList }) {
  106. this.linkImageList = fileList
  107. this.formData.linkImage = fileList.length > 0 ? fileList.length : ''
  108. }
  109. }
  110. }
  111. </script>
  112. <style lang="scss" scoped>
  113. .app-container {
  114. display: flex;
  115. justify-content: center;
  116. }
  117. .form-container {
  118. display: inline-block;
  119. padding: 80px 0;
  120. }
  121. .banner {
  122. position: relative;
  123. box-sizing: border-box;
  124. border: 1px dashed #ddd;
  125. cursor: pointer;
  126. user-select: none;
  127. .tip {
  128. position: absolute;
  129. left: 50%;
  130. top: 50%;
  131. transform: translate(-50%, -50%);
  132. font-size: 20px;
  133. color: #ddd;
  134. white-space: nowrap;
  135. }
  136. img {
  137. position: relative;
  138. width: 100%;
  139. height: 100%;
  140. z-index: 1;
  141. }
  142. }
  143. </style>