ljy121 vor 1 Jahr
Ursprung
Commit
c7cfe269f3

+ 146 - 0
client/src/views/OaSystem/marketCenter/returnMessage/deptReturnMessage.vue

@@ -0,0 +1,146 @@
+<template>
+  <div class="_ReturnMessageBox">
+    <div class="cardBox">
+      <div>
+        <p class="title">年份</p>
+        <p class="numberBox">
+          <span class="value">{{ curYear }}</span>
+        </p>
+      </div>
+      <ul>
+        <li>
+          <p class="value">{{ messageInfo['sign'] }}</p>
+          <p class="title">已签(万元)</p>
+        </li>
+        <li>
+          <p class="value">{{ messageInfo['new'] }}</p>
+          <p class="title">新开拓(万元)</p>
+        </li>
+        <li>
+          <p class="value">{{ messageInfo['return'] }}</p>
+          <p class="title">回款(万元)</p>
+        </li>
+      </ul>
+    </div>
+    <div class="tableBox">
+      <div class="table" ref="tableRef">
+        <el-table
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          :style="{ height: tableHeight + 'px' }"
+          :header-cell-style="{
+            background: '#F7F8FA',
+            color: '#121518',
+            height: '50px'
+          }"
+        >
+          <el-table-column label="序号" width="60">
+            <template #default="scope">{{ scope.$index + 1 }}</template>
+          </el-table-column>
+          <el-table-column prop="messageContent" label="消息内容" width="1350" />
+          <el-table-column prop="createTime" label="消息时间" width="240" />
+          <el-table-column label="操作" width="80">
+            <template #default="scope">
+              <div class="operateBtn" @click="operateClick(scope.row)">
+                <span>查看</span>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <div class="pageBox">
+        <el-pagination
+          v-model:current-page="queryParams.pageNo"
+          :page-size="10"
+          background
+          layout="total, prev, pager, next, jumper"
+          :total="total"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import moment from 'moment'
+import { useRouter } from 'vue-router'
+import request from '@/config/axios'
+import { getAssetURL } from '@/utils/auth'
+import { isSignListAll } from '@/utils/business'
+import { signWayAllList } from '@/utils/business'
+import { mainTypeAllList } from '@/utils/business'
+import { secondTypeAllList } from '@/utils/business'
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+
+defineOptions({ name: 'ReturnMessage' })
+const curYear = new Date().getFullYear()
+const { wsCache } = useCache()
+const user = wsCache.get(CACHE_KEY.USER)
+const deptId = user.user.deptId ? user.user.deptId : ''
+const router = useRouter()
+const tableRef: any = ref(null)
+const tableHeight: any = ref(0)
+const queryParams = reactive<{
+  pageNo: number
+  pageSize: number
+  year: string
+  deptId: string
+}>({
+  pageNo: 1,
+  pageSize: 10,
+  year: '',
+  deptId: deptId
+})
+
+const messageInfo = ref({
+  sign: 0,
+  new: 0,
+  return: 0
+})
+
+const handleCurrentChange = (pageNo: number) => {
+  queryParams.pageNo = pageNo
+  queryContractListAjax()
+}
+const operateClick = (row: any) => {
+  // router.push({
+  //   path: '/projectDetail',
+  //   query: { id: row.projectId, contractId: row.id }
+  // })
+}
+const tableData = ref<Array<any>>([])
+const total = ref<number>()
+const searchHandle: () => void = () => {
+  queryContractListAjax()
+}
+const queryContractListAjax = async (): Promise<void> => {
+  const urlApi = `/contract-message/page`
+  const sendData = {
+    ...queryParams,
+    pageSize: 10
+  }
+  const result = await request.get({ url: urlApi, params: sendData }, '/business')
+  tableData.value = result['records']
+  total.value = result['total']
+}
+queryContractListAjax()
+
+const filterNodeMethod = (value, data) => {
+  return data.name.includes(value)
+}
+onMounted(() => {
+  tableHeight.value = tableRef.value.clientHeight
+})
+</script>
+<style lang="scss" scoped>
+@import url(./returnMessage.scss);
+._ReturnMessageBox {
+  margin-top: 20px;
+  height: calc(100% - 20px);
+  background-color: #fff;
+  border-radius: 20px;
+  padding: 20px;
+  position: relative;
+  text-align: center;
+}
+</style>

