Răsfoiți Sursa

添加数据报表数据路由

hxl13994548489 1 an în urmă
părinte
comite
4ae27803a2
45 a modificat fișierele cu 6758 adăugiri și 1 ștergeri
  1. 445 0
      src/router/modules/console.ts
  2. 10 1
      src/router/routes.ts
  3. 117 0
      src/views/consoleManage/businessDataManage/channelDataManage/channelDataManageDetail.vue
  4. 170 0
      src/views/consoleManage/businessDataManage/channelDataManage/index.vue
  5. 117 0
      src/views/consoleManage/businessDataManage/companyDataManage/companyDataManageDetail.vue
  6. 170 0
      src/views/consoleManage/businessDataManage/companyDataManage/index.vue
  7. 117 0
      src/views/consoleManage/businessDataManage/contactPersonDataManage/contactPersonDataManageDetail.vue
  8. 170 0
      src/views/consoleManage/businessDataManage/contactPersonDataManage/index.vue
  9. 170 0
      src/views/consoleManage/businessDataManage/riskDataManage/index.vue
  10. 117 0
      src/views/consoleManage/businessDataManage/riskDataManage/riskDataManageDetail.vue
  11. 170 0
      src/views/consoleManage/businessDataManage/salesmanDataManage/index.vue
  12. 117 0
      src/views/consoleManage/businessDataManage/salesmanDataManage/salesmanDataManageDetail.vue
  13. 170 0
      src/views/consoleManage/businessDataManage/telemarketingDataManage/index.vue
  14. 117 0
      src/views/consoleManage/businessDataManage/telemarketingDataManage/telemarketingDataManageDetail.vue
  15. 117 0
      src/views/consoleManage/financeDataManage/costVerificationData/costVerificationDataDetail.vue
  16. 170 0
      src/views/consoleManage/financeDataManage/costVerificationData/index.vue
  17. 170 0
      src/views/consoleManage/financeDataManage/meetData/index.vue
  18. 117 0
      src/views/consoleManage/financeDataManage/meetData/meetDataDetail.vue
  19. 170 0
      src/views/consoleManage/financeDataManage/operatingProfitData/index.vue
  20. 117 0
      src/views/consoleManage/financeDataManage/operatingProfitData/operatingProfitDataDetail.vue
  21. 170 0
      src/views/consoleManage/financeDataManage/personCheckData/index.vue
  22. 117 0
      src/views/consoleManage/financeDataManage/personCheckData/personCheckDataDetail.vue
  23. 170 0
      src/views/consoleManage/financeDataManage/receivableData/index.vue
  24. 117 0
      src/views/consoleManage/financeDataManage/receivableData/receivableDataDetail.vue
  25. 117 0
      src/views/consoleManage/personDataManage/channelPersonData/channelPersonDataDetail.vue
  26. 170 0
      src/views/consoleManage/personDataManage/channelPersonData/index.vue
  27. 170 0
      src/views/consoleManage/personDataManage/salesmanDept/index.vue
  28. 117 0
      src/views/consoleManage/personDataManage/salesmanDept/salesmanDeptDetail.vue
  29. 170 0
      src/views/consoleManage/personDataManage/salesmanReport/index.vue
  30. 117 0
      src/views/consoleManage/personDataManage/salesmanReport/salesmanReportDetail.vue
  31. 170 0
      src/views/consoleManage/personDataManage/telemarketingPersonData/index.vue
  32. 117 0
      src/views/consoleManage/personDataManage/telemarketingPersonData/telemarketingPersonDataDetail.vue
  33. 170 0
      src/views/consoleManage/quotationDataManage/channelQuotationData/index.vue
  34. 170 0
      src/views/consoleManage/quotationDataManage/companyQuotationData/index.vue
  35. 170 0
      src/views/consoleManage/quotationDataManage/quotationOrderData/index.vue
  36. 170 0
      src/views/consoleManage/quotationDataManage/salesmanQuotationData/index.vue
  37. 170 0
      src/views/consoleManage/quotationDataManage/telemarketingQuotationData/index.vue
  38. 117 0
      src/views/consoleManage/taskDataManage/channelData/channelDataDetail.vue
  39. 170 0
      src/views/consoleManage/taskDataManage/channelData/index.vue
  40. 117 0
      src/views/consoleManage/taskDataManage/companyData/companyDataDetail.vue
  41. 170 0
      src/views/consoleManage/taskDataManage/companyData/index.vue
  42. 170 0
      src/views/consoleManage/taskDataManage/salesmanData/index.vue
  43. 117 0
      src/views/consoleManage/taskDataManage/salesmanData/salesmanDataDetail.vue
  44. 170 0
      src/views/consoleManage/taskDataManage/telemarketingData/index.vue
  45. 117 0
      src/views/consoleManage/taskDataManage/telemarketingData/telemarketingDataDetail.vue

