Browse Source

设置提成调整,提成发放调整

qymljy 1 year ago
parent
commit
b55869ff2b

+ 213 - 56
src/Form/commissionDistribution/add.vue

@@ -1,10 +1,10 @@
 <template>
   <div>
-    <el-button size="small" type="primary"  @click="dialogVisible = true;listData()">新 建</el-button>
+    <el-button size="small" type="primary" @click="addShow">新 建</el-button>
     <el-drawer
         title="新建提成发放清单"
         :visible.sync="dialogVisible"
-        size="80%"
+        size="90%"
         direction="rtl"
         append-to-body
         @close="onClose">
@@ -13,40 +13,106 @@
           <el-form :model="form" :rules="rules" ref="formRef" label-width="120px" label-position="left" size="mini">
             <el-col :span="24">
               <el-form-item label="请选择收入凭证:" >
-                  <div style="float: left;margin-left: 20px" class="search__label">审核时间:</div>
+                <div class="inline-16 mt-10">
+                  <div class="search__label">审核时间:</div>
                   <el-date-picker
                       v-model="auditDate"
                       @change="selectChange"
                       type="daterange"
-                      style="width:200px;float: left"
+                      size="small"
                       format="yyyy-MM-dd"
                       value-format="yyyy-MM-dd"
                       range-separator="至"
                       start-placeholder="开始日期"
                       end-placeholder="结束日期">
                   </el-date-picker>
-                  <div style="margin-left: 20px;float: left" class="search__label">回款比例(%):</div>
-                  <div style="float: left">
-                    <el-input v-model="begrate" style="width: 200px" placeholder="请输入回款比例" @change="rateChange" :clearable="true"></el-input> —
-                    <el-input v-model="endrate" style="width: 200px" placeholder="请输入回款比例" @change="rateChange" :clearable="true"></el-input>
+                </div>
+                <div class="inline-16 mt-10">
+                  <div class="search__label inline-16" >回款比例(%):</div>
+                  <div class="inline-16">
+                    <el-input v-model="begrate" :clearable="true" placeholder="请输入回款比例" size="small"
+                              style="width: 200px" @change="rateChange"></el-input>
+                    —
+                    <el-input v-model="endrate" :clearable="true" placeholder="请输入回款比例" size="small"
+                              style="width: 200px" @change="rateChange"></el-input>
                   </div>
-                <div style="margin-left: 20px;float: left" class="search__label">搜索:</div>
-                <div>
-                  <el-input v-model="param.content.where.condition" style="width: 200px" placeholder="单号、业务员、部门、备注" @change="listData" :clearable="true"></el-input>
+                </div>
+                <div class="inline-16 mt-10">
+                  <label class="search__label">部门:</label>
+                  <el-cascader ref="selectdep" v-model="depment" :options="deplist" :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
+                               clearable
+                               size="small" @change="selectDep"></el-cascader>
+                </div>
+                <div class="inline-16 mt-10">
+                  <div style="margin-left: 20px;float: left" class="search__label">搜索:</div>
+                    <el-input v-model="param.content.where.condition" :suffix-icon="param.content.where.condition?'':'el-icon-search'"
+                              class="input-with-select inline-16 layout_search__panel"
+                              clearable
+                              placeholder="搜索"
+                              size="small" style="width:200px;"
+                              @clear="listData(param.content.pageNumber = 1)" @keyup.native.enter="listData(param.content.pageNumber = 1)">
+                    </el-input>
                 </div>
               </el-form-item>
              </el-col>
             <el-col :span="24">
-                <tableNewLayout style="margin-bottom: 20px" ref="tableRef" :checkbox="true" :layout="tablecols" :data="list" :opwidth="200" height="calc(100vh - 410px)" :width="true" :custom="true" @selectionChange="selectionChange">
-                  <template v-slot:customcol="scope">
-                    <div v-if="scope.column.columnname === 'rate'">
-                      <div>{{scope.column.data.rate?Math.round((scope.column.data.rate * 100)*100)/100 + '%':'0%'}}</div>
+              <tableNewLayout ref="tableRef" :checkbox="true" :custom="true" :data="list" :layout="tablecols"
+                              :opwidth="200" :width="true" height="calc(100vh - 450px)"
+                              @selectionChange="selectionChange">
+                <template v-slot:customcol="scope">
+                  <div v-if="scope.column.columnname === 'orderrate'">
+                    <div>
+                      {{ scope.column.data.orderrate ? Math.round((scope.column.data.orderrate * 100) * 100) / 100 + '%' : '--' }}
                     </div>
