Banners.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <style lang="scss" scoped>
  2. .preview {
  3. .el-form-item {
  4. margin-bottom: 15px;
  5. }
  6. label,
  7. p {
  8. line-height: 25px !important;
  9. }
  10. }
  11. // 上传
  12. /deep/.avatar-uploader .el-upload {
  13. width: 148px;
  14. height: 148px;
  15. line-height: 148px;
  16. border: 1px dashed #d9d9d9;
  17. border-radius: 6px;
  18. cursor: pointer;
  19. position: relative;
  20. overflow: hidden;
  21. .avatar{
  22. width: 100%;
  23. height: auto;
  24. }
  25. }
  26. .avatar-uploader .el-upload:hover {
  27. border-color: #409EFF;
  28. }
  29. .avatar-uploader-icon {
  30. font-size: 28px;
  31. color: #8c939d;
  32. width: 68px;
  33. height: 68px;
  34. line-height: 68px;
  35. text-align: center;
  36. }
  37. .avatar {
  38. width: 68px;
  39. height: 68px;
  40. display: block;
  41. }
  42. /deep/.speaker_avatar .el-upload{
  43. width: 80px;
  44. height: 80px;
  45. line-height: 80px;
  46. }
  47. .hotel_imgs {
  48. /deep/.el-upload--picture-card{
  49. width:79px;
  50. height: 79px;
  51. line-height: 79px;
  52. }
  53. }
  54. </style>
  55. <template>
  56. <section>
  57. <p><span>系统管理></span>Banner图管理</p>
  58. <div class="content">
  59. <div class="filter">
  60. <el-form
  61. size="small"
  62. label-width="70px"
  63. :inline="true"
  64. label-position="left"
  65. >
  66. <el-form-item label="">
  67. <el-input
  68. clearable
  69. placeholder="请输入Banner图标题"
  70. v-model="form.name"
  71. ></el-input>
  72. </el-form-item>
  73. <el-form-item>
  74. <el-button type="primary" @click="search">搜索</el-button>
  75. </el-form-item>
  76. <el-form-item style="float: right">
  77. <el-button
  78. @click="(dialogVisible = true), (dialogTitle = '新增Banner图')"
  79. type="primary"
  80. >新增Banner图</el-button
  81. >
  82. </el-form-item>
  83. </el-form>
  84. </div>
  85. <el-table
  86. class="table"
  87. :data="list"
  88. height="50vh"
  89. border
  90. v-loading="loading"
  91. default-expand-all
  92. row-key="id"
  93. style="width: 100%"
  94. >
  95. <el-table-column prop="name" label="Banner标题"> </el-table-column>
  96. <el-table-column label="Banner图">
  97. <template slot-scope="scope">
  98. <img :src="scope.row.img" alt="" width="220" height="80" />
  99. </template>
  100. </el-table-column>
  101. <el-table-column prop="is_active" label="是否开启">
  102. <template slot-scope="scope">
  103. <el-switch v-model="scope.row.is_active"> </el-switch>
  104. </template>
  105. </el-table-column>
  106. <el-table-column prop="is_active" label="是否跳转">
  107. <template slot-scope="scope">
  108. <el-switch v-model="scope.row.is_jump"> </el-switch>
  109. </template>
  110. </el-table-column>
  111. <el-table-column prop="url" label="跳转链接"> </el-table-column>
  112. <el-table-column prop="zip" width="150" label="操作">
  113. <template slot-scope="scope">
  114. <el-button class="edit" type="text" @click="edit(scope.row.id)"
  115. >编辑</el-button
  116. >
  117. <el-button class="del" @click="del(scope.row.id)" type="text"
  118. >删除</el-button
  119. >
  120. </template>
  121. </el-table-column>
  122. </el-table>
  123. <Page
  124. ref="pageButton"
  125. :current="form.page"
  126. :page_size="form.page_size"
  127. :total="total"
  128. @pageChange="gopage"
  129. />
  130. </div>
  131. <el-dialog
  132. :title="dialogTitle"
  133. :close-on-click-modal="false"
  134. :visible.sync="dialogVisible"
  135. >
  136. <el-form size="small" class="preview" :inline="false" label-width="120px">
  137. <el-form-item label="Banner标题">
  138. <el-input v-model="form1.name"></el-input>
  139. </el-form-item>
  140. <el-form-item label="封面图:">
  141. <el-upload
  142. class="avatar-uploader"
  143. action="/api/admin/uploadfile"
  144. :show-file-list="false"
  145. :on-success="handleAvatarSuccess"
  146. >
  147. <img v-if="form1.img" :src="form1.img" class="avatar" />
  148. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  149. </el-upload>
  150. <span style="font-size: 12px; color: #999999"
  151. >建议图片尺寸为:210*160</span
  152. >
  153. </el-form-item>
  154. <el-form-item label="是否开启">
  155. <el-radio v-model="form1.is_active" :label="1">是</el-radio>
  156. <el-radio v-model="form1.is_active" :label="0">否</el-radio>
  157. </el-form-item>
  158. <el-form-item label="是否跳转">
  159. <el-radio v-model="form1.is_jump" :label="1">是</el-radio>
  160. <el-radio v-model="form1.is_jump" :label="0">否</el-radio>
  161. </el-form-item>
  162. <el-form-item label="跳转地址">
  163. <el-input v-model="form1.url" placeholder="请输入跳转地址"></el-input>
  164. </el-form-item>
  165. </el-form>
  166. <span slot="footer" class="dialog-footer">
  167. <el-button size="small" type="primary" @click="save">确 定</el-button>
  168. </span>
  169. </el-dialog>
  170. </section>
  171. </template>
  172. <script>
  173. import Page from "../../components/Page";
  174. export default {
  175. components: {
  176. Page,
  177. },
  178. data() {
  179. return {
  180. form: { name: "", page: 1, page_size: 20 },
  181. form1: {is_active:1,is_jump:0,img:""},
  182. total: 1,
  183. list: [{ name: "2333" }],
  184. loading: false,
  185. input: "",
  186. dialogVisible: false,
  187. dialogTitle: "",
  188. defaultProps: {},
  189. data: [],
  190. selected: [],
  191. };
  192. },
  193. methods: {
  194. handleAvatarSuccess(res, file) {
  195. this.form1.img = file.response.data;
  196. this.$set(this.form1,"img",file.response.data)
  197. },
  198. search() {
  199. let parm = this.form;
  200. this.getData();
  201. },
  202. getData() {
  203. var parm = this.form;
  204. this.loading = true;
  205. this.$api.getBannersList(parm).then((res) => {
  206. let list = res.data.data.list;
  207. this.list = list;
  208. this.total = res.data.data.total;
  209. this.loading = false;
  210. });
  211. },
  212. gopage(size) {
  213. if (size) {
  214. this.form.page_size = size;
  215. }
  216. this.form.page = this.$refs.pageButton.page;
  217. this.getData();
  218. },
  219. edit(id){
  220. this.$api.getBanners({id:id}).then((res)=>{
  221. this.form1 = res.data.data
  222. this.dialogVisible = true
  223. })
  224. },
  225. del(id) {
  226. this.$confirm("确定删除吗", "提示", {
  227. type: "warning",
  228. }).then(() => {
  229. this.$api.delBanners({ id: id }).then((res) => {
  230. this.$message({
  231. message: "删除成功",
  232. type: "success",
  233. });
  234. this.getData();
  235. });
  236. });
  237. },
  238. save() {
  239. let parm = this.form1;
  240. if (parm.id) {
  241. this.$api.updateBanners(parm).then((res) => {
  242. if (res.data.code == 0) {
  243. this.$message({
  244. type: "success",
  245. message: "保存成功!",
  246. });
  247. this.getData();
  248. } else {
  249. this.$message.error("失败!");
  250. }
  251. });
  252. } else {
  253. this.$api.addBanners(parm).then((res) => {
  254. if (res.data.code == 0) {
  255. this.$message({
  256. type: "success",
  257. message: "保存成功!",
  258. });
  259. this.getData();
  260. } else {
  261. this.$message.error("失败!");
  262. }
  263. });
  264. }
  265. this.dialogVisible = false;
  266. },
  267. },
  268. created() {
  269. this.getData();
  270. },
  271. };
  272. </script>