jiangping
2024-01-31 48eb5dc61ac07d232632b13d040006128ed5cceb
开发业务接口
已添加5个文件
已删除1个文件
已修改26个文件
3653 ■■■■ 文件已修改
company/.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/insuranceApply.js 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/ApplyChangeUnitDetails.vue 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/InsuranceDetails.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeCheckWindow.vue 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeDetailWindow.vue 464 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeUnitCheckWindow.vue 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeUnitDetailWindow.vue 453 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyCheckWindow.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyWindow.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/applyChangeDetails.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/UploadFile.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/add_subtractDetails.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/applyChange.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/insuranceApply.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/switchCourt.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/add_subtract.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/insuranceApply.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/switchCourt.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/task/ScheduleTool.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java 218 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyLog.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/third/SignService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.development
@@ -2,12 +2,12 @@
NODE_ENV = 'development'
# ä¼ä¸šç«¯-仁康
VUE_APP_API = 'http://192.168.0.134:10025/'
# VUE_APP_API = 'http://192.168.0.134:10025/'
# å¹³å°ç«¯-仁康
# VUE_APP_API = 'http://192.168.0.134:10023/'
# VUE_APP_API = 'http://localhost:10023/'
VUE_APP_API = 'http://localhost:10023/'
# VUE_APP_API = 'http://localhost:10023/'
company/src/api/business/insuranceApply.js
@@ -56,11 +56,29 @@
export function getDetail (id) {
    return request.get(`business/insuranceApply/${id}`)
}
export function getChangeDetail (id) {
    return request.get(`business/applyChange/${id}`)
}
export function getSignLink (id) {
    return request.get(`business/insuranceApply/getSignLink/${id}`)
}
export function getJiajianBaoSignLink (data) {
    return request.post('/business/applyChange/getJiajianBaoSignLink', data, {
        trim: true
    })
}
export function getChangeUnitSignLink (data) {
    return request.post('/business/applyChange/getChangeUnitSignLink', data, {
        trim: true
    })
}
export function getDetailList (data) {
    return request.post('/business/applyDetail/list', data, {
        trim: true
    })
}
export function getChangeDetailList (data) {
    return request.post('/business/applyChagneDetail/list', data, {
        trim: true
    })
}
@@ -91,6 +109,38 @@
        download: true
    })
}
export function exportJiajianBaoExcel (data) {
    return request.post('/business/applyChange/exportJiajianBaoExcel', data, {
        trim: true,
        download: true
    })
}
export function backChagne (data) {
    return request.post('/business/applyChange/back', data, {
        trim: true
    })
}
export function editChangePidan (data) {
    return request.post('/business/applyChange/editPidan', data, {
        trim: true
    })
}
export function uploadChangePidan (data) {
    return request.post('/business/applyChange/uploadPidan', data, {
        trim: true
    })
}
export function dealBackChangeApply (data) {
    return request.post('/business/applyChange/dealBackApply', data, {
        trim: true
    })
}
export function exportChangeUnitExcel (data) {
    return request.post('/business/applyChange/exportChangeUnitExcel', data, {
        trim: true,
        download: true
    })
}
// å¯¼å‡ºExcel
export function applyChagneDetailExcel (data) {
company/src/components/business/ApplyChangeUnitDetails.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,342 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="box">
          <div class="top">
            {{title}}
          </div>
          <div class="box_table">
            <div class="box_table_head">
              <div class="box_table_head_item">投保企业</div>
              <div class="box_table_head_item">保险方案</div>
              <div class="box_table_head_item">保单号</div>
              <div class="box_table_head_item">保险生效起期</div>
              <div class="box_table_head_item">保险生效止期</div>
              <div class="box_table_head_item">换厂人数</div>
              <div class="box_table_head_item">批单生效期</div>
            </div>
            <div class="box_table_content "  >
              <div class="box_table_content_item box_table_content_header">{{ apply.companyName }}</div>
              <div class="box_table_content_item box_table_content_header">{{ apply.solutionsName }}</div>
              <div class="box_table_content_item box_table_content_header">{{ apply.code }}</div>
              <div class="box_table_content_item box_table_content_header">{{ apply.startTime }}</div>
              <div class="box_table_content_item box_table_content_header">{{ apply.endTime }}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.changeNum}}</div>
              <div class="box_table_content_item box_table_content_header">{{ model.applyStartTime}}</div>
            </div>
          </div>
            <div class="box_table">
                <div class="box_table_head">
                    <div class="box_table_head_item">序号</div>
                    <div class="box_table_head_item">员工姓名</div>
                    <div class="box_table_head_item">性别</div>
                    <div class="box_table_head_item">身份证号</div>
                    <div class="box_table_head_item">原派遣单位</div>
                    <div class="box_table_head_item">原所属工种</div>
                    <div class="box_table_head_item">换厂后派遣单位</div>
                    <div class="box_table_head_item">换厂后所属工种</div>
                </div>
                <div class="box_table_content" v-for="(item, index) in detailList" :key="index">
                    <div class="box_table_content_item">{{index + 1}}</div>
                    <div class="box_table_content_item" >{{ item.memberName }}</div>
                    <div class="box_table_content_item">{{  item.sex==0?"男":(item.sex==1?"女":"" )}}</div>
                    <div class="box_table_content_item">{{ item.memberIdcardNo }}</div>
                    <div class="box_table_content_item">{{ item.oldDuName }}</div>
                    <div class="box_table_content_item">{{item.oldWorkTypeName}}</div>
                    <div class="box_table_content_item">{{ item.duName }}</div>
                    <div class="box_table_content_item">{{item.workTypeName}}</div>
                </div>
            </div>
          <div class="box_table" v-if="type==1" style="border-top: 0px solid #b4bbc5;" >
            <div class="box_table_head">
              <div class="box_table_head_item5">备注</div>
              <div class="box_table_head_item5">
                    <input v-model="form.checkInfo" style="width: 100%;height: 45px;border: 0px;outline: none;" placeholder="请输入" v-trim/>
              </div>
            </div>
          </div>
        </div>
        <template v-if="type==1" v-slot:footer>
            <el-button type="primary"  :loading="isWorking.export" @click="check(0)">提交通过</el-button>
<!--            <el-button type="danger"  :loading="isWorking.export" @click="check(1)">审核不通过</el-button>-->
            <el-button @click="visible=false">取消</el-button>
        </template>
        <template v-else v-slot:footer>
            <el-button type="primary"  :loading="isWorking.export" @click="exportComFilesDo">企业证件</el-button>
            <el-button type="primary"  :loading="isWorking.export" @click="exportDetail">导出详单</el-button>
            <el-button @click="visible=false">取消</el-button>
        </template>
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import {getChangeDetailList, exportChangeUnitExcel} from "@/api/business/insuranceApply";
    import {exportComFiles} from "@/api/business/company";
    // import {all as solutionAll} from "@/api/business/solutions";
    export default {
        name: 'ApplyChangeUnitDetails',
        extends: BaseOpera,
        components: { GlobalWindow },
        data () {
            return {
                model:{},
                apply:{},
              type:0,
              detailList:[],
                // è¡¨å•数据
                form: {
                    id: null,
                    dealBackApply:0,
                    checkInfo: ''
                },
                // éªŒè¯è§„则
                rules: {
                },
                reverse: true,
                tableData: []
            }
        },
        created () {
            this.config({
                api: '/business/insuranceApply',
                'field.id': 'id'
            })
        },
        methods: {
            open(title,target,target2){
              this.title=title
              this.visible=true
              this.apply = target
              this.model = target2
              this.form.id=target.id
              this.getDetailListDo()
            },
           getDetailListDo() {
             this.detailList = []
             var that = this
             getChangeDetailList({applyChangeId: this.model.id})
                 .then(res => {
                   that.detailList= res
                 }).catch(err => {})
           },
          exportDetail(){
            this.$dialog.exportConfirm('确认导出详单吗?')
                .then(() => {
                  this.isWorking = true
                  exportChangeUnitExcel({ id: this.model.id })
                      .then(response => {
                        this.download(response)
                      })
                      .catch(e => {
                        console.log(e)
                        this.$message.error('数据下载失败!')
                      })
                      .finally(() => {
                        this.isWorking = false
                      })
                })
                .catch(() => {
                })
          },
          exportComFilesDo(){
            this.$dialog.exportConfirm('确认导出企业证件吗?')
                .then(() => {
                  this.isWorking = true
                  exportComFiles({ id: this.apply.companyId })
                      .then(response => {
                        this.download(response)
                      })
                      .catch(e => {
                        console.log(e)
                        this.$message.error('数据下载失败!')
                      })
                })
                .catch(() => {
                })
          },
            handleSizeChange(val) {
                console.log(`每页 ${val} æ¡`);
            },
            handleCurrentChange(val) {
                console.log(`当前页: ${val}`);
            },
            handleClick(tab, event) {
                console.log(tab, event);
            },
            onSubmit() {
            }
        }
    }
</script>
<style lang="scss" scoped>
    .box {
        width: 100%;
       .top{
           width: 100%;
           align-items: center;
           flex-wrap: wrap;
           border-top: 1px solid #b4bbc5;
           border-left: 1px solid #b4bbc5;
            font-size: 14px;
            font-weight: bold;
            text-align: center;
          padding: 15px;
         }
        .box_header {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            border-top: 1px solid #b4bbc5;
            border-left: 1px solid #b4bbc5;
            .box_header_item {
                width: 50%;
                height: 50px;
                display: flex;
                align-items: center;
                border-right: 1px solid #b4bbc5;
                border-bottom: 1px solid #b4bbc5;
                box-sizing: border-box;
                .box_header_item_label {
                    flex: 1;
                    height: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    background: #f2f2f2;
                    border-right: 1px solid #b4bbc5;
                }
                .box_header_item_val {
                    flex: 1;
                    height: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                }
            }
        }
        .box_table {
            width: 100%;
            border-top: 1px solid #b4bbc5;
            border-left: 1px solid #b4bbc5;
            box-sizing: border-box;
            .box_table_head {
                width: 100%;
                display: flex;
                align-items: center;
                .box_table_head_item1 {
                    flex: 1;
                    height: 50px;
                    background: #f2f2f2;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    border-right: 1px solid #b4bbc5;
                    border-bottom: 1px solid #b4bbc5;
                    box-sizing: border-box;
                    }
                .box_table_head_item {
                    flex: 1;
                    height: 50px;
                    background: #f2f2f2;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    border-right: 1px solid #b4bbc5;
                    border-bottom: 1px solid #b4bbc5;
                    box-sizing: border-box;
                  &:nth-child(4) {
                    flex: 1.5;;
                  }
                  &:nth-child(6) {
                    flex: 1.5;;
                  }
                  &:nth-child(8) {
                    flex: 1.5;;
                  }
                }
              .box_table_head_item5 {
                flex: 1;
                height: 50px;
                background: #f2f2f2;
                display: flex;
                align-items: center;
                justify-content: center;
                font-size: 14px;
                color: black;
                border-right: 1px solid #b4bbc5;
                border-bottom: 1px solid #b4bbc5;
                box-sizing: border-box;
                &:nth-child(2) {
                   flex: 5;
                }
              }
              .box_form_item {
                flex: 1;
                height: 50px;
                background: #ffffff;
                display: flex;
                align-items: center;
                justify-content: center;
                font-size: 14px;
                color: black;
                border-right: 1px solid #b4bbc5;
                border-bottom: 1px solid #b4bbc5;
                box-sizing: border-box;
                &:nth-child(1) {
                  //flex: 0.5;
                }
              }
            }
            .box_table_content {
                width: 100%;
                display: flex;
                align-items: center;
                .box_table_content_header{
                  border-bottom: 0px solid #b4bbc5 !important;
                }
              .box_table_content_item {
                    flex: 1;
                    height: 50px;
                    background: #ffffff;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    font-size: 14px;
                    color: black;
                    border-right: 1px solid #b4bbc5;
                    border-bottom: 1px solid #b4bbc5;
                    box-sizing: border-box;
                &:nth-child(4) {
                  flex: 1.5;
                }
                &:nth-child(6) {
                  flex: 1.5;
                }
                &:nth-child(8) {
                  flex: 1.5;
                }
                }
            }
        }
    }
</style>
company/src/components/business/InsuranceDetails.vue
@@ -172,7 +172,9 @@
                      .then(response => {
                        this.visible = false
                        this.$emit('success')
                      })
                      }).catch(err => {
                    this.$tip.apiFailed(err)
                  })
                })
                .catch(() => {
                })