+ 146 - 0
client/src/views/OaSystem/marketCenter/returnMessage/myReturnMessage.vue

@@ -0,0 +1,146 @@
+<template>
+  <div class="_ReturnMessageBox">
+    <div class="cardBox">
+      <div>
+        <p class="title">年份</p>
+        <p class="numberBox">
+          <span class="value">{{ curYear }}</span>
+        </p>
+      </div>
+      <ul>
+        <li>
+          <p class="value">{{ messageInfo['sign'] }}</p>
+          <p class="title">已签(万元)</p>
+        </li>
+        <li>
+          <p class="value">{{ messageInfo['new'] }}</p>
+          <p class="title">新开拓(万元)</p>
+        </li>
+        <li>
+          <p class="value">{{ messageInfo['return'] }}</p>
+          <p class="title">回款(万元)</p>
+        </li>
+      </ul>
+    </div>
+    <div class="tableBox">
+      <div class="table" ref="tableRef">
+        <el-table
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          :style="{ height: tableHeight + 'px' }"
+          :header-cell-style="{
+            background: '#F7F8FA',
+            color: '#121518',
+            height: '50px'
+          }"
+        >
+          <el-table-column label="序号" width="60">
+            <template #default="scope">{{ scope.$index + 1 }}</template>
+          </el-table-column>
+          <el-table-column prop="messageContent" label="消息内容" width="1350" />
+          <el-table-column prop="createTime" label="消息时间" width="240" />
+          <el-table-column label="操作" width="80">
+            <template #default="scope">
+              <div class="operateBtn" @click="operateClick(scope.row)">
+                <span>查看</span>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <div class="pageBox">
+        <el-pagination
+          v-model:current-page="queryParams.pageNo"
+          :page-size="10"
+          background
+          layout="total, prev, pager, next, jumper"
+          :total="total"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import moment from 'moment'
+import { useRouter } from 'vue-router'
+import request from '@/config/axios'
+import { getAssetURL } from '@/utils/auth'
+import { isSignListAll } from '@/utils/business'
+import { signWayAllList } from '@/utils/business'
+import { mainTypeAllList } from '@/utils/business'
+import { secondTypeAllList } from '@/utils/business'
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+
+defineOptions({ name: 'ReturnMessage' })
+const curYear = new Date().getFullYear()
+const { wsCache } = useCache()
+const user = wsCache.get(CACHE_KEY.USER)
+const userId = user.user.id ? user.user.id : ''
+const router = useRouter()
+const tableRef: any = ref(null)
+const tableHeight: any = ref(0)
+const queryParams = reactive<{
+  pageNo: number
+  pageSize: number
+  year: string
+  managerId: string
+}>({
+  pageNo: 1,
+  pageSize: 10,
+  year: '',
+  managerId: userId
+})
+
+const messageInfo = ref({
+  sign: 0,
+  new: 0,
+  return: 0
+})
+
+const handleCurrentChange = (pageNo: number) => {
+  queryParams.pageNo = pageNo
+  queryContractListAjax()
+}
+const operateClick = (row: any) => {
+  // router.push({
+  //   path: '/projectDetail',
+  //   query: { id: row.projectId, contractId: row.id }
+  // })
+}
+const tableData = ref<Array<any>>([])
+const total = ref<number>()
+const searchHandle: () => void = () => {
+  queryContractListAjax()
+}
+const queryContractListAjax = async (): Promise<void> => {
+  const urlApi = `/contract-message/page`
+  const sendData = {
+    ...queryParams,
+    pageSize: 10
+  }
+  const result = await request.get({ url: urlApi, params: sendData }, '/business')
+  tableData.value = result['records']
+  total.value = result['total']
+}
+queryContractListAjax()
+
+const filterNodeMethod = (value, data) => {
+  return data.name.includes(value)
+}
+onMounted(() => {
+  tableHeight.value = tableRef.value.clientHeight
+})
+</script>
+<style lang="scss" scoped>
+@import url(./returnMessage.scss);
+._ReturnMessageBox {
+  margin-top: 20px;
+  height: calc(100% - 20px);
+  background-color: #fff;
+  border-radius: 20px;
+  padding: 20px;
+  position: relative;
+  text-align: center;
+}
+</style>

