gemercheung 1 yıl önce
ebeveyn
işleme
a1d354ba41

+ 36 - 0
packages/admin/src/apis/tab7.js

@@ -0,0 +1,36 @@
+import axios from '../utils/request'
+// 获取列表
+export const getMessageList = (params) => {
+  return axios({
+    method: 'post',
+    data: params,
+    url: '/cms/message/pageList'
+  })
+}
+
+export const deleteMessage = (id) => {
+  return axios({
+    method: 'post',
+    url: `/cms/message/removes/${id}`
+  })
+}
+export const addMessage = (params) => {
+  return axios({
+    method: 'post',
+    url: '/cms/message/saveEntity',
+    data: params
+  })
+}
+export const getReplyMessage = () => {
+  return axios({
+    method: 'get',
+    url: 'cms/message/config'
+  })
+}
+export const editReplyMessage = (params) => {
+  return axios({
+    method: 'get',
+    url: '/cms/message/config/edit',
+    params: params
+  })
+}

+ 6 - 0
packages/admin/src/router/index.js

@@ -55,6 +55,12 @@ const routes = [
         name: 'tab6',
         meta: { myInd: 6 },
         component: () => import('../views/tab6/index.vue')
+      },
+      {
+        path: 'tab7',
+        name: 'tab7',
+        meta: { myInd: 7 },
+        component: () => import('../views/tab7/index.vue')
       }
     ]
   }

+ 2 - 1
packages/admin/src/views/layout/index.vue

