From 83be7ca0c138b64b3447cc207b63c7933690f6ec Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期二, 25 二月 2025 09:08:58 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev

---
 src/views/CNAS/systemManagement/customerSatisfaction/index.vue |  405 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 405 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/systemManagement/customerSatisfaction/index.vue b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
new file mode 100644
index 0000000..414a023
--- /dev/null
+++ b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
@@ -0,0 +1,405 @@
+<template>
+  <div>
+    <div>
+      <div class="search-background">
+        <span v-if="tabIndex === '0'" class="search-group">
+          <span style="width: 150px">鍗曚綅鍚嶇О锛�</span>
+          <el-input v-model="searchForm.unitName" clearable size="small"></el-input>
+        </span>
+        <span v-if="tabIndex === '1'" class="search-group">
+          <span style="width: 150px">鏂囦欢鍚嶇О锛�</span>
+          <el-input v-model="searchForm1.fileName" clearable size="small"></el-input>
+        </span>
+        <span class="search-group">
+          <el-button size="small" @click="resetSearchForm">閲� 缃�</el-button>
+          <el-button size="small" type="primary" @click="searchList">鏌� 璇�</el-button>
+        </span>
+        <div class="btn">
+          <el-button v-if="tabIndex === '0'" size="small" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+          <el-upload v-if="tabIndex === '1'" ref='upload' :action="action" :before-upload="beforeUpload"
+            :headers="uploadHeader" :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false"
+            accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
+            <el-button :loading="upLoading" size="small" type="primary">瀵煎叆</el-button>
+          </el-upload>
+        </div>
+      </div>
+      <div class="table">
+        <div class="table-tab">
+          <el-radio-group v-model="tabIndex" @change="searchList" size="small">
+            <el-radio-button label="0">瀹㈡埛婊℃剰搴�</el-radio-button>
+            <el-radio-button label="1">缁煎悎鍒嗘瀽</el-radio-button>
+          </el-radio-group>
+        </div>
+        <div v-if="tabIndex === '0'">
+          <TableCard :showForm="false" :showTitle="false">
+            <template v-slot:table>
+              <limsTable :column="tableColumn" :height="'calc(100vh - 22em)'" :table-data="tableData"
+                :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"
+                :page="page">
+              </limsTable>
+            </template>
+          </TableCard>
+        </div>
+        <div v-if="tabIndex === '1'">
+          <TableCard :showForm="false" :showTitle="false">
+            <template v-slot:table>
+              <limsTable :column="tableColumn1" :height="'calc(100vh - 22em)'" :table-data="tableData1"
+                :table-loading="tableLoading1" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination0">
+              </limsTable>
+            </template>
+          </TableCard>
+        </div>
+      </div>
+    </div>
+    <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+      <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl"
+        style="height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+    <FormDialog v-if="formDialog" ref="formDialog" @closeFormDia="closeFormDia"></FormDialog>
+  </div>
+</template>
+
+<script>
+import TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import FormDialog from './components/formDialog.vue';
+import filePreview from '@/components/Preview/filePreview.vue'
+import {
+  pageClientSatisfaction,
+  pageAnalyseFile,
+  delClientSatisfaction,
+  delAnalyseFile,
+} from '@/api/cnas/systemManagement/customerSatisfaction.js'
+
+export default {
+  name: 'a8-customer-satisfaction',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { filePreview, FormDialog, limsTable, TableCard },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        unitName: '',
+      },
+      searchForm1: {
+        fileName: '',
+      },
+      tabIndex: '0',
+      tableColumn: [
+        {
+          label: '鍗曚綅鍚嶇О',
+          prop: 'unitName',
+          minWidth: '100'
+        },
+        {
+          label: '鏃ユ湡',
+          prop: 'fillDate',
+          minWidth: '100'
+        },
+        {
+          label: '濮撳悕',
+          prop: 'userName',
+          minWidth: '100'
+        },
+        {
+          label: '閮ㄩ棬',
+          prop: 'department',
+          minWidth: '100'
+        },
+        {
+          label: '鑱旂郴鐢佃瘽',
+          prop: 'contactNumber',
+          minWidth: '100'
+        },
+        {
+          label: '鍒涘缓鏃ユ湡',
+          prop: 'createTime',
+          minWidth: '100',
+        },
+        {
+          dataType: 'action',
+          minWidth: '80',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+      },
+      total: 0,
+      tableColumn1: [
+        {
+          label: '闄勪欢鍚嶇О',
+          prop: 'fileName',
+          minWidth: '100'
+        },
+        {
+          label: '鍒涘缓浜�',
+          prop: 'userName',
+          minWidth: '100'
+        },
+        {
+          label: '鍒涘缓鏃堕棿',
+          prop: 'createTime',
+          minWidth: '100'
+        },
+        {
+          dataType: 'action',
+          minWidth: '50',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '棰勮',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleLook(row)
+              }
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.upload(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delFile(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData1: [],
+      tableLoading1: false,
+      page1: {
+        size: 20,
+        current: 1,
+      },
+      total1: 0,
+      formDialog: false,
+      upLoading: false,
+      currentInfo: {},
+      lookDialogVisible: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.tabIndex === '0' ? this.searchForm : this.searchForm1
+      const page = this.tabIndex === '0' ? this.page : this.page1
+      if (this.tabIndex === '0') {
+        this.tableLoading = true
+        pageClientSatisfaction({ ...entity, ...page }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.tableData = res.data.records
+          this.total = res.data.total
+        }).catch(err => {
+          console.log('err---', err);
+          this.tableLoading = false
+        })
+      } else {
+        this.tableLoading1 = true
+        pageAnalyseFile({ ...entity, ...page }).then(res => {
+          this.tableLoading1 = false
+          if (res.code === 201) return
+          this.tableData1 = res.data.records
+          this.total1 = res.data.total
+        }).catch(err => {
+          console.log('err---', err);
+          this.tableLoading1 = false
+        })
+      }
+    },
+    openFormDia(type, row) {
+      this.formDialog = true
+      this.$nextTick(() => {
+        this.$refs.formDialog.openDia(type, row);
+      })
+    },
+    closeFormDia() {
+      this.formDialog = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.unitName = '';
+      this.searchForm1.fileName = '';
+      this.searchList()
+    },
+    // 瀵煎叆娴佺▼
+    beforeUpload(file) {
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        return false;
+      } else {
+        this.upLoading = true;
+        return true;
+      }
+    },
+    onError(err, file, fileList) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    handleSuccessUp(response) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.searchList()
+      }
+    },
+    // 鍒犻櫎瀹㈡埛婊℃剰搴�
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delClientSatisfaction({ clientSatisfactionId: row.clientSatisfactionId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鏌ョ湅鏂囦欢
+    handleLook(row) {
+      this.currentInfo = row
+      this.lookDialogVisible = true
+    },
+    // 涓嬭浇瀹㈡埛绂忓缓
+    upload(row) {
+      let url = '';
+      if (row.type == 1) {
+        url = this.javaApi + '/img/' + row.fileUrl
+        file.downloadIamge(url, row.fileName)
+      } else {
+        url = this.javaApi + '/word/' + row.fileUrl
+        const link = document.createElement('a');
+        link.href = url;
+        link.download = row.fileName;
+        link.click();
+      }
+    },
+    // 鍒犻櫎瀹㈡埛鍒嗘瀽闄勪欢
+    delFile(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delAnalyseFile({ analyseFileId: row.analyseFileId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鍒嗛〉
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+    // 鍒嗛〉
+    pagination0({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  },
+  // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+  computed: {
+    action() {
+      return this.javaApi + '/clientSatisfaction/uploadAnalyseFile'
+    }
+  },
+};
+</script>
+
+<style scoped>
+.view-title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 60px;
+  padding-left: 20px;
+}
+
+.search-background {
+  width: 100%;
+  height: 80px;
+  line-height: 80px;
+  background-color: #ffffff;
+  display: flex;
+  position: relative;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+
+.table {
+  background-color: #ffffff;
+}
+
+.table-tab {
+  margin: 0 20px 20px 20px;
+}
+
+.btn {
+  position: absolute;
+  top: 16px;
+  right: 20px;
+}
+</style>

--
Gitblit v1.9.3