+ 161 - 0
client/src/views/OaSystem/marketCenter/returnMessage/returnMessage.scss

@@ -0,0 +1,161 @@
+._ReturnMessageBox {
+  width: calc(100% - 30px);
+  height: calc(100% - 30px);
+  background: #FFFFFF;
+  border-radius: 4px 4px 4px 4px;
+  border: 1px solid #DEE0E3;
+  margin: 15px;
+
+  .searchBox {
+    width: 100%;
+    height: 125px;
+    background: #F7F8FA;
+    border-radius: 4px 4px 0 0;
+    display: flex;
+    align-items: center;
+    flex-wrap: wrap;
+    padding: 0 20px;
+    box-sizing: border-box;
+
+    .form {
+      display: flex;
+      align-items: center;
+      margin-right: 20px;
+
+      .formSpan {
+        font-size: 16px;
+      }
+
+      .btnBox {
+        display: flex;
+        align-items: center;
+      }
+    }
+  }
+
+  .infoBox {
+    width: 100%;
+    height: 55px;
+    background: #EDF2FB;
+
+    ul {
+      width: 100%;
+      height: 100%;
+      display: flex;
+      align-items: center;
+      padding: 0 20px;
+
+      li {
+        list-style: none;
+        display: flex;
+        align-items: center;
+      }
+    }
+  }
+
+  .cardBox {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-top: 20px;
+    >div {
+      width: 420px;
+      background: url("../../../../../../assets/imgs/OA/xmcb_bg.png") no-repeat;
+      background-size: 100% 100%;
+      height: 100px;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      padding-left: 30px;
+      >.title {
+        font-size: 18px;
+        font-weight: bold;
+        color: #2D333C;
+      }
+      >.numberBox {
+        color: #2E77E6;
+        >span {
+          vertical-align: bottom;
+          display: inline-block;
+        }
+        >.value {
+          font-size: 40px;
+          font-weight: bold;
+        }
+        >.unit {
+          font-size: 24px;
+          margin-left: 5px;
+          padding-bottom: 8px;
+        }
+      }
+    }
+    >ul {
+      display: flex;
+      flex: 1;
+      margin-left: 40px;
+      >li {
+        flex: 1;
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+        border-right: 1px solid #DEE0E3;
+        &:last-child {
+          border-right: 0px;
+        }
+        >.value {
+          font-size: 24px;
+          color: #2D333C;
+          font-weight: bold;
+        }
+        >.title {
+          font-size: 20px;
+          color: #626B70;
+        }
+      }
+    }
+  }
+
+  .tableBox {
+    width: 100%;
+    height: calc(100% - 180px);
+    padding: 15px 20px;
+    position: relative;
+
+    .table {
+      width: 100%;
+      height: calc(100% - 40px);
+
+      .operateBtn {
+        width: 54px;
+        height: 24px;
+        background: #EBF2FF;
+        border-radius: 16px 16px 16px 16px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        cursor: pointer;
+
+        span {
+          color: #2E77E6;
+        }
+      }
+    }
+
+    .pageBox {
+      position: absolute;
+      right: 20px;
+      bottom: 10px;
+      text-align: right;
+    }
+  }
+  :deep(.el-radio__label),
+  :deep(.el-checkbox__label){
+      font-size: 16px;
+  }
+  :deep(.el-radio-group){
+    label {
+      margin-right: 10px;
+    }
+  }
+}