@@ -189,9 +191,6 @@
                      .catch(e => {
                        console.log(e)
                        this.$message.error('数据下载失败!')
                      })
                      .finally(() => {
                        this.isWorking = false
                      })
                })
                .catch(() => {
company/src/components/business/OperaApplyChangeCheckWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,426 @@
<template>
    <GlobalWindow
        :title="title"
        width="50%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <!--    é€€å›žæŠ•保    -->
            <div v-if="visible1==true"  class="form">
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>填写退回说明:</div>
                    <div class="form_item_val">
                        <textarea  v-model="form.backCheckInfo" placeholder="请输入"></textarea>
                    </div>
                </div>
            </div>
        <!--    ä¸Šä¼ ä¿é™©å•    -->
            <div v-if="visible3==true" class="form">
                <div class="form_item">
                    <div class="form_item_label">客户期望批单生效起期:</div>
                    <div class="form_item_val">{{ model.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">批单生效起期是否一致:</div>
                    <div class="form_item_val">
                        <el-radio-group v-model="form.selectRadio" @change="selectChange">
                            <el-radio :label="0"  >与批单一致</el-radio>
                            <el-radio :label="1" >与批单不一致</el-radio>
                        </el-radio-group>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>批单生效起期:</div>
                    <div class="form_item_val">
                        <el-date-picker
                            v-model="form.applyStartTime"
                            type="date"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="选择日期">
                        </el-date-picker>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">批单生效起期:</div>
                    <div class="form_item_val">{{ form.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>批单号:</div>
                    <div class="form_item_val" >
                        <el-input v-model="form.validCode" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">上传批单:</div>
                    <div class="form_item_val">
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
                    </div>
                </div>
            </div>
        <!--    ä¿®æ”¹ä¿é™©å•    -->
            <div v-if="visible4==true" class="form">
                <div class="form_item">
                  <div class="form_item_label">批单生效起期:</div>
                  <div class="form_item_val">{{ model.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>批单号:</div>
                    <div class="form_item_val">
                        <el-input v-model="form.editValidCode" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>上传批单:</div>
                    <div class="form_item_val">
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>修改原因:</div>
                    <div class="form_item_val">
                        <el-input placeholder="请输入" v-model="form.editCheckInfo" ></el-input>
                    </div>
                </div>
            </div>
        <!--    é©³å›žé€€å›žç”³è¯·    -->
        <div v-if="visible5==true" class="form">
            <div class="form_item">
                <div class="form_item_label"><span>*</span>填写说明:</div>
                <div class="form_item_val">
                    <textarea v-model="form.dealBackInfo"  placeholder="请输入"></textarea>
                </div>
            </div>
        </div>
        <!--    åŒæ„é€€å›žç”³è¯·    -->
        <div v-if="visible6==true" class="form">
            <div class="form_item">
                <div class="form_item_label"><span>*</span>同意退回说明:</div>
                <div class="form_item_val">
                    <textarea  v-model="form.dealBackInfo"  placeholder="请输入"></textarea>
                </div>
            </div>
        </div>
      <template v-slot:footer>
        <el-button type="primary" @click="doSubmit">ç¡® å®š</el-button>
        <el-button @click="visible=false">取消</el-button>
      </template>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import {
  backChagne,
  uploadChangePidan,
  editChangePidan,
  dealBackChangeApply
} from '@/api/business/insuranceApply'
import UploadFile from '@/components/common/UploadFile'
export default {
  name: 'OperaApplyChangeCheckWindow',
  extends: BaseOpera,
  components: {UploadFile, GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      model: {},
      falg :0,
      form: {
          id: null,
          backCheckInfo:'',
          dealBackInfo:'',
          editCheckInfo:'',
          editValidCode: '',
          applyStartTime:null,
         validCode:null,
          pidanFile:null,
         editPidanFile:null,
          fileList1: [],
          fileList2: [],
          selectRadio:0
      },
      visible1: false,
      visible3: false,
      visible4: false,
      visible5: false,
      visible6: false,
    }
  },
  created () {
      this.config({
          api: '/business/insuranceApply',
          'field.id': 'id'
      })
  },
  methods: {
     open(title,target,flag){
       this.visible=true
       this.model={}
       this.form= {
         id: null,
         backCheckInfo:'',
         dealBackInfo:'',
         editCheckInfo:'',
         editValidCode: '',
         applyStartTime:null,
         validCode:null,
         pidanFile:null,
         editPidanFile:null,
         fileList1: [],
         fileList2: [],
         selectRadio:0
       },
       this.model=target
       this.form.applyStartTime=this.model.applyStartTime
       this.form.editValidCode=this.model.validCode
       this.title=title
       this.flag = flag
       this.visible1 = false
       this.visible3 = false
       this.visible4 = false
       this.visible5 = false
       this.visible6 = false
       if(flag == 1){
         this.visible1 = true
       }
       if(flag == 3){
         this.visible3 = true
       }
       if(flag == 4){
         this.visible4 = true
       }
       if(flag == 5){
         this.visible5 = true
       }
       if(flag == 6){
         this.visible6 = true
       }
     },
    doSubmit(){
      if (this.flag == 1) {
        this.backDo()
      } else if (this.flag == 3) {
        this.uploadPidan()
      } else if (this.flag == 4) {
        this.editPidan()
      } else if (this.flag == 5) {
        this.dealBackApply(1)
      } else if (this.flag == 6) {
        this.dealBackApply(0)
      }
    },
    selectChange(){
       if(this.form.selectRadio == 0){
         this.form.applyStartTime = this.model.validTime
       }else{
       }
    },
    baoxianFileUploaded(data){
      this.form.pidanFile=data
    },
    editBaoxianFileUploaded(data){
      this.form.editPidanFile=data
    },
    backDo(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            backChagne({id:this.model.id,checkInfo:this.form.backCheckInfo})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                  }).catch(err => {
                this.$tip.apiFailed(err)
                 })
          })
    },
    dealBackApply(type){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            dealBackChangeApply({ id: this.model.id, checkInfo: this.form.dealBackInfo, dealBackApply: type })
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    uploadPidan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            uploadChangePidan({id:this.model.id,applyStartTime:this.form.applyStartTime, validCode:this.form.validCode,pidanFile:this.form.pidanFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    editPidan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            editChangePidan({id:this.model.id, checkInfo:this.form.editCheckInfo,validCode:this.form.editValidCode,pidanFile:this.form.editPidanFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
      handleRemove(file, fileList) {
          console.log(file, fileList);
      },
      handlePreview(file) {
          console.log(file);
      },
      handleExceed(files, fileList) {
          this.$message.warning(`当前限制选择 3 ä¸ªæ–‡ä»¶ï¼Œæœ¬æ¬¡é€‰æ‹©äº† ${files.length} ä¸ªæ–‡ä»¶ï¼Œå…±é€‰æ‹©äº† ${files.length + fileList.length} ä¸ªæ–‡ä»¶`);
      },
      beforeRemove(file, fileList) {
          return this.$confirm(`确定移除 ${ file.name }?`);
      },
      successEvent() {
      },
      handleSizeChange(val) {
          console.log(`每页 ${val} æ¡`);
      },
      handleCurrentChange(val) {
          console.log(`当前页: ${val}`);
      },
      handleClick(tab, event) {
          console.log(tab, event);
      },
      onSubmit() {
      }
  }
}
</script>
<style>
</style>
<style lang="scss" scoped>
    .form {
        width: 100%;
        display: flex;
        align-items: center;
        flex-direction: column;
        .form_span {
            width: 100%;
            display: flex;
            align-items: start;
            flex-direction: column;
            margin-bottom: 20px;
            span {
                font-size: 14px;
                &:nth-child(1) {
                    color: black;
                    margin-bottom: 5px;
                }
                &:nth-child(2) {
                    color: #8c939d;
                }
            }
        }
        .form_item {
            width: 100%;
            display: flex;
            align-items: center;
            margin-bottom: 20px;
            &:last-child {
                margin: 0 !important;
            }
            .form_item_label {
                flex-shrink: 0;
                width: 170px;
                color: black;
                font-size: 14px;
                span {
                    color: red;
                    font-size: 14px;
                }
            }
            .form_item_val {
                flex: 1;
                /*height: 40px;*/
                margin-left: 20px;
                textarea {
                    width: 100%;
                    height: 70px;
                    border: 1px solid #cbcbcb;
                    padding: 10px;
                    outline: none;
                    box-sizing: border-box;
                }
                input {
                    width: 100%;
                    height: 40px;
                    outline: none;
                    border-radius: 5px;
                    border: 1px solid #cbcbcb;
                    padding: 0 20px;
                    box-sizing: border-box;
                }
            }
        }
    }
    .desc {
        width: 100%;
        .desc_item {
            width: 100%;
            display: flex;
            flex-direction: column;
            .desc_item_label {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 10px;
                span {
                    font-size: 14px;
                    color: black;
                    margin-right: 30px;
                }
            }
            .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;
            }
            .desc_item_search {
                width: 100%;
                margin-bottom: 20px;
            }
            .desc_item_review {
                width: 100%;
                .desc_item_review_label {
                    font-size: 20px;
                    color: black;
                    font-weight: bold;
                    margin-bottom: 15px;
                }
            }
        }
    }
</style>
company/src/components/business/OperaApplyChangeDetailWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,464 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="desc">
            <div class="desc_item">
                <div class="desc_item_label">
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ apply.companyName }}</span>
                      <span v-if="model.status === 0">保单状态:待签署</span>
                      <span v-if="model.status === 1">保单状态:已签章</span>
                      <span v-if="model.status === 2">保单状态:已上传批单</span>
                      <span v-if="model.status === 3 || model.status === 4">保单状态:退回申请</span>
                      <span v-if="model.status ===5 || model.status === 8">保单状态:已退回</span>
                      <span v-if="model.status ===7">保单状态:已关闭</span>
                        <span>提交时间:{{ model.createDate }}</span>
                    </div>
                  <div class="desc_item_label_right">
                      <template v-if="userInfo.type === 1">
                          <el-button type="primary" @click="$refs.ApplyChangeDetails.open('加减保详单',apply,model)">导出详单</el-button>
                          <el-button v-if="model.status == 4" type="primary" @click="$refs.OperaInsuranceApply.open('投保申请', {id: dataId})">再次投保</el-button>
                          <el-button type="primary" v-if="model.status == 0"   @click="goSign">签署申请单</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">申请退回</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewApplyFile">查看申请单</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewPidan">查看批单</el-button>
                          <el-button v-if="model.status == 2" type="primary" @click="closeApply">关闭订单</el-button>
                      </template>
                        <template v-else>
                            <el-button type="primary" @click="$refs.ApplyChangeDetails.open('加减保详单',apply,model)">导出详单</el-button>
                            <el-button v-if="[1,2,4].includes(model.status)" type="primary" @click="viewApplyFile">查看申请单</el-button>
                            <el-button v-if="[2].includes(model.status)" type="primary" @click="viewPidan">查看批单</el-button>
                            <el-button v-if="[1].includes(model.status)" type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('上传批单',model,3)">上传批单</el-button>
                            <el-button  v-if="[3,4].includes(model.status)"  type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('驳回退回申请',model,5)">驳回退回申请</el-button>
                            <el-button  v-if="[0,1,3,4].includes(model.status)" type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                            <el-button  v-if="[2].includes(model.status)"  type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('修改批单',model,4)">修改批单</el-button>
                        </template>
                  </div>
                </div>
                <div class="desc_item_from">
                    <el-table
                        :data="tableData"
                        border
                        style="width: 100%">
                        <el-table-column
                            prop="validCode"
                            align="center"
                            label="批单号">
                        </el-table-column>
                        <el-table-column
                            prop="applyCode"
                            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="applyStartTime"
                          align="center"
                          label="批单生效起期">
                      </el-table-column>
                        <el-table-column
                            prop="addNum"
                            align="center"
                            label="加保人数">
                        </el-table-column>
                        <el-table-column
                            prop="delNum"
                            align="center"
                            label="减保人数">
                        </el-table-column>
                        <el-table-column
                            prop="fee"
                            align="center"
                            label="费用变更(元)">
                        </el-table-column>
                    </el-table>
                </div>
                <div class="desc_item_cate">
                    <el-tabs v-model="activeName" @tab-click="handleClick">
                        <el-tab-pane label="加保记录" name="0"></el-tab-pane>
                        <el-tab-pane label="减保记录" name="1"></el-tab-pane>
                    </el-tabs>
                </div>
                <div class="desc_item_from">
                    <el-table
                        :data="list"
                        border
                        style="width: 100%">
                        <el-table-column label="序号">
                            <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
                            label="性别">
                            <template slot-scope="{row}">
                                <span v-if="row.sex === 0">男</span>
                                <span v-else>女</span>
                            </template>
                        </el-table-column>
                        <el-table-column
                            prop="memberIdcardNo"
                            label="身份证号">
                        </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="startTime"
                            label="保险生效起期">
                        </el-table-column>
                        <el-table-column
                            prop="endTime"
                            label="保险生效止期">
                        </el-table-column>
                        <el-table-column
                            prop="fee"
                            label="产生费用(元)">
                        </el-table-column>
                    </el-table>
                    <div class="desc_item_from_page">
                        <el-pagination
                            @current-change="handleCurrentChange"
                            :current-page="currentPage"
                            :page-size="10"
                            layout="total, prev, pager, next, jumper"
                            :total="total">
                        </el-pagination>
                    </div>
                </div>
                <div class="desc_item_review">
                    <div class="desc_item_review_label">审核流程</div>
                  <el-timeline :reverse="reverse">
                    <el-timeline-item
                        v-for="(activity, index) in activities"
                        :key="index">
                      <div style="display: flex; flex-direction: column;">
                                <span style="font-size: 16px; font-weight: 400; color: black;">
                                    {{activity.title}}
                                    <span style="font-size: 16px; font-weight: 400; color: black; margin-left: 10px;" >
                                        {{activity.content}}
                                    </span>
                                </span>
                        <span style="margin-top: 5px; font-size: 12px; font-weight: 400; color: #999999;">
                                    æ“ä½œå‘˜-{{activity.creatorName}}({{activity.creatorType==1? activity.companyName: "平台端"}}){{activity.createDate}}
                                </span>
                      </div>
                    </el-timeline-item>
                  </el-timeline>
                </div>
            </div>
        </div>
        <ApplyChangeDetails ref="ApplyChangeDetails" @success="successEvent" />
        <OperaApplyChangeCheckWindow ref="OperaApplyChangeCheckWindow" @success="successEvent" />
        <!--    ä¼ä¸šç”³è¯·é€€å›ž    -->
        <applyReturn ref="applyReturn" @success="successEvent" />
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
        <!--    åŠ å‡ä¿ç”³è¯·    -->
        <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
        <!--    æ¢åŽ‚ç”³è¯·    -->
        <factoryChange ref="factoryChange" @success="successEvent" />
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import ApplyChangeDetails from '@/components/business/ApplyChangeDetails'
import OperaApplyChangeCheckWindow from '@/components/business/OperaApplyChangeCheckWindow'
import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
import factoryChange from '@/components/enterprise/factoryChange'
import applyReturn from '@/components/enterprise/applyReturn'
import {
  getDetail,
  getChangeDetail,
  applyChagneDetailPage,
  getJiajianBaoSignLink
} from '@/api/business/insuranceApply'
import OperaInsuranceApply from '@/components/enterprise/OperaInsuranceApplyWindow'
import { mapState } from 'vuex'
export default {
  name: 'OperaApplyChangeDetailWindow',
  extends: BaseOpera,
  components: {
      GlobalWindow,
      ApplyChangeDetails,
      OperaApplyChangeCheckWindow,
      applyReturn,
      OperaInsuranceApply,
      additionSubtractionApplication,
      factoryChange
  },
  data () {
    return {
      // è¡¨å•数据
      dataId:null,
      modelId:null,
      apply:{},
      model: {},
      form: {
          id: null,
          editDate: ''
      },
      // éªŒè¯è§„则
      rules: {
      },
      formInline: {
          applyStatus: '',
          duId: '',
          workTypeId: '',
          memberName: '',
          types: ''
      },
      reverse: true,
      radio: 0,
      activities: [],
      tableData: [],
        list: [],
      activeName: '0',
        total: 0,
      currentPage: 1
    }
  },
  created () {
      this.config({
          api: '/business/insuranceApply',
          'field.id': 'id'
      })
  },
    computed: {
      ...mapState(['userInfo'])
    },
  methods: {
     open(title,target){
        this.visible = true;
        this.title = title
        this.dataId = target.applyId
        this.modelId = target.id
        this.getDetail()
        this.getList()
     },
      resetting() {
            this.search()
      },
      search() {
          this.currentPage = 1
          this.getList()
      },
      getList() {
           applyChagneDetailPage({
               capacity: 10,
               page: this.currentPage,
               model: {
                   applyChangId: this.modelId,
                   types:[ this.activeName]
               }
           }).then(res => {
               this.list = res.records
               this.total = res.total
           })
      },
      handleClick(e) {
        this.activeName = e.index
        this.resetting()
      },
    goSign(){
      getJiajianBaoSignLink({id:this.modelId}).then(res => {
        setTimeout(() => {
          window.open(res)
        }, 500);
      }).catch(err => {
       this.$tip.apiFailed(err)
      })
    },
    viewApplyFile(){
       if(this.model.applyFile && this.model.applyFile.fileurlFull){
        window.open(this.model.applyFile.fileurlFull)
       }
    },
    viewPidan(){
      if(this.model.pidanFile && this.model.pidanFile.fileurlFull){
        window.open(this.model.pidanFile.fileurlFull)
      }
    },
    handleSizeChange(val){
        console.log(val)
    },
    handleCurrentChange(val){
        console.log(val)
        this.page = val
        this.getList()
    },
    onSubmit(){
    },
    getDetail(){
      getDetail(this.dataId).then(res => {
        this.apply = res
        console.log(this.tableData)
      }).catch(err => {
      })
      getChangeDetail(this.modelId).then(res => {
        this.model = res
        this.tableData = new Array()
        this.tableData.push(res)
        console.log(this.tableData)
        this.activities = res.applyLogList
      }).catch(err => {
      })
    },
    successEvent(){
       // this.visible=false
      this.getDetail()
      this.$emit('success')
    }
  }
}
</script>
<style>
</style>
<style lang="scss" scoped>
    .form {
        width: 100%;
        display: flex;
        align-items: center;
        flex-direction: column;
        .form_span {
            width: 100%;
            display: flex;
            align-items: start;
            flex-direction: column;
            margin-bottom: 20px;
            span {
                font-size: 14px;
                &:nth-child(1) {
                    color: black;
                    margin-bottom: 5px;
                }
                &:nth-child(2) {
                    color: #8c939d;
                }
            }
        }
        .form_item {
            width: 100%;
            display: flex;
            align-items: center;
            margin-bottom: 20px;
            &:last-child {
                margin: 0 !important;
            }
            .form_item_label {
                flex-shrink: 0;
                width: 170px;
                color: black;
                font-size: 14px;
                span {
                    color: red;
                    font-size: 14px;
                }
            }
            .form_item_val {
                flex: 1;
                /*height: 40px;*/
                margin-left: 20px;
                textarea {
                    width: 100%;
                    height: 70px;
                    border: 1px solid #cbcbcb;
                    padding: 10px;
                    outline: none;
                    box-sizing: border-box;
                }
                input {
                    width: 100%;
                    height: 40px;
                    outline: none;
                    border-radius: 5px;
                    border: 1px solid #cbcbcb;
                    padding: 0 20px;
                    box-sizing: border-box;
                }
            }
        }
    }
    .desc {
        width: 100%;
        .desc_item {
            width: 100%;
            display: flex;
            flex-direction: column;
            .desc_item_label {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 10px;
                span {
                    font-size: 14px;
                    color: black;
                    margin-right: 30px;
                }
            }
            .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;
            }
            .desc_item_search {
                width: 100%;
                margin-bottom: 20px;
            }
            .desc_item_review {
                width: 100%;
                .desc_item_review_label {
                    font-size: 20px;
                    color: black;
                    font-weight: bold;
                    margin-bottom: 15px;
                }
            }
        }
    }
</style>
company/src/components/business/OperaApplyChangeUnitCheckWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,426 @@
<template>
    <GlobalWindow
        :title="title"
        width="50%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <!--    é€€å›žæŠ•保    -->
            <div v-if="visible1==true"  class="form">
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>填写退回说明:</div>
                    <div class="form_item_val">
                        <textarea  v-model="form.backCheckInfo" placeholder="请输入"></textarea>
                    </div>
                </div>
            </div>
        <!--    ä¸Šä¼ ä¿é™©å•    -->
            <div v-if="visible3==true" class="form">
                <div class="form_item">
                    <div class="form_item_label">客户期望批单生效起期:</div>
                    <div class="form_item_val">{{ model.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">批单生效起期是否一致:</div>
                    <div class="form_item_val">
                        <el-radio-group v-model="form.selectRadio" @change="selectChange">
                            <el-radio :label="0"  >与批单一致</el-radio>
                            <el-radio :label="1" >与批单不一致</el-radio>
                        </el-radio-group>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>批单生效起期:</div>
                    <div class="form_item_val">
                        <el-date-picker
                            v-model="form.applyStartTime"
                            type="date"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="选择日期">
                        </el-date-picker>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">批单生效起期:</div>
                    <div class="form_item_val">{{ form.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>批单号:</div>
                    <div class="form_item_val" >
                        <el-input v-model="form.validCode" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">上传批单:</div>
                    <div class="form_item_val">
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
                    </div>
                </div>
            </div>
        <!--    ä¿®æ”¹ä¿é™©å•    -->
            <div v-if="visible4==true" class="form">
                <div class="form_item">
                  <div class="form_item_label">批单生效起期:</div>
                  <div class="form_item_val">{{ model.applyStartTime }}</div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>批单号:</div>
                    <div class="form_item_val">
                        <el-input v-model="form.editValidCode" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>上传批单:</div>
                    <div class="form_item_val">
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>修改原因:</div>
                    <div class="form_item_val">
                        <el-input placeholder="请输入" v-model="form.editCheckInfo" ></el-input>
                    </div>
                </div>
            </div>
        <!--    é©³å›žé€€å›žç”³è¯·    -->
        <div v-if="visible5==true" class="form">
            <div class="form_item">
                <div class="form_item_label"><span>*</span>填写说明:</div>
                <div class="form_item_val">
                    <textarea v-model="form.dealBackInfo"  placeholder="请输入"></textarea>
                </div>
            </div>
        </div>
        <!--    åŒæ„é€€å›žç”³è¯·    -->
        <div v-if="visible6==true" class="form">
            <div class="form_item">
                <div class="form_item_label"><span>*</span>同意退回说明:</div>
                <div class="form_item_val">
                    <textarea  v-model="form.dealBackInfo"  placeholder="请输入"></textarea>
                </div>
            </div>
        </div>
      <template v-slot:footer>
        <el-button type="primary" @click="doSubmit">ç¡® å®š</el-button>
        <el-button @click="visible=false">取消</el-button>
      </template>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import {
  backChagne,
  uploadChangePidan,
  editChangePidan,
  dealBackChangeApply
} from '@/api/business/insuranceApply'
import UploadFile from '@/components/common/UploadFile'
export default {
  name: 'OperaApplyChangeCheckWindow',
  extends: BaseOpera,
  components: {UploadFile, GlobalWindow },
  data () {
    return {
      // è¡¨å•数据
      model: {},
      falg :0,
      form: {
          id: null,
          backCheckInfo:'',
          dealBackInfo:'',
          editCheckInfo:'',
          editValidCode: '',
          applyStartTime:null,
         validCode:null,
          pidanFile:null,
         editPidanFile:null,
          fileList1: [],
          fileList2: [],
          selectRadio:0
      },
      visible1: false,
      visible3: false,
      visible4: false,
      visible5: false,
      visible6: false,
    }
  },
  created () {
      this.config({
          api: '/business/insuranceApply',
          'field.id': 'id'
      })
  },
  methods: {
     open(title,target,flag){
       this.visible=true
       this.model={}
       this.form= {
         id: null,
         backCheckInfo:'',
         dealBackInfo:'',
         editCheckInfo:'',
         editValidCode: '',
         applyStartTime:null,
         validCode:null,
         pidanFile:null,
         editPidanFile:null,
         fileList1: [],
         fileList2: [],
         selectRadio:0
       },
       this.model=target
       this.form.applyStartTime=this.model.applyStartTime
       this.form.editValidCode=this.model.validCode
       this.title=title
       this.flag = flag
       this.visible1 = false
       this.visible3 = false
       this.visible4 = false
       this.visible5 = false
       this.visible6 = false
       if(flag == 1){
         this.visible1 = true
       }
       if(flag == 3){
         this.visible3 = true
       }
       if(flag == 4){
         this.visible4 = true
       }
       if(flag == 5){
         this.visible5 = true
       }
       if(flag == 6){
         this.visible6 = true
       }
     },
    doSubmit(){
      if (this.flag == 1) {
        this.backDo()
      } else if (this.flag == 3) {
        this.uploadPidan()
      } else if (this.flag == 4) {
        this.editPidan()
      } else if (this.flag == 5) {
        this.dealBackApply(1)
      } else if (this.flag == 6) {
        this.dealBackApply(0)
      }
    },
    selectChange(){
       if(this.form.selectRadio == 0){
         this.form.applyStartTime = this.model.validTime
       }else{
       }
    },
    baoxianFileUploaded(data){
      this.form.pidanFile=data
    },
    editBaoxianFileUploaded(data){
      this.form.editPidanFile=data
    },
    backDo(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            backChagne({id:this.model.id,checkInfo:this.form.backCheckInfo})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                  }).catch(err => {
                this.$tip.apiFailed(err)
                 })
          })
    },
    dealBackApply(type){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            dealBackChangeApply({ id: this.model.id, checkInfo: this.form.dealBackInfo, dealBackApply: type })
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    uploadPidan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            uploadChangePidan({id:this.model.id,applyStartTime:this.form.applyStartTime, validCode:this.form.validCode,pidanFile:this.form.pidanFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    editPidan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            editChangePidan({id:this.model.id, checkInfo:this.form.editCheckInfo,validCode:this.form.editValidCode,pidanFile:this.form.editPidanFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
      handleRemove(file, fileList) {
          console.log(file, fileList);
      },
      handlePreview(file) {
          console.log(file);
      },
      handleExceed(files, fileList) {
          this.$message.warning(`当前限制选择 3 ä¸ªæ–‡ä»¶ï¼Œæœ¬æ¬¡é€‰æ‹©äº† ${files.length} ä¸ªæ–‡ä»¶ï¼Œå…±é€‰æ‹©äº† ${files.length + fileList.length} ä¸ªæ–‡ä»¶`);
      },
      beforeRemove(file, fileList) {
          return this.$confirm(`确定移除 ${ file.name }?`);
      },
      successEvent() {
      },
      handleSizeChange(val) {
          console.log(`每页 ${val} æ¡`);
      },
      handleCurrentChange(val) {
          console.log(`当前页: ${val}`);
      },
      handleClick(tab, event) {
          console.log(tab, event);
      },
      onSubmit() {
      }
  }
}
</script>
<style>
</style>
<style lang="scss" scoped>
    .form {
        width: 100%;
        display: flex;
        align-items: center;
        flex-direction: column;
        .form_span {
            width: 100%;
            display: flex;
            align-items: start;
            flex-direction: column;
            margin-bottom: 20px;
            span {
                font-size: 14px;
                &:nth-child(1) {
                    color: black;
                    margin-bottom: 5px;
                }
                &:nth-child(2) {
                    color: #8c939d;
                }
            }
        }
        .form_item {
            width: 100%;
            display: flex;
            align-items: center;
            margin-bottom: 20px;
            &:last-child {
                margin: 0 !important;
            }
            .form_item_label {
                flex-shrink: 0;
                width: 170px;
                color: black;
                font-size: 14px;
                span {
                    color: red;
                    font-size: 14px;
                }
            }
            .form_item_val {
                flex: 1;
                /*height: 40px;*/
                margin-left: 20px;
                textarea {
                    width: 100%;
                    height: 70px;
                    border: 1px solid #cbcbcb;
                    padding: 10px;
                    outline: none;
                    box-sizing: border-box;
                }
                input {
                    width: 100%;
                    height: 40px;
                    outline: none;
                    border-radius: 5px;
                    border: 1px solid #cbcbcb;
                    padding: 0 20px;
                    box-sizing: border-box;
                }
            }
        }
    }
    .desc {
        width: 100%;
        .desc_item {
            width: 100%;
            display: flex;
            flex-direction: column;
            .desc_item_label {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 10px;
                span {
                    font-size: 14px;
                    color: black;
                    margin-right: 30px;
                }
            }
            .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;
            }
            .desc_item_search {
                width: 100%;
                margin-bottom: 20px;
            }
            .desc_item_review {
                width: 100%;
                .desc_item_review_label {
                    font-size: 20px;
                    color: black;
                    font-weight: bold;
                    margin-bottom: 15px;
                }
            }
        }
    }
</style>
company/src/components/business/OperaApplyChangeUnitDetailWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,453 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="desc">
            <div class="desc_item">
                <div class="desc_item_label">
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ apply.companyName }}</span>
                      <span v-if="model.status === 0">保单状态:待签署</span>
                      <span v-if="model.status === 1">保单状态:已签章</span>
                      <span v-if="model.status === 2">保单状态:已上传批单</span>
                      <span v-if="model.status === 3 || model.status === 4">保单状态:退回申请</span>
                      <span v-if="model.status ===5 || model.status === 8">保单状态:已退回</span>
                      <span v-if="model.status ===7">保单状态:已关闭</span>
                        <span>提交时间:{{ model.createDate }}</span>
                    </div>
                  <div class="desc_item_label_right">
                      <template v-if="userInfo.type === 1">
                          <el-button v-if="[0, 2, 3, 10].includes(model.status)" type="danger" @click="$refs.applyReturn.open('申请退回', {id: dataId})">申请退回</el-button>
                          <el-button v-if="model.status == 4" type="primary" @click="$refs.OperaInsuranceApply.open('投保申请', {id: dataId})">再次投保</el-button>
                          <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">签署申请单</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">申请退回</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看申请单</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看批单</el-button>
                          <el-button v-if="model.status == 2" type="primary" @click="goSign">关闭订单</el-button>
                      </template>
                        <template v-else>
                            <el-button type="primary" @click="$refs.ApplyChangeDetails.open('换厂申请详单',apply,model)">导出详单</el-button>
                           <el-button type="primary" v-if="model.status == 0"   @click="goSign">签署申请单</el-button>
                            <el-button v-if="[1,2,4].includes(model.status)" type="primary" @click="viewApplyFile">查看申请单</el-button>
                            <el-button v-if="[2].includes(model.status)" type="primary" @click="viewPidan">查看批单</el-button>
                            <el-button v-if="[1].includes(model.status)" type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('上传批单',model,3)">上传批单</el-button>
                            <el-button  v-if="[3,4].includes(model.status)"  type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('驳回退回申请',model,5)">驳回退回申请</el-button>
                            <el-button  v-if="[0,1,3,4].includes(model.status)" type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                            <el-button  v-if="[2].includes(model.status)"  type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('修改批单',model,4)">修改批单</el-button>
                        </template>
                  </div>
                </div>
                <div class="desc_item_from">
                    <el-table
                        :data="tableData"
                        border
                        style="width: 100%">
                        <el-table-column
                            prop="validCode"
                            align="center"
                            label="批单号">
                        </el-table-column>
                        <el-table-column
                            prop="applyCode"
                            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="applyStartTime"
                          align="center"
                          label="批单生效起期">
                      </el-table-column>
                        <el-table-column
                            prop="changeNum"
                            align="center"
                            label="换厂人数">
                        </el-table-column>
                    </el-table>
                </div>
                <div class="desc_item_from">
                    <el-table
                        :data="list"
                        border
                        style="width: 100%">
                        <el-table-column label="序号">
                            <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
                            label="性别">
                            <template slot-scope="{row}">
                                <span v-if="row.sex === 0">男</span>
                                <span v-else>女</span>
                            </template>
                        </el-table-column>
                        <el-table-column
                            prop="memberIdcardNo"
                            label="身份证号">
                        </el-table-column>
                        <el-table-column
                            prop="oldDuName"
                            label="原派遣单位">
                        </el-table-column>
                        <el-table-column
                            prop="oldWorkTypeName"
                            label="原所属工种">
                        </el-table-column>
                        <el-table-column
                            prop="startTime"
                            label="保险生效起期">
                        </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="endTime"
                          label="保险生效止期">
                      </el-table-column>
                    </el-table>
                    <div class="desc_item_from_page">
                        <el-pagination
                            @current-change="handleCurrentChange"
                            :current-page="currentPage"
                            :page-size="10"
                            layout="total, prev, pager, next, jumper"
                            :total="total">
                        </el-pagination>
                    </div>
                </div>
                <div class="desc_item_review">
                    <div class="desc_item_review_label">审核流程</div>
                  <el-timeline :reverse="reverse">
                    <el-timeline-item
                        v-for="(activity, index) in activities"
                        :key="index">
                      <div style="display: flex; flex-direction: column;">
                                <span style="font-size: 16px; font-weight: 400; color: black;">
                                    {{activity.title}}
                                    <span style="font-size: 16px; font-weight: 400; color: black; margin-left: 10px;"   >
                                       {{activity.content}}
                                    </span>
                                </span>
                        <span style="margin-top: 5px; font-size: 12px; font-weight: 400; color: #999999;">
                                    æ“ä½œå‘˜-{{activity.creatorName}}({{activity.creatorType==1? activity.companyName: "平台端"}}){{activity.createDate}}
                                </span>
                      </div>
                    </el-timeline-item>
                  </el-timeline>
                </div>
            </div>
        </div>
        <ApplyChangeUnitDetails ref="ApplyChangeDetails" @success="successEvent" />
        <OperaApplyChangeUnitCheckWindow ref="OperaApplyChangeCheckWindow" @success="successEvent" />
        <!--    ä¼ä¸šç”³è¯·é€€å›ž    -->
        <applyReturn ref="applyReturn" @success="successEvent" />
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApply ref="OperaInsuranceApply" @success="successEvent" />
        <!--    åŠ å‡ä¿ç”³è¯·    -->
        <additionSubtractionApplication ref="additionSubtractionApplication" @success="successEvent" />
        <!--    æ¢åŽ‚ç”³è¯·    -->
        <factoryChange ref="factoryChange" @success="successEvent" />
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import ApplyChangeUnitDetails from '@/components/business/ApplyChangeUnitDetails'
import OperaApplyChangeUnitCheckWindow from '@/components/business/OperaApplyChangeUnitCheckWindow'
import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
import factoryChange from '@/components/enterprise/factoryChange'
import applyReturn from '@/components/enterprise/applyReturn'
import {
  getDetail,
  getChangeDetail,
  applyChagneDetailPage,
  getChangeUnitSignLink
} from '@/api/business/insuranceApply'
import OperaInsuranceApply from '@/components/enterprise/OperaInsuranceApplyWindow'
import { mapState } from 'vuex'
export default {
  name: 'OperaApplyChangeDetailWindow',
  extends: BaseOpera,
  components: {
      GlobalWindow,
    ApplyChangeUnitDetails,
    OperaApplyChangeUnitCheckWindow,
      applyReturn,
      OperaInsuranceApply,
      additionSubtractionApplication,
      factoryChange
  },
  data () {
    return {
      // è¡¨å•数据
      dataId:null,
      modelId:null,
      apply:{},
      model: {},
      form: {
          id: null,
          editDate: ''
      },
      // éªŒè¯è§„则
      rules: {
      },
      formInline: {
          applyStatus: '',
          duId: '',
          workTypeId: '',
          memberName: '',
          types: ''
      },
      reverse: true,
      radio: 0,
      activities: [],
      tableData: [],
        list: [],
      activeName: '0',
        total: 0,
      currentPage: 1
    }
  },
  created () {
      this.config({
          api: '/business/insuranceApply',
          'field.id': 'id'
      })
  },
    computed: {
      ...mapState(['userInfo'])
    },
  methods: {
     open(title,target){
        this.visible = true;
        this.title = title
        this.dataId = target.applyId
        this.modelId = target.id
        this.getDetail()
        this.getList()
     },
      resetting() {
            this.search()
      },
      search() {
          this.currentPage = 1
          this.getList()
      },
      getList() {
           applyChagneDetailPage({
               capacity: 10,
               page: this.currentPage,
               model: {
                   applyChangId: this.modelId,
                   types:[2]
               }
           }).then(res => {
               this.list = res.records
               this.total = res.total
           })
      },
      handleClick(e) {
        this.activeName = e.index
        this.resetting()
      },
    goSign(){
      getChangeUnitSignLink({id:this.modelId}).then(res => {
        setTimeout(() => {
          window.open(res)
        }, 500);
      }).catch(err => {
       this.$tip.apiFailed(err)
      })
    },
    viewApplyFile(){
       if(this.model.applyUnitFile && this.model.applyUnitFile.fileurlFull){
        window.open(this.model.applyUnitFile.fileurlFull)
       }
    },
    viewPidan(){
      if(this.model.pidanFile && this.model.pidanFile.fileurlFull){
        window.open(this.model.pidanFile.fileurlFull)
      }
    },
    handleSizeChange(val){
        console.log(val)
    },
    handleCurrentChange(val){
        console.log(val)
        this.page = val
        this.getList()
    },
    onSubmit(){
    },
    getDetail(){
      getDetail(this.dataId).then(res => {
        this.apply = res
        console.log(this.tableData)
      }).catch(err => {
      })
      getChangeDetail(this.modelId).then(res => {
        this.model = res
        this.tableData = new Array()
        this.tableData.push(res)
        console.log(this.tableData)
        this.activities = res.applyLogList
      }).catch(err => {
      })
    },
    successEvent(){
       // this.visible=false
      this.getDetail()
      this.$emit('success')
    }
  }
}
</script>
<style>
</style>
<style lang="scss" scoped>
    .form {
        width: 100%;
        display: flex;
        align-items: center;
        flex-direction: column;
        .form_span {
            width: 100%;
            display: flex;
            align-items: start;
            flex-direction: column;
            margin-bottom: 20px;
            span {
                font-size: 14px;
                &:nth-child(1) {
                    color: black;
                    margin-bottom: 5px;
                }
                &:nth-child(2) {
                    color: #8c939d;
                }
            }
        }
        .form_item {
            width: 100%;
            display: flex;
            align-items: center;
            margin-bottom: 20px;
            &:last-child {
                margin: 0 !important;
            }
            .form_item_label {
                flex-shrink: 0;
                width: 170px;
                color: black;
                font-size: 14px;
                span {
                    color: red;
                    font-size: 14px;
                }
            }
            .form_item_val {
                flex: 1;
                /*height: 40px;*/
                margin-left: 20px;
                textarea {
                    width: 100%;
                    height: 70px;
                    border: 1px solid #cbcbcb;
                    padding: 10px;
                    outline: none;
                    box-sizing: border-box;
                }
                input {
                    width: 100%;
                    height: 40px;
                    outline: none;
                    border-radius: 5px;
                    border: 1px solid #cbcbcb;
                    padding: 0 20px;
                    box-sizing: border-box;
                }
            }
        }
    }
    .desc {
        width: 100%;
        .desc_item {
            width: 100%;
            display: flex;
            flex-direction: column;
            .desc_item_label {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 10px;
                span {
                    font-size: 14px;
                    color: black;
                    margin-right: 30px;
                }
            }
            .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;
            }
            .desc_item_search {
                width: 100%;
                margin-bottom: 20px;
            }
            .desc_item_review {
                width: 100%;
                .desc_item_review_label {
                    font-size: 20px;
                    color: black;
                    font-weight: bold;
                    margin-bottom: 15px;
                }
            }
        }
    }
</style>
company/src/components/business/OperaInsuranceApplyCheckWindow.vue
@@ -130,7 +130,7 @@
} from "@/api/business/insuranceApply";
import UploadFile from "@/components/common/UploadFile";
export default {
  name: 'OperaInsuranceApplyCheckWindow',
  name: 'OperaChangeApplyCheckWindow',
  extends: BaseOpera,
  components: {UploadFile, GlobalWindow },
  data () {
@@ -293,7 +293,7 @@
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            uploadBaoxiandan({id:this.model.id,startTime:this.form.startTime,checkInfo:this.form.backCheckInfo,code:this.form.code,baoxiandanFile:this.form.baoxianFile})
            uploadBaoxiandan({id:this.model.id,startTime:this.form.startTime,code:this.form.code,baoxiandanFile:this.form.baoxianFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
@@ -307,20 +307,7 @@
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            editBaoxiandan({id:this.model.id, checkInfo:this.form.backCheckInfo,code:this.form.editCode,baoxiandanFile:this.form.editBaoxianFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
                }).catch(err => {
                  this.$tip.apiFailed(err)
                })
          })
    },
    backeditBaoxiandan(){
      this.$dialog.messageConfirm('确认进行该操作吗?')
          .then(() => {
            this.isWorking = true
            editBaoxiandan({id:this.model.id,checkInfo:this.form.backCheckInfo})
            editBaoxiandan({id:this.model.id, checkInfo:this.form.editCheckInfo,code:this.form.editCode,baoxiandanFile:this.form.editBaoxianFile})
                .then(response => {
                  this.visible = false
                  this.$emit('success')
company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -8,10 +8,10 @@
    >
        <div class="desc">
            <div class="desc_item">
                <div class="desc_item_label" v-if="model.statusCollect === 2 || model.statusCollect === 3">
                <div class="desc_item_label" v-if="userInfo.type === 1 &&(model.statusCollect === 2 || model.statusCollect === 3)">
                    <div class="desc_item_label_left">
                        <span>保险到期还有 <b style="color: #F95601;">{{model.loseEfficacyDays ? model.loseEfficacyDays : '-'}}</b> å¤©</span>
                        <el-button type="primary" v-if="model.statusCollect === 2 || model.statusCollect === 3" @click="$refs.OperaInsuranceApply.open('投保申请', { id: dataId })">一键续保</el-button>
                        <el-button type="primary" v-if="model.statusCollect === 2 || model.statusCollect === 3" @click="$refs.OperaInsuranceApply.open('投保申请', { id: dataId })">在线签署</el-button>
                        <el-button type="primary" v-if="model.statusCollect === 2" @click="$refs.additionSubtractionApplication.open('加减保申请', { id: dataId })">加减保申请</el-button>
                        <el-button type="primary" v-if="model.statusCollect === 2" @click="$refs.factoryChange.open('换厂申请', { id: dataId })">换厂申请</el-button>
                    </div>
@@ -24,24 +24,22 @@
                    </div>
                  <div class="desc_item_label_right">
                      <template v-if="userInfo.type === 1">
                          <el-button v-if="[0, 2, 3, 10].includes(model.status)" type="danger" @click="$refs.applyReturn.open('申请退回', {id: dataId})">申请退回</el-button>
                          <el-button v-if="model.status == 4" type="primary" @click="$refs.OperaInsuranceApply.open('投保申请', {id: dataId})">再次投保</el-button>
                          <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">导出详单</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">查看投保单</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
                          <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">签署申请单</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">申请退回</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">再次投保</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">关闭订单</el-button>
                          <el-button v-if="model.status == 2" type="primary" @click="goSign">签署投保单</el-button>
                      </template>
                        <template v-else>
                      <template v-else>
                            <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">导出详单</el-button>
                            <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">查看投保单</el-button>
                            <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
                            <el-button v-if="model.status == 10" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('上传投保单',model,2)">上传投保单</el-button>
                            <el-button v-if="model.status == 3" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('上传保险单',model,3)">上传保险单</el-button>
                            <el-button  v-if="model.status == 6 || model.status == 7|| model.status == 8" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('驳回退回申请',model,5)">驳回退回申请</el-button>
                            <el-button v-if="model.status == 0" type="primary" @click="$refs.InsuranceDetails.open('投保审核',model,1)">投保审核</el-button>
                            <el-button v-if="model.status != 5 && model.status != 4 && model.status != 1" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                            <el-button v-if="model.status == 5" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                        </template>
                        <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">查看投保单</el-button>
                        <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
                        <el-button v-if="model.status == 10" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('上传投保单',model,2)">上传投保单</el-button>
                        <el-button v-if="model.status == 3" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('上传保险单',model,3)">上传保险单</el-button>
                        <el-button  v-if="model.status == 6 || model.status == 7|| model.status == 8" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('驳回退回申请',model,5)">驳回退回申请</el-button>
                        <el-button v-if="model.status != 5 && model.status != 4 && model.status != 1" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('退回投保',model,1)">退回投保</el-button>
                        <el-button v-if="model.status == 5" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                      </template>
                  </div>
                </div>
                <div class="desc_item_from">
@@ -50,7 +48,7 @@
                        border
                        style="width: 100%">
                        <el-table-column
                            prop="applyCode"
                            prop="code"
                            align="center"
                            label="保单号">
                        </el-table-column>
@@ -220,14 +218,23 @@
                </div>
                <div class="desc_item_review">
                    <div class="desc_item_review_label">审核流程</div>
                    <el-timeline :reverse="reverse">
                        <el-timeline-item
                            v-for="(activity, index) in activities"
                            :key="index"
                            :timestamp="activity.createDate">
                            {{activity.title}}
                        </el-timeline-item>
                    </el-timeline>
                  <el-timeline :reverse="reverse">
                    <el-timeline-item
                        v-for="(activity, index) in activities"
                        :key="index">
                      <div style="display: flex; flex-direction: column;">
                                <span style="font-size: 16px; font-weight: 400; color: black;">
                                    {{activity.title}}
                                    <span style="font-size: 16px; font-weight: 400; color: black; margin-left: 10px;" v-if="activity.objType === 5 || activity.objType === 6 || activity.objType === 1 || activity.objType === 2">
                                       æäº¤æ„è§ï¼š{{activity.content}}
                                    </span>
                                </span>
                        <span style="margin-top: 5px; font-size: 12px; font-weight: 400; color: #999999;">
                                    æ“ä½œå‘˜-{{activity.creatorName}}({{activity.creatorType==1? activity.companyName: "平台端"}}){{activity.createDate}}
                                </span>
                      </div>
                    </el-timeline-item>
                  </el-timeline>
                </div>
            </div>
        </div>
@@ -476,16 +483,23 @@
      },
    goSign(){
      getSignLink(this.dataId).then(res => {
        window.open(res)
        setTimeout(() => {
          window.open(res)
        }, 500);
      }).catch(err => {
       this.$tip.apiFailed(err)
      })
    },
    viewToubaodan(){
       if(this.model.toubaodanSignedFile && this.model.toubaodanSignedFile.fileurlFull){
        window.open(this.model.toubaodanSignedFile.fileurlFull)
         setTimeout(() => {
           window.open(this.model.toubaodanSignedFile.fileurlFull)
         }, 500);
       } else if(this.model.toubaodanFile && this.model.toubaodanFile.fileurlFull){
         window.open(this.model.toubaodanFile.fileurlFull)
         setTimeout(() => {
           window.open(this.model.toubaodanFile.fileurlFull)
             },500)
       }
    },
    viewBaoxiandan(){
@@ -515,7 +529,8 @@
      })
    },
    successEvent(){
       this.visible=false
       // this.visible=false
      this.getDetail()
      this.$emit('success')
    }
  }
company/src/components/business/applyChangeDetails.vue
ÎļþÒÑɾ³ý
company/src/components/common/UploadFile.vue
@@ -33,12 +33,14 @@
  },
  data() {
    return {
      fileList:null,
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload?folder='+this.uploadData.folder
    }
  },
  methods: {
    // ä¸Šä¼ å›¾ç‰‡
    handleExceed(){},
    handleFileSuccess(res, file) {
      if (res.code == 200) {
        let { data } = res
company/src/components/enterprise/add_subtractDetails.vue
@@ -1,6 +1,7 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
company/src/views/business/applyChange.vue
@@ -1,126 +1,170 @@
<template>
    <TableLayout :permissions="['business:applychange:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="保单状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择" @change="search">
                    <el-option label="待签署" value="0"></el-option>
                    <el-option label="已签章 " value="1"></el-option>
                    <el-option label="已上传批单" value="2"></el-option>
                    <el-option label="退回申请" value="3"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="投保企业" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
                    <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="保险方案" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
                    <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="提交日期" prop="status">
                <el-date-picker
                    v-model="searchForm.status"
                    type="daterange"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
                <el-button @click="$refs.operaApplyChangeWindow.open('加减保详情')">查看详情</el-button>
            </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="status" label="保单状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.status === 0">待签署</span>
                        <span v-if="row.status === 1">已签章</span>
                        <span v-if="row.status === 2">已上传批单</span>
                        <span v-if="row.status === 3">退回申请</span>
                    </template>
                </el-table-column>
                <el-table-column prop="code" label="投保企业" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="关联保单号" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="保险方案" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="加保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="减保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="费用变更" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="提交时间" min-width="100px"></el-table-column>
<!--                v-if="containPermissions(['business:applychange:update', 'business:applychange:delete'])"-->
                <el-table-column
                    label="操作"
                    min-width="120"
                    fixed="right"
                >
                    <template slot-scope="{row}">
<!--                        v-permissions="['business:applychange:update']"-->
                        <el-button type="text" @click="$refs.operaApplyChangeWindow.open('加减保详情', row)" icon="el-icon-edit">查看详情</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaApplyChangeWindow ref="operaApplyChangeWindow" @success="handlePageChange"/>
    </TableLayout>
  <TableLayout :permissions="['business:applychange:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="保单状态" prop="status">
        <el-select v-model="searchForm.status" placeholder="请选择" @change="search">
          <el-option label="全部" value=""></el-option>
          <el-option label="待签署" value="0"></el-option>
          <el-option label="待审核" value="1"></el-option>
          <el-option label="已生效" value="2"></el-option>
          <el-option label="申请退回" value="3"></el-option>
          <!--                    3 4 éƒ½æ˜¯é€€å›žç”³è¯·ä¸­-->
          <el-option label="已退回" value="5"></el-option>
          <el-option label="已关闭" value="6"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="投保企业" prop="companyId">
        <el-select v-model="searchForm.companyId" placeholder="请选择" @change="search">
          <el-option
              v-for="item in companyList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="保险方案" prop="baseSolutionsId">
        <el-select v-model="searchForm.baseSolutionsId" placeholder="请选择" @change="search">
          <el-option
              v-for="item in solutionList"
              :key="item.baseId"
              :label="item.name"
              :value="item.baseId">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="提交日期" prop="status">
        <el-date-picker
            @change="changeTime"
            v-model="searchForm.time"
            type="daterange"
            value-format="yyyy-MM-dd"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <el-table
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
      >
        <el-table-column label="序号" width="80px">
          <template slot-scope="scope">
            <span>{{scope.$index + 1}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="status" label="保单状态" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.status === 0">待签署</span>
            <span v-if="row.status === 1">已签章</span>
            <span v-if="row.status === 2">已上传批单</span>
            <span v-if="row.status === 3 || row.status === 4">退回申请</span>
            <span v-if="row.status ===5 || row.status === 8">已退回</span>
            <span v-if="row.status ===7">已关闭</span>
          </template>
        </el-table-column>
        <el-table-column prop="companyName" label="投保企业" min-width="100px"></el-table-column>
        <el-table-column prop="applyCode" label="关联保单号" min-width="100px"></el-table-column>
        <el-table-column prop="solutionsName" label="保险方案" min-width="100px"></el-table-column>
        <el-table-column prop="addNum" label="加保人数(人)" min-width="100px"></el-table-column>
        <el-table-column prop="delNum" label="减保人数(人)" min-width="100px"></el-table-column>
        <el-table-column prop="fee" label="费用变更" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="提交时间" min-width="100px"></el-table-column>
        <el-table-column
            label="操作"
            min-width="120"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaApplyChangeDetailWindow.open('加减保详情', row)">查看详情</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- è¯¦æƒ… -->
    <OperaApplyChangeDetailWindow ref="operaApplyChangeDetailWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
    import BaseTable from '@/components/base/BaseTable'
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import OperaApplyChangeWindow from '@/components/business/OperaApplyChangeWindow'
    export default {
        name: 'ApplyChange',
        extends: BaseTable,
        components: { TableLayout, Pagination, OperaApplyChangeWindow },
        data () {
            return {
                // æœç´¢
                searchForm: {
                    status: ''
                }
            }
        },
        created () {
            this.config({
                module: '加减保换厂申请信息表',
                api: '/business/applyChange',
                'field.id': 'id',
                'field.main': 'id'
            })
            this.search()
        }
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaApplyChangeDetailWindow from '@/components/business/OperaApplyChangeDetailWindow'
import {all as solutionAll, all} from '@/api/business/solutions'
import {pageAll as companyAll} from "@/api/business/company";
export default {
  name: 'add_subtract',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaApplyChangeDetailWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        status: '',
        type: '0',
        solutionsId: '',
        createDateE: '',
        createDateS: '',
        time: []
      },
      solutionList:[],
      companyList:[]
    }
  },
  created () {
    this.config({
      module: '加减保换厂申请信息表',
      api: '/business/applyChange',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
    this.loadSelectList()
  },
  methods: {
    loadSelectList() {
      solutionAll({dataType:2}).then(res => {
        this.solutionList = res
      }).catch(err => {
      })
      companyAll({}).then(res => {
        this.companyList = res
      }).catch(err => {
      })
    },
    changeTime(e) {
      if (e.length > 0) {
        this.searchForm.createDateS = e[0]
        this.searchForm.createDateE = e[1]
      } else {
        this.searchForm.createDateS = ''
        this.searchForm.createDateE = ''
      }
      this.search()
    },
    reset() {
      this.searchForm.createDateS = ''
      this.searchForm.createDateE = ''
      this.searchForm.time = []
      this.$refs.searchForm.resetFields();
      this.search()
    }
  }
}
</script>
company/src/views/business/insuranceApply.vue
@@ -18,9 +18,9 @@
                <el-select v-model="searchForm.companyId" placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in companyList"
                        :key="item.id"
                        :key="item.baseId"
                        :label="item.name"
                        :value="item.id">
                        :value="item.baseId">
                    </el-option>
                </el-select>
            </el-form-item>
@@ -108,7 +108,7 @@
            searchForm: {
                createTimeS: '',
                createTimeE: '',
                solutionId: '',
                baseSolutionId: '',
                companyId: '',
                statusCollect: ''
            },
@@ -131,7 +131,7 @@
        //   this.search()
        // },
        loadSelectList() {
          solutionAll({dataType:0}).then(res => {
          solutionAll({dataType:2}).then(res => {
              this.solutionList = res
            }).catch(err => {
            })
company/src/views/business/switchCourt.vue
@@ -1,126 +1,170 @@
<template>
    <TableLayout :permissions="['business:applychange:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="保单状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择" @change="search">
                    <el-option label="待签署" value="0"></el-option>
                    <el-option label="已签章 " value="1"></el-option>
                    <el-option label="已上传批单" value="2"></el-option>
                    <el-option label="退回申请" value="3"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="投保企业" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
                    <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="保险方案" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
                    <el-option
                        v-for="item in options"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="提交日期" prop="status">
                <el-date-picker
                    v-model="searchForm.status"
                    type="daterange"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
                <el-button @click="$refs.operaApplyChangeWindow.open('加减保详情')">查看详情</el-button>
            </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <el-table
                    v-loading="isWorking.search"
                    :data="tableData.list"
                    stripe
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="status" label="保单状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.status === 0">待签署</span>
                        <span v-if="row.status === 1">已签章</span>
                        <span v-if="row.status === 2">已上传批单</span>
                        <span v-if="row.status === 3">退回申请</span>
                    </template>
                </el-table-column>
                <el-table-column prop="code" label="投保企业" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="关联保单号" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="保险方案" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="加保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="减保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="费用变更" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="提交时间" min-width="100px"></el-table-column>
                <!--                v-if="containPermissions(['business:applychange:update', 'business:applychange:delete'])"-->
                <el-table-column
                    label="操作"
                    min-width="120"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <!--                        v-permissions="['business:applychange:update']"-->
                        <el-button type="text" @click="$refs.operaApplyChangeWindow.open('加减保详情', row)" icon="el-icon-edit">查看详情</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaSwitchCourtWindow ref="operaApplyChangeWindow" @success="handlePageChange"/>
    </TableLayout>
  <TableLayout :permissions="['business:applychange:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="保单状态" prop="status">
        <el-select v-model="searchForm.status" placeholder="请选择" @change="search">
          <el-option label="全部" value=""></el-option>
          <el-option label="待签署" value="0"></el-option>
          <el-option label="待审核" value="1"></el-option>
          <el-option label="已生效" value="2"></el-option>
          <el-option label="申请退回" value="3"></el-option>
          <!--                    3 4 éƒ½æ˜¯é€€å›žç”³è¯·ä¸­-->
          <el-option label="已退回" value="5"></el-option>
          <el-option label="已关闭" value="6"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="投保企业" prop="companyId">
        <el-select v-model="searchForm.companyId" placeholder="请选择" @change="search">
          <el-option
              v-for="item in companyList"
              :key="item.id"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="保险方案" prop="baseSolutionsId">
        <el-select v-model="searchForm.baseSolutionsId" placeholder="请选择" @change="search">
          <el-option
              v-for="item in solutionList"
              :key="item.baseId"
              :label="item.name"
              :value="item.baseId">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="提交日期" prop="status">
        <el-date-picker
            @change="changeTime"
            v-model="searchForm.time"
            type="daterange"
            value-format="yyyy-MM-dd"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <el-table
          v-loading="isWorking.search"
          :data="tableData.list"
          stripe
      >
        <el-table-column label="序号" width="80px">
          <template slot-scope="scope">
            <span>{{scope.$index + 1}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="status" label="保单状态" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.status === 0">待签署</span>
            <span v-if="row.status === 1">已签章</span>
            <span v-if="row.status === 2">已上传批单</span>
            <span v-if="row.status === 3 || row.status === 4">退回申请</span>
            <span v-if="row.status ===5 || row.status === 8">已退回</span>
            <span v-if="row.status ===7">已关闭</span>
          </template>
        </el-table-column>
        <el-table-column prop="companyName" label="投保企业" min-width="100px"></el-table-column>
        <el-table-column prop="applyCode" label="关联保单号" min-width="100px"></el-table-column>
        <el-table-column prop="solutionsName" label="保险方案" min-width="100px"></el-table-column>
        <el-table-column prop="addNum" label="加保人数(人)" min-width="100px"></el-table-column>
        <el-table-column prop="delNum" label="减保人数(人)" min-width="100px"></el-table-column>
        <el-table-column prop="fee" label="费用变更" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="提交时间" min-width="100px"></el-table-column>
        <el-table-column
            label="操作"
            min-width="120"
            fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaApplyChangeDetailWindow.open('加减保详情', row)">查看详情</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
          @size-change="handleSizeChange"
          @current-change="handlePageChange"
          :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- è¯¦æƒ… -->
    <OperaApplyChangeUnitDetailWindow ref="operaApplyChangeDetailWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
<script>
    import BaseTable from '@/components/base/BaseTable'
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import OperaSwitchCourtWindow from '@/components/business/OperaSwitchCourtWindow'
    export default {
        name: 'switchCourt',
        extends: BaseTable,
        components: { TableLayout, Pagination, OperaSwitchCourtWindow },
        data () {
            return {
                // æœç´¢
                searchForm: {
                    status: ''
                }
            }
        },
        created () {
            this.config({
                module: '加减保换厂申请信息表',
                api: '/business/applyChange',
                'field.id': 'id',
                'field.main': 'id'
            })
            this.search()
        }
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
import {all as solutionAll, all} from '@/api/business/solutions'
import {pageAll as companyAll} from "@/api/business/company";
export default {
  name: 'add_subtract',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaApplyChangeUnitDetailWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        status: '',
        type: '1',
        solutionsId: '',
        createDateE: '',
        createDateS: '',
        time: []
      },
      solutionList:[],
      companyList:[]
    }
  },
  created () {
    this.config({
      module: '加减保换厂申请信息表',
      api: '/business/applyChange',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
    this.loadSelectList()
  },
  methods: {
    loadSelectList() {
      solutionAll({dataType:2}).then(res => {
        this.solutionList = res
      }).catch(err => {
      })
      companyAll({}).then(res => {
        this.companyList = res
      }).catch(err => {
      })
    },
    changeTime(e) {
      if (e.length > 0) {
        this.searchForm.createDateS = e[0]
        this.searchForm.createDateE = e[1]
      } else {
        this.searchForm.createDateS = ''
        this.searchForm.createDateE = ''
      }
      this.search()
    },
    reset() {
      this.searchForm.createDateS = ''
      this.searchForm.createDateE = ''
      this.searchForm.time = []
      this.$refs.searchForm.resetFields();
      this.search()
    }
  }
}
</script>
company/src/views/enterprise/add_subtract.vue
@@ -14,16 +14,16 @@
                    <el-option label="已关闭" value="6"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="保险方案" prop="solutionsId">
                <el-select v-model="searchForm.solutionsId" placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in list"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id">
                    </el-option>
                </el-select>
            </el-form-item>
          <el-form-item label="保险方案" prop="baseSolutionsId">
            <el-select v-model="searchForm.baseSolutionsId" placeholder="请选择" @change="search">
              <el-option
                  v-for="item in solutionList"
                  :key="item.baseId"
                  :label="item.name"
                  :value="item.baseId">
              </el-option>
            </el-select>
          </el-form-item>
            <el-form-item label="提交日期" prop="status">
                <el-date-picker
                    @change="changeTime"
@@ -43,7 +43,7 @@
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:applychange:create']">
                <li><el-button type="primary" @click="$refs.operaApplyChangeWindow.open('加减保详情')" v-permissions="['business:applychange:create']">新建</el-button></li>
                <li><el-button type="primary" @click="$refs.operaApplyChangeWindow.open('新建')" v-permissions="['business:applychange:create']">新建</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
@@ -63,12 +63,12 @@
                        <span v-if="row.status === 3">退回申请</span>
                    </template>
                </el-table-column>
                <el-table-column prop="code" label="投保企业" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="关联保单号" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="保险方案" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="加保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="减保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="费用变更" min-width="100px"></el-table-column>
                <el-table-column prop="companyName" label="投保企业" min-width="100px"></el-table-column>
                <el-table-column prop="applyCode" label="关联保单号" min-width="100px"></el-table-column>
                <el-table-column prop="solutionsName" label="保险方案" min-width="100px"></el-table-column>
                <el-table-column prop="addNum" label="加保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="delNum" label="减保人数(人)" min-width="100px"></el-table-column>
                <el-table-column prop="fee" label="费用变更" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="提交时间" min-width="100px"></el-table-column>
                <el-table-column
                    label="操作"
@@ -97,7 +97,7 @@
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import add_subtractDetails from '@/components/enterprise/add_subtractDetails'
    import { all } from '@/api/business/solutions'
    import {all as solutionAll, all} from '@/api/business/solutions'
    export default {
        name: 'add_subtract',
        extends: BaseTable,
@@ -108,12 +108,12 @@
                searchForm: {
                    status: '',
                    type: '0',
                    solutionsId: '',
                    baseSolutionsId: '',
                    createDateE: '',
                    createDateS: '',
                    time: []
                },
                list: []
                solutionList: []
            }
        },
        created () {
@@ -128,10 +128,10 @@
        },
        methods: {
            getAll() {
                all()
                    .then(res => {
                        this.list = res
                    })
              solutionAll({dataType:2}).then(res => {
                this.solutionList = res
              }).catch(err => {
              })
            },
            changeTime(e) {
                if (e.length > 0) {
company/src/views/enterprise/insuranceApply.vue
@@ -18,9 +18,9 @@
                <el-select v-model="searchForm.baseSolutionId" placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in solutionList"
                        :key="item.id"
                        :key="item.baseId"
                        :label="item.name"
                        :value="item.id">
                        :value="item.baseId">
                    </el-option>
                </el-select>
            </el-form-item>
@@ -124,7 +124,7 @@
    },
    methods:{
        loadSelectList() {
          solutionAll({ dataType:0 }).then(res => {
          solutionAll({ dataType:2}).then(res => {
              this.solutionList = res
            })
        }
company/src/views/enterprise/switchCourt.vue
@@ -48,7 +48,7 @@
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:applychange:create']">
                <li><el-button type="primary" @click="$refs.operaApplyChangeWindow.open('加减保详情')" v-permissions="['business:applychange:create']">新建</el-button></li>
                <li><el-button type="primary" @click="$refs.operaApplyChangeWindow.open('新建')" v-permissions="['business:applychange:create']">新建</el-button></li>
            </ul>
            <el-table
                    v-loading="isWorking.search"
@@ -102,6 +102,8 @@
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import add_subtractDetails from '@/components/enterprise/add_subtractDetails'
    import {all as solutionAll} from "@/api/business/solutions";
    import {pageAll as companyAll} from "@/api/business/company";
    export default {
        name: 'switchCourt',
        extends: BaseTable,
@@ -124,6 +126,22 @@
                'field.main': 'id'
            })
            this.search()
        },
      methods:{
        // handlePageChange() {
        //   this.search()
        // },
        loadSelectList() {
          solutionAll({dataType:2}).then(res => {
            this.solutionList = res
          }).catch(err => {
          })
          companyAll({}).then(res => {
            this.companyList = res
          }).catch(err => {
          })
        }
      }
    }
</script>
server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -86,7 +86,7 @@
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:applychange:exportExcel")
    public void exportExcel (@RequestBody PageWrap<ApplyChange> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).export(applyChangeService.findPage(pageWrap).getRecords(), "加减保换厂申请信息表", response);
        ExcelExporter.build(ApplyChange.class).export(applyChangeService.findPageForCompany(pageWrap).getRecords(), "加减保换厂申请信息表", response);
    }
    @ApiOperation("导出加减保详情单")
    @PostMapping("/exportJiajianBaoExcel")
server/platform/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java
@@ -6,6 +6,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.business.dto.ApplyDetailPageDTO;
import com.doumee.dao.business.model.ApplyChagneDetail;
import com.doumee.service.business.ApplyChagneDetailService;
import io.swagger.annotations.Api;
@@ -67,20 +68,26 @@
        return ApiResponse.success(null);
    }
//
//    @ApiOperation("分页查询")
//    @PostMapping("/page")
//    @RequiresPermissions("business:applychagnedetail:query")
//    public ApiResponse<PageData<ApplyChagneDetail>> findPage (@RequestBody PageWrap<ApplyChagneDetail> pageWrap) {
//        return ApiResponse.success(applyChagneDetailService.findPage(pageWrap));
//    }
@ApiOperation("分页查询")
@PostMapping("/page")
@RequiresPermissions("business:applychagnedetail:query")
public ApiResponse<PageData<ApplyChagneDetail>> findPage (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap) {
    return ApiResponse.success(applyChagneDetailService.findPageForCompany(pageWrap));
}
/*    @ApiOperation("导出Excel")
    @ApiOperation("分页查询")
    @PostMapping("/list")
    @RequiresPermissions("business:applychagnedetail:query")
    public ApiResponse<List<ApplyChagneDetail>> findList (@RequestBody ApplyChagneDetail  pageWrap) {
        return ApiResponse.success(applyChagneDetailService.findList(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:applychagnedetail:exportExcel")
    public void exportExcel (@RequestBody PageWrap<ApplyChagneDetail> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(ApplyChagneDetail.class).export(applyChagneDetailService.findPage(pageWrap).getRecords(), "加减保换厂申请明细信息表", response);
    }*/
    public void exportExcel (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap, HttpServletResponse response) {
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:applychagnedetail:query")
server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -62,11 +62,22 @@
    @PreventRepeat
    @ApiOperation("平台修改批单")
    @PostMapping("/editPidan")
    @RequiresPermissions("business:applychange:editPidan")
    @RequiresPermissions("business:applychange:uploadPidan")
    public ApiResponse editPidan(@RequestBody ApplyChange applyChange) {
        return ApiResponse.success(applyChangeService.editPidan(applyChange));
    }
    @ApiOperation("获取加减保签章地址")
    @PostMapping("/getJiajianBaoSignLink")
    @RequiresPermissions("business:applychange:sign")
    public ApiResponse<String> getSignLinkJiajiabao (@RequestBody ApplyChange model, HttpServletResponse response) {
        return ApiResponse.success( applyChangeService.getSignLinkJiajiabao(model));
    }
    @ApiOperation("获取缓存申请签章地址")
    @PostMapping("/getChangeUnitSignLink")
    @RequiresPermissions("business:applychange:sign")
    public ApiResponse<String> getChangeUnitSignLink (@RequestBody ApplyChange model, HttpServletResponse response) {
        return ApiResponse.success( applyChangeService.getSignLinkChangeUnit(model));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:applychange:delete")
@@ -100,25 +111,25 @@
    @PostMapping("/page")
    @RequiresPermissions("business:applychange:query")
    public ApiResponse<PageData<ApplyChange>> findPage (@RequestBody PageWrap<ApplyChange> pageWrap) {
        return ApiResponse.success(applyChangeService.findPage(pageWrap));
        return ApiResponse.success(applyChangeService.findPageForCompany(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:applychange:exportExcel")
    public void exportExcel (@RequestBody PageWrap<ApplyChange> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).export(applyChangeService.findPage(pageWrap).getRecords(), "加减保换厂申请信息表", response);
        ExcelExporter.build(ApplyChange.class).export(applyChangeService.findPageForCompany(pageWrap).getRecords(), "加减保换厂申请信息表", response);
    }
    @ApiOperation("导出加减保详情单")
    @PostMapping("/exportJiajianBaoExcel")
    @RequiresPermissions("business:insuranceapply:exportExcel")
    @RequiresPermissions("business:applychange:exportExcel")
    public void exportJiajianBaoExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcel(applyChangeService.exportJiajianBaoExcel(model),   response);
    }
    @ApiOperation("导出换厂申请详情单")
    @PostMapping("/exportChangeUnitExcel")
    @RequiresPermissions("business:insuranceapply:exportExcel")
    @RequiresPermissions("business:applychange:exportExcel")
    public void exportChangeUnitExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
        ExcelExporter.build(ApplyChange.class).exportChangeUnitExcel(applyChangeService.exportChangeUnitExcel(model),   response);
    }
@@ -127,7 +138,7 @@
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:applychange:query")
    public ApiResponse findById(@PathVariable Integer id) {
        return ApiResponse.success(applyChangeService.findById(id));
    public ApiResponse<ApplyChange> findById(@PathVariable Integer id) {
        return ApiResponse.success(applyChangeService.findDetail(id));
    }
}
server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -48,7 +48,7 @@
    /**
     * @throws Exception
     */
    @Scheduled(fixedDelay= 60*1000*60,initialDelay = 30000)
    @Scheduled(fixedDelay= 60*1000*2 ,initialDelay = 30000)
    public void deal() throws Exception {
        log.info("==============定时查询企业电子签签署状态=======start======");
        insuranceApplyService.dealWaitSignedData();
server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -256,6 +256,9 @@
     * é…ç½®æ•°æ®å•元格
     */
    private void configDataCell (SXSSFWorkbook workbook, Cell cell ) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -274,6 +277,9 @@
     * é…ç½®æ•°æ®å•元格
     */
    private void configDataCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(columnConfig.align());
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -300,6 +306,9 @@
     * é…ç½®åˆ—头单元格
     */
    private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(columnConfig.align());
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -322,6 +331,9 @@
     * é…ç½®åˆ—头单元格
     */
    private void configFirstCell (SXSSFWorkbook workbook, Cell cell ) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -338,6 +350,9 @@
        cell.setCellStyle(style);
    }
    private void configTitleCell (SXSSFWorkbook workbook, Cell cell ) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -357,6 +372,9 @@
     * é…ç½®åˆ—头单元格
     */
    private void configInfoCell (SXSSFWorkbook workbook, Cell cell,HorizontalAlignment p ) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(p);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -368,6 +386,7 @@
        font.setFontHeightInPoints((short)12);
        font.setBold(true);
        style.setFont(font);
        style.setWrapText(true);
        // è®¾ç½®è¾¹æ¡†
        configCellBorder(style);
        cell.setCellStyle(style);
@@ -376,6 +395,9 @@
     * é…ç½®åˆ—头单元格
     */
    private void configEndCell (SXSSFWorkbook workbook, Cell cell ) {
        if(cell == null){
            return;
        }
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.RIGHT);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -585,7 +607,7 @@
            response.setContentType("application/octet-stream");
            response.setHeader("eva-opera-type", "download");
            response.setHeader("eva-download-filename", encodeFileName);
            this.exportJiajianBaoExcelDo(model,"加减保申请表_", response.getOutputStream());
            this.exportJiajianBaoExcelDo(model,"加减保申请表", response.getOutputStream());
        } catch (IOException e) {
            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        }
@@ -602,13 +624,19 @@
        try {
            sxssfWorkbook = new SXSSFWorkbook();
            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
            for (int i = 0; i < 12; i++) {
                sheet.setColumnWidth(i, ((i==3|| i== 5 || i==9|| i==11)?16:8) * 2 * 256);
            }
            sheet.createFreezePane(0, 1);
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,8));
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,11));
            Row title = sheet.createRow(0);
            title.setHeight((short) 1000);
            title.setHeight((short) 800);
            Cell c = title.createCell(0);
            c.setCellValue(sheetName);
            configFirstCell(sxssfWorkbook,c);
            for (int i = 0; i < 12; i++) {
//                title.createCell(i).setCellValue(i==0?sheetName:"");
                configTitleCell(sxssfWorkbook,title.getCell(i));
            }
            Row header1 = sheet.createRow(1);
            header1.createCell(0).setCellValue("投保企业");
            header1.createCell(3).setCellValue("保险方案");
@@ -624,7 +652,6 @@
            sheet.addMergedRegion(new CellRangeAddress(1  ,1,0,2));
            sheet.addMergedRegion(new CellRangeAddress(1  ,1,6,8));
            Row header2 = sheet.createRow(2);
            header2.createCell(0).setCellValue(data.getCompanyName());
            header2.createCell(3).setCellValue(data.getSolutionsName());
@@ -636,14 +663,16 @@
            header2.createCell(11).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getValidTime()));
            sheet.addMergedRegion(new CellRangeAddress(2 ,2,0,2));
            sheet.addMergedRegion(new CellRangeAddress(2  ,2,6,8));
            //空白行
            for (int i = 0; i < 12; i++) {
                configDataCell(sxssfWorkbook,   header2.getCell(i));
            }
            Row header3 = sheet.createRow(3);
            header2.createCell(0).setCellValue("加保人员");
            header2.createCell(6).setCellValue("减保人员");
            header3.createCell(0).setCellValue("加保人员");
            header3.createCell(6).setCellValue("减保人员");
            sheet.addMergedRegion(new CellRangeAddress(3  ,3,0,5));
            sheet.addMergedRegion(new CellRangeAddress(3  ,3,6,11));
            for (int i = 0; i < 12; i++) {
                configFirstCell(sxssfWorkbook,header2.getCell(i));
                configFirstCell(sxssfWorkbook,   header3.getCell(i));
            }
            Row header4 = sheet.createRow(4);
            header4.createCell(0).setCellValue("序号");
@@ -671,17 +700,28 @@
                    header5.createCell(0).setCellValue(rowIndex+1);
                    header5.createCell(1).setCellValue(StringUtils.defaultString(addModel.getMemberName(),""));
                    header5.createCell(2).setCellValue(Constants.equalsInteger(addModel.getSex(),0)?"男":(Constants.equalsInteger(addModel.getSex(),1)?"女":"-"));
                    header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getIdcardNo(),""));
                    header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getMemberIdcardNo(),""));
                    header5.createCell(4).setCellValue(StringUtils.defaultString(addModel.getDuName(),""));
                    header5.createCell(5).setCellValue(StringUtils.defaultString(addModel.getWorkTypeName(),""));
                }else{
                    for (int i = 0; i < 6; i++) {
                        header5.createCell(i).setCellValue("");
                    }
                }
                if(delModel!=null){
                    header5.createCell(6).setCellValue(rowIndex+1);
                    header5.createCell(7).setCellValue(StringUtils.defaultString(delModel.getMemberName(),""));
                    header5.createCell(8).setCellValue(Constants.equalsInteger(delModel.getSex(),0)?"男":(Constants.equalsInteger(delModel.getSex(),1)?"女":"-"));
                    header5.createCell(9).setCellValue(StringUtils.defaultString(delModel.getIdcardNo(),""));
                    header5.createCell(9).setCellValue(StringUtils.defaultString(delModel.getMemberIdcardNo(),""));
                    header5.createCell(10).setCellValue(StringUtils.defaultString(delModel.getDuName(),""));
                    header5.createCell(11).setCellValue(StringUtils.defaultString(delModel.getWorkTypeName(),""));
                }else{
                    for (int i =6; i < 12; i++) {
                        header5.createCell(i).setCellValue("");
                    }
                }
                for (int i = 0; i < 12; i++) {
                    configDataCell(sxssfWorkbook,   header5.getCell(i));
                }
            }
            sxssfWorkbook.write(os);
@@ -709,13 +749,17 @@
        try {
            sxssfWorkbook = new SXSSFWorkbook();
            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
            for (int i = 0; i < 12; i++) {
                sheet.setColumnWidth(i, ((i==3|| i==4|| i== 5 || i==9||i==10||  i==11)?16:8) * 2 * 256);
            }
            sheet.createFreezePane(0, 1);
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,8));
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,11));
            Row title = sheet.createRow(0);
            title.setHeight((short) 1000);
            Cell c = title.createCell(0);
            c.setCellValue(sheetName);
            configFirstCell(sxssfWorkbook,c);
            title.setHeight((short) 2000);
            for (int i = 0; i < 12; i++) {
                title.createCell(i).setCellValue(i==0?sheetName:"");
                configTitleCell(sxssfWorkbook,title.getCell(i));
            }
            Row header1 = sheet.createRow(1);
            header1.createCell(0).setCellValue("投保企业");
            header1.createCell(3).setCellValue("保险方案");
