jiangping
2025-06-09 663dbe4ddca1fa409e6acbc1f77d924c161b0c39
company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
@@ -10,7 +10,7 @@
    <div class="list">
      <el-form :inline="true" ref="form" :model="form" :rules="rules" class="demo-form-inline">
        <el-form-item label="保险方案" prop="solutionId">
          <el-select v-model="form.solutionId" @change="changeSolution" placeholder="请选择">
          <el-select v-model="form.solutionId" filterable @change="changeSolution" placeholder="请选择">
            <el-option
                v-for="item in company"
                :key="item.id"
@@ -48,17 +48,17 @@
              placeholder="选择日期">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="投保年龄" v-if="item">
<!--        <el-form-item label="投保年龄" v-if="item && item.id !=null">
          <span>{{item.minAge}} 至 {{item.maxAge}}</span>
        </el-form-item>
        <el-form-item label="费用" v-if="item && item.type ==0">
        <el-form-item label="费用" v-if="item && item.id !=null">
          <span>{{item.price}}元</span>
          <span v-if="item.timeUnit === 0">/天</span>
          <span v-if="item.timeUnit === 1">/半月</span>
          <span v-if="item.timeUnit === 2">/月</span>
          <span v-if="item.timeUnit === 3">/年</span>
          <span>/人</span>
        </el-form-item>
        </el-form-item>-->
      </el-form>
    </div>
    <div class="btns">
@@ -69,35 +69,53 @@
        <el-button type="danger" @click="deleItem">删除</el-button>
      </div>
      <div class="btns_item">
        <el-button type="primary" @click="sele">选取派遣单位</el-button>
        <div style="display: inline-block;margin-right: 30px;font-size: 14px" v-if="item && item.id !=null">
          <span>投保年龄:</span>
          <span>{{item.minAge}} 至 {{item.maxAge}}周岁</span>
          <span style="margin-left: 20px">费用:</span>
          <span>{{item.price}}元</span>
          <span v-if="item.timeUnit === 0">/天</span>
          <span v-if="item.timeUnit === 1">/半月</span>
          <span v-if="item.timeUnit === 2">/月</span>
          <span v-if="item.timeUnit === 3">/年</span>
          <span>/人</span>
        </div>
        <div style="display: inline-block;margin-right: 30px;font-size: 14px"><span>合计费用:</span>
        <span style="font-weight: bold;color: red">{{sumFee}}</span>元
        </div>
        <el-button type="primary" @click="sele(1)" v-if="item && item.hasDispatchUnit !== 1">选取派遣单位</el-button>
        <el-button type="primary" @click="sele(2)" v-if="item && item.hasDispatchUnit === 1">选取工种</el-button>
      </div>
    </div>
    <el-table
<!--    show-summary
    :summary-method="getSummaries"-->
    <u-table
        :data="tableData"
        border
        show-summary
        :summary-method="getSummaries"
        use-virtual
        :row-height="30"
        :height="680"
        ref="multipleTable"
        @selection-change="handleSelectionChange"
        style="width: 100%;margin-bottom: 15px;">
      <el-table-column
      <u-table-column
          type="selection"
          width="55">
      </el-table-column>
      <el-table-column label="序号" width="80px">
      </u-table-column>
      <u-table-column label="序号" width="80px">
        <template slot-scope="scope">
          <span>{{scope.$index + 1}}</span>
        </template>
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          prop="memberName"
          label="姓名">
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          prop="idCard"
          label="身份证号">
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          label="年龄">
        <template slot-scope="{row}">
          <template v-if="item">
@@ -105,37 +123,38 @@
            <span v-else>{{ getAgeByIdCard(row.idCard) }}</span>
          </template>
        </template>
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          v-if="item && item.hasDispatchUnit !== 1"
          prop="duName"
          label="派遣单位">
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          prop="workTypeName"
          label="所属工种">
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          prop="fee"
          label="费用">
        <template slot-scope="{row}">
          {{item.type==1?'-':row.fee}}
          {{row.fee}}
        </template>
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          prop="remark"
          align="center"
          label="备注">
        <template slot-scope="{row}">
          <el-input v-model="row.remark" placeholder="请输入"></el-input>
        </template>
      </el-table-column>
      <el-table-column
      </u-table-column>
      <u-table-column
          label="操作">
        <template slot-scope="scope">
          <el-button type="text" style="color: red;" @click="dele(scope.$index)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
      </u-table-column>
    </u-table>
    <div class="info" v-if="item">
      <span v-if="item.specialAgreement"  v-html="item.specialAgreement"></span>
      <span v-if="item.specialInfo" v-html="item.specialInfo"> </span>
