Browse Source

企业端反馈功能

ljb 9 months ago
parent
commit
4b459cca9e

+ 38 - 0
src/api/system/feedbackComp.js

@@ -0,0 +1,38 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/kd-scientific/feedback/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/kd-scientific/feedback/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/kd-scientific/feedback/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+// 回复
+export const reply = (row) => {
+  return request({
+    url: '/api/kd-scientific/feedback/reply',
+    method: 'post',
+    data: row
+  })
+}

+ 70 - 0
src/option/system/feedbackComp.js

@@ -0,0 +1,70 @@
+import { FEEDBACK_TYPE_DICTS } from "@/config/dict";
+
+export default {
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  index: true,
+  addBtnText: '提交反馈',
+  delBtn: false,
+  editBtn: false,
+  menu: false,
+  menuWidth: 120,
+  dialogWidth: 680,
+  dialogClickModal: false,
+  column: [
+    {
+      label: "反馈类型",
+      prop: "type",
+      type: "select",
+      width: 110,
+      align: "center",
+      span: 24,
+      dicData: FEEDBACK_TYPE_DICTS,
+      rules: [{
+        required: true,
+        message: '请选择反馈类型',
+        trigger: 'change'
+      }]
+    },
+    {
+      label: "详细描述",
+      minWidth: 300,
+      type: 'textarea',
+      prop: "remark",
+      span: 24,
+      overHidden: true,
+      rules: [{
+        required: true,
+        message: '请输入详细描述',
+        trigger: 'change'
+      }]
+    },
+    {
+      label: "截图证明",
+      prop: "attachment",
+      type: "upload",
+      listType: "picture-card",
+      width: 300,
+      fileType: "img",
+      accept: "image/png, image/jpeg",
+      limit: 5,
+      propsHttp: {
+        res: "data",
+        url: 'link',
+      },
+      action: '/api/kd-resource/oss/endpoint/put-file',
+      span: 24,
+    },
+    {
+      label: "反馈时间",
+      align: "center",
+      type: "date",
+      prop: "createTime",
+      display: false,
+      width: 140
+    },
+  ]
+};

+ 0 - 9
src/page/index/top/feedback/admin.vue

@@ -34,15 +34,6 @@
     
     </avue-crud>
 
-    <WideTablePrinter
-      ref="printWideTable"
-      :columns="wideTableColumns"
-      :data="data"
-      :print-title="printTitle"
-      :rows-per-page="30"
-      :default-landscape="true"
-    />
-
     <el-dialog
       title="回复"
       :visible.sync="dialogVisible"

+ 52 - 82
src/page/index/top/feedback/comp.vue

@@ -1,95 +1,65 @@
 <template>
-  <el-tabs v-model="activeName">
-    <el-tab-pane label="问题反馈" name="submitForm">
-      <div style="width: 80%; margin: 0 auto;">
-        <avue-form v-model="feedbackForm" :option="option" @submit="handleSubmitFeedback"></avue-form>
-      </div>
-    </el-tab-pane>
-    <el-tab-pane label="历史反馈" name="history">
+  <div>
+    <avue-crud
+      ref="crud"
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      @row-click="handleRowClick"
+    >
 
-    </el-tab-pane>
-  </el-tabs>
+    </avue-crud>
+
+    <el-dialog
+      title="反馈详情"
+      :visible.sync="dialogVisible"
+      width="760px"
+      append-to-body
+      @close="handleDialogClose"
+    >
+      <detail :data="rowData"></detail>
+    </el-dialog>
+
+  </div>
 </template>
 
 <script>
-import { getList, add, rep } from "@/api/system/feedback";
-import { FEEDBACK_TYPE_DICTS } from "@/config/dict";
+import crudCommon from '@/mixins/crud';
+import detail from "./detail.vue";
+
 
-export default {
-  name: "CompFeedback",
+export default crudCommon({
+  components: {
+    detail
+  },
   data() {
     return {
-      activeName: 'submitForm',
-      feedbackForm: {},
-      option: {
-        labelWidth: 100,
-        column: [
-         {
-            label:'反馈类型',
-            prop:'type',
-            type:'select',
-            dicData: FEEDBACK_TYPE_DICTS,
-            span: 24,
-            rules: [{
-              required: true,
-              message: '请选择反馈类型',
-              trigger: 'blur'
-            }]
-         },
-         {
-            label:'详细描述',
-            prop:'remark',
-            type: 'textarea',
-            span: 24,
-            rules: [{
-              required: true,
-              message: '请输入详细描述',
-              trigger: 'blur'
-            }]
-         },
-         {
-            label: "截图证明",
-            prop: "attachment",
-            type: "upload",
-            listType: "picture-card",
-            span: 24,
-            fileType: "img",
-            accept: "image/png, image/jpeg",
-            limit: 5,
-            propsHttp: {
-              res: "data",
-              url: 'link',
-            },
-            action: '/api/kd-resource/oss/endpoint/put-file',
-            tip: "支持png、jpg等格式",
-          },
-        ]
-      }
+      dialogVisible: false,
+
+      page: {
+        pageSizes: [10, 30, 50, 100, 200],
+        pageSize: 10
+      },
+
+      rowData: {},
     };
   },
   methods: {
-    handleSubmitFeedback(done) {
-      const params = { ...this.feedbackForm };
-      params.attachment = params.attachment.join(',');
-      add(params).then(({ data }) => {
-        done();
-        if (data.data.code == 200) {
-          this.$message.success("提交成功!");
-        }
-      }).catch(() => {
-        done();
-      });
+    handleDialogClose() {
+      this.dialogVisible = false;
+    },
+    handleRowClick(row) {
+      this.dialogVisible = true;
+      this.rowData = row;
     }
-  }
-};
+  },
+}, {
+  // 模块路径
+  name: 'system/feedbackComp',
+  res: ({ data }) => {
+    return data;
+  },
+});
 </script>
-
-<style lang="scss" scoped>
-.code {
-  font-size: 12px;
-  display: block;
-  font-family: monospace;
-  white-space: pre;
-  margin: 1em 0px;
-}
-</style>

+ 1 - 1
src/page/index/top/top-feedback.vue

@@ -4,7 +4,7 @@
     <el-dialog
       title="问题反馈"
       :visible.sync="box"
-      :width="isAdmin ? '70%' : '900px'"
+      :width="isAdmin ? '70%' : '960px'"
       append-to-body>
       <template v-if="box">
         <admin v-if="isAdmin"></admin>