Parcourir la source

新增个人档案相关台账

chenjun il y a 1 an
Parent
commit
70791a8f54

+ 15 - 0
client/src/views/OaSystem/mineCenter/components/rightBox.vue

@@ -34,6 +34,15 @@ const Wdda = defineAsyncComponent(() => {
 const Wdxz = defineAsyncComponent(() => {
   return import('../rightChild/wdda.vue')
 })
+const Clbx = defineAsyncComponent(() => {
+  return import('../rightChild/clbx.vue')
+})
+const Ptbx = defineAsyncComponent(() => {
+  return import('../rightChild/ptbx.vue')
+})
+const Wdyk = defineAsyncComponent(() => {
+  return import('../rightChild/wdyk.vue')
+})
 const rightTabsList = ref([
   {
     icon: 'wdda',
@@ -72,6 +81,12 @@ const rightTabsClick = (item, index) => {
     currentComponent.value = Wdda
   } else if (item.icon == 'wdxz') {
     currentComponent.value = Wdxz
+  } else if (item.icon == 'clbx') {
+    currentComponent.value = Clbx
+  } else if (item.icon == 'ptbx') {
+    currentComponent.value = Ptbx
+  } else if (item.icon == 'wdyk') {
+    currentComponent.value = Wdyk
   }
 }
 /** 初始化 **/

+ 98 - 0
client/src/views/OaSystem/mineCenter/rightChild/book.scss

@@ -0,0 +1,98 @@
+._ptbxBook {
+  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: 80px;
+    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;
+      }
+    }
+  }
+
+  .tableBox {
+    width: 100%;
+    height: 480px;
+    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: -40px;
+      text-align: right;
+    }
+  }
+  :deep(.el-radio__label),
+  :deep(.el-checkbox__label){
+      font-size: 16px;
+  }
+  :deep(.el-radio-group){
+    label {
+      margin-right: 10px;
+    }
+  }
+}

+ 186 - 0
client/src/views/OaSystem/mineCenter/rightChild/clbx.vue

@@ -0,0 +1,186 @@
+<template>
+  <div class="_ptbxBook">
+    <div class="searchBox">
+      <div class="form">
+        <span class="formSpan">项目编号:</span>
+        <el-input
+          v-model="queryParams.commonCostNo"
+          placeholder="请输入报销单号"
+          style="width: 210px"
+        />
+      </div>
+      <div class="form">
+        <span class="formSpan">项目名称:</span>
+        <el-input
+          v-model="queryParams.commonCostNo"
+          placeholder="请输入报销单号"
+          style="width: 210px"
+        />
+      </div>
+      <div class="form">
+        <span class="formSpan">报销单号:</span>
+        <el-input
+          v-model="queryParams.commonCostNo"
+          placeholder="请输入报销单号"
+          style="width: 210px"
+        />
+      </div>
+      <div class="form">
+        <span class="formSpan">状态:</span>
+        <el-input v-model="queryParams.status" style="width: 160px" />
+      </div>
+      <div class="from">
+        <div class="btnBox">
+          <el-button type="primary" style="background: #3485ff" @click="handleQuery">
+            <img src="@/assets/imgs/OA/search.png" class="mr-8px" alt="" />
+            查询</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div class="infoBox">
+      <ul>
+        <li v-for="(item, index) in infoList" :key="index" class="mr-40px">
+          <p>{{ item.name }}:</p>
+          <h4 class="font-size-18px">{{ item.num }}</h4>
+        </li>
+      </ul>
+    </div>
+    <div class="tableBox">
+      <div class="table" ref="tableRef">
+        <el-table
+          v-loading="loading"
+          :data="list"
+          style="width: 100%; height: 100%"
+          :style="{ height: tableHeight + 'px' }"
+          :header-cell-style="{
+            background: '#F7F8FA',
+            color: '#121518',
+            height: '50px'
+          }"
+          table-layout="fixed"
+        >
+          <el-table-column type="index" />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="travelCostNo"
+            label="报销单号"
+          />
+          <el-table-column
+            align="center"
+            prop="applyTime"
+            :formatter="dateFormatter2"
+            label="申请时间"
+          />
+          <el-table-column align="center" prop="totalAmount" label="报销总金额" />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="projectName"
+            label="项目名称"
+          />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="projectDeptName"
+            label="项目部门"
+          />
+          <el-table-column align="center" prop="status" label="状态" />
+          <el-table-column align="center" 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 * as TravelCostApi from '@/api/oa/travelCost'
+import { dateFormatter2 } from '@/utils/formatTime'
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+
+defineOptions({ name: 'TravelCostDept' })
+
+const { wsCache } = useCache()
+const user = wsCache.get(CACHE_KEY.USER)
+const userDeptId = user.user.deptId ? user.user.deptId : ''
+const userId = user.user.id ? user.user.id : ''
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  commonCostNo: undefined,
+  userId: userId,
+  deptId: undefined,
+  applyTime: [],
+  projectDeptId: undefined,
+  costType: undefined,
+  status: undefined,
+  totalAmount: undefined
+})
+const infoList: any = ref([
+  {
+    name: '报销总金额(元)',
+    num: '0'
+  },
+  {
+    name: '已报销总金额(元)',
+    num: '0'
+  },
+  {
+    name: '办理中总金额(元)',
+    num: '0'
+  }
+])
+const loading = ref(true) // 列表的加载中
+const total = ref(0) // 列表的总页数
+const list = ref([]) // 列表的数
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await TravelCostApi.getTravelCostPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 分页操作 */
+const handleCurrentChange = (pageNo: number) => {
+  queryParams.pageNo = pageNo
+  getList()
+}
+
+/** 初始化 */
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style lang="scss" scoped>
+@import url(./book.scss);
+</style>

