<template> 
 | 
    <GlobalWindow 
 | 
        :title="title" 
 | 
        width="100%" 
 | 
        text="投保申请" 
 | 
        :visible.sync="visible" 
 | 
        :confirm-working="isWorking" 
 | 
        @confirm="confirm" 
 | 
    > 
 | 
        <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-option 
 | 
                            v-for="item in company" 
 | 
                            :key="item.id" 
 | 
                            :label="item.name" 
 | 
                            :value="item.id"> 
 | 
                        </el-option> 
 | 
                    </el-select> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="期望保险生效起期" prop="applyStartTime"> 
 | 
                    <div style="display: flex; flex-direction: column;"> 
 | 
                        <el-date-picker 
 | 
                            @change="getTimeVal" 
 | 
                            v-model="form.applyStartTime" 
 | 
                            type="date" 
 | 
                            class="date_picker" 
 | 
                            :clearable="false" 
 | 
                            :disabled="!form.solutionId" 
 | 
                            :picker-options="pickerOptions" 
 | 
                            value-format="yyyy-MM-dd HH:mm:ss" 
 | 
                            format="yyyy-MM-dd HH:mm:ss" 
 | 
                            placeholder="选择日期"> 
 | 
                        </el-date-picker> 
 | 
                        <span style="color: #F95601; font-size: 14px;">(次日生效投保请于17:30前提交,超时提交以保险单为准)</span> 
 | 
                    </div> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="保险生效止期" prop="applyEndTime"> 
 | 
                    <el-date-picker 
 | 
                        disabled 
 | 
                        v-model="form.applyEndTime" 
 | 
                        type="date" 
 | 
                        class="date_picker" 
 | 
                        :picker-options="pickerOptions" 
 | 
                        value-format="yyyy-MM-dd HH:mm:ss" 
 | 
                        format="yyyy-MM-dd HH:mm:ss" 
 | 
                        placeholder="选择日期"> 
 | 
                    </el-date-picker> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="投保年龄" v-if="item"> 
 | 
                    <span>{{item.minAge}} 至 {{item.maxAge}}</span> 
 | 
                </el-form-item> 
 | 
                <el-form-item label="费用" v-if="item"> 
 | 
                    <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> 
 | 
        </div> 
 | 
        <div class="btns"> 
 | 
            <div class="btns_item"> 
 | 
                <el-button type="primary" @click="seleUser">选取员工</el-button> 
 | 
                <el-button type="primary" @click="uploadUser">导入员工</el-button> 
 | 
                <el-button type="primary" @click="addUser">添加员工</el-button> 
 | 
                <el-button type="danger" @click="deleItem">删除</el-button> 
 | 
            </div> 
 | 
            <div class="btns_item"> 
 | 
                <el-button type="primary" @click="sele">选取派遣单位</el-button> 
 | 
            </div> 
 | 
        </div> 
 | 
        <el-table 
 | 
            :data="tableData" 
 | 
            border 
 | 
            show-summary 
 | 
            :summary-method="getSummaries" 
 | 
            ref="multipleTable" 
 | 
            @selection-change="handleSelectionChange" 
 | 
            style="width: 100%;margin-bottom: 15px;"> 
 | 
            <el-table-column 
 | 
                type="selection" 
 | 
                width="55"> 
 | 
            </el-table-column> 
 | 
            <el-table-column label="序号" width="80px"> 
 | 
                <template slot-scope="scope"> 
 | 
                    <span>{{scope.$index + 1}}</span> 
 | 
                </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
                prop="memberName" 
 | 
                label="姓名"> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
                prop="idCard" 
 | 
                label="身份证号"> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
                label="年龄"> 
 | 
                <template slot-scope="{row}"> 
 | 
                    <template v-if="item"> 
 | 
                        <span style="color: red;" v-if="row.idCard && (getAgeByIdCard(row.idCard) < item.minAge || getAgeByIdCard(row.idCard) > item.maxAge)">{{ getAgeByIdCard(row.idCard) }}</span> 
 | 
                        <span v-else>{{ getAgeByIdCard(row.idCard) }}</span> 
 | 
                    </template> 
 | 
                </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
                prop="duName" 
 | 
                label="派遣单位"> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
                prop="workTypeName" 
 | 
                label="所属工种"> 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
                prop="fee" 
 | 
                label="费用"> 
 | 
            </el-table-column> 
 | 
            <el-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> 
 | 
        <div class="info" v-if="item"> 
 | 
            <span v-if="item.specialAgreement">{{item.specialAgreement}}</span> 
 | 
            <span v-if="item.specialInfo">{{item.specialInfo}}</span> 
 | 
            <span v-if="item.ortherInfo">{{item.ortherInfo}}</span> 
 | 
        </div> 
 | 
        <!--    选择员工    --> 
 | 
        <selectEmployees ref="selectEmployees" @result="getValue" /> 
 | 
        <!--    添加员工    --> 
 | 
        <addEmployee ref="addEmployee" @result="getValue" /> 
 | 
        <!--    导入名单    --> 
 | 
        <importEmployees ref="importEmployees" @result="getValue" /> 
 | 
        <!--    确认工种    --> 
 | 
        <confirmJobType ref="confirmJobType" @result="getUser" /> 
 | 
    </GlobalWindow> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
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 importEmployees from '@/components/enterprise/importEmployees' 
 | 