@@ -731,26 +775,31 @@
            sheet.addMergedRegion(new CellRangeAddress(1  ,1,0,2));
            sheet.addMergedRegion(new CellRangeAddress(1  ,1,6,8));
            Row header2 = sheet.createRow(2);
            header2.createCell(0).setCellValue(data.getCompanyName());
            header2.createCell(1).setCellValue("");
            header2.createCell(2).setCellValue("");
            header2.createCell(3).setCellValue(data.getSolutionsName());
            header2.createCell(4).setCellValue(data.getApplyCode());
            header2.createCell(5).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getStartTime()));
            header2.createCell(6).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getEndTime()));
            header2.createCell(7).setCellValue("");
            header2.createCell(8).setCellValue("");
            header2.createCell(9).setCellValue(data.getAddNum());
            header2.createCell(10).setCellValue(data.getDelNum());
            header2.createCell(11).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getValidTime()));
            sheet.addMergedRegion(new CellRangeAddress(2 ,2,0,2));
            sheet.addMergedRegion(new CellRangeAddress(2  ,2,6,8));
            //空白行
            for (int i = 0; i < 12; i++) {
                configDataCell(sxssfWorkbook,   header2.getCell(i));
            }
            Row header3 = sheet.createRow(3);
            header2.createCell(0).setCellValue("加保人员");
            header2.createCell(6).setCellValue("减保人员");
            header3.createCell(0).setCellValue("加保人员");
            header3.createCell(6).setCellValue("减保人员");
            sheet.addMergedRegion(new CellRangeAddress(3  ,3,0,5));
            sheet.addMergedRegion(new CellRangeAddress(3  ,3,6,11));
            for (int i = 0; i < 12; i++) {
                configFirstCell(sxssfWorkbook,header2.getCell(i));
                configFirstCell(sxssfWorkbook,   header3.getCell(i));
            }
            Row header4 = sheet.createRow(4);
            header4.createCell(0).setCellValue("序号");