+ 162 - 0
client/src/views/OaSystem/mineCenter/rightChild/ptbx.vue

@@ -0,0 +1,162 @@
+<template>
+  <div class="_ptbxBook">
+    <div class="searchBox">
+      <div class="form">
+        <span class="formSpan">报销单号:</span>
+        <el-input
+          v-model="queryParams.commonCostNo"
+          placeholder="请输入报销单号"
+          style="width: 210px"
+        />
+      </div>
+      <div class="form">
+        <span class="formSpan">状态:</span>
+        <el-input v-model="queryParams.status" style="width: 160px" />
+      </div>
+      <div class="from">
+        <div class="btnBox">
+          <el-button type="primary" style="background: #3485ff" @click="handleQuery">
+            <img src="@/assets/imgs/OA/search.png" class="mr-8px" alt="" />
+            查询</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div class="infoBox">
+      <ul>
+        <li v-for="(item, index) in infoList" :key="index" class="mr-40px">
+          <p>{{ item.name }}:</p>
+          <h4 class="font-size-18px">{{ item.num }}</h4>
+        </li>
+      </ul>
+    </div>
+    <div class="tableBox">
+      <div class="table" ref="tableRef">
+        <el-table
+          v-loading="loading"
+          :data="list"
+          style="width: 100%; height: 100%"
+          :style="{ height: tableHeight + 'px' }"
+          :header-cell-style="{
+            background: '#F7F8FA',
+            color: '#121518',
+            height: '50px'
+          }"
+          table-layout="fixed"
+        >
+          <el-table-column type="index" />
+          <el-table-column align="center" prop="commonCostNo" label="报销单号" />
+          <el-table-column
+            align="center"
+            prop="applyTime"
+            :formatter="dateFormatter2"
+            label="申请时间"
+          />
+          <el-table-column align="center" prop="totalAmount" label="报销总金额" />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="projectName"
+            label="项目名称"
+          />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="projectDeptName"
+            label="项目部门"
+          />
+          <el-table-column align="center" prop="status" label="状态" />
+          <el-table-column align="center" 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 * as CommonCostApi from '@/api/oa/commonCost'
+import { dateFormatter2 } from '@/utils/formatTime'
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+
+defineOptions({ name: 'CommonCostDept' })
+
+const { wsCache } = useCache()
+const user = wsCache.get(CACHE_KEY.USER)
+const userId = user.user.id ? user.user.id : ''
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  commonCostNo: undefined,
+  userId: userId,
+  deptId: userId,
+  applyTime: [],
+  status: undefined,
+  totalAmount: undefined
+})
+const infoList: any = ref([
+  {
+    name: '报销总金额(元)',
+    num: '0'
+  },
+  {
+    name: '已报销总金额(元)',
+    num: '0'
+  },
+  {
+    name: '办理中总金额(元)',
+    num: '0'
+  }
+])
+const loading = ref(true) // 列表的加载中
+const total = ref(0) // 列表的总页数
+const list = ref([]) // 列表的数
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await CommonCostApi.getCommonCostPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 分页操作 */
+const handleCurrentChange = (pageNo: number) => {
+  queryParams.pageNo = pageNo
+  getList()
+}
+
+/** 初始化 */
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style lang="scss" scoped>
+@import url(./book.scss);
+</style>

+ 182 - 0
client/src/views/OaSystem/mineCenter/rightChild/wdyk.vue