+ 140 - 0
client/src/views/OaSystem/marketCenter/returnMessage/returnMessage.vue

@@ -0,0 +1,140 @@
+<template>
+  <div class="_ReturnMessageBox">
+    <div class="cardBox">
+      <div>
+        <p class="title">年份</p>
+        <p class="numberBox">
+          <span class="value">{{ curYear }}</span>
+        </p>
+      </div>
+      <ul>
+        <li>
+          <p class="value">{{ messageInfo['sign'] }}</p>
+          <p class="title">已签(万元)</p>
+        </li>
+        <li>
+          <p class="value">{{ messageInfo['new'] }}</p>
+          <p class="title">新开拓(万元)</p>
+        </li>
+        <li>
+          <p class="value">{{ messageInfo['return'] }}</p>
+          <p class="title">回款(万元)</p>
+        </li>
+      </ul>
+    </div>
+    <div class="tableBox">
+      <div class="table" ref="tableRef">
+        <el-table
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          :style="{ height: tableHeight + 'px' }"
+          :header-cell-style="{
+            background: '#F7F8FA',
+            color: '#121518',
+            height: '50px'
+          }"
+        >
+          <el-table-column label="序号" width="60">
+            <template #default="scope">{{ scope.$index + 1 }}</template>
+          </el-table-column>
+          <el-table-column prop="messageContent" label="消息内容" width="1350" />
+          <el-table-column prop="createTime" label="消息时间" width="240" />
+          <el-table-column label="操作" width="80">
+            <template #default="scope">
+              <div class="operateBtn" @click="operateClick(scope.row)">
+                <span>查看</span>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <div class="pageBox">
+        <el-pagination
+          v-model:current-page="queryParams.pageNo"
+          :page-size="10"
+          background
+          layout="total, prev, pager, next, jumper"
+          :total="total"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import moment from 'moment'
+import { useRouter } from 'vue-router'
+import request from '@/config/axios'
+import { getAssetURL } from '@/utils/auth'
+import { isSignListAll } from '@/utils/business'
+import { signWayAllList } from '@/utils/business'
+import { mainTypeAllList } from '@/utils/business'
+import { secondTypeAllList } from '@/utils/business'
+
+defineOptions({ name: 'ReturnMessage' })
+const curYear = new Date().getFullYear()
+const router = useRouter()
+const tableRef: any = ref(null)
+const tableHeight: any = ref(0)
+const queryParams = reactive<{
+  pageNo: number
+  pageSize: number
+  year: string
+}>({
+  pageNo: 1,
+  pageSize: 10,
+  year: ''
+})
+
+const messageInfo = ref({
+  sign: 0,
+  new: 0,
+  return: 0
+})
+
+const handleCurrentChange = (pageNo: number) => {
+  queryParams.pageNo = pageNo
+  queryContractListAjax()
+}
+const operateClick = (row: any) => {
+  // router.push({
+  //   path: '/projectDetail',
+  //   query: { id: row.projectId, contractId: row.id }
+  // })
+}
+const tableData = ref<Array<any>>([])
+const total = ref<number>()
+const searchHandle: () => void = () => {
+  queryContractListAjax()
+}
+const queryContractListAjax = async (): Promise<void> => {
+  const urlApi = `/contract-message/page`
+  const sendData = {
+    ...queryParams,
+    pageSize: 10
+  }
+  const result = await request.get({ url: urlApi, params: sendData }, '/business')
+  tableData.value = result['records']
+  total.value = result['total']
+}
+queryContractListAjax()
+
+const filterNodeMethod = (value, data) => {
+  return data.name.includes(value)
+}
+onMounted(() => {
+  tableHeight.value = tableRef.value.clientHeight
+})
+</script>
+<style lang="scss" scoped>
+@import url(./returnMessage.scss);
+._ReturnMessageBox {
+  margin-top: 20px;
+  height: calc(100% - 20px);
+  background-color: #fff;
+  border-radius: 20px;
+  padding: 20px;
+  position: relative;
+  text-align: center;
+}
+</style>