@@ -778,31 +827,58 @@
                    header5.createCell(0).setCellValue(rowIndex+1);
                    header5.createCell(1).setCellValue(StringUtils.defaultString(addModel.getMemberName(),""));
                    header5.createCell(2).setCellValue(Constants.equalsInteger(addModel.getSex(),0)?"男":(Constants.equalsInteger(addModel.getSex(),1)?"女":"-"));
                    header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getIdcardNo(),""));
                    header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getMemberIdcardNo(),""));
                    header5.createCell(4).setCellValue(StringUtils.defaultString(addModel.getDuName(),""));
                    header5.createCell(5).setCellValue(StringUtils.defaultString(addModel.getWorkTypeName(),""));
                }else{
                    for (int i = 0; i < 6; i++) {
                        header5.createCell(i).setCellValue("");
                    }
                }
                if(delModel!=null){
                    header5.createCell(6).setCellValue(rowIndex+1);
                    header5.createCell(7).setCellValue(StringUtils.defaultString(delModel.getMemberName(),""));
                    header5.createCell(8).setCellValue(Constants.equalsInteger(delModel.getSex(),0)?"男":(Constants.equalsInteger(delModel.getSex(),1)?"女":"-"));
                    header5.createCell(9).setCellValue(StringUtils.defaultString(delModel.getIdcardNo(),""));
                    header5.createCell(9).setCellValue(StringUtils.defaultString(delModel.getMemberIdcardNo(),""));
                    header5.createCell(10).setCellValue(StringUtils.defaultString(delModel.getDuName(),""));
                    header5.createCell(11).setCellValue(StringUtils.defaultString(delModel.getWorkTypeName(),""));
                }else{
                    for (int i =6; i < 12; i++) {
                        header5.createCell(i).setCellValue("");
                    }
                }
                for (int i = 0; i < 12; i++) {
                    configDataCell(sxssfWorkbook,   header5.getCell(i));
                }
            }
            int rowIndex = 4+data.getChangeDetailList().size();
            Row header6= sheet.createRow(4+data.getChangeDetailList().size());
            int rowIndex = 5+maxNum;
            Row header6= sheet.createRow(rowIndex);
            header6.createCell(0).setCellValue("投保企业申明:\n" +
                    "1、在申请书上填写的一切内容属实,否则本企业承担一切法律责任。\n" +
                    "2、由于变更受益人产生的法律纠纷本企业愿承担一切法律责任。\n" +
                    "3、本申请表的签章为本企业亲自签署,如由此产生的法律纠纷本企业愿承担一切法律责任。\n");
            configInfoCell(sxssfWorkbook,header6.getCell(0),HorizontalAlignment.LEFT);
            sheet.addMergedRegion(new CellRangeAddress(rowIndex ,rowIndex,1,12));
            for (int i = 1; i < 12; i++) {
                header6.createCell(i).setCellValue("");
            }
            for (int i =0; i < 12; i++) {
                if(i>0){
                    header6.createCell(i).setCellValue("");
                }
                configInfoCell(sxssfWorkbook,header6.getCell(i),HorizontalAlignment.LEFT);
            }
            header6.setHeight((short) 2000);
            sheet.addMergedRegion(new CellRangeAddress(rowIndex ,rowIndex,0,11));
            Row header7= sheet.createRow(rowIndex+1);
            header7.createCell(0).setCellValue("投保企业签章 ï¼š                            \n" +"日期:     å¹´     æœˆ     æ—¥    ");
            sheet.addMergedRegion(new CellRangeAddress(rowIndex+1 ,rowIndex+1,1,12));
            configInfoCell(sxssfWorkbook,header7.getCell(0),HorizontalAlignment.RIGHT);
            header7.setHeight((short) 3000);
            header7.createCell(0).setCellValue("投保企业签章 ï¼š                            \n \n \n" +"日期:     å¹´     æœˆ     æ—¥    ");
            for (int i =0; i < 12; i++) {
                if(i>0){
                    header7.createCell(i).setCellValue("");
                }
                configInfoCell(sxssfWorkbook,header7.getCell(i),HorizontalAlignment.RIGHT);
            }
            sheet.addMergedRegion(new CellRangeAddress(rowIndex+1 ,rowIndex+1,0,11));
            //临时缓冲区
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            //创建临时文件
@@ -816,6 +892,7 @@
                return tempPdf;
            }
        } catch (Exception e) {
            e.printStackTrace();
            // throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        }
        return null;
@@ -831,16 +908,26 @@
        try {
            sxssfWorkbook = new SXSSFWorkbook();
            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
            for (int i = 0; i < 8; i++) {
                sheet.setColumnWidth(i, ((i==3|| i== 5 || i==7)?16:8) * 2 * 256);
            }
            sheet.createFreezePane(0, 1);
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,8));
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,7));
            Row title = sheet.createRow(0);
            title.setHeight((short) 1000);
            Cell c = title.createCell(0);
            c.setCellValue(sheetName);
            configFirstCell(sxssfWorkbook,c);
            for (int i = 0; i < 8; i++) {
                if(i>0){
                    title.createCell(i).setCellValue("");
                }
                configTitleCell(sxssfWorkbook,title.getCell(i));
            }
            Row header1 = sheet.createRow(1);
            header1.createCell(0).setCellValue("投保企业");
            header1.createCell(1).setCellValue("保险方案");
            header1.createCell(2).setCellValue("");
            header1.createCell(3).setCellValue("保单号");
            header1.createCell(4).setCellValue("保险生效起期");
            header1.createCell(5).setCellValue("保险生效止期");
