Selaa lähdekoodia

feat: #资讯管理初步对接

loki 3 vuotta sitten
vanhempi
commit
56f44dca04

+ 3 - 3
src/api/base/banner.js

@@ -3,8 +3,8 @@ import api from '@/utils/request';
 export const getList = params =>
 	api.post(`/yxl-back-end/admin/banner/page`, params);
 export const getItem = ({ id, params }) =>
-	api.get(`/yxl-back-end/framework/help/content/${id}`, params);
+	api.get(`/yxl-back-end/admin/banner/${id}`, params);
 export const saveItem = params =>
-	api.post(`/yxl-back-end/framework/help/content/save`, params);
+	api.post(`/yxl-back-end/admin/banner/save`, params);
 export const delItem = ({ id, params }) =>
-	api.del(`/yxl-back-end/framework/help/content/${id}`, params);
+	api.del(`/yxl-back-end/admin/banner/${id}`, params);

+ 10 - 0
src/api/base/info.js

@@ -0,0 +1,10 @@
+import api from '@/utils/request';
+
+export const getList = params =>
+	api.post(`/yxl-back-end/admin/banner/page`, params);
+export const getItem = ({ id, params }) =>
+	api.get(`/yxl-back-end/admin/banner/${id}`, params);
+export const saveItem = params =>
+	api.post(`/yxl-back-end/admin/banner/save`, params);
+export const delItem = ({ id, params }) =>
+	api.del(`/yxl-back-end/admin/banner/${id}`, params);

+ 8 - 0
src/utils/dialog-helper.js

@@ -4,6 +4,7 @@ import AdvanceViewImage from 'components/AdvanceViewImage.vue';
 import IssueTypeItem from 'views/helpInfo/issueType/modal/ItemModal.vue';
 import InformationItem from 'views/helpInfo/information/modal/ItemModal.vue';
 import BannerItem from 'views/baseManagement/bannerManagement/modal/ItemModal.vue';