-                    <div v-else>
-                      {{scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation'?scope.column.data[[scope.column.columnname]]:'--'}}
-                    </div>
-                  </template>
-                </tableNewLayout>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'rate'">
+                    {{scope.column.data[[scope.column.columnname]]?Math.round((scope.column.data[[scope.column.columnname]] * 100) * 100) / 100 + '%':'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'allocation_rate'">
+                    {{scope.column.data[[scope.column.columnname]]?Math.round((scope.column.data[[scope.column.columnname]] * 100) * 100) / 100 + '%':'--'}}
+                  </div>
+
+                  <div v-else-if="scope.column.columnname === 'amount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'orderprice'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'price'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'cashbilldetailamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'orderExpectedamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'rewardamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'payapplyamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'unpayapplyamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else>
+                    {{ scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation' ? scope.column.data[[scope.column.columnname]] : '--' }}
+                  </div>
+                </template>
+              </tableNewLayout>
+              <div class="container normal-panel" style="text-align:right">
+                <el-pagination
+                    :current-page="currentPage"
+                    :page-size="100"
+                    :page-sizes="[100, 150, 200, 250]"
+                    :total="total"
+                    background
+                    layout="total,sizes, prev, pager, next, jumper"
+                    @size-change="handleSizeChange"
+                    @current-change="handleCurrentChange">
+                </el-pagination>
+              </div>
             </el-col>
             <el-col :span="24">
               <el-form-item label="备注:" prop="remarks">
@@ -71,49 +137,66 @@ export default {
   name: "add",
   data(){
     return {
-      dialogVisible:false,
-      tablecols:[],
-      auditDate:'',
-      begrate:'',
-      endrate:'',
-      list:[],
-      form:{
-        "sa_hrpayapplyid":0,
+      dialogVisible: false,
+      tablecols: [],
+      auditDate: '',
+      begrate: '',
+      endrate: '',
+      list: [],
+      total: 0,
+      currentPage: 0,
+      form: {
+        "sa_hrpayapplyid": 0,
         "billdate": new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
-        "billno":"",
-        "remarks":"",
+        "billno": "",
+        "remarks": "",
         "hrpayapplydetail": []
       },
-      rules:{},
-      param:{
+      rules: {},
+      param: {
         "id": 20240117140304,
         "content": {
-          "sa_hrpayapplyid":0,
+          "sa_hrpayapplyid": 0,
           "pageNumber": 1,
-          "pageSize": 99999,
-          "where":{
-            "condition":"",
-            "begdate":"",
-            "enddate":"",
-            "status":"",
-            "begrate":'',//开始回款比例
-            "endrate":'' //截止回款比例
+          "pageSize": 100,
+          "where": {
+            "condition": "",
+            "begdate": "",
+            "enddate": "",
+            "status": "",
+            "begrate": '',//开始回款比例
+            "endrate": '' //截止回款比例
           }
         }
-      }
+      },
+      depmentParam: {
+        classname: "webmanage.department.department",
+        method: "querydepartment",
+        content: {}
+      },
+      depment: '',
+      deplist: []
     }
   },
-  methods:{
-    async listData(){
+  methods: {
+    addShow() {
+      this.dialogVisible = true;
+      this.listData(this.param.content.pageNumner = 1);
+      this.departmentrtment()
+    },
+    async listData() {
       const res = await this.$api.requested(this.param)
       this.list = res.data
+      this.total = res.total;
+      this.currentPage = res.pageNumber
     },
-    selectionChange(row){
-      this.form.hrpayapplydetail = row.map(item=>{
+    selectionChange(row) {
+      console.log(row, 'rows');
+      this.form.hrpayapplydetail = row.map(item => {
         return {
-          "sa_hrpayapplydetailid": 0,
-          "remarks": item.remarks,
-          "sa_hrcashbillid": item.sa_hrcashbillid
+          "sa_hrcashbilldetailid": item.sa_hrcashbilldetailid,
+          "sa_hrcashbillid": item.sa_hrcashbillid,
+          "amount": item.amount
         }
       })
     },
@@ -152,20 +235,94 @@ export default {
         this.param.content.where.begdate = ''
         this.param.content.where.enddate = this.auditDate[1]
       }
-      this.listData()
+      this.listData(this.param.content.pageNumner = 1)
     },
-    rateChange(){
-      if (this.begrate && this.endrate){
-        const begrate = this.begrate /100
-        const endrate = this.endrate /100
+    rateChange() {
+      if (this.begrate && this.endrate) {
+        const begrate = this.begrate / 100;
+        const endrate = this.endrate / 100;
         this.param.content.where.begrate = begrate.toFixed(4)
         this.param.content.where.endrate = endrate.toFixed(4)
-      }else {
+      } else {
         this.param.content.where.begrate = ''
         this.param.content.where.endrate = ''
       }
+      this.listData(this.param.content.pageNumner = 1)
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val;
       this.listData()
-    }
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val;
+      this.listData()
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam);
+      this.deplist = this.createMenu(res.data)
+    },
+    createMenu(array) {
+      var that = this;
+      let arr = [];
+
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0) {
+          var elNode = {
+            label: node["depname"],
+            parentid: node['parentid'],
+            parentname: node['parentname'],
+            departmentid: node["departmentid"],
+            value: node["departmentid"],
+            remarks: node["remarks"],
+            isused: node["isused"],
+            changedate: node['changedate'],
+            changeby: node['changeby'],
+            createdate: node['createdate'],
+            createby: node['createby'],
+            depno: node['depno'],
+            disabled: that.pageOnlyRead,
+          }
+        } else {
+          var elNode = {
+            label: node["depname"],
+            parentid: node['parentid'],
+            parentname: node['parentname'],
+            departmentid: node["departmentid"],
+            value: node["departmentid"],
+            remarks: node["remarks"],
+            isused: node["isused"],
+            changedate: node['changedate'],
+            changeby: node['changeby'],
+            createdate: node['createdate'],
+            createby: node['createby'],
+            depno: node['depno'],
+            disabled: that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    selectDep(val) {
+      this.person = '';
+      this.param.content.where.departmentid = val[val.length - 1];
+      this.listData(this.param.content.pageNumner = 1)
+    },
   },
   created() {
     this.tablecols = this.tool.tabelCol(this.$route.name).incomeSelectTable.tablecols

+ 166 - 29
src/SDrpManagement/commissionDistribution/detail/components/income.vue

@@ -1,37 +1,66 @@
 <template>
   <div>
     <div class="flex-align-stretch">
-<!--      <div class="mt-10">
-        <label  class="search__label">状态:</label>
-        <el-select class="inline-16" v-model="param.content.where.status" placeholder="请选择状态" @change="selectChange" size="small" clearable>
-          <el-option label="新建" value="新建"></el-option>
-          <el-option label="审核" value="审核"></el-option>
-        </el-select>
-      </div>-->
+      <div class="mt-10 inline-16">
+        <label class="search__label">部门:</label>
+        <el-cascader ref="selectdep" v-model="depment" :options="deplist" :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
+                     clearable
+                     size="small" @change="selectDep"></el-cascader>
+      </div>
       <div class="mt-10 inline-16">
         <el-input  style="width:200px;" placeholder="搜索" :suffix-icon="param.content.where.condition?param.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="param.content.where.condition" @keyup.native.enter="listData(param.content.pageNumber = 1)" @clear="listData(param.content.pageNumber = 1)" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
         </el-input>
       </div>
       <div class="mt-10 inline-16">
-        <addDetail :status="data.status" @onSuccess="listData"></addDetail>
+        <addDetail  v-if="tool.checkAuth($route.name,'revenueDetails')" :status="data.status" @onSuccess="listData"></addDetail>
       </div>
       <div class="mt-10 inline-16">
-        <exportFile :param="param" :columns="tablecols" fileName="收入列表"></exportFile>
+        <el-button v-if="tool.checkAuth($route.name,'revenueDetails')"   @click="delDetail" :type="delData.length == 0 || data.status == '发放'?'':'primary'" size="small" :disabled="delData.length == 0 || data.status == '发放'">删 除</el-button>
+      </div>
+      <div class="mt-10 inline-16">
+        <exportFile v-if="tool.checkAuth($route.name,'revenueDetails')" :param="param" :columns="tablecols" fileName="收入列表"></exportFile>
       </div>
     </div>
-    <tableNewLayout :layout="tablecols" :data="list" :opwidth="200" height="calc(100vh - 376px)" :width="true" :custom="true" fixedName="operation">
+    <tableNewLayout :layout="tablecols" :data="list" :opwidth="200" height="calc(100vh - 376px)" :width="true" :custom="true" fixedName="operation" :checkbox="true" @selectionChange="selectionChange">
       <template v-slot:customcol="scope">
-        <div v-if="scope.column.columnname === 'remarks'">
-          {{scope.column.data.sourcenote !== '' && scope.column.data.remarks !== ''?'系统备注:' + scope.column.data.sourcenote + ';人工备注:' + scope.column.data.remarks :
-            scope.column.data.sourcenote !== ''?'系统备注:' + scope.column.data.sourcenote : scope.column.data.remarks !== ''?'人工备注:' + scope.column.data.remarks:'--'}}
+        <div v-if="scope.column.columnname === 'orderrate'">
+          <div>
+            {{ scope.column.data.orderrate ? Math.round((scope.column.data.orderrate * 100) * 100) / 100 + '%' : '--' }}
+          </div>
+        </div>
+        <div v-else-if="scope.column.columnname === 'rate'">
+          {{scope.column.data[[scope.column.columnname]]?Math.round((scope.column.data[[scope.column.columnname]] * 100) * 100) / 100 + '%':'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'allocation_rate'">
+          {{scope.column.data[[scope.column.columnname]]?Math.round((scope.column.data[[scope.column.columnname]] * 100) * 100) / 100 + '%':'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'orderprice'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'price'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'cashbilldetailamount'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
         </div>
-        <div v-else-if="scope.column.columnname === 'relaamount'">
-          {{tool.formatAmount(scope.column.data[[scope.column.columnname]],2)}}
+        <div v-else-if="scope.column.columnname === 'orderExpectedamount'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
         </div>
-        <div v-else-if="scope.column.columnname === 'status'">
-          <span :style="{color:scope.column.data.status == '新建'?'#333333':'#52c41a'}">
-            {{scope.column.data[[scope.column.columnname]]}}
-          </span>
+        <div v-else-if="scope.column.columnname === 'rewardamount'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'payapplyamount'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'unpayapplyamount'">
+          {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+        </div>
+        <div v-else-if="scope.column.columnname === 'amount'">
+          <div v-if="data.status == '发放'"> {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}</div>
+          <div v-else>
+            <el-input v-model.number="scope.column.data.amount" placeholder="本次发放金额" @change="amountChange(scope.column.data.amount,scope.column.data)" size="small"></el-input>
+            <p style="color: red" v-if="isCheck && sa_hrcashbilldetailid == scope.column.data.sa_hrcashbilldetailid">不得大于未发放金额</p>
+          </div>
         </div>
         <div v-else>
           {{scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation'?scope.column.data[[scope.column.columnname]]:'--'}}
@@ -39,7 +68,6 @@
       </template>
       <template v-slot:opreation="scope">
         <el-button type="text" size="mini" @click="goDetail(scope.data)">详 情</el-button>
-        <el-button type="text" size="mini" @click="delDetail(scope.data)" :disabled="data.status == '发放'">删 除</el-button>
       </template>
     </tableNewLayout>
     <div  class="container normal-panel" style="text-align:right">
@@ -48,7 +76,7 @@
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
           :current-page="currentPage"
-          :page-sizes="[20, 20, 100, 200]"
+          :page-sizes="[20, 50, 100, 200]"
           :page-size="20"
           layout="total,sizes, prev, pager, next, jumper"
           :total="total">
@@ -74,14 +102,26 @@ export default {
           "pageSize": 20,
           "where": {
             "condition": "",
-            "status":""
+            "departmentid":""
           }
         }
       },
       tablecols:[],
       list:[],
       total:0,
-      currentPage:0
+      currentPage:0,
+      delData:[],
+      isCheck:false,
+      sa_hrcashbilldetailid:'',
+      depmentParam: {
+        classname: "webmanage.department.department",
+        method: "querydepartment",
+        content: {}
+      },
+      depment: '',
+      deplist: [],
+      pageTotal:0,
+      listqueryid:'',
     }
   },
   methods:{
@@ -91,6 +131,9 @@ export default {
       this.list = res.data
       this.total = res.total
       this.currentPage = res.pageNumber
+      this.pageTotal = res.pageTotal
+      this.listqueryid = res.listqueryid
+      sessionStorage.setItem('total',res.total)
     },
     selectChange(){
       this.listData()
@@ -106,7 +149,6 @@ export default {
       this.listData()
     },
     goDetail(val){
-      console.log(val)
       this.$store.dispatch('changeDetailDrawer',false)
       this.$nextTick(()=>{
         let route = this.$route
@@ -114,17 +156,19 @@ export default {
           this.oldRoute = {path:route.path,query:route.query}
           this.$store.dispatch('setHistoryRouter',this.oldRoute)
         }
-
+        sessionStorage.setItem('listqueryid',this.listqueryid)
+        sessionStorage.setItem('isGo','1')
         this.$router.push({
           path:'/salerIncomeDetail',
-          query:{id:val.sa_hrcashbillid}
+          query:{id:val.sa_hrcashbillid,rowindex:val.rowindex,
+            listqueryid:this.listqueryid,fieldname:'sa_hrcashbillid'}
         })
         this.$store.dispatch('changeDetailDrawer',true)
       })
     },
     /*删除*/
     delDetail(val){
-      this.$confirm('此操作将删除当前数据, 是否继续?', '提示', {
+      this.$confirm('此操作将删除当前已选数据, 是否继续?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
@@ -133,11 +177,12 @@ export default {
           "id": 20240117105904,
           "content": {
             "sa_hrpayapplyid": this.$route.query.id,
-            "sa_hrpayapplydetails":[val.sa_hrpayapplydetailid]
+            "sa_hrpayapplydetails":this.delData
           }
         })
         this.tool.showMessage(res,()=>{
           this.listData()
+          this.$emit('delSuccess')
         })
       }).catch(() => {
         this.$message({
@@ -146,10 +191,102 @@ export default {
         });
       });
 
-    }
+    },
+    selectionChange(val){
+      this.delData = val.map(item=>item.sa_hrpayapplydetailid)
+    },
+    async amountChange(val,data){
+      console.log(val,data)
+      if (val > data.unpayapplyamount){
+        this.isCheck = true
+        this.sa_hrcashbilldetailid = data.sa_hrcashbilldetailid
+      }else {
+        const res = await this.$api.requested({
+          "id": "20240117105704",
+          "content": {
+            "sa_hrpayapplyid": this.$route.query.id,
+            "hrpayapplydetail": [
+              {
+                "sa_hrpayapplydetailid": data.sa_hrpayapplydetailid,
+                "amount": data.amount,
+                "sa_hrcashbillid": data.sa_hrcashbillid,
+                "sa_hrcashbilldetailid":data.sa_hrcashbilldetailid
+              }
+            ]
+          }
+        })
+        this.listData(this.param.content.pageNumner = 1)
+        this.$emit('delSuccess')
+      }
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam);
+      this.deplist = this.createMenu(res.data)
+    },
+    createMenu(array) {
+      var that = this;
+      let arr = [];
+
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0) {
+          var elNode = {
+            label: node["depname"],
+            parentid: node['parentid'],
+            parentname: node['parentname'],
+            departmentid: node["departmentid"],
+            value: node["departmentid"],
+            remarks: node["remarks"],
+            isused: node["isused"],
+            changedate: node['changedate'],
+            changeby: node['changeby'],
+            createdate: node['createdate'],
+            createby: node['createby'],
+            depno: node['depno'],
+            disabled: that.pageOnlyRead,
+          }
+        } else {
+          var elNode = {
+            label: node["depname"],
+            parentid: node['parentid'],
+            parentname: node['parentname'],
+            departmentid: node["departmentid"],
+            value: node["departmentid"],
+            remarks: node["remarks"],
+            isused: node["isused"],
+            changedate: node['changedate'],
+            changeby: node['changeby'],
+            createdate: node['createdate'],
+            createby: node['createby'],
+            depno: node['depno'],
+            disabled: that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    selectDep(val) {
+      this.person = '';
+      this.param.content.where.departmentid = val[val.length - 1];
+      this.listData(this.param.content.pageNumner = 1)
+    },
   },
   mounted() {
     this.listData()
+    this.departmentrtment()
   },
   created() {
     console.log(this.tool.tabelCol(this.$route.name).incomesTable.tablecols,'tablecols')

+ 6 - 2
src/SDrpManagement/commissionDistribution/detail/index.vue

@@ -12,7 +12,7 @@
         :mainAreaData="mainAreaData"
         :titleText="mainData.billno"
         @pageChange="pageChange"
-        :tabs="['收入','详细信息']"
+        :tabs="['收入明细','详细信息']"
         @onEditSuccess="queryMainData"
         :statusCheck="[{key:'status',value:'发放'}]"
     >
@@ -20,7 +20,7 @@
         <toGrant class="inline-16" v-if="tool.checkAuth($route.name,'grant')" @examineSuccess="queryMainData" :status="mainData.status"></toGrant>
       </div>
       <div slot="slot0" class="normal-panel">
-        <incomes :data="mainData"></incomes>
+        <incomes :data="mainData" @delSuccess="queryMainData"></incomes>
       </div>
       <div slot="slot1" class="normal-panel">
         <baseInfo  :detailInfo="detailInfo"></baseInfo>
@@ -101,6 +101,10 @@ export default {
           label:'发放时间',
           value:this.mainData.checkdate?this.mainData.checkdate:'--'
         },
+        {
+          label:'金额(元)',
+          value:this.mainData.amount?this.tool.formatAmount(this.mainData.amount,2):'--'
+        },
         /*{
           label:'备注',
           value:this.mainData.sourcenote !== '' && this.mainData.remarks !== ''?'系统备注:' + this.mainData.sourcenote + ';人工备注:' + this.mainData.remarks : this.mainData.sourcenote !== ''?'系统备注:' + this.mainData.sourcenote :

+ 192 - 37
src/SDrpManagement/commissionDistribution/detail/modules/addDetail.vue

@@ -1,52 +1,116 @@
 <template>
   <div>
-    <el-button size="small" :type="status == '发放'?'':'primary'"  @click="dialogVisible = true;listData()" :disabled="status == '发放'">添 加</el-button>
+    <el-button size="small" :type="status == '发放'?'':'primary'"  @click="addShow" :disabled="status == '发放'">添 加</el-button>
     <el-drawer
         title="添加收入凭证"
         :visible.sync="dialogVisible"
-        size="80%"
+        size="90%"
         direction="rtl"
         append-to-body
         @close="onClose">
-      <div class="drawer__panel">
+      <div class="drawer__panel" style="margin-bottom: 0!important;">
         <el-row :gutter="20">
           <el-form :model="form" :rules="rules" ref="formRef" label-width="120px" label-position="left" size="mini">
             <el-col :span="24">
               <el-form-item label="请选择收入凭证:" >
-                <div style="float: left;margin-left: 20px" class="search__label">审核时间:</div>
-                <el-date-picker
-                    v-model="auditDate"
-                    @change="selectChange"
-                    type="daterange"
-                    style="width:200px;float: left"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    range-separator="至"
-                    start-placeholder="开始日期"
-                    end-placeholder="结束日期">
-                </el-date-picker>
-                <div style="margin-left: 20px;float: left" class="search__label">回款比例(%):</div>
-                <div style="float: left">
-                  <el-input v-model="begrate" style="width: 200px" placeholder="请输入回款比例" @change="rateChange" :clearable="true"></el-input> —
-                  <el-input v-model="endrate" style="width: 200px" placeholder="请输入回款比例" @change="rateChange" :clearable="true"></el-input>
+                <div class="inline-16 mt-10">
+                  <div class="search__label">审核时间:</div>
+                  <el-date-picker
+                      v-model="auditDate"
+                      @change="selectChange"
+                      type="daterange"
+                      size="small"
+                      format="yyyy-MM-dd"
+                      value-format="yyyy-MM-dd"
+                      range-separator="至"
+                      start-placeholder="开始日期"
+                      end-placeholder="结束日期">
+                  </el-date-picker>
                 </div>
-                <div style="margin-left: 20px;float: left" class="search__label">搜索:</div>
-                <div>
-                  <el-input v-model="param.content.where.condition" style="width: 200px" placeholder="单号、业务员、部门、备注" @change="listData" :clearable="true"></el-input>
+                <div class="inline-16 mt-10">
+                  <div class="search__label inline-16" >回款比例(%):</div>
+                  <div class="inline-16">
+                    <el-input v-model="begrate" :clearable="true" placeholder="请输入回款比例" size="small"
+                              style="width: 200px" @change="rateChange"></el-input>
+                    —
+                    <el-input v-model="endrate" :clearable="true" placeholder="请输入回款比例" size="small"
+                              style="width: 200px" @change="rateChange"></el-input>
+                  </div>
+                </div>
+                <div class="inline-16 mt-10">
+                  <label class="search__label">部门:</label>
+                  <el-cascader ref="selectdep" v-model="depment" :options="deplist" :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
+                               clearable
+                               size="small" @change="selectDep"></el-cascader>
+                </div>
+                <div class="inline-16 mt-10">
+                  <div style="margin-left: 20px;float: left" class="search__label">搜索:</div>
+                  <el-input v-model="param.content.where.condition" :suffix-icon="param.content.where.condition?'':'el-icon-search'"
+                            class="input-with-select inline-16 layout_search__panel"
+                            clearable
+                            placeholder="搜索"
+                            size="small" style="width:200px;"
+                            @clear="listData(param.content.pageNumber = 1)" @keyup.native.enter="listData(param.content.pageNumber = 1)">
+                  </el-input>
                 </div>
               </el-form-item>
              </el-col>
             <el-col :span="24">
-                <tableNewLayout style="margin-bottom: 20px" ref="tableRef" :checkbox="true" :layout="tablecols" :data="list" :opwidth="200" height="calc(100vh - 250px)" :width="true" :custom="true" @selectionChange="selectionChange">
-                  <template v-slot:customcol="scope">
-                    <div v-if="scope.column.columnname === 'rate'">
-                      <div>{{scope.column.data.rate?Math.round((scope.column.data.rate * 100)*100)/100 + '%':'0%'}}</div>
+              <tableNewLayout  ref="tableRef" :checkbox="true" :layout="tablecols" :data="list" :opwidth="200" height="calc(100vh - 260px)" :width="true" :custom="true" @selectionChange="selectionChange">
+                <template v-slot:customcol="scope">
+                  <div v-if="scope.column.columnname === 'orderrate'">
+                    <div>
+                      {{ scope.column.data.orderrate ? Math.round((scope.column.data.orderrate * 100) * 100) / 100 + '%' : '--' }}
                     </div>
-                    <div v-else>
-                      {{scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation'?scope.column.data[[scope.column.columnname]]:'--'}}
-                    </div>
-                  </template>
-                </tableNewLayout>
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'rate'">
+                    {{scope.column.data[[scope.column.columnname]]?Math.round((scope.column.data[[scope.column.columnname]] * 100) * 100) / 100 + '%':'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'allocation_rate'">
+                    {{scope.column.data[[scope.column.columnname]]?Math.round((scope.column.data[[scope.column.columnname]] * 100) * 100) / 100 + '%':'--'}}
+                  </div>
+
+                  <div v-else-if="scope.column.columnname === 'amount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'orderprice'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'price'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'cashbilldetailamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'orderExpectedamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'rewardamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'payapplyamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else-if="scope.column.columnname === 'unpayapplyamount'">
+                    {{scope.column.data[[scope.column.columnname]]?'¥&nbsp;'+ tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}
+                  </div>
+                  <div v-else>
+                    {{scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation'?scope.column.data[[scope.column.columnname]]:'--'}}
+                  </div>
+                </template>
+              </tableNewLayout>
+              <div class="container normal-panel" style="text-align:right">
+                <el-pagination
+                    :current-page="currentPage"
+                    :page-size="100"
+                    :page-sizes="[100, 150, 200, 250]"
+                    :total="total"
+                    background
+                    layout="total,sizes, prev, pager, next, jumper"
+                    @size-change="handleSizeChange"
+                    @current-change="handleCurrentChange">
+                </el-pagination>
+              </div>
             </el-col>
           </el-form>
         </el-row>
@@ -71,6 +135,8 @@ export default {
       begrate:'',
       endrate:'',
       list:[],
+      total: 0,
+      currentPage: 0,
       form:{
         "sa_hrpayapplyid": '',
         "hrpayapplydetail": []
@@ -81,7 +147,7 @@ export default {
         "content": {
           "sa_hrpayapplyid":0,
           "pageNumber": 1,
-          "pageSize": 99999,
+          "pageSize": 100,
           "where":{
             "condition":"",
             "begdate":"",
@@ -89,21 +155,36 @@ export default {
             "status":""
           }
         }
-      }
+      },
+      depmentParam: {
+        classname: "webmanage.department.department",
+        method: "querydepartment",
+        content: {}
+      },
+      depment: '',
+      deplist: []
     }
   },
   methods:{
+    addShow() {
+      this.dialogVisible = true;
+      this.listData(this.param.content.pageNumner = 1);
+      this.departmentrtment()
+    },
     async listData(){
       this.param.content.sa_hrpayapplyid = this.$route.query.id
       const res = await this.$api.requested(this.param)
       this.list = res.data
+      this.total = res.total;
+      this.currentPage = res.pageNumber
     },
     selectionChange(row){
       this.form.hrpayapplydetail = row.map(item=>{
         return {
-          "sa_hrpayapplydetailid": 0,
-          "remarks": item.remarks,
-          "sa_hrcashbillid": item.sa_hrcashbillid
+          "sa_hrpayapplydetailid": item.sa_hrpayapplydetailid,
+          "amount": item.amount,
+          "sa_hrcashbillid": item.sa_hrcashbillid,
+          "sa_hrcashbilldetailid": item.sa_hrcashbilldetailid
         }
       })
     },
@@ -154,7 +235,81 @@ export default {
         this.param.content.where.endrate = ''
       }
       this.listData()
-    }
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val;
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val;
+      this.listData()
+    },
+    async departmentrtment() {
+      const res = await this.$api.requested(this.depmentParam);
+      this.deplist = this.createMenu(res.data)
+    },
+    createMenu(array) {
+      var that = this;
+      let arr = [];
+
+      function convertToElementTree(node) {
+        // 新节点
+        if (node.subdep.length === 0) {
+          var elNode = {
+            label: node["depname"],
+            parentid: node['parentid'],
+            parentname: node['parentname'],
+            departmentid: node["departmentid"],
+            value: node["departmentid"],
+            remarks: node["remarks"],
+            isused: node["isused"],
+            changedate: node['changedate'],
+            changeby: node['changeby'],
+            createdate: node['createdate'],
+            createby: node['createby'],
+            depno: node['depno'],
+            disabled: that.pageOnlyRead,
+          }
+        } else {
+          var elNode = {
+            label: node["depname"],
+            parentid: node['parentid'],
+            parentname: node['parentname'],
+            departmentid: node["departmentid"],
+            value: node["departmentid"],
+            remarks: node["remarks"],
+            isused: node["isused"],
+            changedate: node['changedate'],
+            changeby: node['changeby'],
+            createdate: node['createdate'],
+            createby: node['createby'],
+            depno: node['depno'],
+            disabled: that.pageOnlyRead,
+            children: []
+          }
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          for (var index = 0; index < node.subdep.length; index++) {
+            // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        }
+        return elNode;
+      }
+
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    selectDep(val) {
+      this.person = '';
+      this.param.content.where.departmentid = val[val.length - 1];
+      this.listData(this.param.content.pageNumner = 1)
+    },
   },
   created() {
     this.tablecols = this.tool.tabelCol(this.$route.name).incomeSelectTable.tablecols

+ 3 - 0
src/SDrpManagement/commissionDistribution/index.vue

@@ -55,6 +55,9 @@
         <div v-if="scope.data.column.columnname === 'status'">
           <span :style="{color:scope.data.column.data[[scope.data.column.columnname]] == '新建'?'#333333':'#52c41a'}">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
         </div>
+        <div v-else-if="scope.data.column.columnname === 'amount'">
+          {{scope.data.column.data.amount?tool.formatAmount(scope.data.column.data.amount,2):'--'}}
+        </div>
         <div v-else>
           {{scope.data.column.data[[scope.data.column.columnname]] && scope.data.column.columnname !== 'operation'?scope.data.column.data[[scope.data.column.columnname]]:'--'}}
         </div>

+ 16 - 10
src/components/commissionSetNew/index.vue

@@ -22,10 +22,10 @@
             <el-form-item label="修正比例:" prop="reward_rate">
               <el-button-group class="inline-16">
                 <el-button :type="isAdd?'primary':''" @click="addRate">加</el-button>
-                <el-button :type="isMinus?'primary':''" @click="minusRate" :disabled="form.reward_rate <= 0">减</el-button>
+                <el-button :type="isMinus?'primary':''" @click="minusRate" >减</el-button>
               </el-button-group>
-              <el-input-number v-model="form.reward_rate" :min="0" controls-position="right" precision="2"
-                               step="0.1"></el-input-number>&nbsp;%
+              <el-input-number v-model="form.reward_rate" :min="0" controls-position="right" :precision="2"
+                               :step="0.1"></el-input-number>&nbsp;%
             </el-form-item>
           </el-col>
         </el-form>
@@ -55,7 +55,7 @@ export default {
       dialogFormVisible: false,
       isReward: false,
       isPoint: false,
-      isAdd: false,
+      isAdd: true,
       isMinus: false,
       form: {
         ownertable: "",
@@ -97,7 +97,14 @@ export default {
           this.isPoint = false
         }
       }
-      this.form.reward_rate = this.data.reward_rate || this.data.reward_rate == 0?Math.round((this.data.reward_rate * 100)*100)/100:0
+      if (this.data.reward_rate <0){
+        this.isMinus = true
+        this.isAdd = false
+      }else {
+        this.isAdd = true
+        this.isMinus = false
+      }
+      this.form.reward_rate = this.data.reward_rate || this.data.reward_rate == 0?this.data.reward_rate>=0?Math.round((this.data.reward_rate * 100)*100)/100:Math.round((Math.abs(this.data.reward_rate) * 100)*100)/100:+0
     },
     rewardChange(val){
       if (this.isPoint){
@@ -129,7 +136,8 @@ export default {
         if (!valid) return false
         this.form.ownertable = this.ownertable
         this.form.ownerid = this.$route.query.id
-        this.form.reward_rate = (this.form.reward_rate / 100).toFixed(4)
+        this.form.reward_rate = (parseFloat(this.form.reward_rate) / 100).toFixed(4)
+        if (this.isMinus) {this.form.reward_rate = - this.form.reward_rate}
         const res = await this.$api.requested({
           "id": 20240111084904,
           "content": this.form
@@ -137,7 +145,7 @@ export default {
         this.tool.showMessage(res, () => {
           this.dialogFormVisible = false
           this.isMinus = false;
-          this.isAdd = false;
+          this.isAdd = true;
           this.$refs.form.resetFields()
           this.$emit('setSuccess')
         })
@@ -146,18 +154,16 @@ export default {
     addRate() {
       this.isAdd = true;
       this.isMinus = false;
-      this.form.reward_rate = this.form.reward_rate + 0.1
     },
     minusRate() {
       this.isMinus = true;
       this.isAdd = false;
-      this.form.reward_rate = this.form.reward_rate - 0.1
     },
     onClose() {
       this.$refs.form.resetFields()
       this.dialogFormVisible = false
       this.isMinus = false;
-      this.isAdd = false;
+      this.isAdd = true;
     }
   }
 }