@@ -854,13 +941,16 @@
            Row header2 = sheet.createRow(2);
            header2.createCell(0).setCellValue(data.getCompanyName());
            header2.createCell(1).setCellValue(data.getSolutionsName());
            header2.createCell(2).setCellValue("");
            header2.createCell(3).setCellValue(data.getApplyCode());
            header2.createCell(4).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getStartTime()));
            header2.createCell(5).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getEndTime()));
            header2.createCell(6).setCellValue(data.getChangeNum());
            header2.createCell(7).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getValidTime()));
            header2.createCell(7).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getApplyStartTime()));
            sheet.addMergedRegion(new CellRangeAddress(2  ,2,1,2));
            for (int i = 0; i < 8; i++) {
                configDataCell(sxssfWorkbook,header2.getCell(i));
            }
            Row header4 = sheet.createRow(3);
            header4.createCell(0).setCellValue("序号");
            header4.createCell(1).setCellValue("员工姓名");
@@ -880,11 +970,14 @@
                header5.createCell(0).setCellValue(rowIndex+1);
                header5.createCell(1).setCellValue(StringUtils.defaultString(addModel.getMemberName(),""));
                header5.createCell(2).setCellValue(Constants.equalsInteger(addModel.getSex(),0)?"男":(Constants.equalsInteger(addModel.getSex(),1)?"女":"-"));
                header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getIdcardNo(),""));
                header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getMemberIdcardNo(),""));
                header5.createCell(4).setCellValue(StringUtils.defaultString(addModel.getOldDuName(),""));
                header5.createCell(5).setCellValue(StringUtils.defaultString(addModel.getOldWorkTypeName(),""));
                header5.createCell(6).setCellValue(StringUtils.defaultString(addModel.getDuName(),""));
                header5.createCell(7).setCellValue(StringUtils.defaultString(addModel.getWorkTypeName(),""));
                for (int i = 0; i < 8; i++) {
                    configDataCell(sxssfWorkbook,header5.getCell(i));
                }
            }
            sxssfWorkbook.write(os);
            os.close();
