Bladeren bron

评分模型修改以及完成留言投诉自主上报的后台展示

nahida 1 jaar geleden
bovenliggende
commit
338d071893

+ 3 - 4
src/views/qyxypj/qypjdf/detail.vue

@@ -26,11 +26,10 @@ const getData = async () => {
     dataList.push(temp);
   }
 
-  // 分组,每组分别包含前13个、14-20个、21-28个
   data.value = [
-    dataList.slice(0, 13),
-    dataList.slice(13, 20),
-    dataList.slice(20, 28)
+    dataList.slice(0, 14),
+    dataList.slice(14, 21),
+    dataList.slice(21, 30)
   ];
 
 };

+ 9 - 7
src/views/qyxypj/qypjdf/detailMap.js

@@ -1,15 +1,15 @@
 export const detailMap = new Map();
 
-detailMap.set('abnormalOperationScore', '经营异常扣分 (最高扣10分)');
+detailMap.set('abnormalOperationScore', '经营异常扣分');
 detailMap.set('administrativeAwardScore', '行政奖励得分 (最高得3分)');
-detailMap.set('administrativeEnforcementScore', '行政强制扣分 (最高扣5分)');
-detailMap.set('administrativePenaltyScore', '行政处罚扣分 (最高扣20分)');
-detailMap.set('administrativeSupervisionScore', '行政监督检查不合格 (最高扣1分)');
+detailMap.set('administrativeEnforcementScore', '行政强制扣分');
+detailMap.set('administrativePenaltyScore', '行政处罚扣分');
+detailMap.set('administrativeSupervisionScore', '行政监督检查不合格');
 detailMap.set('annualReportScore', '企业年报 (最高得2分)');
 detailMap.set('bankCreditRating', '银行信用等级 (最高得1分)');
 detailMap.set('certificateScore', '资质证书 (最高得3分)');
 detailMap.set('corporateImageScore', '形象宣传 (最高得1分)');
-detailMap.set('enforcementTargetScore', '被执行人信息 (最高扣10分)');
+detailMap.set('enforcementTargetScore', '被执行人信息');
 detailMap.set('environmentalProtectionCreditRating', '环保信用等级 (最高得1分)');
 detailMap.set('intellectualPropertyScore', '商标 (最高得3分)');
 detailMap.set('licensedCompanyCreditEvaluation', '持牌企业征信、信用评级机构评价结果 (最高得5分)');
@@ -18,15 +18,17 @@ detailMap.set('operationYearsScore', '经营年限 (最高得1分)');
 detailMap.set('otherCreditEvaluationInfo', '其他领域信用评价信息 (最高得4分)');
 detailMap.set('projectExperience', '项目经验 (最高得2分)');
 detailMap.set('publicCreditEvaluationResult', '信用平台企业公共信用评价结果 (最高得5分)');
-detailMap.set('publicUtilityArrearsScore', '公用事业欠费 (最高扣1分)');
+detailMap.set('publicUtilityArrearsScore', '公用事业欠费');
 detailMap.set('qualityInspection', '质量抽检 (最高得1分)');
 detailMap.set('registeredCapitalScore', '注册资金 (最高得1分)');
 detailMap.set('socialHonor', '社会荣誉 (最高得3分)');
 detailMap.set('socialResponsibility', '社会责任 (最高得4分)');
-detailMap.set('taxArrears', '税费欠缴 (最高扣3分)');
+detailMap.set('taxArrears', '税费欠缴');
 detailMap.set('taxCreditRating', '纳税信用等级 (最高得3分)');
 detailMap.set('taxScore', '企业纳税 (最高得4分)');
 detailMap.set('utilityPaymentScore', '公用事业缴费 (最高得1分)');
+detailMap.set('natureBusinessPremises', '经营场所性质 (最高得1分)');
+detailMap.set('socialSecurityScore', '社保扣分');
 
 export const titleMap = new Map();
 titleMap.set(1,'企业竞争力得分');

+ 162 - 0
src/views/xyjsxx/qysbxx/index.vue

