Banners.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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="form1={},(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="57vh"
  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标题" align="center"> </el-table-column>
  96. <el-table-column label="Banner图" align="center">
  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" align="center" label="是否开启">
  102. <template slot-scope="scope">
  103. <el-tag v-if="scope.row.is_active">开启</el-tag>
  104. <el-tag v-else type="info">关闭</el-tag>
  105. </template>
  106. </el-table-column>
  107. <el-table-column prop="is_active" align="center" label="是否跳转">
  108. <template slot-scope="scope">
  109. <el-tag v-if="scope.row.is_jump">跳转</el-tag>
  110. <el-tag v-else type="info">不跳转</el-tag>
  111. </template>
  112. </el-table-column>
  113. <el-table-column prop="url" align="center" label="跳转链接"> </el-table-column>
  114. <el-table-column prop="zip" align="center" width="150" label="操作">
  115. <template slot-scope="scope">
  116. <el-button class="edit" type="text" @click="edit(scope.row.id)"
  117. >编辑</el-button
  118. >
  119. <el-button class="del" @click="del(scope.row.id)" type="text"
  120. >删除</el-button
  121. >
  122. </template>
  123. </el-table-column>
  124. </el-table>
  125. <Page
  126. ref="pageButton"
  127. :current="form.page"
  128. :page_size="form.page_size"
  129. :total="total"
  130. @pageChange="gopage"
  131. />
  132. </div>
  133. <el-dialog
  134. :title="dialogTitle"
  135. :close-on-click-modal="false"
  136. :visible.sync="dialogVisible"
  137. >
  138. <el-form size="small" class="preview" :inline="false" label-width="120px">
  139. <el-form-item label="Banner标题">
  140. <el-input v-model="form1.name"></el-input>
  141. </el-form-item>
  142. <el-form-item label="封面图:">
  143. <el-upload
  144. class="avatar-uploader"
  145. action="/api/admin/uploadfile"
  146. :show-file-list="false"
  147. :on-success="handleAvatarSuccess"
  148. >
  149. <img v-if="form1.img" height="100%" :src="form1.img" class="avatar" />
  150. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  151. </el-upload>
  152. <span style="font-size: 12px; color: #999999"
  153. >建议图片尺寸为:210*160</span
  154. >
  155. </el-form-item>
  156. <el-form-item label="是否开启">
  157. <el-radio v-model="form1.is_active" :label="1">是</el-radio>
  158. <el-radio v-model="form1.is_active" :label="0">否</el-radio>
  159. </el-form-item>
  160. <el-form-item label="是否跳转">
  161. <el-radio v-model="form1.is_jump" :label="1">是</el-radio>
  162. <el-radio v-model="form1.is_jump" :label="0">否</el-radio>
  163. </el-form-item>
  164. <el-form-item label="跳转地址">
  165. <el-input v-model="form1.url" placeholder="请输入跳转地址"></el-input>
  166. </el-form-item>
  167. </el-form>
  168. <span slot="footer" class="dialog-footer">
  169. <el-button size="small" type="primary" @click="save">确 定</el-button>
  170. </span>
  171. </el-dialog>
  172. </section>
  173. </template>
  174. <script>
  175. import Page from "../../components/Page";
  176. export default {
  177. components: {
  178. Page,
  179. },
  180. data() {
  181. return {
  182. form: { name: "", page: 1, page_size: 20 },
  183. form1: {is_active:1,is_jump:0,img:""},
  184. total: 1,
  185. list: [{ name: "2333" }],
  186. loading: false,
  187. input: "",
  188. dialogVisible: false,
  189. dialogTitle: "",
  190. defaultProps: {},
  191. data: [],
  192. selected: [],
  193. };
  194. },
  195. methods: {
  196. handleAvatarSuccess(res, file) {
  197. // this.form1.img = file.response.data;
  198. this.$set(this.form1,"img",file.response.data)
  199. },
  200. search() {
  201. let parm = this.form;
  202. this.getData();
  203. },
  204. getData() {
  205. var parm = this.form;
  206. this.loading = true;
  207. this.$api.getBannersList(parm).then((res) => {
  208. let list = res.data.data.list;
  209. this.list = list;
  210. this.total = res.data.data.total;
  211. this.loading = false;
  212. });
  213. },
  214. gopage(size) {
  215. if (size) {
  216. this.form.page_size = size;
  217. }
  218. this.form.page = this.$refs.pageButton.page;
  219. this.getData();
  220. },
  221. edit(id){
  222. this.$api.getBanners({id:id}).then((res)=>{
  223. this.form1 = res.data.data
  224. this.dialogVisible = true
  225. })
  226. },
  227. del(id) {
  228. this.$confirm("确定删除吗", "提示", {
  229. type: "warning",
  230. }).then(() => {
  231. this.$api.delBanners({ id: id }).then((res) => {
  232. this.$message({
  233. message: "删除成功",
  234. type: "success",
  235. });
  236. this.getData();
  237. });
  238. });
  239. },
  240. save() {
  241. let parm = this.form1;
  242. if (parm.id) {
  243. this.$api.updateBanners(parm).then((res) => {
  244. if (res.data.code == 0) {
  245. this.$message({
  246. type: "success",
  247. message: "保存成功!",
  248. });
  249. this.getData();
  250. } else {
  251. this.$message.error("失败!");
  252. }
  253. });
  254. } else {
  255. this.$api.addBanners(parm).then((res) => {
  256. if (res.data.code == 0) {
  257. this.$message({
  258. type: "success",
  259. message: "保存成功!",
  260. });
  261. this.getData();
  262. } else {
  263. this.$message.error("失败!");
  264. }
  265. });
  266. }
  267. this.dialogVisible = false;
  268. },
  269. },
  270. created() {
  271. this.getData();
  272. },
  273. };
  274. </script>