@@ -910,16 +1003,26 @@
        try {
            sxssfWorkbook = new SXSSFWorkbook();
            Sheet sheet = sxssfWorkbook.createSheet(sheetName);
            for (int i = 0; i < 8; i++) {
                sheet.setColumnWidth(i, ((i==3|| i== 4|| i== 5 ||i== 6 || i==7)?16:8) * 2 * 256);
            }
            sheet.createFreezePane(0, 1);
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,8));
            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,7));
            Row title = sheet.createRow(0);
            title.setHeight((short) 1000);
            title.setHeight((short) 2000);
            Cell c = title.createCell(0);
            c.setCellValue(sheetName);
            configFirstCell(sxssfWorkbook,c);
            for (int i = 0; i < 8; i++) {
                if(i>0){
                    title.createCell(i).setCellValue("");
                }
                configTitleCell(sxssfWorkbook,title.getCell(i));
            }
            Row header1 = sheet.createRow(1);
            header1.createCell(0).setCellValue("投保企业");
            header1.createCell(1).setCellValue("保险方案");
            header1.createCell(2).setCellValue("");
            header1.createCell(3).setCellValue("保单号");
            header1.createCell(4).setCellValue("保险生效起期");
            header1.createCell(5).setCellValue("保险生效止期");
@@ -933,13 +1036,16 @@
            Row header2 = sheet.createRow(2);
            header2.createCell(0).setCellValue(data.getCompanyName());
            header2.createCell(1).setCellValue(data.getSolutionsName());
            header2.createCell(2).setCellValue("");
            header2.createCell(3).setCellValue(data.getApplyCode());
            header2.createCell(4).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getStartTime()));
            header2.createCell(5).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getEndTime()));
            header2.createCell(6).setCellValue(data.getChangeNum());
            header2.createCell(7).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getValidTime()));
            header2.createCell(7).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getApplyStartTime()));
            sheet.addMergedRegion(new CellRangeAddress(2  ,2,1,2));
            for (int i = 0; i < 8; i++) {
                configDataCell(sxssfWorkbook,header2.getCell(i));
            }
            Row header4 = sheet.createRow(3);
            header4.createCell(0).setCellValue("序号");
            header4.createCell(1).setCellValue("员工姓名");