+import InfoItem from 'views/baseManagement/infoManagement/modal/ItemModal.vue';
 
 const modal = (Component, props) => {
   let _component = null;
@@ -53,3 +54,10 @@ let BannerItemModal = data => {
 Vue.prototype.$BannerItemModal = params => {
   BannerItemModal(params);
 };
+
+let InfoItemModal = data => {
+  modal(InfoItem, data);
+};
+Vue.prototype.$InfoItemModal = params => {
+  InfoItemModal(params);
+};

+ 1 - 1
src/views/baseManagement/bannerManagement/index.vue

@@ -19,7 +19,7 @@
 <script>
 import toolbar from './toolbar';
 import mxFilterList from '@/mixins/filterList';
-import { getList } from '@/api/base/banner';
+import { getList, delItem } from '@/api/base/banner';
 
 export default {
   name: 'BannerManagement',

+ 1 - 1
src/views/baseManagement/bannerManagement/modal/ItemModal.vue

@@ -84,7 +84,7 @@ export default {
         sort: 1
       },
       rules: {
-        name: [
+        type: [
           { required: true, message: '请选择所属位置', trigger: 'change' }
         ],
         name: [{ required: true, message: '请输入标题', trigger: 'change' }],

+ 71 - 11
src/views/baseManagement/infoManagement/index.vue

@@ -3,7 +3,7 @@
     <toolbar @onSearch="filterData" />
 
     <div class="m-10 bg-w p-20 br-10">
-      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+      <el-button type="primary" icon="el-icon-plus" @click="handleAdd"
         >新增</el-button
       >
       <base-table
@@ -19,6 +19,7 @@
 <script>
 import toolbar from './toolbar';
 import mxFilterList from '@/mixins/filterList';
+import { getList, delItem } from '@/api/base/info';
 
 export default {
   name: 'InfoManagement',
@@ -27,7 +28,7 @@ export default {
 
   mixins: [
     mxFilterList({
-      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+      fetchList: getList // 在下方data再声明一个 fetchList: iGetList 同等效果
     })
   ],
 
@@ -35,47 +36,106 @@ export default {
     return {
       columns: [
         {
-          key: 'id',
+          key: 'title',
           name: '标题',
           minWidth: '240'
         },
         {
-          key: 'photo',
+          key: 'author',
           name: '作者',
           width: '160'
         },
         {
-          key: 'region',
+          key: 'createAt',
           name: '发布时间',
           minWidth: '180'
         },
         {
-          key: 'region',
+          key: 'reads',
           name: '阅读',
           width: '120'
         },
         {
-          key: 'region',
+          key: 'likes',
           name: '点赞',
           width: '120'
         },
         {
-          key: 'region',
+          key: 'collections',
           name: '收藏',
           width: '120'
         },
         {
-          key: 'region',
+          key: 'isShow',
           name: '状态',
-          width: '80'
+          width: '80',
+          type: 'tag',
+          fetchTagType: val => (val ? 'success' : 'info'),
+          tagName: row => (row.isShow ? '显示' : '隐藏')
         },
         {
           key: 'action',
           name: '操作',
-          width: '120'
+          width: '120',
+          render: (h, { row }) => {
+            const action = [];
+            action.push(
+              h(
+                'el-button',
+                {
+                  props: {
+                    type: 'text'
+                  },
+                  on: {
+                    click: () =>
+                      this.$InfoItemModal({
+                        id: row.id,
+                        parentId: row.parentId
+                      })
+                  }
+                },
+                '编辑'
+              )
+            );
+            action.push(
+              h(
+                'BaseBtn',
+                {
+                  props: {
+                    popip: true,
+                    txt: '删除',
+                    type: 'text'
+                  },
+                  class: 'ml-10',
+                  on: {
+                    ok: () => this.handleDelItem(row)
+                  }
+                },
+                '删除'
+              )
+            );
+
+            return h('div', action);
+          }
         }
       ]
     };
+  },
+
+  methods: {
+    handleAdd() {
+      this.$InfoItemModal();
+    },
+    async handleDelItem(item) {
+      const { success, msg } = await delItem({
+        id: item.id
+      });
+      if (success) {
+        this.$success('删除成功!');
+      } else {
+        this.$error(msg);
+      }
+    }
   }
 };
 </script>

+ 132 - 0
src/views/baseManagement/infoManagement/modal/ItemModal.vue

@@ -0,0 +1,132 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="modal"
+    width="500px"
+    :close-on-click-modal="false"
+    @close="
+      res => {
+        $emit('cancel');
+      }
+    "
+  >
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form-item label="作者" prop="author">
+        <el-input v-model="form.author" :disabled="id"></el-input>
+      </el-form-item>
+      <el-form-item label="标题" prop="title">
+        <el-input v-model="form.title"></el-input>
+      </el-form-item>
+      <!-- TODO 富文本编辑 -->
+      <!-- <el-form-item label="链接" prop="link">
+        <el-input v-model="form.link"></el-input>
+      </el-form-item> -->
+      <el-form-item label="状态">
+        <el-radio-group v-model="form.isShow" prop="isShow">
+          <el-radio :label="true">显示</el-radio>
+          <el-radio :label="false">隐藏</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="排序" prop="sort">
+        <el-input-number
+          v-model="form.sort"
+          :min="1"
+          :max="9999"
+          label="序号"
+        ></el-input-number>
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="modal = false">取消</el-button>
+      <el-button type="primary" @click="handleConfirm">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { getItem, saveItem } from '@/api/base/info';
+
+export default {
+  name: 'InfoItemModal',
+
+  props: {
+    id: {
+      type: String,
+      default: ''
+    }
+  },
+
+  data() {
+    return {
+      modal: true,
+
+      form: {
+        author: '',
+        title: '',
+        // content: '',
+        isShow: false,
+        sort: 1
+      },
+      rules: {
+        author: [{ required: true, message: '请输入作者', trigger: 'change' }],
+        title: [{ required: true, message: '请输入标题', trigger: 'change' }]
+        // content: [{ required: true, message: '请输入链接地址', trigger: 'change' }]
+      },
+
+      typeOptions: []
+    };
+  },
+
+  computed: {
+    title() {
+      if (this.id) {
+        return '编辑资讯';
+      } else {
+        return '新增资讯';
+      }
+    }
+  },
+
+  watch: {
+    id: {
+      handler(id) {
+        id && this.loadData();
+      },
+      immediate: true
+    }
+  },
+
+  mounted() {},
+
+  methods: {
+    async loadData() {
+      const { success, data, msg } = await getItem({
+        id: this.id
+      });
+      if (success) {
+        this.form = data;
+      } else {
+        this.$error(msg);
+      }
+    },
+
+    handleConfirm() {
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          const params = Object.assign({}, this.form);
+          if (this.id) params.id = this.id;
+          const { success, msg } = await saveItem(params);
+          if (success) {
+            this.$success('保存成功!');
+            this.modal = false;
+          } else {
+            this.$error(msg);
+          }
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped></style>