@@ -0,0 +1,162 @@
+<script setup>
+import { ref, onMounted } from 'vue';
+import request, {download} from "@/utils/request.js";
+import { ElTable, ElTableColumn, ElPagination, ElButton, ElMessageBox, ElMessage, ElDialog } from 'element-plus';
+
+const tableData = ref([]);
+const total = ref(0);
+const pageSize = ref(10);
+const pageNum = ref(1);
+const multipleSelection = ref([]);
+const dialogVisible = ref(false);
+const fileList = ref([]);
+
+const getList = async () => {
+  const condition = [];
+  condition.push({
+    column: 'create_time',
+    type: 'orderByDesc'
+  })
+  const res = await request.get('/xcr-ow-self-reporting/findByPage', {
+    params: {
+      pageSize: pageSize.value,
+      pageNum: pageNum.value,
+      conditionJson: encodeURIComponent(JSON.stringify(condition))
+    }
+  });
+  // 格式化 createTime
+  tableData.value = res.records.map(record => ({
+    ...record,
+    createTime: formatDateTime(record.createTime)
+  }));
+  total.value = res.total;
+};
+
+const formatDateTime = (dateTimeString) => {
+  const date = new Date(dateTimeString);
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hours = String(date.getHours()).padStart(2, '0');
+  const minutes = String(date.getMinutes()).padStart(2, '0');
+  const seconds = String(date.getSeconds()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+};
+
+const handleSizeChange = (newPageSize) => {
+  pageSize.value = newPageSize;
+  getList();
+};
+
+const handleCurrentChange = (newPageNum) => {
+  pageNum.value = newPageNum;
+  getList();
+};
+
+const handleDelete = async (id) => {
+  try {
+    await ElMessageBox.confirm('确定要删除此记录吗?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    });
+    const res = await request.post('/xcr-ow-self-reporting/delete', [id]);
+    if (res.code === 200) {
+      ElMessage.success('删除成功');
+      getList();
+    } else {
+      ElMessage.error('删除失败');
+    }
+  } catch (error) {
+    ElMessage.error('取消删除');
+  }
+};
+
+const handleBatchDelete = async () => {
+  if (multipleSelection.value.length === 0) {
+    ElMessage.warning('请选择要删除的记录');
+    return;
+  }
+  try {
+    await ElMessageBox.confirm('确定要删除选中的记录吗?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    });
+    const ids = multipleSelection.value.map(row => row.id);
+    const res = await request.post('/xcr-ow-self-reporting/delete', ids);
+    if (res.code === 200) {
+      ElMessage.success('删除成功');
+      getList();
+    } else {
+      ElMessage.error('删除失败');
+    }
+  } catch (error) {
+    ElMessage.error('取消删除');
+  }
+};
+
+const handleSelectionChange = (val) => {
+  multipleSelection.value = val;
+};
+
+const showFileList = (files) => {
+  fileList.value = files;
+  dialogVisible.value = true;
+};
+
+const handleDownload = async (filePath,fileName)=>{
+  download('/xcrFile/downloadFile',{filePath},fileName)
+}
+
+onMounted(() => {
+  getList();
+});
+</script>
+
+<template>
+  <div class="p-10px">
+    <el-button type="danger" @click="handleBatchDelete">批量删除</el-button>
+    <el-table
+        :data="tableData"
+        style="width: 100%"
+        @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55"/>
+      <el-table-column prop="complainantIdNumber" label="投诉人身份证号" width="180"/>
+      <el-table-column prop="contactInformation" label="联系方式" width="180"/>
+      <el-table-column prop="contacts" label="联系人" width="180"/>
+      <el-table-column prop="createTime" label="创建时间" width="180"/>
+      <el-table-column prop="enterpriseName" label="企业名称" width="180"/>
+      <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="180"/>
+      <el-table-column label="文件" width="180">
+        <template #default="scope">
+          <el-button v-show="scope.row.files.length > 0" type="primary" @click="showFileList(scope.row.files)">查看</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" width="180">
+        <template #default="scope">
+          <el-button type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+    />
+    <!-- 文件列表对话框 -->
+    <el-dialog v-model="dialogVisible" title="文件列表" width="50%">
+      <ul>
+        <li v-for="(file, index) in fileList" :key="index" class="flex w-full justify-between">
+          <div>{{ file.fileOriginalName }}</div>
+          <div class="pr-20px"><el-button size="small" @click="handleDownload(file.fileUrl,file.fileOriginalName)">下载</el-button></div>
+        </li>
+      </ul>
+    </el-dialog>
+  </div>
+</template>

+ 80 - 0
src/views/xywytsjly/ly/index.vue

@@ -0,0 +1,80 @@
+<script setup>
+import { ref, onMounted } from 'vue';
+import request from "@/utils/request.js";
+import { ElTable, ElTableColumn, ElPagination } from 'element-plus';
+
+const tableData = ref([]);
+const total = ref(0);
+const pageSize = ref(10);
+const pageNum = ref(1);
+
+const getList = async () => {
+  const res = await request.get('/owLeavingMessage/findByPage', {
+    params: {
+      pageSize: pageSize.value,
+      pageNum: pageNum.value,
+      conditionJson: ''
+    }
+  });
+  // 格式化 createTime
+  tableData.value = res.records.map(record => ({
+    ...record,
+    createTime: formatDateTime(record.createTime)
+  }));
+  total.value = res.total;
+};
+
+const formatDateTime = (dateTimeString) => {
+  const date = new Date(dateTimeString);
+  if (isNaN(date.getTime())) {
+    return 'Invalid Date';
+  }
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hours = String(date.getHours()).padStart(2, '0');
+  const minutes = String(date.getMinutes()).padStart(2, '0');
+  const seconds = String(date.getSeconds()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+};
+
+const handleSizeChange = (newPageSize) => {
+  pageSize.value = newPageSize;
+  getList();
+};
+
+const handleCurrentChange = (newPageNum) => {
+  pageNum.value = newPageNum;
+  getList();
+};
+
+onMounted(() => {
+  getList();
+});
+</script>
+
+<template>
+  <div class="p-10px">
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column prop="card" label="身份证号" width="180"/>
+      <el-table-column prop="content" label="内容" width="180"/>
+      <el-table-column prop="createBy" label="创建人" width="180"/>
+      <el-table-column prop="createTime" label="创建时间" width="180"/>
+      <el-table-column prop="enterpriseName" label="企业名称" width="180"/>
+      <el-table-column prop="id" label="ID" width="180"/>
+      <el-table-column prop="name" label="姓名" width="180"/>
+      <el-table-column prop="phone" label="电话" width="180"/>
+      <el-table-column prop="type" label="类型" width="180"/>
+      <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="180"/>
+    </el-table>
+    <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+    />
+  </div>
+</template>

+ 102 - 0
src/views/xywytsjly/ts/index.vue

@@ -0,0 +1,102 @@
+<script setup>
+import {ref, onMounted} from 'vue';
+import request, {download} from "@/utils/request.js";
+import {ElTable, ElTableColumn, ElPagination, ElButton, ElDialog} from 'element-plus';
+
+const tableData = ref([]);
+const total = ref(0);
+const pageSize = ref(10);
+const pageNum = ref(1);
+const fileList = ref([]);
+const dialogVisible = ref(false);
+
+const getList = async () => {
+  const res = await request.get('crmComplain/findByPage', {
+    params: {
+      pageSize: pageSize.value,
+      pageNum: pageNum.value,
+      conditionJson: ''
+    }
+  });
+  // 格式化 createTime
+  tableData.value = res.records.map(record => ({
+    ...record,
+    createTime: formatDateTime(record.createTime)
+  }));
+  total.value = res.total;
+};
+
+const formatDateTime = (dateTimeString) => {
+  const date = new Date(dateTimeString);
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hours = String(date.getHours()).padStart(2, '0');
+  const minutes = String(date.getMinutes()).padStart(2, '0');
+  const seconds = String(date.getSeconds()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+};
+
+const handleSizeChange = (newPageSize) => {
+  pageSize.value = newPageSize;
+  getList();
+};
+
+const showFileList = (files) => {
+  fileList.value = files;
+  dialogVisible.value = true;
+};
+
+const handleCurrentChange = (newPageNum) => {
+  pageNum.value = newPageNum;
+  getList();
+};
+
+const handleDownload = async (filePath,fileName)=>{
+  download('/xcrFile/downloadFile',{filePath},fileName)
+}
+
+onMounted(() => {
+  getList();
+});
+</script>
+
+<template>
+  <div class="p-10px">
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column prop="type" label="类型" width="180"/>
+      <el-table-column prop="card" label="身份证号" width="180"/>
+      <el-table-column prop="content" label="内容" width="180"/>
+      <el-table-column prop="enterpriseName" label="企业名称" width="180"/>
+      <el-table-column prop="name" label="姓名" width="180"/>
+      <el-table-column prop="phone" label="电话" width="180"/>
+      <el-table-column prop="remark" label="备注" width="180"/>
+      <el-table-column prop="title" label="标题" width="180"/>
+      <el-table-column label="文件" width="180">
+        <template #default="scope">
+          <el-button v-show="scope.row.files.length > 0" type="primary" @click="showFileList(scope.row.files)">查看</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="180"/>
+      <el-table-column prop="createTime" label="创建时间" width="180"/>
+    </el-table>
+    <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+    />
+    <!-- 文件列表对话框 -->
+    <el-dialog v-model="dialogVisible" title="文件列表" width="50%">
+      <ul>
+        <li v-for="(file, index) in fileList" :key="index" class="flex w-full justify-between">
+          <div>{{ file.fileOriginalName }}</div>
+          <div class="pr-20px"><el-button size="small" @click="handleDownload(file.fileUrl,file.fileOriginalName)">下载</el-button></div>
+        </li>
+      </ul>
+    </el-dialog>
+  </div>
+</template>

+ 2 - 2
vite.config.js

@@ -31,9 +31,9 @@ export default defineConfig(({ mode, command }) => {
       proxy: {
         // https://cn.vitejs.dev/config/#server-proxy
         '/dev-api': {
-          // target: 'http://localhost:8900/background',
+          target: 'http://localhost:8900/background',
           // target: 'http://localhost:18902',
-          target: 'http://42.48.99.5:8900/background',
+          // target: 'http://42.48.99.5:8900/background',
           changeOrigin: true,
           rewrite: (p) => p.replace(/^\/dev-api/, '')
         }