@@ -959,28 +1065,47 @@
                header5.createCell(0).setCellValue(rowIndex+1);
                header5.createCell(1).setCellValue(StringUtils.defaultString(addModel.getMemberName(),""));
                header5.createCell(2).setCellValue(Constants.equalsInteger(addModel.getSex(),0)?"男":(Constants.equalsInteger(addModel.getSex(),1)?"女":"-"));
                header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getIdcardNo(),""));
                header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getMemberIdcardNo(),""));
                header5.createCell(4).setCellValue(StringUtils.defaultString(addModel.getOldDuName(),""));
                header5.createCell(5).setCellValue(StringUtils.defaultString(addModel.getOldWorkTypeName(),""));
                header5.createCell(6).setCellValue(StringUtils.defaultString(addModel.getDuName(),""));
                header5.createCell(7).setCellValue(StringUtils.defaultString(addModel.getWorkTypeName(),""));
                for (int i = 0; i < 8; i++) {
                    configDataCell(sxssfWorkbook,header5.getCell(i));
                }
            }
            int rowIndex = 4+data.getChangeDetailList().size();
            Row header6= sheet.createRow(4+data.getChangeDetailList().size());
            Row header6= sheet.createRow(rowIndex);
            header6.createCell(0).setCellValue("投保企业申明:\n" +
                    "1、在申请书上填写的一切内容属实,否则本企业承担一切法律责任。\n" +
                    "2、由于变更受益人产生的法律纠纷本企业愿承担一切法律责任。\n" +
                    "3、本申请表的签章为本企业亲自签署,如由此产生的法律纠纷本企业愿承担一切法律责任。\n");
            configInfoCell(sxssfWorkbook,header6.getCell(0),HorizontalAlignment.LEFT);
            sheet.addMergedRegion(new CellRangeAddress(rowIndex ,rowIndex,1,8));
            for (int i = 1; i < 8; i++) {
                header6.createCell(i).setCellValue("");
            }
            for (int i =0; i < 8; i++) {
                if(i>0){
                    header6.createCell(i).setCellValue("");
                }
                configInfoCell(sxssfWorkbook,header6.getCell(i),HorizontalAlignment.LEFT);
            }
            header6.setHeight((short) 2000);
            sheet.addMergedRegion(new CellRangeAddress(rowIndex ,rowIndex,0,7));
            Row header7= sheet.createRow(rowIndex+1);
            header7.createCell(0).setCellValue("投保企业签章 ï¼š                            \n" +"日期:     å¹´     æœˆ     æ—¥    ");
            sheet.addMergedRegion(new CellRangeAddress(rowIndex+1 ,rowIndex+1,1,8));
            configInfoCell(sxssfWorkbook,header7.getCell(0),HorizontalAlignment.RIGHT);
            header7.setHeight((short) 3000);
            header7.createCell(0).setCellValue("投保企业签章 ï¼š                            \n \n \n" +"日期:     å¹´     æœˆ     æ—¥    ");
            for (int i =0; i < 8; i++) {
                if(i>0){
                    header7.createCell(i).setCellValue("");
                }
                configInfoCell(sxssfWorkbook,header7.getCell(i),HorizontalAlignment.RIGHT);
            }
            sheet.addMergedRegion(new CellRangeAddress(rowIndex+1 ,rowIndex+1,0,7));
            //临时缓冲区
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            //创建临时文件
             sxssfWorkbook.write(out);
            sxssfWorkbook.write(out);
            byte [] bookByteAry = out.toByteArray();
            InputStream     in = new ByteArrayInputStream(bookByteAry);
            String tempPdf =System.getProperty("java.io.tmpdir")+File.separator+UUID.randomUUID().toString()+".pdf";
@@ -989,7 +1114,6 @@
            if(f!=null && f.isFile()){
                return tempPdf;
            }
            return tempPdf;
        } catch (Exception e) {
           // throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
        }
server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
@@ -48,6 +48,8 @@
    @ApiModelProperty(value = "保单主键")
    private Integer applyId;
    @ApiModelProperty(value = "加减保主键")
    private Integer applyChangId;
    @ApiModelProperty(value = "类型:0=加保;1=减保;2=换厂 ")
    private List<Integer> types;
server/service/src/main/java/com/doumee/dao/business/model/ApplyChagneDetail.java
@@ -101,6 +101,9 @@
    @ApiModelProperty(value = "员工名称")
    @TableField(exist = false)
    private String memberName;
    @ApiModelProperty(value = "员工身份证号")
    @TableField(exist = false)
    private String memberIdcardNo;
    @ApiModelProperty(value = "性别 0男 1女")
    @TableField(exist = false)
    private Integer sex;
@@ -130,5 +133,8 @@
    @ApiModelProperty(value = "保险时间单位0天 1半月 2月 3å¹´", example = "1")
    @TableField(exist = false)
    private Integer solutionTimeUnit;
    @ApiModelProperty(value = "投保申请编码", example = "1")
    @TableField(exist = false)
    private Integer applyId;
}
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -152,10 +152,19 @@
    @ApiModelProperty(value = "保险方案主键")
    @TableField(exist = false)
    private Integer solutionsId;
    @ApiModelProperty(value = "基表保险方案主键")
    @ApiModelProperty(value = "保险方案主键(基表)")
    @TableField(exist = false)
    private Integer baseSolutionsId;
    @ApiModelProperty(value = "申请单附件")
    @TableField(exist = false)
    private Multifile applyFile;
    @ApiModelProperty(value = "申请单换厂附件")
    @TableField(exist = false)
    private Multifile applyUnitFile;
    @ApiModelProperty(value = "批单附件")
    @TableField(exist = false)
    private Multifile pidanFile;
    @ApiModelProperty(value = "加保明细数据")
    @TableField(exist = false)
@@ -174,9 +183,6 @@
    @TableField(exist = false)
    private Integer companyId;
    @ApiModelProperty(value = "批单附件对象")
    @TableField(exist = false)
    private Multifile pidanFile;
    @ApiModelProperty(value = "处理企业申请状态  0同意 1驳回")
    @TableField(exist = false)
    private int dealBackApply;
@@ -191,9 +197,6 @@
    @ApiModelProperty(value = "日志记录")
    @TableField(exist = false)
    private List<ApplyLog> applyLogList;
    public TaxesInvoicingVO toTaxesInvoicingVO(){
        TaxesInvoicingVO taxesInvoicingVO = new TaxesInvoicingVO();
        taxesInvoicingVO.setId(this.getId());
server/service/src/main/java/com/doumee/dao/business/model/ApplyLog.java
@@ -116,6 +116,9 @@
    @ApiModelProperty(value = "创建人名称", example = "1")
    @TableField(exist = false)
    private String  creatorName;
    @ApiModelProperty(value = "创建人類型 0平台 1企业", example = "1")
    @TableField(exist = false)
    private Integer  creatorType;
    @ApiModelProperty(value = "公司名称", example = "1")
    @TableField(exist = false)
server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
@@ -90,9 +90,30 @@
    }
    @Override
    public List<ApplyChagneDetail> findList(ApplyChagneDetail applyChagneDetail) {
        QueryWrapper<ApplyChagneDetail> wrapper = new QueryWrapper<>(applyChagneDetail);
        return applyChagneDetailMapper.selectList(wrapper);
    public List<ApplyChagneDetail> findList(ApplyChagneDetail applyDetailPageDTO) {
        MPJLambdaWrapper<ApplyChagneDetail> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(applyDetailPageDTO );
        queryWrapper.select("t2.name",ApplyChagneDetail::getWorkTypeName);
        queryWrapper.select("t3.name",ApplyChagneDetail::getDuName);
        queryWrapper.select("t4.name",ApplyChagneDetail::getOldWorkTypeName);
        queryWrapper.select("t5.name",ApplyChagneDetail::getOldDuName);
        queryWrapper.selectAs(Member::getName,ApplyChagneDetail::getMemberName);
        queryWrapper.selectAs(Member::getSex,ApplyChagneDetail::getSex);
        queryWrapper.selectAs(Member::getIdcardNo,ApplyChagneDetail::getMemberIdcardNo);
        queryWrapper.leftJoin(Member.class,Member::getId,ApplyChagneDetail::getMemberId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getOldDuId);
        queryWrapper.exists(!Objects.isNull(applyDetailPageDTO.getApplyId()),
                " select 1 from apply_change ac where ac.isdeleted = 0 and ac.status in (1,2)  and ac.apply_id = "+applyDetailPageDTO.getApplyId()+" and ac.id = t.apply_change_id  ");
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getDuId()),ApplyChagneDetail::getDuId,applyDetailPageDTO.getDuId());
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getWorktypeId()),ApplyChagneDetail::getWorktypeId,applyDetailPageDTO.getWorktypeId());
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getApplyChangeId()),ApplyChagneDetail::getApplyChangeId,applyDetailPageDTO.getApplyChangeId());
        queryWrapper.like(StringUtils.isNotBlank(applyDetailPageDTO.getMemberName()),Member::getName,applyDetailPageDTO.getMemberName());
        List<ApplyChagneDetail> pageData = applyChangeDetailJoinMapper.selectJoinList( ApplyChagneDetail.class, queryWrapper);
        return pageData;
    }
