Browse Source

1.新增大中型绩效审批待办列表
2.新增大中型绩效提成审批详情页
3.调整资产绩效提成审批详情页
4.选择器组件优化

GouGengquan 2 weeks ago
parent
commit
b3702a5e27

+ 10 - 0
src/api/businessCommissionRate.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+/*
+* 非土规项目提成比例设置
+*/
+
+// 获取业务提成分类
+export function cateList(params1, params2) {
+    return request.get(`businessCommissionRate/cate/${params1}/${params2}`)
+}

+ 10 - 0
src/api/commissonDeclare.js

@@ -13,4 +13,14 @@ export function assetsCheckPage(params) {
 // 更新资产绩效申报提成比例与下限信息
 export function updateAssetsCommissionDeclare(params) {
     return request.put(`commissionDeclare/assets/check/update`, params)
+}
+
+// 大中型提成申报待审核列表
+export function majorCheckPage(params) {
+    return request.get(`commissionDeclare/major/check`, { params: params })
+}
+
+// 更新大中型绩效申报
+export function updateMajorCommissionDeclare(params) {
+    return request.put(`commissionDeclare/major/check/update`, params)
 }

+ 2 - 1
src/components/VanSinglePicker/index.vue

@@ -1,5 +1,6 @@
 <template>
   <div>
+    <!-- field的作用是回显选择的选项, 所以只读 -->
     <van-field v-model="text" v-bind="$attrs" readonly is-link :name="name" :label="label" @click="show = !show" :rules="rules" :required="required" />
     <van-popup :show="show" round position="bottom">
       <van-search v-if="search" v-model="keyWord" placeholder="请输入搜索关键词" />
@@ -33,7 +34,7 @@ export default {
     // 表单项
     label: String,
     // 父组件绑定值
-    modelValue: String,
+    modelValue: [String, Number],
     // 自定义 columns 结构中的字段, 结构不一样就调用组件时传入新的格式, 不然组件无法解析
     customFieldName: {
       type: Object,

+ 20 - 12
src/components/VanTable/index.vue

@@ -8,31 +8,31 @@
         <td v-for="(context, i) in option.column" :key="i">{{ item[context.tableDataprop] }}</td>
       </tr>
     </table>
+    <div v-if="tableData.length < 1" class="empty">暂无数据</div>
   </div>
 </template>
 <script>
 export default {
-  name:'TableVant',
-  props:{
-    bgcolor:{
+  name: 'TableVant',
+  props: {
+    bgcolor: {
       type: Object,
-      default: {}
+      default: {},
     },
-    tableData:{
+    tableData: {
       type: Array,
-      default: []
+      default: [],
     },
-    option:{
+    option: {
       type: Object,
-      default: {}
-    }
+      default: {},
+    },
   },
-  created() {}
+  created() {},
 };
 </script>
 
 <style  scoped>
-
 .vant-table {
   font-size: 14px;
   margin: 5px;
@@ -45,7 +45,7 @@ export default {
   color: #909399;
   height: 30px;
   line-height: 30px;
-  background-color: #F7F8FA;
+  background-color: #f7f8fa;
   text-align: center;
 }
 
@@ -57,5 +57,13 @@ export default {
 td {
   text-align: center;
 }
+
+.empty {
+  color: #909399;
+  text-align: center;
+  height: 30px;
+  line-height: 30px;
+  width:100%
+}
 </style>
 

+ 9 - 0
src/router/index.js

@@ -45,6 +45,7 @@ import LandPendingOrder from '@/views/land/pendingOrder.vue'
 // 提成绩效审批
 import CommissonDeclareIndex from '@/views/commissonDeclare/index.vue'
 import AssetsDeclareDetail from '@/views/commissonDeclare/assets/declareDetail.vue'
+import MajorDeclareDetail from '@/views/commissonDeclare/major/declareDetail.vue'
 
 const routes = [
   // 重定向到首页的路由
@@ -302,6 +303,14 @@ const routes = [
               title: '资产绩效审批详情'
             },
           },
+          {
+            path: 'major/declareDetail',
+            component: MajorDeclareDetail,
+            name: 'majorDeclareDetail',
+            meta: {
+              title: '大中型绩效审批详情'
+            },
+          },
         ]
       }
     ]

+ 20 - 3
src/views/commissonDeclare/assets/declareDetail.vue

@@ -91,7 +91,7 @@ export default {
       option: {
         column: [
           {
-            label: '评估人员',
+            label: '人员',
             tableDataprop: 'name',
           },
           {
@@ -123,6 +123,24 @@ export default {
   methods: {
     // 获取审核详情
     getDeclareDetail() {
+      // 市场人员没有参与时长这一列
+      if (this.$route.query.businessType !== 'COMMISSION_DECLARE_ASSET_EVALUATE') {
+        console.log("in")
+        this.option.column = [
+          {
+            label: '人员',
+            tableDataprop: 'name',
+          },
+          {
+            label: '提成比例(%)',
+            tableDataprop: 'rate',
+          },
+          {
+            label: '成员类型',
+            tableDataprop: 'memberType',
+          },
+        ]
+      }
       detail(this.businessId).then((res) => {
         if (res.code === 200) {
           this.declareForm = res.data;
@@ -141,7 +159,6 @@ export default {
             this.currentNode = res.data;
             this.nodeBusinessInfo.currentInstanceNodeId = res.data.instanceId;
             this.nodeBusinessInfo.nodeCode = res.data.nodeCode;
-            console.log(this.currentNode)
           }
         });
       }
@@ -158,7 +175,7 @@ export default {
           showNotify({ type: 'success', message: '提成比例与下限信息更新成功' });
           this.getDeclareDetail();
         } else {
-          showNotify({ type: 'success', message: '提成比例与下限信息更新失败, 请稍后重试' });
+          showNotify({ type: 'danger', message: '提成比例与下限信息更新失败, 请稍后重试' });
         }
       });
     },

+ 181 - 0
src/views/commissonDeclare/major/declareDetail.vue

@@ -0,0 +1,181 @@
+<template>
+  <div>
+    <BackBar title="业务提成申报详情-大中型" lefttext="返回" />
+    <van-form>
+      <van-cell-group inset>
+        <van-field label="项目名称" v-model="declareForm.name" name="name" type="textarea" readonly placeholder="-" />
+        <van-field label="订单号" v-model="declareForm.orderId" name="orderId" readonly placeholder="-" />
+        <van-field label="报告号" v-model="declareForm.reportNo" name="reportNo" readonly placeholder="-" />
+        <van-field label="客户名称" v-model="declareForm.clientName" name="reportNo" readonly placeholder="-" />
+        <van-field label="业务来源" v-model="declareForm.clientSubName" name="reportNo" readonly placeholder="-" />
+        <VanSinglePicker
+          label="业务分类"
+          v-model="declareForm.commissionRateId"
+          v-bind:columns="businessCateColumns"
+          name="commissionRateId"
+          placeholder="请选择业务分类"
+          clearable
+          :readonly="!nodeBusinessInfo.currentNodeCode == 'DEPARTMENT_LEADER_CHECK'"
+          @change="updateCommissionDeclare()"
+        />
+        <van-field label="产品类型" v-model="productionType" name="production" readonly placeholder="-" />
+        <van-field label="当前节点" v-model="currentNode.nodeName" name="nodeName" readonly :error="true" placeholder="-" />
+        <van-field label="申报人" v-model="declareForm.declareUser" name="declareUser" readonly placeholder="-" />
+        <van-field label="申报日期" v-model="declareForm.created" name="created" readonly placeholder="-" />
+        <van-field label="审核状态" v-model="declareForm.declareResult" name="declareResult" readonly placeholder="-" />
+        <van-field label="审核备注" v-model="declareForm.remarks" name="remarks" readonly placeholder="-" />
+        <van-field label="我的意见" v-model="commitInfo.comments" name="comments" placeholder="在此填写审核意见" />
+        <VanTable :option="option" :tableData="declareForm.userShareRates"></VanTable>
+      </van-cell-group>
+    </van-form>
+    <div class="button-style" style="float: left">
+      <van-button type="danger" style="width: 100%" @click="commitNode('TERMINATE')">拒绝</van-button>
+    </div>
+    <div class="button-style" style="float: right">
+      <van-button type="success" style="width: 100%" @click="commitNode('PASS')">通过</van-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { showConfirmDialog } from 'vant';
+import { showNotify } from 'vant';
+import { currentNode } from '@/api/workFlowNodeInstance';
+import { commit } from '@/api/workflow';
+import { detail, updateMajorCommissionDeclare } from '@/api/commissonDeclare';
+import { cateList } from '@/api/businessCommissionRate';
+import VanTable from '@/components/VanTable/index.vue';
+import VanSinglePicker from '@/components/VanSinglePicker/index.vue';
+
+export default {
+  components: { VanTable, VanSinglePicker },
+  computed: {
+    productionType() {
+      if (this.declareForm.production === 'REPORT') {
+        return '报告';
+      }
+      if (this.declareForm.production === 'LETTER') {
+        return '复评函';
+      }
+      if (this.declareForm.production === 'STATEMENT') {
+        return '价值意见书';
+      }
+    },
+  },
+  data() {
+    return {
+      couldEdit: false,
+      businessId: null,
+      nodeBusinessInfo: {},
+      declareForm: {},
+      users: [],
+      cates: [],
+      currentNode: {},
+      option: {
+        column: [
+          {
+            label: '人员',
+            tableDataprop: 'name',
+          },
+          {
+            label: '提成比例(%)',
+            tableDataprop: 'rate',
+          },
+        ],
+      },
+      commitInfo: {},
+      businessCateColumns: [],
+    };
+  },
+  created() {
+    this.couldEdit = this.$route.query.couldEdit;
+    this.nodeBusinessInfo.businessId = this.$route.query.businessId;
+    this.nodeBusinessInfo.mainBusiness = this.$route.query.businessType;
+    this.declareForm.declareBusinessType = this.$route.query.businessType;
+    this.getCurrentNode();
+    this.businessId = this.$route.query.businessId;
+    this.getDeclareDetail();
+    this.getMajorMarketCate();
+  },
+  methods: {
+    // 获取大中型业务分类
+    getMajorMarketCate() {
+      cateList('MAJOR_BUSINESS', this.nodeBusinessInfo.mainBusiness === 'COMMISSION_DECLARE_MAJOR_EVALUATE' ? 'EVALUATOR' : 'MARKETER').then((res) => {
+        if (res.code === 200) {
+          // 使用 map 方法提取 id 和 name 属性
+          this.businessCateColumns = res.data.map((item) => ({
+            value: item.id,
+            text: item.name,
+          }));
+        }
+      });
+    },
+    // 获取审核详情
+    getDeclareDetail() {
+      detail(this.businessId).then((res) => {
+        if (res.code === 200) {
+          this.declareForm = res.data;
+          this.declareForm.remarks = this.declareForm.remarks.map((item) => (item != null ? String(item) : '')).join(', ');
+          this.declareForm.userShareRates.forEach((item) => {
+            item.rate = item.rate * 100; // 将 rate 属性乘以 100
+          });
+        }
+      });
+    },
+    // 获取当前节点实例
+    getCurrentNode() {
+      if (this.nodeBusinessInfo.businessId) {
+        currentNode({
+          mainBusiness: this.nodeBusinessInfo.mainBusiness,
+          businessId: this.nodeBusinessInfo.businessId,
+        }).then((res) => {
+          if (res.code === 200 && res.data != null) {
+            this.currentNode = res.data;
+            this.nodeBusinessInfo.currentInstanceNodeId = res.data.instanceId;
+            this.nodeBusinessInfo.nodeCode = res.data.nodeCode;
+          }
+        });
+      }
+    },
+    // 更新资产绩效申报提成比例与下限信息
+    updateCommissionDeclare() {
+      let declareDTO = new Object();
+      declareDTO.id = this.businessId;
+      declareDTO.commissionRateId = this.declareForm.commissionRateId;
+      declareDTO.recordId = this.currentNode.tasks[0].recordId;
+      updateMajorCommissionDeclare(declareDTO).then((res) => {
+        if (res.code === 200 && res.data) {
+          showNotify({ type: 'success', message: '业务分类更新成功' });
+          this.getDeclareDetail();
+        } else {
+          showNotify({ type: 'danger', message: '业务分类更新失败' });
+        }
+      });
+    },
+    // 提交节点
+    commitNode(state) {
+      showConfirmDialog({
+        title: '提交节点',
+        message: '确认提交流程节点?',
+      }).then(() => {
+        this.commitInfo.instanceNodeId = this.currentNode.instanceId;
+        this.commitInfo.state = state;
+        commit(this.commitInfo).then((res) => {
+          if (res.code === 200 && res.data) {
+            showNotify({ type: 'success', message: '节点提交成功' });
+            history.back();
+          }
+        });
+      });
+    },
+  },
+};
+</script>
+
+<style scoped>
+.button-style {
+  display: inline-block;
+  margin: 20px;
+  width: 100px;
+}
+</style>

+ 56 - 22
src/views/home/todo.vue

@@ -94,31 +94,27 @@
       <van-back-top right="10vw" bottom="10vh" />
     </van-tab>
     <van-tab v-if="majorAdmin" title="大中型提成审批" name="majorAdmin">
-      <van-search v-model="assetsListQuery.keyWord" placeholder="请输入搜索关键词" @search="onAssetsSearch()" />
-      <van-pull-refresh v-model="loading" @refresh="onAssetsRefresh()">
-        <van-list v-model:loading="loading" :finished="assetsFinished" finished-text="没有待办了" @load="assetsTodoList()">
-          <div class="card" v-for="item in assetsListData" :key="item.id" @click="toAssetsDetail(item)">
+      <van-search v-model="majorDeclListQuery.orderId" placeholder="请输入项目编号" @search="onMajorDeclSearch()" />
+      <van-pull-refresh v-model="loading" @refresh="onMajorDeclRefresh()">
+        <van-list v-model:loading="loading" :finished="majorDeclFinished" finished-text="没有待办了" @load="getMajorDecl()">
+          <div class="card" v-for="item in majorDeclListData" :key="item.id" @click="toMajorDeclDetail(item)">
             <div class="businessTitle">
               <van-icon name="link-o" />
-              {{ item.orderId }}
+              {{ item.majorSimple !== null ? item.majorSimple.orderId : '-' }}
             </div>
-            <div class="productionNo" v-if="item.statementNo || item.reportNo">
+            <div class="productionNo">
               <van-icon name="coupon-o" />
-              {{ item.statementNo }}
-              <!-- 产品号都不为空才显示中间的分割空格, 以保持页面间距统一 -->
-              <span v-if="item.statementNo && item.reportNo">&nbsp;&nbsp;</span>
-              {{ item.reportNo }}
+              {{ item.majorSimple !== null ? item.majorSimple.reportNo : '-' }}
             </div>
             <div class="projectName">
               <div>
                 <van-icon name="location-o" />
-                {{ item.reportName || item.statementName || item.name }}
+                {{ item.majorSimple !== null ? item.majorSimple.orderName : '-' }}
               </div>
             </div>
             <div class="otherInfo">
-              <van-tag type="primary" size="medium" class="van-tag">{{ item.currentNodeName }}</van-tag>
-              <van-tag type="success" size="medium" class="van-tag">{{ item.clientManagerName }}</van-tag>
-              <van-tag color="#969799" size="medium" class="van-tag">{{ item.created }}</van-tag>
+              <van-tag type="primary" size="medium" class="van-tag">{{ item.businessCate }}</van-tag>
+              <van-tag type="success" size="medium" class="van-tag">{{ item.nodeName }}</van-tag>
             </div>
           </div>
         </van-list>
@@ -126,9 +122,9 @@
       <van-back-top right="10vw" bottom="10vh" />
     </van-tab>
     <van-tab v-if="assetsAdmin" title="资产提成审批" name="assetsAdmin">
-      <van-search v-model="assetsListQuery.keyWord" placeholder="请输入搜索关键词" @search="onAssetsDeclSearch()" />
+      <van-search v-model="assetsDeclListQuery.orderId" placeholder="请输入项目编号" @search="onAssetsDeclSearch()" />
       <van-pull-refresh v-model="loading" @refresh="onAssetsDeclRefresh()">
-        <van-list v-model:loading="loading" :finished="assetsFinished" finished-text="没有待办了" @load="assetsTodoList()">
+        <van-list v-model:loading="loading" :finished="assetsDeclFinished" finished-text="没有待办了" @load="getAssetsDecl()">
           <div class="card" v-for="item in assetsDeclListData" :key="item.id" @click="toAssetsDeclDetail(item)">
             <div class="businessTitle">
               <van-icon name="link-o" />
@@ -162,7 +158,7 @@ import { getPersonalTodoList } from '@/api/personal';
 import { getMajorTodoList } from '@/api/major';
 import { getAssetsTodoList } from '@/api/assets';
 import { checkHasBusinessHandle } from '@/api/workFlowNodeInstance';
-import { assetsCheckPage } from '@/api/commissonDeclare';
+import { assetsCheckPage, majorCheckPage } from '@/api/commissonDeclare';
 import { mapStores } from 'pinia';
 import { menuStore } from '@/stores/menuStore';
 
@@ -205,6 +201,14 @@ export default {
         orderId: null,
       },
       assetsDeclListData: [],
+      majorDeclFinished: false,
+      majorDeclListQuery: {
+        // 当前页数
+        current: 1,
+        // 项目编号
+        orderId: null,
+      },
+      majorDeclListData: [],
     };
   },
   computed: {
@@ -225,10 +229,7 @@ export default {
     },
   },
   created() {
-    this.personalFinished = false;
-    this.majorFinished = false;
-    this.assetsFinished = false;
-    this.personalTodoList();
+    
   },
   methods: {
     // 监听标签页改变
@@ -243,7 +244,6 @@ export default {
         case 'majorAdmin':
           break;
         case 'assetsAdmin':
-          this.onAssetsDeclRefresh();
           break;
         default:
           break;
@@ -333,6 +333,7 @@ export default {
     },
     // 获取资产待办
     assetsTodoList() {
+      console.log(this.activeName)
       this.loading = true;
       // 查询待办必须要设置这个参数
       this.assetsListQuery.handlerId = 1;
@@ -554,6 +555,39 @@ export default {
     toAssetsDeclDetail(item) {
       this.$router.push(`/index/commissonDeclare/assets/declareDetail?businessId=${item.businessId}&businessType=${item.businessType}&couldEdit=${true}`);
     },
+    // 大中型提成申报审批列表刷新
+    onMajorDeclRefresh() {
+      this.majorDeclListQuery.current = 1;
+      this.majorDeclFinished = false;
+      this.majorDeclListData = [];
+      this.getMajorDecl();
+    },
+    onMajorDeclSearch() {
+      this.majorDeclListQuery.current = 1;
+      this.majorDeclFinished = false;
+      this.majorDeclListData = [];
+      this.getMajorDecl();
+    },
+    // 获取大中型提成申报审批列表
+    getMajorDecl() {
+      majorCheckPage(this.majorDeclListQuery).then((res) => {
+        if (res.code == 200) {
+          if (res.data.records) {
+            this.majorDeclListData = this.majorDeclListData.concat(res.data.records);
+          }
+          if (res.data.pages > this.majorDeclListQuery.current) {
+            this.majorDeclListData.current++;
+          } else {
+            this.majorDeclFinished = true;
+          }
+        }
+        this.loading = false;
+      });
+    },
+    // 前往资产申报详情
+    toMajorDeclDetail(item) {
+      this.$router.push(`/index/commissonDeclare/major/declareDetail?businessId=${item.businessId}&businessType=${item.businessType}&couldEdit=${true}`);
+    },
   },
 };
 </script>