import confirmJobType from '@/components/enterprise/confirmJobType' 
 | 
import { all, getNewVersion } from '@/api/business/solutions' 
 | 
import { create, getCountCyclePriceVO, getDetail, findList, updateData } from '@/api/business/insuranceApply' 
 | 
export default { 
 | 
  name: 'OperaInsuranceApplyWindow2', 
 | 
  extends: BaseOpera, 
 | 
  components: { GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType }, 
 | 
  data () { 
 | 
    return { 
 | 
      form: { 
 | 
          id: null, 
 | 
          ID: null, 
 | 
          solutionId: '', 
 | 
          applyStartTime: '', 
 | 
          applyEndTime: '' 
 | 
      }, 
 | 
      type: '', 
 | 
      pickerOptions: {}, // 存放picker options的变量 
 | 
      price: '', 
 | 
      company: [], 
 | 
      seleData: [], 
 | 
      item: null, 
 | 
      // 验证规则 
 | 
      rules: { 
 | 
          solutionId: [ 
 | 
              { required: true, message: '请选择保险方案' } 
 | 
          ], 
 | 
          applyStartTime: [ 
 | 
              { required: true, message: '请选择期望保险生效起期' } 
 | 
          ] 
 | 
      }, 
 | 
      tableData: [] 
 | 
    } 
 | 
  }, 
 | 
  created () { 
 | 
      this.config({ 
 | 
          api: '/business/insuranceApply', 
 | 
          'field.id': 'id' 
 | 
      }) 
 | 
  }, 
 | 
    methods: { 
 | 
      open (title, target) { 
 | 
          this.title = title 
 | 
          this.tableData = [] 
 | 
          this.form.id = null 
 | 
          this.item = null 
 | 
          if (target.type) { 
 | 
              this.type = target.type 
 | 
          } 
 | 
          this.form.solutionId = '' 
 | 
          this.form.applyStartTime = '' 
 | 
          this.form.applyEndTime = '' 
 | 
          if (target && target.id) { 
 | 
              this.$nextTick(() => { 
 | 
                  this.$refs.form.resetFields() 
 | 
                  this.form.id = target.id 
 | 
                  this.getDetails() 
 | 
              }) 
 | 
          } else { 
 | 
              this.$nextTick(() => { 
 | 
                  this.$refs.form.resetFields() 
 | 
                  this.form[this.configData['field.id']] = null 
 | 
              }) 
 | 
          } 
 | 
          this.getCompany() 
 | 
          this.visible = true 
 | 
          this.updatePickerOptions() 
 | 
      }, 
 | 
        // 获取投保详情 
 | 
        getDetails() { 
 | 
            findList({ applyId: this.form.id }) 
 | 
                .then(res => { 
 | 
                    res.forEach(item => { 
 | 
                        console.log(item) 
 | 
                        item.idCard = item.idcardNo 
 | 
                        item.fee = '' 
 | 
                        if (this.type === 1) { 
 | 
                            item.duName = '' 
 | 
                            item.duId = '' 
 | 
                            item.worktypeId = '' 
 | 
                            item.workTypeName = '' 
 | 
                        } 
 | 
                    }) 
 | 
                    this.tableData = res 
 | 
                }) 
 | 
            getDetail(this.form.id) 
 | 
                .then(res => { 
 | 
                    // this.form.solutionId = res.solutionId 
 | 
                    this.changeSolution1(res.solutionId) 
 | 
                }) 
 | 
        }, 
 | 
        getSummaries(param) { 
 | 
            const { columns, data } = param 
 | 
            const sums = [] 
 | 
            columns.forEach((column, index) => { 
 | 
                if (index === 0) { 
 | 
                    sums[index] = '总价' 
 | 
                    return 
 | 
                } else if (index === 7) { 
 | 
                    let total = 0 
 | 
                    this.tableData.forEach(item => { 
 | 
                        total += item.fee 
 | 
                    }) 
 | 
                    sums[index] = total 
 | 
                    return 
 | 
                } 
 | 
            }) 
 | 
            return sums 
 | 
        }, 
 | 
        deleItem() { 
 | 
            if (this.seleData.length === 0) { 
 | 
                this.$message.warning('至少选择一项内容') 
 | 
                return 
 | 
            } 
 | 
            this.seleData.forEach(item => { 
 | 
                this.tableData.forEach((row, index) => { 
 | 
                    if (item === row.idCard) { 
 | 
                        this.tableData.splice(index, 1) 
 | 
                    } 
 | 
                }) 
 | 
            }) 
 | 
        }, 
 | 
        confirm() { 
 | 
            this.$refs.form.validate((valid) => { 
 | 
                if (valid) { 
 | 
                    if (this.tableData.length === 0) { 
 | 
                        this.$message.warning('至少添加一项员工') 
 | 
                        return 
 | 
                    } 
 | 
                    for (let i = 0; i < this.tableData.length; i++) { 
 | 
                        console.log(this.tableData[i].worktypeId, this.tableData[i].duId) 
 | 
                        if (!this.tableData[i].worktypeId || !this.tableData[i].duId) { 
 | 
                            this.$message.warning('请完善派遣单位和工种信息') 
 | 
                            return 
 | 
                        } 
 | 
                    } 
 | 
                    let arr = JSON.parse(JSON.stringify(this.tableData)) 
 | 
                    arr.forEach(item => { 
 | 
                        item.idcardNo = item.idCard 
 | 
                    }) 
 | 
                    this.isWorking = true 
 | 
                    if (!this.form.id) { 
 | 
                        create({ 
 | 
                            applyDetailList: arr, 
 | 
                            applyStartTime: this.form.applyStartTime, 
 | 
                            applyEndTime: this.form.applyEndTime, 
 | 
                            solutionId: this.form.solutionId 
 | 
                        }).then(() => { 
 | 
                            this.visible = false 
 | 
                            this.$tip.apiSuccess('操作成功') 
 | 
                            this.$emit('success') 
 | 
                        }) 
 | 
                            .catch(e => { 
 | 
                                this.$tip.apiFailed(e) 
 | 
                            }) 
 | 
                            .finally(() => { 
 | 
                                this.isWorking = false 
 | 
                            }) 
 | 
                    } else { 
 | 
                        updateData({ 
 | 
                            id: this.form.id, 
 | 
                            applyDetailList: arr, 
 | 
                            applyStartTime: this.form.applyStartTime, 
 | 
                            applyEndTime: this.form.applyEndTime, 
 | 
                            solutionId: this.form.solutionId 
 | 
                        }).then(() => { 
 | 
                            this.visible = false 
 | 
                            this.$tip.apiSuccess('操作成功') 
 | 
                            this.$emit('success') 
 | 
                        }).catch(e => { 
 | 
                            this.$tip.apiFailed(e) 
 | 
                        }) 
 | 
                        .finally(() => { 
 | 
                            this.isWorking = false 
 | 
                        }) 
 | 
                    } 
 | 
  
 | 
                } 
 | 
            }) 
 | 
        }, 
 | 
        // 获取结束时间和价格 
 | 
        getTimeVal(time) { 
 | 
            getCountCyclePriceVO({ 
 | 
                solutionsId: this.form.solutionId, 
 | 
                startDate: time 
 | 
            }).then(res => { 
 | 
                this.price = res.cyclePrice 
 | 
                this.form.applyEndTime = res.endDate 
 | 
                this.tableData.forEach(item => { 
 | 
                    item.fee = res.cyclePrice 
 | 
                }) 
 | 
                this.$forceUpdate() 
 | 
            }) 
 | 
        }, 
 | 
        getDate(n) { // n为多少天,-代表往前,+代表往后 
 | 
            let date1 = new Date(), 
 | 
            time1 = date1.getFullYear() + "-" + (date1.getMonth() + 1) + "-" + date1.getDate();//time1表示当前时间 
 | 
            let date2 = new Date(date1); 
 | 
            date2.setDate(date1.getDate() + n); 
 | 
            let time2 = date2.getFullYear() + "-" + ("0" + (date2.getMonth() + 1)).slice(-2) + "-" + ("0" + date2.getDate()).slice(-2); 
 | 
            return time2 
 | 
        }, 
 | 
        updatePickerOptions() { 
 | 
          var that = this; 
 | 
            this.pickerOptions = { 
 | 
                disabledDate(time) { 
 | 
                    if (!that.item) return 
 | 
                    if (that.item.validType === 1) { 
 | 
                        // 次月 
 | 
                        const currentDate = new Date(); 
 | 
                        currentDate.setMonth(currentDate.getMonth() + 1); 
 | 
                        currentDate.setDate(1); 
 | 
                        return time.getTime() <= new Date(currentDate.toLocaleString()).getTime() - 8.64e7; 
 | 
                    } else if (that.item.validType === 0) { 
 | 
                        // 多少日后生效 
 | 
                        return time.getTime() <= new Date(that.getDate(that.item.validTypeNum - 1)).getTime(); 
 | 
                    } 
 | 
                } 
 | 
            }; 
 | 
        }, 
 | 
        seleUser() { 
 | 
            if (!this.form.solutionId) { 
 | 
                this.$message.warning('请先选择保险方案') 
 | 
                return 
 | 
            } 
 | 
            this.$refs.selectEmployees.open('选取员工', { arr: this.tableData, price: this.price, type: 1 }) 
 | 
        }, 
 | 
      addUser() { 
 | 
          if (!this.form.solutionId) { 
 | 
              this.$message.warning('请先选择保险方案') 
 | 
              return 
 | 
          } 
 | 
          this.$refs.addEmployee.open('添加员工', { arr: this.tableData, price: this.price }) 
 | 
      }, 
 | 
      uploadUser() { 
 | 
          if (!this.form.solutionId) { 
 | 
              this.$message.warning('请先选择保险方案') 
 | 
              return 
 | 
          } 
 | 
          this.$refs.importEmployees.open('上传名单', { arr: this.tableData, price: this.price }) 
 | 
      }, 
 | 
      // 切换方案 
 | 
      changeSolution(e) { 
 | 
          if (!this.form.id) { 
 | 
              this.tableData = [] 
 | 
          } else { 
 | 
              this.price = '' 
 | 
              this.form.applyEndTime = '' 
 | 
              this.form.applyStartTime = '' 
 | 
              this.tableData.forEach(item => { 
 | 
                  item.fee = '' 
 | 
                  item.duName = '' 
 | 
                  item.duId = '' 
 | 
                  item.workTypeName = '' 
 | 
                  item.workTypeId = '' 
 | 
              }) 
 | 
          } 
 | 
          this.company.forEach(item => { 
 | 
              if (item.id === e) { 
 | 
                  // this.price = item.price 
 | 
                  this.item = item 
 | 
                  this.updatePickerOptions() 
 | 
              } 
 | 
          }) 
 | 
          this.tableData.forEach(item => { 
 | 
              item.fee = this.price 
 | 
          }) 
 | 
      }, 
 | 
        // 切换方案 
 | 
        changeSolution1(e) { 
 | 
            getNewVersion(e) 
 | 
                .then(res => { 
 | 
                    this.form.solutionId = res.id 
 | 
                    this.company.forEach(item => { 
 | 
                        if (item.id === res.id) { 
 | 
                            // this.price = item.price 
 | 
                            this.item = item 
 | 
                            this.updatePickerOptions() 
 | 
                        } 
 | 
                    }) 
 | 
                }) 
 | 
            this.tableData.forEach(item => { 
 | 
                item.fee = this.price 
 | 
            }) 
 | 
        }, 
 | 
      dele(index) { 
 | 
          this.tableData.splice(index, 1) 
 | 
      }, 
 | 
      getUser(obj) { 
 | 
          this.seleData.forEach(id => { 
 | 
              this.tableData.forEach(row => { 
 | 
                   if (id === row.idCard) { 
 | 
                       row.workTypeName = obj.workTypeName 
 | 
                       row.worktypeId = obj.worktypeId 
 | 
                       row.duName = obj.duName 
 | 
                       row.duId = obj.duId 
 | 
                   } 
 | 
              }) 
 | 
          }) 
 | 
          this.seleData = [] 
 | 
          this.$refs.multipleTable.clearSelection(); 
 | 
      }, 
 | 
      // 选择员工 
 | 
      sele() { 
 | 
          if (!this.form.solutionId) { 
 | 
              this.$message.warning('请选择保险方案') 
 | 
              return 
 | 
          } 
 | 
          if (this.seleData.length === 0) { 
 | 
              this.$message.warning('请选择员工') 
 | 
              return 
 | 
          } 
 | 
          this.$refs.confirmJobType.open('确认工种', { solutionId: this.form.solutionId }) 
 | 
      }, 
 | 
      // 查询全部方案 
 | 
      getCompany() { 
 | 
          all({}) 
 | 
            .then(res => { 
 | 
                this.company = res 
 | 
            }) 
 | 
      }, 
 | 
      getAgeByIdCard(idCard){ 
 | 
          const sexAndAge = {} 
 | 
          //获取用户身份证号码 
 | 
          const userCard = idCard 
 | 
          //如果用户身份证号码为undefined则返回空 
 | 
          if (!userCard) { 
 | 
              return sexAndAge 
 | 
          } 
 | 
          // 获取出生日期 
 | 
          const yearBirth = userCard.substring(6, 10) 
 | 
          const monthBirth = userCard.substring(10, 12) 
 | 
          const dayBirth = userCard.substring(12, 14) 
 | 
          // 获取当前年月日并计算年龄 
 | 
          const myDate = new Date() 
 | 
          const monthNow = myDate.getMonth() + 1 
 | 
          const dayNow = myDate.getDate() 
 | 
          let age = myDate.getFullYear() - yearBirth 
 | 
          if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) { 
 | 
              age-- 
 | 
          } 
 | 
          // 得到年龄 
 | 
          sexAndAge.age = age 
 | 
          return sexAndAge.age 
 | 
      }, 
 | 
      handleSelectionChange (e) { 
 | 
          this.seleData = e.map(item => item.idCard) 
 | 
      }, 
 | 
      getValue(list) { 
 | 
          this.tableData.push(...list) 
 | 
      } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style> 
 | 
    .el-picker-panel__footer .el-button--text.el-picker-panel__link-btn { 
 | 
        display: none; 
 | 
    } 
 | 
</style> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    .list { 
 | 
        width: 100%; 
 | 
    } 
 | 
    .btns { 
 | 
        width: 100%; 
 | 
        margin-bottom: 15px; 
 | 
        display: flex; 
 | 
        align-items: center; 
 | 
        justify-content: space-between; 
 | 
        .btns_item { 
 | 
            display: flex; 
 | 
            align-items: center; 
 | 
        } 
 | 
    } 
 | 
    .submit { 
 | 
        width: 100%; 
 | 
        display: flex; 
 | 
        align-items: center; 
 | 
        justify-content: center; 
 | 
        margin-bottom: 15px; 
 | 
    } 
 | 
    .info { 
 | 
        width: 100%; 
 | 
        font-size: 14px; 
 | 
        color: black; 
 | 
    } 
 | 
</style> 
 |