Przeglądaj źródła

feat: #基础管理基本对接完成

loki 3 lat temu
rodzic
commit
c1ba51d3a1

+ 15 - 0
src/api/base/trend.js

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

+ 9 - 0
src/router/index.js

@@ -113,6 +113,15 @@ export const constantRoutes = [
           title: '问题反馈管理'
           // icon: 'tree'
         }
+      },
+      {
+        path: 'TrendManagement',
+        name: '热搜词管理',
+        component: () => import('@/views/baseManagement/trending/index'),
+        meta: {
+          title: '热搜词管理'
+          // icon: 'tree'
+        }
       }
     ]
   },

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

@@ -6,6 +6,7 @@ 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';
 import MemberLeverItem from 'views/memberManagement/memberLever/modal/ItemModal.vue';
+import TrendItem from 'views/baseManagement/trending/modal/ItemModal.vue';
 
 const modal = (Component, props) => {
   let _component = null;
@@ -69,3 +70,10 @@ let MemberLeverItemModal = data => {
 Vue.prototype.$MemberLeverItemModal = params => {
   MemberLeverItemModal(params);
 };
+
+let TrendItemModal = data => {
+  modal(TrendItem, data);
+};
+Vue.prototype.$TrendItemModal = params => {
+  TrendItemModal(params);
+};

+ 6 - 7
src/views/baseManagement/bannerManagement/index.vue

@@ -38,12 +38,12 @@ export default {
         {
           key: 'id',
           name: 'ID',
-          width: '60'
+          width: '160'
         },
         {
           key: 'imgUrl',
           name: '图片',
-          width: '240',
+          width: '160',
           render: (h, { row }) =>
             h('image', {
               style: {
@@ -64,17 +64,17 @@ export default {
         {
           key: 'type',
           name: '位置',
-          minWidth: '120'
+          width: '80'
         },
         {
           key: 'name',
           name: '标题',
-          minWidth: '180'
+          minWidth: '100'
         },
         {
           key: 'link',
           name: '链接',
-          minWidth: '240',
+          minWidth: '180',
           showOverflowTooltip: true
         },
         {
@@ -106,8 +106,7 @@ export default {
                   on: {
                     click: () =>
                       this.$BannerItemModal({
-                        id: row.id,
-                        parentId: row.parentId
+                        id: row.id
                       })
                   }
                 },

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

@@ -42,6 +42,7 @@
       <el-form-item label="排序" prop="sort">
         <el-input-number
           v-model="form.sort"
+          :precision="0"
           :min="1"
           :max="9999"
           label="序号"
@@ -65,10 +66,6 @@ export default {
     id: {
       type: String,
       default: ''
-    },
-    parentId: {
-      type: String,
-      default: '-1'
     }
   },
 

+ 7 - 5
src/views/baseManagement/infoManagement/index.vue

@@ -53,17 +53,20 @@ export default {
         {
           key: 'looks',
           name: '阅读',
-          width: '120'
+          width: '120',
+          render: (h, { row }) => h('span', row.looks)
         },
         {
           key: 'likes',
           name: '点赞',
-          width: '120'
+          width: '120',
+          render: (h, { row }) => h('span', row.likes)
         },
         {
           key: 'collections',
           name: '收藏',
-          width: '120'
+          width: '120',
+          render: (h, { row }) => h('span', row.collections)
         },
         {
           key: 'isShow',
@@ -89,8 +92,7 @@ export default {
                   on: {
                     click: () =>
                       this.$InfoItemModal({
-                        id: row.id,
-                        parentId: row.parentId
+                        id: row.id
                       })
                   }
                 },

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

@@ -33,6 +33,7 @@
       <el-form-item label="排序" prop="sort">
         <el-input-number
           v-model="form.sort"
+          :precision="0"
           :min="1"
           :max="9999"
           label="序号"

+ 0 - 11
src/views/baseManagement/problemFeedbackManagement/index.vue

@@ -47,17 +47,6 @@ export default {
           minWidth: '120',
           render: (h, { row }) => {
             let str = row.content;
-            // return h(
-            //   'el-tooltip',
-            //   {
-            //     props: {
-            //       content: str,
-            //       placement: 'top'
-            //     }
-            //   },
-            //   'dadad1'
-            //   // h('span', str.length > 20 ? str.slice(0, 20) : str)
-            // );
             return h('BaseTooltip', {
               props: {
                 txt: str

+ 135 - 0
src/views/baseManagement/trending/index.vue

@@ -0,0 +1,135 @@
+<template>
+  <div class="">
+    <toolbar @on-filter="filterData" @on-reset="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleAdd"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+        :showPage="false"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+import { getList, delItem } from '@/api/base/trend';
+
+export default {
+  name: 'Trending',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      fetchList: getList, // 在下方data再声明一个 fetchList: iGetList 同等效果
+      pagination: {
+        page: 1,
+        total: 0,
+        pageSize: 999999
+      }
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'name',
+          name: '标题',
+          minWidth: '240'
+        },
+        {
+          key: 'sort',
+          name: '排序',
+          width: '120'
+        },
+        {
+          key: 'isShow',
+          name: '状态',
+          width: '80',
+          type: 'tag',
+          fetchTagType: val => (val ? 'success' : 'info'),
+          tagName: row => (row.isShow ? '显示' : '隐藏')
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120',
+          render: (h, { row }) => {
+            const action = [];
+            action.push(
+              h(
+                'el-button',
+                {
+                  props: {
+                    type: 'text'
+                  },
+                  on: {
+                    click: () =>
+                      this.$TrendItemModal({
+                        id: row.id
+                      })
+                  }
+                },
+                '编辑'
+              )
+            );
+            action.push(
+              h(
+                'BaseBtn',
+                {
+                  props: {
+                    popip: true,
+                    txt: '删除',
+                    type: 'text'
+                  },
+                  class: 'ml-10',
+                  on: {
+                    ok: () => this.handleDelItem(row)
+                  }
+                },
+                '删除'
+              )
+            );
+
+            return h('div', action);
+          }
+        }
+      ]
+    };
+  },
+
+  created() {
+    this.$g_on('trend_reload', this.reload);
+  },
+
+  beforeDestroy() {
+    this.$g_off('trend_reload', this.reload);
+  },
+
+  methods: {
+    handleAdd() {
+      this.$TrendItemModal();
+    },
+    async handleDelItem(item) {
+      const { success, msg } = await delItem({
+        id: item.id
+      });
+      if (success) {
+        this.$success('删除成功!');
+        this.$g_emit('trend_reload');
+      }
+    }
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 120 - 0
src/views/baseManagement/trending/modal/ItemModal.vue

@@ -0,0 +1,120 @@
+<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="name">
+        <el-input v-model="form.name"></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"
+          :precision="0"
+          :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: 'TrendingItemModal',
+
+  props: {
+    id: {
+      type: String,
+      default: ''
+    }
+  },
+
+  data() {
+    return {
+      modal: true,
+
+      form: {
+        name: '',
+        isShow: false,
+        sort: 1
+      },
+      rules: {
+        name: [{ 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;
+      }
+    },
+
+    handleConfirm() {
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          const params = Object.assign({}, this.form);
+          params.cover = '';
+          if (this.id) params.id = this.id;
+          const { success, msg } = await saveItem(params);
+          if (success) {
+            this.$success('保存成功!');
+            this.modal = false;
+            this.$g_emit('trend_reload');
+          }
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 34 - 0
src/views/baseManagement/trending/toolbar.vue

@@ -0,0 +1,34 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'TrendingToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '标题'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '状态'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '发布日期',
+          apiName: ['startTime', 'endTime']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 52 - 1
src/views/dashboard/index.vue

@@ -16,7 +16,58 @@ export default {
     ...mapGetters(['name'])
   },
   data() {
-    return {};
+    return {
+      arr1: [],
+      arr2: [],
+      arr3: []
+    };
+  },
+  watch: {
+    arr1: {
+      handler(arr) {
+        this.arr2 = arr;
+        if (this.arr3.length === 0 && arr.length !== 0) {
+          this.arr3 = arr.map(x => Object.freeze(x)); // [Object.freeze(...arr)];
+          // this.arr3 = arr.map(x => JSON.parse(JSON.stringify(x))); // [Object.freeze(...arr)];
+        }
+      },
+      deep: true
+    },
+    arr3: {
+      handler(arr) {
+        console.log('--change---', arr);
+      },
+      deep: true
+    }
+  },
+
+  created() {
+    this.arr1 = [
+      {
+        sex: 'man',
+        name: 'loki'
+      },
+      {
+        sex: 'woman',
+        name: 'lily'
+      }
+    ];
+    setTimeout(() => {
+      this.arr1.push({
+        sex: 'man',
+        name: 'john'
+      });
+    }, 500);
+    setTimeout(() => {
+      this.arr2.push({
+        sex: 'woman',
+        name: 'saly'
+      });
+      this.arr2[1].name = 'amy';
+      console.log(this.arr1);
+      console.log(this.arr2);
+      console.log(this.arr3);
+    }, 1000);
   },
   methods: {}
 };

+ 1 - 0
src/views/helpInfo/information/modal/ItemModal.vue

@@ -29,6 +29,7 @@
       <el-form-item label="排序" prop="sort">
         <el-input-number
           v-model="form.sort"
+          :precision="0"
           :min="1"
           :max="9999"
           label="序号"

+ 1 - 0
src/views/helpInfo/issueType/modal/ItemModal.vue

@@ -23,6 +23,7 @@
       <el-form-item label="排序" prop="sort">
         <el-input-number
           v-model="form.sort"
+          :precision="0"
           :min="1"
           :max="9999"
           label="序号"

+ 1 - 0
src/views/memberManagement/memberLever/modal/ItemModal.vue

@@ -50,6 +50,7 @@
       <el-form-item label="排序" prop="sort">
         <el-input-number
           v-model="form.sort"
+          :precision="0"
           :min="1"
           :max="9999"
           label="序号"