@@ -0,0 +1,182 @@
+<template>
+  <div class="_ptbxBook">
+    <div class="searchBox">
+      <div class="form">
+        <span class="formSpan">用款单号:</span>
+        <el-input
+          v-model="queryParams.useMoneyNo"
+          placeholder="请输入报销单号"
+          style="width: 210px"
+        />
+      </div>
+      <div class="form">
+        <span class="formSpan">项目部门:</span>
+        <el-input
+          v-model="queryParams.projectDeptId"
+          placeholder="请输入项目部门"
+          style="width: 160px"
+        />
+      </div>
+      <div class="form">
+        <span class="formSpan">状态:</span>
+        <el-input v-model="queryParams.status" style="width: 160px" />
+      </div>
+      <div class="from">
+        <div class="btnBox">
+          <el-button type="primary" style="background: #3485ff" @click="handleQuery">
+            <img src="@/assets/imgs/OA/search.png" class="mr-8px" alt="" />
+            查询</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div class="infoBox">
+      <ul>
+        <li v-for="(item, index) in infoList" :key="index" class="mr-40px">
+          <p>{{ item.name }}:</p>
+          <h4 class="font-size-18px">{{ item.num }}</h4>
+        </li>
+      </ul>
+    </div>
+    <div class="tableBox">
+      <div class="table" ref="tableRef">
+        <el-table
+          v-loading="loading"
+          :data="list"
+          style="width: 100%; height: 100%"
+          :style="{ height: tableHeight + 'px' }"
+          :header-cell-style="{
+            background: '#F7F8FA',
+            color: '#121518',
+            height: '50px'
+          }"
+          table-layout="fixed"
+        >
+          <el-table-column type="index" />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="useMoneyNo"
+            label="用款单号"
+          />
+          <el-table-column
+            align="center"
+            prop="applyTime"
+            :formatter="dateFormatter2"
+            label="申请时间"
+          />
+          <el-table-column align="center" prop="totalAmount" label="用款总金额" />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="projectName"
+            label="项目名称"
+          />
+          <el-table-column
+            show-overflow-tooltip="true"
+            align="center"
+            prop="projectDeptName"
+            label="项目部门"
+          />
+          <el-table-column
+            align="center"
+            prop="agreedPayTime"
+            :formatter="dateFormatter2"
+            label="约定付款期限"
+          />
+          <el-table-column align="center" prop="status" label="状态" />
+          <el-table-column align="center" 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 * as UseMoneyApi from '@/api/oa/useMoney'
+import { dateFormatter2 } from '@/utils/formatTime'
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+
+defineOptions({ name: 'UseMoneyDept' })
+const { wsCache } = useCache()
+const user = wsCache.get(CACHE_KEY.USER)
+const userId = user.user.id ? user.user.id : ''
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  commonCostNo: undefined,
+  userId: userId,
+  deptId: undefined,
+  applyTime: [],
+  projectDeptId: undefined,
+  costType: undefined,
+  status: undefined,
+  totalAmount: undefined
+})
+const infoList: any = ref([
+  {
+    name: '用款总金额(元)',
+    num: '0'
+  },
+  {
+    name: '已用款总金额(元)',
+    num: '0'
+  },
+  {
+    name: '申请用款总金额(元)',
+    num: '0'
+  }
+])
+const loading = ref(true) // 列表的加载中
+const total = ref(0) // 列表的总页数
+const list = ref([]) // 列表的数
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await UseMoneyApi.getUseMoneyPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 分页操作 */
+const handleCurrentChange = (pageNo: number) => {
+  queryParams.pageNo = pageNo
+  getList()
+}
+
+/** 初始化 */
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style lang="scss" scoped>
+@import url(./book.scss);
+</style>

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/commoncost/dao/CommonCostDao.java

@@ -2,6 +2,7 @@ package com.zjugis.business.flow.commoncost.dao;
 
 import com.zjugis.business.flow.commoncost.controller.vo.CommonCostPageReqVO;
 import com.zjugis.business.flow.commoncost.entity.CommonCostDO;
+import com.zjugis.business.flow.travelcost.entity.TravelCostDO;
 import com.zjugis.framework.common.pojo.PageResult;
 import com.zjugis.framework.mybatis.core.mapper.BaseMapperX;
 import com.zjugis.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -27,6 +28,7 @@ public interface CommonCostDao extends BaseMapperX<CommonCostDO> {
 
     default PageResult<CommonCostDO> getCommonCostPage(CommonCostPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<CommonCostDO>()
+                .eqIfPresent(CommonCostDO::getUserId, reqVO.getUserId())
                 .in(CommonCostDO::getFlowStatus, FLOW_FINISHED, FLOW_PROCESS)
                 .orderByDesc(CommonCostDO::getApplyTime));
     }

+ 3 - 3
zjugis-business/src/main/java/com/zjugis/business/flow/travelcost/dao/TravelCostDao.java