@@ -129,7 +129,8 @@ export default {
       tab1: [
         { name: '资料管理', id: 1, url: '/layout/tab1' },
         { name: '专题管理', id: 5, url: '/layout/tab5' },
-        { name: '问答咨询', id: 6, url: '/layout/tab6' }
+        { name: '问答咨询', id: 6, url: '/layout/tab6' },
+        { name: '留言管理', id: 7, url: '/layout/tab7' }
       ],
       tab2: [
         { name: '用户管理', id: 2, url: '/layout/tab2' },

+ 91 - 15
packages/admin/src/views/tab6/index.vue

@@ -5,7 +5,7 @@
     <div class="content">
       <div class="search">
         <div class="action-group">
-          <el-button @click="keywordModalVisible=true">关键词设置</el-button>
+          <el-button @click="keywordListModalVisible=true">关键词设置</el-button>
           <el-button type="primary" @click="askModalVisible=true">新增</el-button>
         </div>
 
@@ -66,7 +66,6 @@
           </el-form-item>
           <el-form-item label="排序值" prop="sort">
             <el-input-number :min="0" controls-position="right" placeholder="请输入1~999的数字。数字越小,排序越靠前。"
-                             dea
                              v-model="modalForm.sort"></el-input-number>
           </el-form-item>
         </el-form>
@@ -75,17 +74,17 @@
             <el-button type="primary" @click="handleSubmit">确 定</el-button>
         </span>
       </el-dialog>
-      <!--      -->
+      <!--    关键词列表  -->
       <el-dialog
-        :visible.sync="keywordModalVisible"
+        :visible.sync="keywordListModalVisible"
         destroy-on-close
-        width="30%"
-        @close="keywordModal = {}"
+        width="50%"
+        @close="keywordListModal = {}"
         center>
 
         <div slot="title" class="lv1-modal-header">
           <span>关键词</span>
-          <el-button type="primary">新增</el-button>
+          <el-button type="primary" @click="keywordModalVisible=true">新增</el-button>
         </div>
         <div class="table">
           <el-table :data="keywordList" style="width: 100%" min-height="450px">
@@ -93,7 +92,7 @@
             <el-table-column prop="sort" label="排序值"></el-table-column>
             <el-table-column label="操作">
               <template #default="{ row }">
-                <el-button type="text" @click="handleKeywordEdit(row.id)">编辑</el-button>
+                <el-button type="text" @click="handleKeywordEdit(row)">编辑</el-button>
                 <el-popconfirm
                   title="确定删除吗?"
                   @confirm="handleKeywordDelete(row.id)"
@@ -105,7 +104,33 @@
             </el-table-column>
           </el-table>
         </div>
+      </el-dialog>
 
+      <el-dialog
+        :visible.sync="keywordModalVisible"
+        destroy-on-close
+        width="30%"
+        @close="handleResetKeywordModalForm"
+        center>
+        <div slot="title" class="lv1-modal-header">
+          <span>{{ keywordModalForm.id ? "编辑" : "新增" }}关键词</span>
+        </div>
+        <el-form ref="keywordForm" label-position="right" label-width="80px" :model="keywordModalForm"
+                 :rules="rules">
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="keywordModalForm.name"></el-input>
+          </el-form-item>
+
+          <el-form-item label="排序值" prop="sort">
+            <el-input-number :min="0" controls-position="right" placeholder="请输入1~999的数字。数字越小,排序越靠前。"
+                             v-model="keywordModalForm.sort"></el-input-number>
+          </el-form-item>
+        </el-form>
+
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="keywordModalVisible = false">取 消</el-button>
+            <el-button type="primary" @click="handleKeywordSubmit">确 定</el-button>
+        </span>
       </el-dialog>
 
     </div>
@@ -113,7 +138,7 @@
 </template>
 
 <script>
-import { getAskList, deleteAsk, getKeywordList, addAsk } from '@/apis/tab6'
+import { getAskList, deleteAsk, getKeywordList, addAsk, deleteKeyword, addKeyword } from '@/apis/tab6'
 
 export default {
   name: 'tab6',
@@ -125,6 +150,9 @@ export default {
       tableData: [],
       askModalVisible: false,
       rules: {
+        name: [
+          { required: true, message: '请输入名称', trigger: 'blur' }
+        ],
         question: [
           { required: true, message: '请输入问题', trigger: 'blur' }
         ],
@@ -143,9 +171,12 @@ export default {
         sort: 1
       },
       keywordList: [],
+      keywordListModalVisible: false,
+      keywordListModal: {},
       keywordModalVisible: false,
-      keywordModal: {}
-
+      keywordModalForm: {
+        sort: 1
+      }
     }
   },
   // 监听属性 类似于data概念
@@ -207,11 +238,56 @@ export default {
       }
       this.askModalVisible = true
     },
-    handleKeywordEdit () {
-
+    handleKeywordEdit (row) {
+      this.keywordModalVisible = true
+      this.keywordModalForm = {
+        id: row.id,
+        name: row.name,
+        sort: row.sort
+      }
     },
-    handleKeywordDelete () {
-
+    async handleKeywordDelete (id) {
+      const res = await deleteKeyword(id)
+      if (res.code === 0) {
+        this.$message({
+          message: res.msg,
+          type: 'success'
+        })
+        await this.getKeyList()
+      }
+    },
+    handleResetKeywordModalForm () {
+      this.keywordModalForm = {
+        sort: 1
+      }
+    },
+    handleKeywordSubmit () {
+      this.$refs.keywordForm.validate(async (valid) => {
+        if (valid) {
+          const params = {
+            name: this.keywordModalForm.name,
+            sort: this.keywordModalForm.sort,
+            type: 'ask'
+          }
+          if (this.keywordModalForm.id) {
+            params.id = this.keywordModalForm.id
+          }
+          const res = await addKeyword(params)
+          this.keywordModalVisible = false
+          await this.getKeyList()
+          if (res.code === 0) {
+            this.$message({
+              message: res.msg,
+              type: 'success'
+            })
+          }
+        } else {
+          this.$message({
+            message: '请检查填写!',
+            type: 'warning'
+          })
+        }
+      })
     }
   },
   // 生命周期 - 创建完成(可以访问当前this实例)

+ 231 - 0
packages/admin/src/views/tab7/index.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="tab7">
+    <div class="insideTop">留言管理</div>
+    <div class="obstruct"></div>
+    <div class="content">
+      <div class="search">
+        <div class="action-group">
+          <!--          <el-button @click="keywordListModalVisible=true">关键词设置</el-button>-->
+          <el-button type="primary" @click="handleModelOpen">自动回复设置</el-button>
+        </div>
+
+      </div>
+      <div class="table">
+        <el-table :data="tableData" style="width: 100%">
+          <el-table-column label="编号" width="150">
+            <template slot-scope="scope">
+              {{ scope.$index + 1 }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="question" label="问题"></el-table-column>
+          <el-table-column prop="contactWay" label="联系方式"></el-table-column>
+          <el-table-column prop="updateTime" label="留言时间"></el-table-column>
+
+          <el-table-column label="操作">
+
+            <template #default="{ row }">
+<!--              <el-button-->
+<!--                type="text"-->
+<!--                @click="handleEdit(row)"-->
+<!--              >编辑-->
+<!--              </el-button>-->
+              <el-popconfirm
+                title="确定删除吗?"
+                @confirm="handleDelete(row.id)"
+              >
+                <el-button slot="reference" type="text" style="padding: 0 5px">删除</el-button>
+              </el-popconfirm>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <div style="text-align:center;margin-top: 30px">
+          <el-pagination background layout="prev, pager, next,total" :total="total"
+                         :page-size="pagesize" @current-change="currentChange"></el-pagination>
+        </div>
+      </div>
+    </div>
+    <!--   自动回复设置 -->
+    <el-dialog
+      :visible.sync="autoReplyModalVisible"
+      destroy-on-close
+      width="30%"
+      @close="handleAutoReplyReset"
+      center>
+      <div slot="title" class="lv1-modal-header">
+        <span>自动回复</span>
+      </div>
+      <el-form ref="replyModalForm" label-position="right" label-width="0px" :model="replyModalForm"
+               :rules="rules">
+        <el-form-item label="" prop="msg">
+          <el-input type="textarea" controls-position="right" placeholder="请输入"
+                    v-model="replyModalForm.msg">
+
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+            <el-button @click="autoReplyModalVisible = false">取 消</el-button>
+            <el-button type="primary" @click="handleSubmit">提 交</el-button>
+        </span>
+    </el-dialog>
+
+<!--    -->
+
+  </div>
+</template>
+
+<script>
+
+import { getMessageList, deleteMessage, editReplyMessage, getReplyMessage } from '@/apis/tab7'
+
+export default {
+  name: 'tab7',
+  components: {},
+  data () {
+    // 这里存放数据
+    return {
+      name: '',
+      tableData: [],
+      total: 0, // 总条数
+      pagesize: 10, // 指定展示多少条
+      currentPage: 1, // 当前页码,
+      autoReplyModalVisible: false,
+      autoReplyModal: {},
+      rules:
+        {
+          msg: [
+            { required: true, message: '请输入内容', trigger: 'blur' }
+          ]
+        },
+      replyModalForm: {}
+
+    }
+  },
+  // 监听属性 类似于data概念
+
+  // 方法集合
+  methods: {
+    async currentChange (currentPage) {
+      this.currentPage = currentPage
+    },
+    async handleRefreshList () {
+      const res = await getMessageList({
+        pageSize: this.pagesize,
+        pageNum: this.currentPage
+      })
+      // debugger
+      this.tableData = res.data.records
+      this.total = res.data.pages
+      this.currentPage = res.data.current
+      this.pagesize = res.data.size
+    },
+    async handleDelete (id) {
+      const res = await deleteMessage(id)
+      if (res.code === 0) {
+        this.$message({
+          message: res.msg,
+          type: 'success'
+        })
+        await this.handleRefreshList()
+      }
+    },
+
+    async handleAutoReplyReset () {
+
+    },
+
+    async getAutoReplyContent () {
+      const res = await getReplyMessage()
+      this.replyModalForm = {
+        msg: res.data || ''
+      }
+    },
+
+    async handleModelOpen () {
+      this.autoReplyModalVisible = true
+      await this.getAutoReplyContent()
+    },
+
+    async handleSubmit () {
+      this.$refs.replyModalForm.validate(async (valid) => {
+        if (valid) {
+          if (this.replyModalForm.msg.length > 0
+          ) {
+            editReplyMessage({
+              msg: this.replyModalForm.msg
+            })
+            this.autoReplyModalVisible = false
+          }
+        } else {
+        }
+      })
+    }
+    // async handle
+  },
+  // 生命周期 - 创建完成(可以访问当前this实例)
+  async created () {
+    await this.handleRefreshList()
+  },
+  // 生命周期 - 挂载完成(可以访问DOM元素)
+  mounted () {
+  }
+
+}
+</script>
+<style lang='less' scoped>
+.tab7 {
+  width: 100%;
+  height: 100%;
+
+  /deep/ .el-input-number {
+    width: 400px;
+    text-align: left;
+  }
+
+  .content {
+    padding: 0 20px;
+
+    .search {
+      height: 70px;
+      width: 100%;
+      display: flex;
+      justify-content: flex-end;
+      align-items: center;
+      border-bottom: 1px solid black;
+
+      /deep/ .el-input {
+        width: 300px;
+        margin-right: 12px;
+      }
+
+      /deep/ .el-input__inner {
+        padding-right: 45px;
+      }
+    }
+
+    .table {
+      /deep/ .el-table__row .el-table__cell {
+        padding: 3px 0;
+      }
+      /deep/ .el-table .cell {
+        padding: 6px 0;
+      }
+
+      /deep/ .el-pager li.active {
+        background-color: #b9412e;
+      }
+    }
+  }
+
+  .lv1-modal-header {
+    display: flex;
+    align-items: center;
+    gap: 0 30px;
+
+    span {
+      font-size: 24px;
+    }
+  }
+}
+</style>