@@ -167,9 +188,18 @@
        MPJLambdaWrapper<ApplyChagneDetail> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(ApplyChagneDetail.class);
        queryWrapper.selectAs(DispatchUnit::getName,ApplyChagneDetail::getDuName);
        queryWrapper.selectAs(Worktype::getName,ApplyChagneDetail::getWorkTypeName);
        queryWrapper.select("t2.name",ApplyChagneDetail::getWorkTypeName);
        queryWrapper.select("t3.name",ApplyChagneDetail::getDuName);
        queryWrapper.select("t4.name",ApplyChagneDetail::getOldWorkTypeName);
        queryWrapper.select("t5.name",ApplyChagneDetail::getOldDuName);
        queryWrapper.selectAs(Member::getName,ApplyChagneDetail::getMemberName);
        queryWrapper.selectAs(Member::getSex,ApplyChagneDetail::getSex);
        queryWrapper.selectAs(Member::getIdcardNo,ApplyChagneDetail::getMemberIdcardNo);
        queryWrapper.leftJoin(Member.class,Member::getId,ApplyChagneDetail::getMemberId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId);
        queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId);
        queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getOldDuId);
        ApplyDetailPageDTO applyDetailPageDTO = pageWrap.getModel();
        queryWrapper.exists(!Objects.isNull(applyDetailPageDTO.getApplyId()),
                " select 1 from apply_change ac where ac.isdeleted = 0 and ac.status in (1,2)  and ac.apply_id = "+applyDetailPageDTO.getApplyId()+" and ac.id = t.apply_change_id  ");
@@ -183,6 +213,7 @@
                ApplyChagneDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd")+" 23:59:59");
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getDuId()),ApplyChagneDetail::getDuId,applyDetailPageDTO.getDuId());
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getWorkTypeId()),ApplyChagneDetail::getWorktypeId,applyDetailPageDTO.getWorkTypeId());
        queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getApplyChangId()),ApplyChagneDetail::getApplyChangeId,applyDetailPageDTO.getApplyChangId());
        queryWrapper.like(StringUtils.isNotBlank(applyDetailPageDTO.getMemberName()),Member::getName,applyDetailPageDTO.getMemberName());
        queryWrapper.ge(StringUtils.isNotBlank(applyDetailPageDTO.getStartTimeS()),ApplyChagneDetail::getStartTime,applyDetailPageDTO.getStartTimeS()+" 00:00:00");
        queryWrapper.le(StringUtils.isNotBlank(applyDetailPageDTO.getStartTimeE()),ApplyChagneDetail::getStartTime,applyDetailPageDTO.getStartTimeE()+" 23:59:59");
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -31,14 +31,12 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -66,6 +64,8 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private SignService signService;
    @Autowired
    private ApplyChagneDetailJoinMapper applyChagneDetailJoinMapper;
@@ -85,7 +85,8 @@
    @Autowired
    private ApplyLogMapper applyLogMapper;
    @Value("${debug_model}")
    private boolean debugModel;
    @Autowired
    private ApplyLogJoinMapper applyLogJoinMapper;
@@ -263,7 +264,8 @@
                        .selectAs(Solutions::getTimeUnit,ApplyChagneDetail::getSolutionTimeUnit)
                        .selectAs(Solutions::getPrice,ApplyChagneDetail::getSolutionPrice)
                  .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                  .leftJoin(Solutions.class, Solutions::getId, ApplyChange::getSolutionsId)
                  .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyChange::getApplyId)
                  .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                  .eq(ApplyChagneDetail::getApplyChangeId,update.getId())
                  .eq(ApplyChagneDetail::getIsdeleted,Constants.ZERO) );
        if(detailList ==null || detailList.size()==0){
@@ -300,7 +302,8 @@
                        .selectAs(Solutions::getTimeUnit,ApplyChagneDetail::getSolutionTimeUnit)
                        .selectAs(Solutions::getPrice,ApplyChagneDetail::getSolutionPrice)
                  .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                  .leftJoin(Solutions.class, Solutions::getId, ApplyChange::getSolutionsId)
                  .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyChange::getApplyId)
                  .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                  .eq(ApplyChagneDetail::getApplyChangeId,update.getId())
                  .eq(ApplyChagneDetail::getIsdeleted,Constants.ZERO) );
        if(detailList ==null || detailList.size()==0){
@@ -327,7 +330,8 @@
                add.setDuId(detail.getDuId());
                add.setStartTime(update.getApplyStartTime());
                add.setEndTime(detail.getEndTime());
                add.setFee(Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), add.getStartTime(),add.getEndTime()));
                add.setFee(new BigDecimal(0));
//                add.setFee(Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), add.getStartTime(),add.getEndTime()));
                if(DateUtil.daysBetweenDates(add.getStartTime(),new Date() )>=0){
                    //如果已产生费用,计算已产生费用
                    add.setCurrentFee(Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), add.getStartTime(),new Date()));
@@ -350,7 +354,7 @@
                BigDecimal updateCurrentFee = new BigDecimal(0);
                if(DateUtil.daysBetweenDates(update.getApplyStartTime(),new Date() )>0){
                    //如果生效时间 æ˜¯ä»Šå¤©ä¹‹å‰ï¼Œé€€å›žå·²äº§ç”Ÿè´¹ç”¨ï¼Œè®¡ç®—已产生费用(总费用-已产生费用)
                    updateCurrentFee = updateFee.subtract(oldModel.getCurrentFee());
                    updateCurrentFee = updateFee.subtract(Constants.formatBigdecimal(oldModel.getCurrentFee()));
                }
                applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
                        .setSql(" fee = ifnull(fee,0)+"+updateFee)
@@ -1099,10 +1103,12 @@
        queryWrapper.selectAll(ApplyChange.class)
                .selectAs(InsuranceApply::getCode,ApplyChange::getApplyCode)
                .selectAs(Company::getName,ApplyChange::getCompanyName)
                .selectAs(InsuranceApply::getStartTime,ApplyChange::getStartTime)
                .selectAs(InsuranceApply::getEndTime,ApplyChange::getEndTime)
                .selectAs(Solutions::getName,ApplyChange::getSolutionsName)
                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 0  )",ApplyChange::getAddNum)
                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 1  )",ApplyChange::getDelNum)
                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 2  )",ApplyChange::getChangeNum)
                .select("( select ifnull(sum(ad.FEE),0) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID  )",ApplyChange::getChangeMoney)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
@@ -1114,6 +1120,7 @@
                new MPJLambdaWrapper<ApplyLog>()
                        .selectAll(ApplyLog.class)
                        .selectAs(SystemUser::getRealname,ApplyLog::getCreatorName)
                        .selectAs(SystemUser::getType,ApplyLog::getCreatorType)
                        .selectAs(Company::getName,ApplyLog::getCompanyName)
                        .leftJoin(SystemUser.class,SystemUser::getId,ApplyLog::getCreator)
                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
@@ -1121,6 +1128,33 @@
                        .orderByAsc(ApplyLog::getCreateDate)
        );
        applyChange.setApplyLogList(applyLogList);
        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,applyChange.getId())
                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.CA_APPLY_JIAJIAN_SIGN.getKey()
                        ,Constants.MultiFile.CA_PD_PDF.getKey()
                        ,Constants.MultiFile.CA_APPLY_CHANGEUNIT_SIGN.getKey()}))
                .eq(Multifile::getIsdeleted,Constants.ZERO));
        if(multifiles!=null){
            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
            for(Multifile f : multifiles){
                if(StringUtils.isBlank(f.getFileurl())){
                    continue;
                }
                f.setFileurlFull(path+f.getFileurl());
                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_APPLY_JIAJIAN_SIGN.getKey())){
                    //签署后申请单
                    applyChange.setApplyFile(f);
                }else    if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_APPLY_CHANGEUNIT_SIGN.getKey())){
                    //签署后申请单
                    applyChange.setApplyUnitFile(f);
                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_PD_PDF.getKey())){
                    //签署后的投保单
                    applyChange.setPidanFile(f);
                }
            }
        }
        return applyChange;
    }
@@ -1132,7 +1166,7 @@
    @Override
    public  ApplyChange  exportChangeUnitExcel(ApplyChange param){
        ApplyChange model = findJoinDetail(param);
        if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getType())){
        if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getIsdeleted())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
@@ -1164,7 +1198,7 @@
    }
    private String getOnlineSignLink(ApplyChange model) {
        if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getType())){
        if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getIsdeleted())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(Constants.ZERO,model.getStatus())){
@@ -1172,14 +1206,21 @@
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Company company = user.getCompany();
        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.ONE)){
        if(debugModel){
company = companyMapper.selectById(model.getCompanyId());
        }
        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业尚未具备在线签章条件,请联系平台管理员确认~");
        }
        String fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"缓存申请表");
        String fileUrl = null;
        if(Constants.equalsObject(model.getType(), Constants.ONE)){
              fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"换厂申请表");
        }else{
            fileUrl = ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcelToPdf(model,"加减保申请表");
        }
        String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
        notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString());
        String applyNo = signService.applySignLocalFile(company.getName(),fileUrl,company.getName(),company.getCode(),company.getEmail(),null,company.getSignId(),notifyUrl);
        String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"投保企业签章",company.getSignId(),notifyUrl);
        if(StringUtils.isBlank(applyNo) ){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!");
        }
@@ -1193,6 +1234,7 @@
        update.setEditDate(new Date());
        update.setSignApplyNo(applyNo);
        applyChangeMapper.updateById(update);
        return  link;
    }
@@ -1206,7 +1248,7 @@
    public  ApplyChange  exportJiajianBaoExcel(ApplyChange param){
        ApplyChange model = findJoinDetail(param);
        if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getType())){
        if(Objects.isNull(model) ||! Constants.equalsInteger(Constants.ZERO,model.getIsdeleted())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
@@ -1232,12 +1274,13 @@
                .selectAll(ApplyChange.class)
                .selectAs(Solutions::getName,ApplyChange::getSolutionsName)
                .selectAs(Company::getName,ApplyChange::getCompanyName)
                .selectAs(InsuranceApply::getCompanyId,ApplyChange::getCompanyId)
                .selectAs(InsuranceApply::getCode,ApplyChange::getApplyCode)
                .selectAs(InsuranceApply::getStartTime,ApplyChange::getStartTime)
                .selectAs(InsuranceApply::getStartTime,ApplyChange::getEndTime)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,ApplyChange::getCompanyId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                .eq(ApplyChange::getId,param.getId())
                .last("limit 1");
@@ -1249,7 +1292,7 @@
                .selectAll(ApplyChagneDetail.class)
                .selectAs(Member::getName,ApplyChagneDetail::getMemberName)
                .selectAs(Member::getSex,ApplyChagneDetail::getSex)
                .selectAs(Member::getIdcardNo,ApplyChagneDetail::getIdcardNo)
                .selectAs(Member::getIdcardNo,ApplyChagneDetail::getMemberIdcardNo)
                .selectAs(Worktype::getName,ApplyChagneDetail::getWorkTypeName)
                .selectAs(DispatchUnit::getName,ApplyChagneDetail::getDuName)
                .leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId)
@@ -1271,7 +1314,7 @@
                .select("t3.name as oldWorktypeName")
                .select("t4.name as oldDuName")
                .selectAs(Member::getSex,ApplyChagneDetail::getSex)
                .selectAs(Member::getIdcardNo,ApplyChagneDetail::getIdcardNo)
                .selectAs(Member::getIdcardNo,ApplyChagneDetail::getMemberIdcardNo)
                .leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId)
                .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId)
                .leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId)
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -431,10 +431,14 @@
    @Override
    public   void dealWaitSignedData(){
        List<InsuranceApply> applyList = insuranceApplyMapper.selectList(new QueryWrapper<InsuranceApply>().lambda()
                .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WAIT_SIGNATURE)
                .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())
                .isNotNull(InsuranceApply::getSignApplyNo));
        if(applyList !=null && applyList.size()>0 ){
            for(InsuranceApply model : applyList){
                String status = signService.linkFileStatus(model.getSignApplyNo());
                if(!StringUtils.equals(status,"3")){
                    continue;
                }
                String link = signService.linkFile(model.getSignApplyNo());
                String fileUrl = uploadSignFile(link);
                if(StringUtils.isBlank(fileUrl)){
@@ -446,10 +450,14 @@
            }
        }
        List<ApplyChange> chagneList = applyChangeMapper.selectList(new QueryWrapper<ApplyChange>().lambda()
                .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.UPLOAD)
                .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.UPLOAD.getKey())
                .isNotNull(ApplyChange::getSignApplyNo));
        if(chagneList !=null && chagneList.size()>0 ){
            for(ApplyChange model : chagneList){
                String status = signService.linkFileStatus(model.getSignApplyNo());
                if(!StringUtils.equals(status,"3")){
                    continue;
                }
                String link = signService.linkFile(model.getSignApplyNo());
                String fileUrl = uploadSignFile(link);
                if(StringUtils.isBlank(fileUrl)){
@@ -919,6 +927,12 @@
        //企业人员查看本企业数据
        if(loginUserInfo.getType().equals(Constants.ONE)){
            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
        }else{
            if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){
                queryWrapper.in(InsuranceApply::getCompanyId, loginUserInfo.getCompanyIdList());
            }else{
                queryWrapper.eq(InsuranceApply::getCompanyId, -1);
            }
        }
        if (pageWrap.getModel().getSolutionId() != null) {
            queryWrapper.eq(InsuranceApply::getSolutionId, pageWrap.getModel().getSolutionId());
@@ -999,6 +1013,12 @@
        //企业人员查看本企业数据
        if(loginUserInfo.getType().equals(Constants.ONE)){
            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
        }else{
            if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){
                queryWrapper.in(InsuranceApply::getCompanyId, loginUserInfo.getCompanyIdList());
            }else{
                queryWrapper.eq(InsuranceApply::getCompanyId, -1);
            }
        }
        if (model.getSolutionId() != null) {
            queryWrapper.eq(InsuranceApply::getSolutionId, model.getSolutionId());
server/service/src/main/java/com/doumee/service/business/third/SignService.java
@@ -317,7 +317,7 @@
          params.put("serverCa",1); //使用云证书
          params.put("file",new File(file));
          params.put("dealType",5); //指定合同文件签署方式 5 ä¸ºéƒ¨åˆ†è‡ªåŠ¨ç­¾
          params.put("positionType",1); //指定通过表单域方式设置签字位置
          params.put("positionType",2); //指定通过表单域方式设置签字位置
          params.put("fileType",0);
          params.put("needQifengSign",1);
          params.put("notifyUrl",notifyUrl);
@@ -331,7 +331,7 @@
//          sReq.setChapteJson(postionJson);
          sReq.setSearchKey(postionJson);
          sReq.setSignId(singId);
          sReq.setSearchConvertExtend("{\"fixX\":10,\"fixY\":-50}");
          sReq.setSearchConvertExtend("{\"fixX\":-80,\"fixY\":-80}");
          sReq.setNoNeedVerify(1);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());
@@ -381,6 +381,33 @@
     * èŽ·å–ç­¾ç½²é“¾æŽ¥åœ°å€(返回文件地址,签署后才是文件地址,否则跳转到签署页面)
     * @param applyNo
     */
    public String  linkFileStatus(String applyNo) {
        try {    initParams();
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/sign/status";
            //构建请求参数
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号
//            params.put("fullName",fullName); //签约人名称
//            params.put("identityCard",identityCard); //签约人证件号
//            params.put("identityType",12); //证件类型 1身份证, 2护照, 3台胞证, 4港澳居民来往内地通行证, 11营业执照, 12统一社会信用代码, 20子账号, 99其他
            String str= HttpClientUtils.init().getPost(url,null,params,true);
            System.out.println(str);
            saveInterfaceLog(url,"【电子签】签约状态查询",JSONObject.toJSONString(params),str);
            JSONObject json = JSONObject.parseObject(str);
            if(json!=null && json.getBoolean("success")){
                //0 ï¼šæœªç­¾ 1 ï¼šå·²ç­¾ 2:拒签 3:已保全
                return  json.getString("data");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return  null;
    }
    /**
     * èŽ·å–ç­¾ç½²é“¾æŽ¥åœ°å€(返回文件地址,签署后才是文件地址,否则跳转到签署页面)
     * @param applyNo
     */
    public String  linkFile(String applyNo) {
        try {    initParams();