@@ -1,6 +1,5 @@
 package com.zjugis.business.flow.travelcost.dao;
 
-import com.zjugis.business.flow.commoncost.entity.CommonCostDO;
 import com.zjugis.business.flow.travelcost.controller.vo.TravelCostPageReqVO;
 import com.zjugis.business.flow.travelcost.entity.TravelCostDO;
 import com.zjugis.framework.common.pojo.PageResult;
@@ -20,13 +19,14 @@ import static com.zjugis.business.constants.FlowStatusConstants.FLOW_PROCESS;
  */
 @Mapper
 public interface TravelCostDao extends BaseMapperX<TravelCostDO> {
-    default PageResult<TravelCostDO> getCommonCostPage(TravelCostPageReqVO pageReqVO){
+    default PageResult<TravelCostDO> getTravelCostPage(TravelCostPageReqVO pageReqVO){
         return selectPage(pageReqVO, new LambdaQueryWrapperX<TravelCostDO>()
+                .eqIfPresent(TravelCostDO::getUserId, pageReqVO.getUserId())
                 .in(TravelCostDO::getFlowStatus, FLOW_FINISHED, FLOW_PROCESS)
                 .orderByDesc(TravelCostDO::getApplyTime));
     }
 
-    default PageResult<TravelCostDO> getCommonCostDeptPage(TravelCostPageReqVO pageReqVO, List<String> projectIds){
+    default PageResult<TravelCostDO> getTravelCostDeptPage(TravelCostPageReqVO pageReqVO, List<String> projectIds){
         return selectPage(pageReqVO, new LambdaQueryWrapperX<TravelCostDO>()
                 .in(TravelCostDO::getFlowStatus, FLOW_FINISHED, FLOW_PROCESS)
                 .and(wq -> wq.eq(TravelCostDO::getDeptId, pageReqVO.getDeptId())

+ 2 - 2
zjugis-business/src/main/java/com/zjugis/business/flow/travelcost/service/TravelCostServiceImpl.java

@@ -45,7 +45,7 @@ public class TravelCostServiceImpl implements TravelCostService {
 
     @Override
     public PageResult<TravelCostRespVO> getTravelCostPage(TravelCostPageReqVO pageReqVO) {
-        PageResult<TravelCostDO> pageResult = travelCostDao.getCommonCostPage(pageReqVO);
+        PageResult<TravelCostDO> pageResult = travelCostDao.getTravelCostPage(pageReqVO);
         PageResult<TravelCostRespVO> travelCostRespVOPageResult = getTravelCostRespVOPageResult(pageResult);
         return travelCostRespVOPageResult;
     }
@@ -54,7 +54,7 @@ public class TravelCostServiceImpl implements TravelCostService {
     public PageResult<TravelCostRespVO> getTravelCostDeptPage(TravelCostPageReqVO pageReqVO) {
         List<Project> projects = projectService.selectByDeptId(pageReqVO.getDeptId());
         List<String> deptProjectIds = convertList(projects, Project::getId);
-        PageResult<TravelCostDO> pageResult = travelCostDao.getCommonCostDeptPage(pageReqVO,deptProjectIds);
+        PageResult<TravelCostDO> pageResult = travelCostDao.getTravelCostDeptPage(pageReqVO,deptProjectIds);
         PageResult<TravelCostRespVO> travelCostRespVOPageResult = getTravelCostRespVOPageResult(pageResult);
         return travelCostRespVOPageResult;
     }

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/usemoney/dao/UseMoneyDao.java

@@ -1,6 +1,7 @@
 package com.zjugis.business.flow.usemoney.dao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zjugis.business.flow.commoncost.entity.CommonCostDO;
 import com.zjugis.business.flow.usemoney.controller.vo.UseMoneyEarnestRespVO;
 import com.zjugis.business.flow.usemoney.controller.vo.UseMoneyPageReqVO;
 import com.zjugis.business.flow.usemoney.entity.UseMoneyDO;
@@ -24,6 +25,7 @@ import static com.zjugis.business.constants.FlowStatusConstants.FLOW_PROCESS;
 public interface UseMoneyDao extends BaseMapperX<UseMoneyDO> {
     default PageResult<UseMoneyDO> getUseMoneyPage(UseMoneyPageReqVO pageReqVO) {
         return selectPage(pageReqVO, new LambdaQueryWrapperX<UseMoneyDO>()
+                .eqIfPresent(UseMoneyDO::getUserId, pageReqVO.getUserId())
                 .in(UseMoneyDO::getFlowStatus, FLOW_FINISHED, FLOW_PROCESS)
                 .orderByDesc(UseMoneyDO::getApplyTime));
     }