| <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="保险方案"> | 
|                     <span>{{form.solutionsName}}</span> | 
|                 </el-form-item> | 
|                 <el-form-item label="批单生效起期" prop="applyStartTime"> | 
|                     <div style="display: flex; flex-direction: column;"> | 
|                         <el-date-picker | 
|                             v-model="form.applyStartTime" | 
|                             type="date" | 
|                             :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="投保年龄" v-if="item"> | 
|                     <span>{{item.minAge}} 至 {{item.maxAge}}</span> | 
|                 </el-form-item> | 
|                 <el-form-item label="费用" v-if="item&& item.type==0"> | 
|                     <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="desc_item_from"> | 
|             <el-table | 
|                 :data="list" | 
|                 border | 
|                 style="width: 100%"> | 
|                 <el-table-column | 
|                     prop="code" | 
|                     align="center" | 
|                     label="关联保单号"> | 
|                 </el-table-column> | 
|                 <el-table-column | 
|                     prop="solutionsName" | 
|                     label="保险方案" | 
|                     align="center" | 
|                     width="180"> | 
|                 </el-table-column> | 
|                 <el-table-column | 
|                     prop="startTime" | 
|                     align="center" | 
|                     label="保险生效起期"> | 
|                 </el-table-column> | 
|                 <el-table-column | 
|                     prop="endTime" | 
|                     align="center" | 
|                     label="保险生效止期"> | 
|                 </el-table-column> | 
| <!--                <el-table-column--> | 
| <!--                    prop="insureNum"--> | 
| <!--                    align="center"--> | 
| <!--                    label="投保人数">--> | 
| <!--                </el-table-column>--> | 
| <!--              <el-table-column prop="guaranteeNum"  align="center" label="在保人数" ></el-table-column>--> | 
|                 <el-table-column prop="guaranteeNum"  align="center" label="当前在保人数" width="120"> | 
|                     <template slot-scope="{row}"> | 
|                         <span>{{(row.guaranteeNum||0)}} 人</span> | 
|                     </template> | 
|                 </el-table-column> | 
|                 <el-table-column | 
|                     prop="serviceDays" | 
|                     align="center" | 
|                     label="保单时长(天)"> | 
|                 </el-table-column> | 
| <!--                <el-table-column--> | 
| <!--                    prop="currentFee"--> | 
| <!--                    align="center"--> | 
| <!--                    label="已产生费用(元)">--> | 
| <!--                </el-table-column>--> | 
|                 <el-table-column prop="fee" label="批改费用合计"  align="center" width="120"> | 
|                     <template slot-scope="{row}"> | 
|                         <span>{{row.changeMoney+' 元'}}</span> | 
|                     </template> | 
|                 </el-table-column> | 
|                 <el-table-column | 
|                     prop="fee" | 
|                     align="center" | 
|                     label="总费用(元)"> | 
|                 </el-table-column> | 
|             </el-table> | 
|         </div> | 
|         <div class="btns"> | 
|             <div class="btns_item"> | 
|                 <el-button type="primary" @click="seleUser">选取员工</el-button> | 
|                 <el-button type="danger" @click="deleItem">删除</el-button> | 
|             </div> | 
|             <div class="btns_item"> | 
| <!--                <el-button type="primary" @click="sele">选取派遣单位</el-button>--> | 
|                 <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 | 
|             :data="form.factory" | 
|             border | 
|             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 | 
|                 v-if="item && item.hasDispatchUnit !== 1" | 
|                 prop="oldDuName" | 
|                 label="原派遣单位"> | 
|             </el-table-column> | 
|             <el-table-column | 
|                 prop="oldWorkTypeName" | 
|                 label="原所属工种"> | 
|             </el-table-column> | 
|             <el-table-column | 
|                 v-if="item && item.hasDispatchUnit !== 1" | 
|                 prop="duName" | 
|                 label="变更后派遣单位"> | 
|             </el-table-column> | 
|             <el-table-column | 
|                 prop="workTypeName" | 
|                 label="变更后所属工种"> | 
|             </el-table-column> | 
|           <el-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 | 
|                 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" v-html="item.specialAgreement"></span> | 
|           <span v-if="item.specialInfo" v-html="item.specialInfo"> </span> | 
|           <span v-if="item.ortherInfo" v-html="item.ortherInfo"> </span> | 
|         </div> | 
|         <!--    选择员工    --> | 
|         <selectEmployees ref="selectEmployees" @result="getValue1" /> | 
|         <!--    添加员工    --> | 
|         <addEmployee ref="addEmployee" @result="getValue" /> | 
|         <!--    导入名单    --> | 
|         <importEmployees ref="importEmployees" @result="getValue" /> | 
|         <!--    确认工种    --> | 
|         <confirmJobType ref="confirmJobType" @result="getUser" /> | 
|         <!--    详单    --> | 
|         <ApplyChangeUnitDetails1 ref="ApplyChangeUnitDetails1" @success="success" /> | 
|         <!-- 更新派遣单位详情 --> | 
| <!--        <OperaApplyChangeUnitDetailWindow ref="OperaApplyChangeUnitDetailWindow" />--> | 
|     </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 ApplyChangeUnitDetails1 from '@/components/business/ApplyChangeUnitDetails1' | 
| // import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow' | 
| import { all } from '@/api/business/solutions' | 
| import { getDetail, findList } from '@/api/business/insuranceApply' | 
| import { create } from '@/api/business/applyChange' | 
| import { getDate, compareDates, getTomorrow } from '@/utils/util' | 
| export default { | 
|   name: 'factoryChange', | 
|   extends: BaseOpera, | 
|   components: { | 
|     GlobalWindow, | 
|     // OperaApplyChangeUnitDetailWindow, | 
|     selectEmployees, | 
|     addEmployee, | 
|     importEmployees, | 
|     confirmJobType, | 
|     ApplyChangeUnitDetails1 | 
|   }, | 
|   data () { | 
|     return { | 
|       form: { | 
|         id: null, | 
|         solutionId: '', | 
|         solutionsName: '', | 
|         applyStartTime: '', | 
|         applyEndTime: '', | 
|         factory: [] | 
|       }, | 
|       newVersionSolutionId: '', | 
|       pickerOptions: {}, | 
|       price: '', | 
|       endTime: '', //     实际保险生效止期 | 
|       company: [], | 
|       seleData: [], | 
|       item: null, | 
|       // 验证规则 | 
|       rules: { | 
|         applyStartTime: [ | 
|           { required: true, message: '请选择批单生效起期' } | 
|         ] | 
|       }, | 
|       list: [] | 
|     } | 
|   }, | 
|   created () { | 
|     this.config({ | 
|       api: '/business/insuranceApply', | 
|       'field.id': 'id' | 
|     }) | 
|   }, | 
|   methods: { | 
|     open (title, target) { | 
|       this.title = title | 
|       this.form.addDetailList = [] | 
|       this.form.delDetailList = [] | 
|       this.list = [] | 
|       this.form.factory = [] | 
|       this.form.id = null | 
|       this.item = null | 
|       this.form.solutionId = '' | 
|       this.form.solutionsName = '' | 
|       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() | 
|     }, | 
|     success () { | 
|       this.form.factory.forEach(item => { | 
|         item.idcardNo = item.idCard | 
|       }) | 
|       this.isWorking = true | 
|       create({ | 
|         applyId: this.form.id, | 
|         changeDetailList: this.form.factory, | 
|         validTime: this.form.applyStartTime, | 
|         type: 1 | 
|       }).then(res => { | 
|         this.visible = false | 
|         // this.$refs.OperaApplyChangeUnitDetailWindow.open('更换派遣单位详情', { applyId: this.form.id, id: res }) | 
|         this.$tip.apiSuccess('操作成功') | 
|         this.$emit('success',{ applyId: this.form.id, id: res }) | 
|       }).catch(e => { | 
|         this.$tip.apiFailed(e) | 
|       }).finally(() => { | 
|         this.isWorking = false | 
|       }) | 
|     }, | 
|     // 获取投保详情 | 
|     getDetails () { | 
|       findList({ applyId: this.form.id }) | 
|         .then(res => { | 
|           res.forEach(item => { | 
|             item.idCard = item.idcardNo | 
|             item.fee = '' | 
|           }) | 
|           res.forEach(item => { | 
|             item.oldDuId = item.duId | 
|             item.oldDuName = item.duName | 
|             item.oldWorkTypeName = item.workTypeName | 
|             item.oldWorktypeId = item.worktypeId | 
|             item.workTypeName = '' | 
|             item.worktypeId = '' | 
|             item.duId = '' | 
|             item.duName = '' | 
|           }) | 
|           // this.form.factory = res | 
|         }) | 
|       getDetail(this.form.id) | 
|         .then(res => { | 
|           console.log(res) | 
|           this.list.push(res) | 
|           this.endTime = res.endTime | 
|           this.form.solutionId = res.solutionId | 
|           this.newVersionSolutionId = res.newVersionSolutionId | 
|           this.form.solutionsName = res.solutionsName | 
|           this.pickerOptions = { | 
|             disabledDate (time) { | 
|               // 当前日期大于等于生效日期并且最后一次操作时间等于空 | 
|               if ([1, 3].includes(compareDates(getDate(), res.startTime)) && !res.lastChangeDate) { | 
|                 return time.getTime() > new Date(res.endTime).getTime() || time.getTime() < new Date(getTomorrow()).getTime() | 
|                 // 当前日期小于生效日期并且最后一次操作时间等于空 | 
|               } else if (compareDates(getDate(), res.startTime) === 2 && !res.lastChangeDate) { | 
|                 return time.getTime() > new Date(res.endTime).getTime() || time.getTime() < new Date(res.startTime).getTime() | 
|                 // 最后一次操作时间有值 | 
|               } else if (res.lastChangeDate) { | 
|                 // 当前日期大于最后一次操作时间 | 
|                 if ([1, 3].includes(compareDates(getDate(), res.lastChangeDate))) { | 
|                   return time.getTime() > new Date(res.endTime).getTime() || time.getTime() < new Date(getTomorrow()).getTime() | 
|                   // 当前时间小于最后一次操作时间 | 
|                 } else if (compareDates(getDate(), res.lastChangeDate) === 2) { | 
|                   return time.getTime() > new Date(res.endTime).getTime() || time.getTime() < new Date(res.lastChangeDate).getTime() | 
|                 } | 
|               } | 
|             } | 
|           } | 
|           this.changeSolution1(res.solutionId) | 
|         }) | 
|     }, | 
|     deleItem () { | 
|       if (this.seleData.length === 0) { | 
|         this.$message.warning('至少选择一项内容') | 
|         return | 
|       } | 
|       this.seleData.forEach(item => { | 
|         this.form.factory.forEach((row, index) => { | 
|           if (item === row.memberName) { | 
|             this.form.factory.splice(index, 1) | 
|           } | 
|         }) | 
|       }) | 
|     }, | 
|     confirm () { | 
|       this.$refs.form.validate((valid) => { | 
|         if (valid) { | 
|           // if (this.form.addDetailList.length === 0) { | 
|           //     this.$message.warning('至少添加一项员工') | 
|           //     return | 
|           // } | 
|           if (this.item.hasDispatchUnit !== 1) { | 
|             for (let i = 0; i < this.form.factory.length; i++) { | 
|               if (!this.form.factory[i].worktypeId || !this.form.factory[i].duId) { | 
|                 this.$message.warning('请完善派遣单位和工种信息') | 
|                 return | 
|               } | 
|             } | 
|           } else { | 
|             for (let i = 0; i < this.form.factory.length; i++) { | 
|               if (!this.form.factory[i].worktypeId) { | 
|                 this.$message.warning('请完善工种信息') | 
|                 return | 
|               } | 
|             } | 
|           } | 
|           let arr = this.company.filter(item => item.id === this.form.solutionId) | 
|           const endTime = Number(arr[0].correctWarnTime.split(':')[0] + arr[0].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(() => { | 
|               this.$refs.ApplyChangeUnitDetails1.open('更换派遣单位详单', this.form.factory, { ...this.list[0], applyStartTime: this.form.applyStartTime }) | 
|             }).catch(() => { | 
|   | 
|             }); | 
|           } else { | 
|             this.$refs.ApplyChangeUnitDetails1.open('更换派遣单位详单', this.form.factory, { ...this.list[0], applyStartTime: this.form.applyStartTime }) | 
|           } | 
|         } | 
|       }) | 
|     }, | 
|     seleUser () { | 
|       if (!this.form.solutionId) { | 
|         this.$message.warning('请先选择保险方案') | 
|         return | 
|       } | 
|       if (!this.form.applyStartTime) { | 
|         this.$message.warning('请先选择批单生效起期') | 
|         return | 
|       } | 
|       this.$refs.selectEmployees.open('选取员工', { arr: this.form.delDetailList, price: this.price, insuranceApplyId: this.form.id, validTime: this.form.applyStartTime }) | 
|     }, | 
|     addUser () { | 
|       if (!this.form.solutionId) { | 
|         this.$message.warning('请先选择保险方案') | 
|         return | 
|       } | 
|       this.$refs.addEmployee.open('添加员工', { arr: this.form.factory, price: this.price }) | 
|     }, | 
|     uploadUser () { | 
|       if (!this.form.solutionId) { | 
|         this.$message.warning('请先选择保险方案') | 
|         return | 
|       } | 
|       this.$refs.importEmployees.open('上传名单', { arr: this.form.factory, price: this.price, hasDispatchUnit: this.item.hasDispatchUnit }) | 
|     }, | 
|     // 切换方案 | 
|     changeSolution1 (e) { | 
|       this.company.forEach(item => { | 
|         if (item.id === e) { | 
|           this.item = item | 
|         } | 
|       }) | 
|       // this.tableData.forEach(item => { | 
|       //     item.fee = this.price | 
|       // }) | 
|     }, | 
|     dele (index) { | 
|       this.form.factory.splice(index, 1) | 
|     }, | 
|     getUser (obj) { | 
|       console.log(obj) | 
|       this.seleData.forEach(item => { | 
|         this.form.factory.forEach(row => { | 
|           if (item === row.memberName) { | 
|             row.workTypeName = obj.workTypeName | 
|             row.worktypeId = obj.worktypeId | 
|             row.duName = obj.duName | 
|             row.duId = obj.duId | 
|           } | 
|         }) | 
|       }) | 
|       this.seleData = [] | 
|       this.$refs.multipleTable.clearSelection() | 
|     }, | 
|     // 选择员工 | 
|     sele (type) { | 
|       if (!this.form.solutionId) { | 
|         this.$message.warning('请选择保险方案') | 
|         return | 
|       } | 
|       if (this.seleData.length === 0) { | 
|         this.$message.warning('请选择员工') | 
|         return | 
|       } | 
|       this.$refs.confirmJobType.open('确认工种', { solutionId: this.newVersionSolutionId, type }) | 
|     }, | 
|     // 查询全部方案 | 
|     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.memberName) | 
|     }, | 
|     // 选取员工 | 
|     getValue1 (list) { | 
|       const arr = JSON.parse(JSON.stringify(list)) | 
|   | 
|       arr.forEach(item => { | 
|         item.oldDuId = item.duId | 
|         item.oldDuName = item.duName | 
|         item.oldWorkTypeName = item.workTypeName | 
|         item.oldWorktypeId = item.worktypeId | 
|   | 
|         item.duId = '' | 
|         item.duName = '' | 
|         item.workTypeName = '' | 
|         item.worktypeId = '' | 
|       }) | 
|   | 
|       for (let a = 0; a < arr.length; a++) { | 
|         for (let b = 0; b < this.form.factory.length; b++) { | 
|           if (arr[a].id === this.form.factory[b].id) { | 
|             this.$message.warning(`${arr[a].companyName}员工重复!`) | 
|             return | 
|           } | 
|         } | 
|       } | 
|   | 
|       this.form.factory.push(...arr) | 
|     }, | 
|     getValue (list) { | 
|       const arr = JSON.parse(JSON.stringify(list)) | 
|   | 
|       arr.forEach(item => { | 
|         item.oldDuId = item.duId | 
|         item.oldDuName = item.duName | 
|         item.oldWorkTypeName = item.workTypeName | 
|         item.oldWorktypeId = item.worktypeId | 
|   | 
|         item.duId = '' | 
|         item.duName = '' | 
|         item.workTypeName = '' | 
|         item.worktypeId = '' | 
|       }) | 
|       this.form.factory.push(...arr) | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <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; | 
|     } | 
|     .desc_item_from { | 
|         width: 100%; | 
|         margin-bottom: 10px; | 
|         .desc_item_from_page { | 
|             width: 100%; | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: end; | 
|             margin-top: 10px; | 
|         } | 
|     } | 
|     .desc_item_cate { | 
|         width: 100%; | 
|         margin-bottom: 10px; | 
|     } | 
|     .info { | 
|         width: 100%; | 
|         font-size: 14px; | 
|         color: black; | 
|     } | 
| </style> |