+ 445 - 0
src/router/modules/console.ts

@@ -0,0 +1,445 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw = {
+  path: '/consoleManage',
+  component: Layout,
+  redirect: '/consoleManage/businessDataManage/companyDataManage/index',
+  name: 'consoleManage',
+  meta: {
+    title: '数据报表',
+  },
+  children: [
+    {
+      path: 'businessDataManage',
+      redirect: '/consoleManage/businessDataManage/companyDataManage/index',
+      name: 'businessDataManage',
+      meta: {
+        title: '业务数据',
+      },
+      children: [
+        {
+          path: 'companyDataManage',
+          name: 'companyDataManage',
+          component: () => import('@/views/consoleManage/businessDataManage/companyDataManage/index.vue'),
+          meta: {
+            title: '保险公司',
+            menu: true,
+          },
+        },
+        {
+          path: 'companyDataManage/companyDataManageDetail',
+          name: 'companyDataManageDetail',
+          component: () => import('@/views/consoleManage/businessDataManage/companyDataManage/companyDataManageDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'riskDataManage',
+          name: 'riskDataManage',
+          component: () => import('@/views/consoleManage/businessDataManage/riskDataManage/index.vue'),
+          meta: {
+            title: '险种报表',
+            menu: true,
+          },
+        },
+        {
+          path: 'riskDataManage/riskDataManageDetail',
+          name: 'riskDataManageDetail',
+          component: () => import('@/views/consoleManage/businessDataManage/riskDataManage/riskDataManageDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'contactPersonDataManage',
+          name: 'contactPersonDataManage',
+          component: () => import('@/views/consoleManage/businessDataManage/contactPersonDataManage/index.vue'),
+          meta: {
+            title: '对接人',
+            menu: true,
+          },
+        },
+        {
+          path: 'contactPersonDataManage/contactPersonDataManageDetail',
+          name: 'contactPersonDataManageDetail',
+          component: () => import('@/views/consoleManage/businessDataManage/contactPersonDataManage/contactPersonDataManageDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'salesmanDataManage',
+          name: 'salesmanDataManage',
+          component: () => import('@/views/consoleManage/businessDataManage/salesmanDataManage/index.vue'),
+          meta: {
+            title: '业务员',
+            menu: true,
+          },
+        },
+        {
+          path: 'salesmanDataManage/salesmanDataManageDetail',
+          name: 'salesmanDataManageDetail',
+          component: () => import('@/views/consoleManage/businessDataManage/salesmanDataManage/salesmanDataManageDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'channelDataManage',
+          name: 'channelDataManage',
+          component: () => import('@/views/consoleManage/businessDataManage/channelDataManage/index.vue'),
+          meta: {
+            title: '渠道',
+            menu: true,
+          },
+        },
+        {
+          path: 'channelDataManage/channelDataManageDetail',
+          name: 'channelDataManageDetail',
+          component: () => import('@/views/consoleManage/businessDataManage/channelDataManage/channelDataManageDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'telemarketingDataManage',
+          name: 'telemarketingDataManage',
+          component: () => import('@/views/consoleManage/businessDataManage/telemarketingDataManage/index.vue'),
+          meta: {
+            title: '电销',
+            menu: true,
+          },
+        },
+        {
+          path: 'telemarketingDataManage/telemarketingDataManageDetail',
+          name: 'telemarketingDataManageDetail',
+          component: () => import('@/views/consoleManage/businessDataManage/telemarketingDataManage/telemarketingDataManageDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+      ],
+    },
+    {
+      path: 'quotationDataManage',
+      redirect: '/consoleManage/quotationDataManage/quotationOrderData/index',
+      name: 'quotationDataManage',
+      meta: {
+        title: '报价数据',
+      },
+      children: [
+        {
+          path: 'quotationOrderData',
+          name: 'quotationOrderData',
+          component: () => import('@/views/consoleManage/quotationDataManage/quotationOrderData/index.vue'),
+          meta: {
+            title: '报价订单',
+            menu: true,
+          },
+        },
+        {
+          path: 'companyQuotationData',
+          name: 'companyQuotationData',
+          component: () => import('@/views/consoleManage/quotationDataManage/companyQuotationData/index.vue'),
+          meta: {
+            title: '保险公司',
+            menu: true,
+          },
+        },
+        {
+          path: 'salesmanQuotationData',
+          name: 'salesmanQuotationData',
+          component: () => import('@/views/consoleManage/quotationDataManage/salesmanQuotationData/index.vue'),
+          meta: {
+            title: '业务员',
+            menu: true,
+          },
+        },
+        {
+          path: 'channelQuotationData',
+          name: 'channelQuotationData',
+          component: () => import('@/views/consoleManage/quotationDataManage/channelQuotationData/index.vue'),
+          meta: {
+            title: '渠道',
+            menu: true,
+          },
+        },
+        {
+          path: 'telemarketingQuotationData',
+          name: 'telemarketingQuotationData',
+          component: () => import('@/views/consoleManage/quotationDataManage/telemarketingQuotationData/index.vue'),
+          meta: {
+            title: '电销',
+            menu: true,
+          },
+        },
+      ],
+    },
+    {
+      path: 'personDataManage',
+      redirect: '/consoleManage/personDataManage/salesmanReport/index',
+      name: 'personDataManage',
+      meta: {
+        title: '人员数据',
+      },
+      children: [
+        {
+          path: 'salesmanReport',
+          name: 'salesmanReport',
+          component: () => import('@/views/consoleManage/personDataManage/salesmanReport/index.vue'),
+          meta: {
+            title: '业务员报表',
+            menu: true,
+          },
+        },
+        {
+          path: 'salesmanReport/salesmanReportDetail',
+          name: 'salesmanReportDetail',
+          component: () => import('@/views/consoleManage/personDataManage/salesmanReport/salesmanReportDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'salesmanDept',
+          name: 'salesmanDept',
+          component: () => import('@/views/consoleManage/personDataManage/salesmanDept/index.vue'),
+          meta: {
+            title: '业务员组织',
+            menu: true,
+          },
+        },
+        {
+          path: 'salesmanDept/salesmanDeptDetail',
+          name: 'salesmanDeptDetail',
+          component: () => import('@/views/consoleManage/personDataManage/salesmanDept/salesmanDeptDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'channelPersonData',
+          name: 'channelPersonData',
+          component: () => import('@/views/consoleManage/personDataManage/channelPersonData/index.vue'),
+          meta: {
+            title: '渠道数据',
+            menu: true,
+          },
+        },
+        {
+          path: 'channelPersonData/channelPersonDataDetail',
+          name: 'channelPersonDataDetail',
+          component: () => import('@/views/consoleManage/personDataManage/channelPersonData/channelPersonDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'telemarketingPersonData',
+          name: 'telemarketingPersonData',
+          component: () => import('@/views/consoleManage/personDataManage/telemarketingPersonData/index.vue'),
+          meta: {
+            title: '电销数据',
+            menu: true,
+          },
+        },
+        {
+          path: 'telemarketingPersonData/telemarketingPersonDataDetail',
+          name: 'telemarketingPersonDataDetail',
+          component: () => import('@/views/consoleManage/personDataManage/telemarketingPersonData/telemarketingPersonDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+      ],
+    },
+    {
+      path: 'taskDataManage',
+      redirect: '/consoleManage/taskDataManage/salesmanData/index',
+      name: 'taskDataManage',
+      meta: {
+        title: '任务数据',
+      },
+      children: [
+        {
+          path: 'salesmanData',
+          name: 'salesmanData',
+          component: () => import('@/views/consoleManage/taskDataManage/salesmanData/index.vue'),
+          meta: {
+            title: '业务员',
+            menu: true,
+          },
+        },
+        {
+          path: 'salesmanData/salesmanDataDetail',
+          name: 'salesmanDataDetail',
+          component: () => import('@/views/consoleManage/taskDataManage/salesmanData/salesmanDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'channelData',
+          name: 'channelData',
+          component: () => import('@/views/consoleManage/taskDataManage/channelData/index.vue'),
+          meta: {
+            title: '渠道',
+            menu: true,
+          },
+        },
+        {
+          path: 'channelData/channelDataDetail',
+          name: 'channelDataDetail',
+          component: () => import('@/views/consoleManage/taskDataManage/channelData/channelDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'telemarketingData',
+          name: 'telemarketingData',
+          component: () => import('@/views/consoleManage/taskDataManage/telemarketingData/index.vue'),
+          meta: {
+            title: '电销',
+            menu: true,
+          },
+        },
+        {
+          path: 'telemarketingData/telemarketingDataDetail',
+          name: 'telemarketingDataDetail',
+          component: () => import('@/views/consoleManage/taskDataManage/telemarketingData/telemarketingDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'companyData',
+          name: 'companyData',
+          component: () => import('@/views/consoleManage/taskDataManage/companyData/index.vue'),
+          meta: {
+            title: '保险公司',
+            menu: true,
+          },
+        },
+        {
+          path: 'companyData/companyDataDetail',
+          name: 'companyDataDetail',
+          component: () => import('@/views/consoleManage/taskDataManage/companyData/companyDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+      ],
+    },
+    {
+      path: 'financeDataManage',
+      redirect: '/consoleManage/financeDataManage/costVerificationData/index',
+      name: 'financeDataManage',
+      meta: {
+        title: '财务数据',
+      },
+      children: [
+        {
+          path: 'costVerificationData',
+          name: 'costVerificationData',
+          component: () => import('@/views/consoleManage/financeDataManage/costVerificationData/index.vue'),
+          meta: {
+            title: '费用校验',
+            menu: true,
+          },
+        },
+        {
+          path: 'costVerificationData/costVerificationDataDetail',
+          name: 'costVerificationDataDetail',
+          component: () => import('@/views/consoleManage/financeDataManage/costVerificationData/costVerificationDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'receivableData',
+          name: 'receivableData',
+          component: () => import('@/views/consoleManage/financeDataManage/receivableData/index.vue'),
+          meta: {
+            title: '应收',
+            menu: true,
+          },
+        },
+        {
+          path: 'receivableData/receivableDataDetail',
+          name: 'receivableDataDetail',
+          component: () => import('@/views/consoleManage/financeDataManage/receivableData/receivableDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'meetData',
+          name: 'meetData',
+          component: () => import('@/views/consoleManage/financeDataManage/meetData/index.vue'),
+          meta: {
+            title: '应付',
+            menu: true,
+          },
+        },
+        {
+          path: 'meetData/meetDataDetail',
+          name: 'meetDataDetail',
+          component: () => import('@/views/consoleManage/financeDataManage/meetData/meetDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+        {
+          path: 'operatingProfitData',
+          name: 'operatingProfitData',
+          component: () => import('@/views/consoleManage/financeDataManage/operatingProfitData/index.vue'),
+          meta: {
+            title: '经营利润',
+            menu: true,
+          },
+        },
+        {
+          path: 'personCheckData',
+          name: 'personCheckData',
+          component: () => import('@/views/consoleManage/financeDataManage/personCheckData/index.vue'),
+          meta: {
+            title: '人员审核',
+            menu: true,
+          },
+        },
+        {
+          path: 'personCheckData/personCheckDataDetail',
+          name: 'personCheckDataDetail',
+          component: () => import('@/views/consoleManage/financeDataManage/personCheckData/personCheckDataDetail.vue'),
+          meta: {
+            title: '明细',
+            menu: false,
+          },
+        },
+      ],
+    },
+  ],
+}
+
+export default routes

+ 10 - 1
src/router/routes.ts

@@ -14,6 +14,7 @@ import externalAgreement from "./modules/externalAgreement";//外部协议
 import additionalOrder from './modules/additionalOrder.ts'
 import insurancePolicy from './modules/insurancePolicy.ts'
 import systemManage from './modules/system.ts'
+import consoleManage from './modules/console.ts' //数据报表
 // import {  } from "@/store/modules/user";
 // 固定路由(默认路由
 // console.log(useUserStore)
@@ -142,7 +143,15 @@ const asyncRoutes: Route.recordMainRaw[] = [
       icon: "i-uim:box",
     },
     children: [systemManage],
-  }
+  },
+  /* 数据报表 */
+   {
+     meta: {
+       title: "数据报表",
+       icon: "i-uim:box",
+     },
+     children: [consoleManage],
+   }
   // {
   //   meta: {
   //     title: "租户运营",

+ 117 - 0
src/views/consoleManage/businessDataManage/channelDataManage/channelDataManageDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/businessDataManage/channelDataManage/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/businessDataManage/channelDataManage/channelDataManageDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/businessDataManage/companyDataManage/companyDataManageDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }} 保险公司</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/businessDataManage/companyDataManage/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/businessDataManage/companyDataManage/companyDataManageDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/businessDataManage/contactPersonDataManage/contactPersonDataManageDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/businessDataManage/contactPersonDataManage/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/businessDataManage/contactPersonDataManage/contactPersonDataManageDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/businessDataManage/riskDataManage/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/businessDataManage/riskDataManage/riskDataManageDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/businessDataManage/riskDataManage/riskDataManageDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/businessDataManage/salesmanDataManage/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/businessDataManage/salesmanDataManage/salesmanDataManageDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/businessDataManage/salesmanDataManage/salesmanDataManageDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/businessDataManage/telemarketingDataManage/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/businessDataManage/telemarketingDataManage/telemarketingDataManageDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/businessDataManage/telemarketingDataManage/telemarketingDataManageDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/financeDataManage/costVerificationData/costVerificationDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/financeDataManage/costVerificationData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/financeDataManage/costVerificationData/costVerificationDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/financeDataManage/meetData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/financeDataManage/meetData/meetDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/financeDataManage/meetData/meetDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/financeDataManage/operatingProfitData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/financeDataManage/operatingProfitData/operatingProfitDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/financeDataManage/personCheckData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/financeDataManage/personCheckData/personCheckDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/financeDataManage/personCheckData/personCheckDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/financeDataManage/receivableData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/financeDataManage/receivableData/receivableDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/financeDataManage/receivableData/receivableDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/personDataManage/channelPersonData/channelPersonDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/personDataManage/channelPersonData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/personDataManage/channelPersonData/channelPersonDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/personDataManage/salesmanDept/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/personDataManage/salesmanDept/salesmanDeptDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/personDataManage/salesmanDept/salesmanDeptDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/personDataManage/salesmanReport/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/personDataManage/salesmanReport/salesmanReportDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/personDataManage/salesmanReport/salesmanReportDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/personDataManage/telemarketingPersonData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/personDataManage/telemarketingPersonData/telemarketingPersonDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/personDataManage/telemarketingPersonData/telemarketingPersonDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/quotationDataManage/channelQuotationData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/quotationDataManage/companyQuotationData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/quotationDataManage/quotationOrderData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/quotationDataManage/salesmanQuotationData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/quotationDataManage/telemarketingQuotationData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/systemManage/logManage/logDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/taskDataManage/channelData/channelDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/taskDataManage/channelData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/taskDataManage/channelData/channelDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/taskDataManage/companyData/companyDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/taskDataManage/companyData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/taskDataManage/companyData/companyDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/taskDataManage/salesmanData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/taskDataManage/salesmanData/salesmanDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/taskDataManage/salesmanData/salesmanDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>

+ 170 - 0
src/views/consoleManage/taskDataManage/telemarketingData/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="log">
+    <el-form label-width="100" label-position="left" :model="form">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <el-form-item label="操作人">
+            <el-input v-model="form.operator" placeholder="请输入操作人姓名查找"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作时间">
+            <el-date-picker
+              v-model="form.operatingTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              @change="timeChange"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作功能">
+            <el-select v-model="form.function" placeholder="请选择">
+              <el-option label="工能1" value="1" key="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="操作内容">
+            <el-input v-model="form.content" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16" style="display: flex; align-items: center; justify-content: flex-end">
+          <el-button type="primary" @click="search">查询</el-button>
+          <el-button plain type="primary" @click="reset">重置</el-button>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      :data="tableData"
+      height="600"
+      style="margin-top: 24px"
+    >
+      <el-table-column label="操作人" prop="createBy" width="200"></el-table-column  >
+      <el-table-column label="操作时间" prop="createTime" width="240"></el-table-column>
+      <el-table-column label="操作功能" prop="moduleName"></el-table-column>
+      <el-table-column label="操作内容" prop="operationContent"></el-table-column>
+      <el-table-column label="类型" prop="operatorName" width="150"></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default="scope">
+          <el-button link type="primary" @click="detail(scope.row)">查看详情</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pages"
+        v-model:page-size="size"
+        :page-sizes="[10, 20, 30, 40]"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { useRouter } from 'vue-router'
+import api from '@/api'
+import {ElMessage} from "element-plus";
+
+const myRouter = useRouter()
+
+let activeName = ref('first')
+const handleClick = () => {
+
+}
+
+let form = ref({})
+const tableProps = ref({
+  value: "id",
+  label: "name",
+  children: "children",
+  checkStrictly: true,
+});
+let option = ref([])
+const timeChange = (val) => {
+
+}
+// 搜索
+const search = () => {
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+const reset = () => {
+  form.value = {}
+  pages.value = 1
+  size.value = 10
+  initData()
+}
+
+// 列表
+let tableData = ref([])
+const detail = (row) => {
+  myRouter.push({
+    path: '/consoleManage/taskDataManage/telemarketingData/telemarketingDataDetail',
+    query: {
+      id: row.id
+    }
+  })
+}
+
+// 分页
+let pages = ref(1)
+let size = ref(10)
+let total = ref(0)
+const handleSizeChange = (size) => {
+  size.value = size
+  initData()
+}
+const handleCurrentChange = (page) => {
+  pages.value = page
+  initData()
+}
+
+const initData = () => {
+  api.logApi.list({
+    pages: pages.value,
+    size: size.value,
+    ...form.value
+  }).then((res: any) => {
+    if(res.code === 200) {
+      tableData.value = res.data.records
+      total.value = res.data.total
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initData()
+})
+
+</script>
+
+<style scoped lang="scss">
+.log{
+  width: 100%;
+  height: calc(100vh - 120px);
+  background: #FFFFFF;
+  padding: 24px;
+  overflow-y: auto;
+  .pagination{
+    margin-top: 24px;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 117 - 0
src/views/consoleManage/taskDataManage/telemarketingData/telemarketingDataDetail.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="logDetail">
+    <el-descriptions :column="2">
+      <template #title>
+        <div class="title">
+          <div class="icon">
+            <el-icon><List /></el-icon>
+          </div>
+          <p>{{ detailData?.operationContent }}</p>
+        </div>
+      </template>
+      <el-descriptions-item label="操作功能:" label-align="right" align="left" label-width="100">{{ detailData?.moduleName }}</el-descriptions-item>
+      <el-descriptions-item label="操作类型:" label-align="right" align="left" label-width="100">{{ detailData?.operatorName }}</el-descriptions-item>
+      <el-descriptions-item label="操作人:" label-align="right" align="left" label-width="100">{{ detailData?.createBy }}</el-descriptions-item>
+      <el-descriptions-item label="操作时间:" label-align="right" align="left" label-width="100">{{ detailData?.createTime }}</el-descriptions-item>
+    </el-descriptions>
+    <el-row :gutter="20" class="content">
+      <el-col :span="11">
+        <p>变更前</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.fieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-col :span="11">
+        <p>变更后</p>
+        <div class="list">
+          <el-row class="list-item" :gutter="20" v-for="item in detailData?.compareResultList" :key="item">
+            <el-col :span="6">{{ item.name }}</el-col>
+            <el-col :span="18" style="color: #606266">{{ item.newFieldContent }}</el-col>
+          </el-row>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import api from '@/api'
+import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
+
+const myRoute = useRoute()
+const myRouter = useRouter()
+
+let detailData = ref(undefined)
+
+const initDetail = () => {
+  api.logApi.selectById(myRoute.query.id).then((res: any) => {
+    if(res.code == 200) {
+      detailData.value = res.data
+    } else {
+      ElMessage({
+        message: res.msg,
+        type: 'warning'
+      })
+    }
+  })
+}
+
+onMounted(() => {
+  initDetail()
+})
+
+</script>
+
+<style scoped lang="scss">
+.logDetail{
+  padding: 24px;
+  background: #FFFFFF;
+  width: 100%;
+  height: calc(100vh - 120px);
+  .title{
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    .icon{
+      width: 30px;
+      height: 30px;
+      border-radius: 50%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: #1A85FA;
+      color: #FFFFFF;
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  }
+  .content{
+    height: calc(100% - 120px);
+    overflow: hidden;
+    p{
+      text-align: center;
+      background: #F0F0F0;
+      margin: 0;
+      padding: 16px 0;
+    }
+    .list{
+      height: calc(100% - 80px);
+      overflow-y: auto;
+      overflow-x: hidden;
+      .list-item{
+        margin: 14px 0;
+        padding: 0 20px;
+        display: flex;
+      }
+    }
+  }
+  :deep(.el-descriptions) {
+    width: 50%;
+  }
+}
+</style>