@@ -162,30 +181,37 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import selectEmployees from '@/components/enterprise/selectEmployees'
import addEmployee from '@/components/enterprise/addEmployee'
import addEmployee from '@/components/enterprise/addEmployeeWithDu'
import importEmployees from '@/components/enterprise/importEmployees'
import confirmJobType from '@/components/enterprise/confirmJobType'
import detailsPolicyholder from '@/components/business/detailsPolicyholder'
// import OperaInsuranceApplyDetails from '@/components/business/OperaInsuranceApplyWindow'
// import OperaWtbApplyShopWindow from '@/components/business/OperaWtbApplyShopWindow'
import { all, getNewVersion } from '@/api/business/solutions'
import { all, getNewVersion, getUseList } from '@/api/business/solutions'
import { mapState } from 'vuex'
import { create, getCountCyclePriceVO, getDetail, findList, updateData } from '@/api/business/insuranceApply'
import { create, getCountCyclePriceVO, getDetail, findList } from '@/api/business/insuranceApply'
import { UTable, UTableColumn } from 'umy-ui'
export default {
  name: 'OperaInsuranceApplyAddWindow',
  name: 'OperaInsuranceApplyAddWindowNew',
  extends: BaseOpera,
  components: {
    GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType, detailsPolicyholder
    // ,  OperaWtbApplyShopWindow, OperaInsuranceApplyDetails
    GlobalWindow,
    selectEmployees,
    addEmployee,
    importEmployees,
    confirmJobType,
    detailsPolicyholder,
    UTable,
    UTableColumn
  },
  data () {
    return {
      sumFee: 0,
      form: {
        id: null,
        ID: null,
        solutionId: '',
        applyStartTime: '',
        applyEndTime: ''
        applyEndTime: '',
        companyId: null
      },
      solutionName: '',
      type: '',
@@ -215,6 +241,17 @@
  computed: {
    ...mapState(['userInfo'])
  },
  watch: {
    // 监听tableData的变化
    tableData: {
      deep: true,
      handler (newVal, oldVal) {
        // 数据变化时的处理逻辑
        this.getSummaries2()
        console.log(this.tableData.length)
      }
    }
  },
  methods: {
    successEvent () {
      const arr = JSON.parse(JSON.stringify(this.tableData))
@@ -224,21 +261,16 @@
      this.isWorking = true
      // if (!this.form.id) {
      create({
        companyId: this.form.companyId,
        applyDetailList: arr,
        applyStartTime: this.form.applyStartTime,
        applyEndTime: this.form.applyEndTime,
        solutionId: this.form.solutionId
      }).then(res => {
        console.log(res)
        this.visible = false
        if (this.item.type == 1) {
          // this.$refs.OperaWtbApplyShopWindow.open('委托投保详情', { id: res })
          this.$emit('success', 1, { id: res })
        } else {
          // this.$refs.OperaInsuranceApplyDetails.open('投保详情', { id: res })
          this.$emit('success', 1, { id: res })
        }
        this.$emit('success', 1, { id: res,godetail:true,type:this.item.type})
        this.$tip.apiSuccess('操作成功')
        this.visible = false
        // this.$emit('success','委托投保详情', { id: res })
      })
        .catch(e => {
@@ -277,6 +309,10 @@
      this.form.solutionId = ''
      this.form.applyStartTime = ''
      this.form.applyEndTime = ''
      if (target.companyId) {
        this.form.companyId = target.companyId
        this.form.companyName = target.companyName
      }
      if (target && target.id) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
@@ -316,25 +352,37 @@
          this.changeSolution1(res.solutionId)
        })
    },
    getSummaries (param) {
      const { columns, data } = param
    getSummaries ({ columns, data }) {
      const sums = []
      // this.currentData = data; //记录当前页数据;
      columns.forEach((column, index) => {
        if (index === 0) {
        if (index == 0) {
          sums[index] = '总价'
        } else if (index === 7) {
          if (this.item || this.item.type == 1) {
            sums[index] = '-'
          } else {
            let total = 0
            this.tableData.forEach(item => {
              total += item.fee
            })
            sums[index] = total.toFixed(2)
          }
        } else if (index == 7) {
          // if (this.item || this.item.type == 1) {
          //   sums[index] = '-'
          // } else {
          let total = 0
          this.tableData.forEach(item => {
            total += item.fee
          })
          sums[index] = total.toFixed(2)
          // }
        } else {
          sums[index] = ''
        }
      })
      console.log(sums)
      return sums
    },
    getSummaries2 () {
      this.sumFee = 0
      if (this.tableData && this.tableData.length) {
        this.tableData.forEach((column, index) => {
          this.sumFee = parseFloat(this.sumFee) + parseFloat(column.fee)
        })
        this.sumFee = (this.sumFee || 0).toFixed(2)
      }
    },
    deleItem () {
      if (this.seleData.length === 0) {
@@ -348,6 +396,7 @@
          }
        })
      })
      // this.getSummaries2()
    },
    confirm () {
      this.$refs.form.validate((valid) => {
@@ -356,31 +405,90 @@
            this.$message.warning('至少添加一项员工')
            return
          }
          for (let i = 0; i < this.tableData.length; i++) {
            console.log(this.tableData[i].worktypeId)
            console.log(this.tableData[i].duId)
            if (!this.tableData[i].worktypeId || !this.tableData[i].duId) {
              this.$message.warning('请完善派遣单位和工种信息')
              return
          if (this.item.hasDispatchUnit !== 1) {
            for (let i = 0; i < this.tableData.length; i++) {
              if (!this.tableData[i].worktypeId || !this.tableData[i].duId) {
                this.$message.warning('请完善派遣单位和工种信息')
                return
              }
            }
          } else {
            for (let i = 0; i < this.tableData.length; i++) {
              if (!this.tableData[i].worktypeId) {
                this.$message.warning('请完善派工种信息')
                return
              }
            }
          }
          let price = 0
          if (this.item && this.item.type != 1) {
            this.tableData.forEach(item => {
              price = price + item.fee
            })
          }
          this.$refs.detailsPolicyholder.open('投保详情单', {
            companyName: this.userInfo.company.name,
            solutionName: this.item.name,
            solutionType: this.item.type,
            applyStartTime: this.form.applyStartTime,
            applyEndTime: this.form.applyEndTime,
            insureNum: this.tableData.length,
            totalPrice: price,
            detailList: this.tableData
          // if (this.item && this.item.type != 1) {
          this.tableData.forEach(item => {
            price = price + item.fee
          })
          // }
          const endTime = Number(this.item.correctWarnTime.split(':')[0] + this.item.correctWarnTime.split(':')[1])
          const now = new Date();
          const hours = now.getHours();
          const minutes = now.getMinutes();
          const date = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
          const startTime = Number(date.split(':')[0] + date.split(':')[1])
          if (startTime > endTime) {
            this.$confirm('您已超过当天最晚批改时间,保单实际生效时间以保险公司审核为准!', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              if (!this.form.companyId) {
                this.$refs.detailsPolicyholder.open('投保详情单', {
                  companyName: this.userInfo.company.name,
                  solutionName: this.item.name,
                  solutionType: this.item.type,
                  applyStartTime: this.form.applyStartTime,
                  applyEndTime: this.form.applyEndTime,
                  insureNum: this.tableData.length,
                  totalPrice: price,
                  detailList: this.tableData
                })
              } else {
                this.$refs.detailsPolicyholder.open('投保详情单', {
                  companyName: this.form.companyName,
                  solutionName: this.item.name,
                  solutionType: this.item.type,
                  applyStartTime: this.form.applyStartTime,
                  applyEndTime: this.form.applyEndTime,
                  insureNum: this.tableData.length,
                  totalPrice: price,
                  detailList: this.tableData
                })
              }
            }).catch(() => {
            });
          } else {
            if (!this.form.companyId) {
              this.$refs.detailsPolicyholder.open('投保详情单', {
                companyName: this.userInfo.company.name,
                solutionName: this.item.name,
                solutionType: this.item.type,
                applyStartTime: this.form.applyStartTime,
                applyEndTime: this.form.applyEndTime,
                insureNum: this.tableData.length,
                totalPrice: price,
                detailList: this.tableData
              })
            } else {
              this.$refs.detailsPolicyholder.open('投保详情单', {
                companyName: this.form.companyName,
                solutionName: this.item.name,
                solutionType: this.item.type,
                applyStartTime: this.form.applyStartTime,
                applyEndTime: this.form.applyEndTime,
                insureNum: this.tableData.length,
                totalPrice: price,
                detailList: this.tableData
              })
            }
          }
        }
      })
    },
@@ -429,32 +537,33 @@
        this.$message.warning('请先选择保险方案')
        return
      }
      this.$refs.selectEmployees.open('选取员工', { arr: this.tableData, price: this.price, type: 1 })
      this.$refs.selectEmployees.open('选取员工', { arr: this.tableData, price: this.price, type: 1, companyId: this.form.companyId })
    },
    addUser () {
      if (!this.form.solutionId) {
        this.$message.warning('请先选择保险方案')
        return
      }
      this.$refs.addEmployee.open('添加员工', { arr: this.tableData, price: this.price })
      this.$refs.addEmployee.open('添加员工', { arr: this.tableData, price: this.price, solutionId: this.form.solutionId, hasDispatchUnit: this.item.hasDispatchUnit, companyId: this.userInfo.type === 1 ? this.userInfo.companyId : this.form.companyId })
    },
    uploadUser () {
      if (!this.form.solutionId) {
        this.$message.warning('请先选择保险方案')
        return
      }
      this.$refs.importEmployees.open('上传名单', { arr: this.tableData, solutionId: this.form.solutionId, type: 1, price: this.price })
      this.$refs.importEmployees.open('上传名单', { arr: this.tableData, solutionId: this.form.solutionId, type: 1, hasDispatchUnit: this.item.hasDispatchUnit, price: this.price })
    },
    // 切换方案
    changeSolution (e) {
      this.sumFee = 0
      this.form.applyEndTime = ''
      this.form.applyStartTime = ''
      if (!this.form.id) {
        this.tableData = []
      } else {
        this.price = ''
        this.price = 0
        this.tableData.forEach(item => {
          item.fee = ''
          item.fee = 0
          item.duName = ''
          item.duId = ''
          item.workTypeName = ''
@@ -463,11 +572,11 @@
      }
      this.company.forEach(item => {
        if (item.id === e) {
          // this.price = item.price
          this.price = item.price
          this.item = item
          if (this.item && this.item.type == 1) {
            this.item.fee = 0
          }
          // if (this.item && this.item.type == 1) {
          //   this.item.fee = 0
          // }
          this.updatePickerOptions()
        }
      })
@@ -482,23 +591,21 @@
          this.form.solutionId = res.id
          this.company.forEach(item => {
            if (item.id === res.id) {
              // this.price = item.price
              this.price = item.price
              this.item = item
              if (this.item && this.item.type == 1) {
                this.item.fee = 0
              }
              this.updatePickerOptions()
            }
          })
        })
      this.tableData.forEach(item => {
        if(this.item.type != 0){
          item.fee = this.price
        }
        // if (this.item.type != 0) {
        item.fee = this.price
        // }
      })
    },
    dele (index) {
      this.tableData.splice(index, 1)
      // this.getSummaries2()
    },
    getUser (obj) {
      this.seleData.forEach(id => {
@@ -515,7 +622,7 @@
      this.$refs.multipleTable.clearSelection()
    },
    // 选择员工
    sele () {
    sele (type) {
      if (!this.form.solutionId) {
        this.$message.warning('请选择保险方案')
        return
@@ -524,14 +631,18 @@
        this.$message.warning('请选择员工')
        return
      }
      this.$refs.confirmJobType.open('确认工种', { solutionId: this.form.solutionId })
      this.$refs.confirmJobType.open('确认工种', { solutionId: this.form.solutionId, type })
    },
    // 查询全部方案
    getCompany () {
      all({})
      getUseList(this.form.companyId ? this.form.companyId : this.userInfo.companyId, 2)
        .then(res => {
          this.company = res
        })
      // all({ companyId: this.form.companyId })
      //   .then(res => {
      //     this.company = res
      //   })
    },
    getAgeByIdCard (idCard) {
      const sexAndAge = {}
@@ -562,6 +673,7 @@
    },
    getValue (list) {
      this.tableData.push(...list)
      this.getSummaries2()
    }
  }
}