<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"
|
:disabled="!form.solutionId"
|
:picker-options="pickerOptions"
|
value-format="yyyy-MM-dd"
|
format="yyyy 年 MM 月 dd 日"
|
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"
|
value-format="yyyy-MM-dd"
|
format="yyyy 年 MM 月 dd 日"
|
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}">
|
<span v-if="row.idCard">{{ getAgeByIdCard(row.idCard) }}</span>
|
</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 } from '@/api/business/solutions'
|
import { create, getCountCyclePriceVO, getDetail, findList, updateData } from '@/api/business/insuranceApply'
|
export default {
|
name: 'OperaInsuranceApplyWindow',
|
extends: BaseOpera,
|
components: { GlobalWindow, selectEmployees, addEmployee, importEmployees, confirmJobType },
|
data () {
|
return {
|
form: {
|
id: null,
|
ID: null,
|
solutionId: '',
|
applyStartTime: '',
|
applyEndTime: ''
|
},
|
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
|
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 => {
|
item.idCard = item.idcardNo
|
item.fee = ''
|
})
|
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.name) {
|
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.substring(0, 10)
|
this.tableData.forEach(item => {
|
item.fee = res.cyclePrice
|
})
|
console.log(this.tableData)
|
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)).getTime();
|
}
|
}
|
};
|
},
|
seleUser() {
|
if (!this.form.solutionId) {
|
this.$message.warning('请先选择保险方案')
|
return
|
}
|
this.$refs.selectEmployees.open('选取员工', { arr: this.tableData, price: this.price })
|
},
|
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) {
|
this.tableData = []
|
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) {
|
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
|
})
|
},
|
dele(index) {
|
this.tableData.splice(index, 1)
|
},
|
getUser(obj) {
|
this.seleData.forEach(item => {
|
this.tableData.forEach(row => {
|
if (item === row.name) {
|
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.name)
|
},
|
getValue(list) {
|
this.tableData.push(...list)
|
}
|
}
|
}
|
</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;
|
}
|
.info {
|
width: 100%;
|
font-size: 14px;
|
color: black;
|
}
|
</style>
|