diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/CompanyController.java b/src/main/java/com/supwisdom/dlpay/system/controller/CompanyController.java
index fb22901..bf49a73 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/CompanyController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/CompanyController.java
@@ -7,6 +7,7 @@
 import com.supwisdom.dlpay.system.bean.CompanyCheckMessageBean;
 import com.supwisdom.dlpay.system.domain.TCompany;
 import com.supwisdom.dlpay.system.domain.TDictionaryId;
+import com.supwisdom.dlpay.system.domain.TModifyCompany;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.CompanyService;
 import com.supwisdom.dlpay.system.service.SystemService;
@@ -134,21 +135,47 @@
                 return map;
             }
             TCompany companyByName = companyService.getCompanyByNameAndId(postData.getCompanyName(), postData.getCompanyId());
-            if (companyByName != null) {
+            //需判断该名字在修改临时表中是否存在有效数据
+            TModifyCompany modifyCompanyByNameAndId = companyService.getModifyCompanyByNameAndId(postData.getCompanyName(), postData.getCompanyId());
+            if (companyByName != null || modifyCompanyByNameAndId!=null) {
                 map.put("errStr", "公司名称已经存在，请修改！");
                 return map;
             }
 
 
             TCompany company = companyService.getCompanyAllStatusById(postData.getCompanyId());
-            company.setCompanyName(postData.getCompanyName());
-            company.setLicenseId(postData.getLicenseId());
-            company.setCompanyAddress(postData.getCompanyAddress());
-            company.setLegalPeople(postData.getLegalPeople());
-            company.setLegalPeopleCardType(postData.getLegalPeopleCardType());
-            company.setLegalPeopleCardId(postData.getLegalPeopleCardId());
-            company.setCompanyPhone(postData.getCompanyPhone());
-            company.setRemarks(postData.getRemarks());
+            if (company==null){
+                map.put("errStr", "该公司不存在！");
+                return map;
+            }
+            //将修改信息暂存放到TB_Modify_Company 表中 审核通过后正式使用
+            TModifyCompany tModifyCompany = null;
+            tModifyCompany = companyService.getModifyCompanyById(company.getCompanyId());
+            if (tModifyCompany == null) {
+                tModifyCompany = new TModifyCompany();
+                tModifyCompany.setCompanyId(company.getCompanyId());
+                tModifyCompany.setCompanyName(postData.getCompanyName());
+                tModifyCompany.setLicenseId(postData.getLicenseId());
+                tModifyCompany.setCompanyAddress(postData.getCompanyAddress());
+                tModifyCompany.setLegalPeople(postData.getLegalPeople());
+                tModifyCompany.setLegalPeopleCardType(postData.getLegalPeopleCardType());
+                tModifyCompany.setLegalPeopleCardId(postData.getLegalPeopleCardId());
+                tModifyCompany.setCompanyPhone(postData.getCompanyPhone());
+                tModifyCompany.setRemarks(postData.getRemarks());
+                tModifyCompany.setStatus("1");//有效
+            }else {
+                tModifyCompany.setCompanyName(postData.getCompanyName());
+                tModifyCompany.setLicenseId(postData.getLicenseId());
+                tModifyCompany.setCompanyAddress(postData.getCompanyAddress());
+                tModifyCompany.setLegalPeople(postData.getLegalPeople());
+                tModifyCompany.setLegalPeopleCardType(postData.getLegalPeopleCardType());
+                tModifyCompany.setLegalPeopleCardId(postData.getLegalPeopleCardId());
+                tModifyCompany.setCompanyPhone(postData.getCompanyPhone());
+                tModifyCompany.setRemarks(postData.getRemarks());
+                tModifyCompany.setStatus("1");//有效
+            }
+            companyService.saveModifyCompany(tModifyCompany);
+
             //修改时 公司状态为原始状态 审核失败后返回原始状态
 
             //编辑时,如公司原来注册审核未通过，则审核标志依然为注册--0
@@ -272,17 +299,42 @@
             //审核通过实质 修改公司状态为有效--1,审核状态为通过--1,审核标志为空
             String message = "";
             TCompany company = companyService.getCompanyAllStatusById(companyId);
+            if (company == null){
+                message="该公司不存在！";
+                map.put("message", message);
+                return map;
+            }
+
             if (!company.getCheckStatus().equals("0") && !company.getStatus().equals("2")) {
                 message = "该公司不需要审核！";
                 map.put("message", message);
                 return map;
             }
-            //判断公司审核标志是否未删除
+            //判断公司审核标志是否为删除
             if (company.getCheckFlag().equals("2")){
                 company.setStatus("0");//删除是置为注销状态---0
             }else {
                 company.setStatus("1");
             }
+
+            //当公司审核标志为修改时 需将TB_Modify_Company 表中公司信息作为修改后公司信息
+            if (company.getCheckFlag().equals("1")){
+                TModifyCompany tModifyCompany = companyService.getModifyCompanyById(companyId);
+                company.setCompanyName(tModifyCompany.getCompanyName());
+                company.setCompanyAddress(tModifyCompany.getCompanyAddress());
+                company.setLicenseId(tModifyCompany.getLicenseId());
+                company.setLegalPeople(tModifyCompany.getLegalPeople());
+                company.setLegalPeopleCardType(tModifyCompany.getLegalPeopleCardType());
+                company.setLegalPeopleCardId(tModifyCompany.getLegalPeopleCardId());
+                company.setCompanyPhone(tModifyCompany.getCompanyPhone());
+                company.setRemarks(tModifyCompany.getRemarks());
+
+
+                tModifyCompany.setStatus("0");
+                companyService.updateModifyCompany(tModifyCompany);//将修改临时信息置为无效
+            }
+
+
             company.setCheckStatus("1");
             company.setCheckFlag("");
             company.setCheckMessage("");
@@ -322,6 +374,24 @@
                     }else {
                         company.setStatus("1");
                     }
+
+                    //当公司审核标志为修改时 需将TB_Modify_Company 表中公司信息作为修改后公司信息
+                    if (company.getCheckFlag().equals("1")){
+                        TModifyCompany tModifyCompany = companyService.getModifyCompanyById(companyId);
+                        company.setCompanyName(tModifyCompany.getCompanyName());
+                        company.setCompanyAddress(tModifyCompany.getCompanyAddress());
+                        company.setLicenseId(tModifyCompany.getLicenseId());
+                        company.setLegalPeople(tModifyCompany.getLegalPeople());
+                        company.setLegalPeopleCardType(tModifyCompany.getLegalPeopleCardType());
+                        company.setLegalPeopleCardId(tModifyCompany.getLegalPeopleCardId());
+                        company.setCompanyPhone(tModifyCompany.getCompanyPhone());
+                        company.setRemarks(tModifyCompany.getRemarks());
+
+
+                        tModifyCompany.setStatus("0");
+                        companyService.updateModifyCompany(tModifyCompany);//将修改临时信息置为无效
+                    }
+
                     company.setCheckStatus("1");
                     company.setCheckFlag("");
                     company.setCheckMessage("");
@@ -367,6 +437,15 @@
             if (!company.getCheckFlag().equals("0")) {
                 company.setCheckFlag("");
             }
+
+            //当公司审核标志为修改时 驳回需将TB_Modify_Company 表中公司信息置为无效
+            if (company.getCheckFlag().equals("1")){
+                TModifyCompany tModifyCompany = companyService.getModifyCompanyById(postData.getCompanyId());
+
+                tModifyCompany.setStatus("0");
+                companyService.updateModifyCompany(tModifyCompany);//将修改临时信息置为无效
+            }
+
             company.setCheckMessage(postData.getCheckMessage());
             company.setCheckOperId(operUser.getOperid());
 
@@ -404,6 +483,15 @@
                     if (!company.getCheckFlag().equals("0")) {
                         company.setCheckFlag("");
                     }
+
+                    //当公司审核标志为修改时 驳回需将TB_Modify_Company 表中公司信息置为无效
+                    if (company.getCheckFlag().equals("1")){
+                        TModifyCompany tModifyCompany = companyService.getModifyCompanyById(companyId);
+
+                        tModifyCompany.setStatus("0");
+                        companyService.updateModifyCompany(tModifyCompany);//将修改临时信息置为无效
+                    }
+
                     //批量驳回的审核结果都设为---批量驳回
                     company.setCheckMessage("批量驳回");
                     company.setCheckOperId(operUser.getOperid());
@@ -421,4 +509,25 @@
 
 
 
+    @ResponseBody
+    @RequestMapping("/getCheckDetails")
+    public Map getCheckDetails(@RequestParam(value = "companyId") String companyId,
+                                    @AuthenticationPrincipal TOperator operUser) {
+        Map map = new HashMap();
+        try {
+            TCompany oldCompany = companyService.getCompanyAllStatusById(companyId);
+            map.put("oldCompany", oldCompany);
+            List<TDictionaryId> dicts = systemService.findTDictionaryByType(30);//法定代表人证件类型
+            map.put("dicts", dicts);
+            TModifyCompany newCompany = companyService.getModifyCompanyById(companyId);
+            map.put("newCompany", newCompany);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/CompanyDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/CompanyDao.java
index 419f52b..14fed65 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/CompanyDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/CompanyDao.java
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.system.domain.TCompany;
+import com.supwisdom.dlpay.system.domain.TModifyCompany;
 import com.supwisdom.dlpay.system.page.Pagination;
 
 import java.util.List;
@@ -29,4 +30,12 @@
     public TCompany getCheckCompanyById(String companyId);
 
     public List<TCompany> getValidCompanyList();
+
+    public TModifyCompany getModifyCompanyById(String companyId);
+
+    public boolean saveModifyCompany(TModifyCompany bean);
+
+    public TModifyCompany getModifyCompanyByNameAndId(String companyName,String companyId);
+
+    public boolean updateModifyCompany(TModifyCompany bean);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/CompanyDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/CompanyDaoImpl.java
index 4196ef8..131f5af 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/CompanyDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/CompanyDaoImpl.java
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.dao.CompanyDao;
 import com.supwisdom.dlpay.system.domain.TCompany;
+import com.supwisdom.dlpay.system.domain.TModifyCompany;
 import com.supwisdom.dlpay.system.page.Pagination;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
@@ -268,4 +269,57 @@
         }
         return null;
     }
+
+    @Transactional
+    @Override
+    public TModifyCompany getModifyCompanyById(String companyId) {
+        String sql = " select a from TModifyCompany a where a.companyId = :companyId";
+        TypedQuery<TModifyCompany> query = entityManager.createQuery(sql, TModifyCompany.class);
+        query.setParameter("companyId", companyId);
+        List<TModifyCompany> list = query.getResultList();
+        if (list!=null && list.size()>0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
+    public boolean saveModifyCompany(TModifyCompany bean) {
+        boolean flag=false;
+        try {
+            entityManager.persist(bean);
+            flag=true;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    @Transactional
+    @Override
+    public TModifyCompany getModifyCompanyByNameAndId(String companyName, String companyId) {
+        String sql = "select a from TModifyCompany a where a.companyName = :companyName and a.companyId <>:companyId and a.status='1' ";
+        TypedQuery<TModifyCompany> query = entityManager.createQuery(sql, TModifyCompany.class);
+        query.setParameter("companyName", companyName );
+        query.setParameter("companyId",  companyId);
+        List<TModifyCompany> list = query.getResultList();
+        if (list!=null && list.size()>0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
+    public boolean updateModifyCompany(TModifyCompany bean) {
+        boolean flag = false;
+        try {
+            entityManager.merge(bean);
+            flag = true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/domain/TModifyCompany.java b/src/main/java/com/supwisdom/dlpay/system/domain/TModifyCompany.java
new file mode 100644
index 0000000..33c59ef
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/domain/TModifyCompany.java
@@ -0,0 +1,129 @@
+package com.supwisdom.dlpay.system.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "TB_MODIFY_COMPANY")
+public class TModifyCompany {
+    private String companyId;
+    private String companyName;
+    private String licenseId;
+    private String companyAddress;
+    private String legalPeople;
+    private String legalPeopleCardType;
+    private String legalPeopleCardId;
+    private String companyPhone;
+    private String remarks;
+    private String status;
+
+    public TModifyCompany() {
+    }
+
+    public TModifyCompany(String companyId, String companyName, String licenseId, String companyAddress, String legalPeople, String legalPeopleCardType, String legalPeopleCardId, String companyPhone, String remarks, String status) {
+        this.companyId = companyId;
+        this.companyName = companyName;
+        this.licenseId = licenseId;
+        this.companyAddress = companyAddress;
+        this.legalPeople = legalPeople;
+        this.legalPeopleCardType = legalPeopleCardType;
+        this.legalPeopleCardId = legalPeopleCardId;
+        this.companyPhone = companyPhone;
+        this.remarks = remarks;
+        this.status = status;
+    }
+
+    @Id
+    @Column(name = "COMPANYID", unique = true, nullable = false, length = 32)
+    public String getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(String companyId) {
+        this.companyId = companyId;
+    }
+
+    @Column(name="COMPANYNAME", length = 255)
+    public String getCompanyName() {
+        return companyName;
+    }
+
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+
+    @Column(name = "LICENSEID",length = 32)
+    public String getLicenseId() {
+        return licenseId;
+    }
+
+    public void setLicenseId(String licenseId) {
+        this.licenseId = licenseId;
+    }
+
+    @Column(name = "COMPANYADDRESS",length = 255)
+    public String getCompanyAddress() {
+        return companyAddress;
+    }
+
+    public void setCompanyAddress(String companyAddress) {
+        this.companyAddress = companyAddress;
+    }
+
+    @Column(name = "LEGALPEOPLE",length = 20)
+    public String getLegalPeople() {
+        return legalPeople;
+    }
+
+    public void setLegalPeople(String legalPeople) {
+        this.legalPeople = legalPeople;
+    }
+
+    @Column(name = "LEGALPEOPLECARDTYPE",length = 20)
+    public String getLegalPeopleCardType() {
+        return legalPeopleCardType;
+    }
+
+    public void setLegalPeopleCardType(String legalPeopleCardType) {
+        this.legalPeopleCardType = legalPeopleCardType;
+    }
+
+    @Column(name = "LEGALPEOPLECARDID",length = 60)
+    public String getLegalPeopleCardId() {
+        return legalPeopleCardId;
+    }
+
+    public void setLegalPeopleCardId(String legalPeopleCardId) {
+        this.legalPeopleCardId = legalPeopleCardId;
+    }
+
+    @Column(name = "COMPANYPHONE",length = 20)
+    public String getCompanyPhone() {
+        return companyPhone;
+    }
+
+    public void setCompanyPhone(String companyPhone) {
+        this.companyPhone = companyPhone;
+    }
+
+
+    @Column(name = "REMARKS",length = 255)
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    @Column(name = "STATUS",length = 10)
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/CompanyService.java b/src/main/java/com/supwisdom/dlpay/system/service/CompanyService.java
index c9c90ba..971d135 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/CompanyService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/CompanyService.java
@@ -3,6 +3,7 @@
 
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.system.domain.TCompany;
+import com.supwisdom.dlpay.system.domain.TModifyCompany;
 import com.supwisdom.dlpay.system.page.Pagination;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -53,4 +54,20 @@
     //获取所有不需要审核且有效的公司
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TCompany> getValidCompanyList();
+
+    //根据公司id获取公司修改表公司信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public TModifyCompany getModifyCompanyById(String companyId);
+
+    //保存公司修改表
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean saveModifyCompany(TModifyCompany bean);
+
+    //根据id和名称获取非本id的相同名称且有效的修改公司
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public TModifyCompany getModifyCompanyByNameAndId(String companyName,String companyId);
+
+    //修改修改公司表信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean updateModifyCompany(TModifyCompany bean);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/CompanyServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/CompanyServiceImpl.java
index 109de81..aa331d2 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/CompanyServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/CompanyServiceImpl.java
@@ -3,6 +3,7 @@
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.system.dao.CompanyDao;
 import com.supwisdom.dlpay.system.domain.TCompany;
+import com.supwisdom.dlpay.system.domain.TModifyCompany;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.CompanyService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -70,4 +71,24 @@
     public List<TCompany> getValidCompanyList() {
         return companyDao.getValidCompanyList();
     }
+
+    @Override
+    public TModifyCompany getModifyCompanyById(String companyId) {
+        return companyDao.getModifyCompanyById(companyId);
+    }
+
+    @Override
+    public boolean saveModifyCompany(TModifyCompany bean) {
+        return companyDao.saveModifyCompany(bean);
+    }
+
+    @Override
+    public TModifyCompany getModifyCompanyByNameAndId(String companyName, String companyId) {
+        return companyDao.getModifyCompanyByNameAndId(companyName, companyId);
+    }
+
+    @Override
+    public boolean updateModifyCompany(TModifyCompany bean) {
+        return companyDao.updateModifyCompany(bean);
+    }
 }
diff --git a/src/main/resources/templates/system/companyCheck.html b/src/main/resources/templates/system/companyCheck.html
index b09ebd8..ce73985 100644
--- a/src/main/resources/templates/system/companyCheck.html
+++ b/src/main/resources/templates/system/companyCheck.html
@@ -100,7 +100,7 @@
                             label="操作"
                             width="130">
                         <template scope="scope">
-                            <button type="button" class="btn btn-info btn-xs" title="查看详情" @click="details(scope.row.companyId)" >查看详情</button>
+                            <button type="button" class="btn btn-info btn-xs" title="查看详情" @click="details(scope.row.companyId)" v-if="scope.row.checkFlag=='修改'" >查看详情</button>
                             <button type="button" class="btn btn-success btn-xs" title="审核通过" @click="checkPass(scope.row.companyId)" >审核通过</button>
                             <button type="button" class="btn btn-danger btn-xs" title="审核驳回" @click="checkFail(scope.row.companyId)" >审核驳回</button>
                         </template>
@@ -134,6 +134,231 @@
                 </div>
             </el-dialog>
 
+
+            <el-dialog :title="companyDetailstitle" :visible.sync="dialogDetailsVisible"  :modal-append-to-body='false' @close="closeDialog('companyDetailsForm')">
+                <el-form ref="companyDetailsForm" :model="companyDetailsForm" :rules="rules" label-width="36%" >
+
+                    <div>
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧公司名称:" prop="oldCompanyName">
+                                    <div class="el-col el-col-10">
+                                        <div class="el-input" style="width: 187px;" >
+                                            <el-input v-model="companyDetailsForm.oldCompanyName" :disabled="true">
+
+                                            </el-input>
+                                        </div>
+                                    </div>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新公司名称:" prop="newCompanyName">
+                                    <div class="el-col el-col-10">
+                                        <div class="el-input" style="width: 187px;">
+                                            <el-input v-model="companyDetailsForm.newCompanyName" :disabled="true">
+
+                                            </el-input>
+                                        </div>
+                                    </div>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧营业执照编号:" prop="oldLicenseId">
+                                    <el-col :span="18">
+                                        <div class="el-input" style="width: 187px;">
+                                            <el-input v-model="companyDetailsForm.oldLicenseId" :disabled="true">
+
+                                            </el-input>
+                                        </div>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新营业执照编号:" prop="newLicenseId">
+                                    <el-col :span="18">
+                                        <div class="el-input" style="width: 187px;">
+                                            <el-input v-model="companyDetailsForm.newLicenseId" :disabled="true">
+
+                                            </el-input>
+                                        </div>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧公司地址:" prop="oldCompanyAddress">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.oldCompanyAddress"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新公司地址:" prop="newCompanyAddress">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.newCompanyAddress"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧法定代表人:" prop="oldLegalPeople">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.oldLegalPeople"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新法定代表人:" prop="newLegalPeople">
+                                <el-col :span="18">
+                                    <el-input v-model="companyDetailsForm.newLegalPeople"  style="width: 187px;" :disabled="true">
+
+                                    </el-input>
+                                </el-col>
+                            </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧法定代表人证件类型:" prop="oldLegalPeopleCardType">
+                                    <el-col :span="18">
+                                        <el-select v-model="companyDetailsForm.oldLegalPeopleCardType"
+                                                   style="width: 187px;" clearable
+                                                   filterable
+                                                   placeholder="请选择" :disabled="true">
+                                            <el-option
+                                                    v-for="oldLegalPeopleCardType in legalPeopleCardTypes"
+                                                    :key="oldLegalPeopleCardType.value"
+                                                    :label="oldLegalPeopleCardType.label"
+                                                    :value="oldLegalPeopleCardType.value">
+                                            </el-option>
+                                        </el-select>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新法定代表人证件类型:" prop="newLegalPeopleCardType">
+                                    <el-col :span="18">
+                                        <el-select v-model="companyDetailsForm.newLegalPeopleCardType"
+                                                   style="width: 187px;" clearable
+                                                   filterable
+                                                   placeholder="请选择" :disabled="true">
+                                            <el-option
+                                                    v-for="newLegalPeopleCardType in legalPeopleCardTypes"
+                                                    :key="newLegalPeopleCardType.value"
+                                                    :label="newLegalPeopleCardType.label"
+                                                    :value="newLegalPeopleCardType.value">
+                                            </el-option>
+                                        </el-select>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧法定代表人证件号码:" prop="oldLegalPeopleCardId">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.oldLegalPeopleCardId"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新法定代表人证件号码:" prop="newLegalPeopleCardId">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.newLegalPeopleCardId"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧公司联系方式:" prop="oldCompanyPhone">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.oldCompanyPhone"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新公司联系方式:" prop="newCompanyPhone">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.newCompanyPhone"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                        <el-row>
+                            <div class="el-col el-col-12">
+                                <el-form-item label="旧备注:" prop="oldRemarks">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.oldRemarks"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+
+                            <el-divider direction="vertical"></el-divider>
+
+                            <div class="el-col el-col-12">
+                                <el-form-item label="新备注:" prop="newRemarks">
+                                    <el-col :span="18">
+                                        <el-input v-model="companyDetailsForm.newRemarks"  style="width: 187px;" :disabled="true">
+
+                                        </el-input>
+                                    </el-col>
+                                </el-form-item>
+                            </div>
+                        </el-row>
+
+                    </div>
+                </el-form>
+            </el-dialog>
+
         </div>
     </div>
 </div>
@@ -151,16 +376,37 @@
                 companyName:''
             },
             selectList:[],
+            legalPeopleCardTypes:[],
             dialogFormVisible: false,
+            dialogDetailsVisible:false,
             companyCheckDiaForm:{
                 companyId:'',
                 checkMessage:''
             },
+            companyDetailsForm:{
+                oldCompanyName:'',
+                oldLicenseId:'',
+                oldCompanyAddress:'',
+                oldLegalPeople:'',
+                oldLegalPeopleCardType:'',
+                oldLegalPeopleCardId:'',
+                oldCompanyPhone:'',
+                oldRemarks:'',
+
+                newCompanyName:'',
+                newLicenseId:'',
+                newCompanyAddress:'',
+                newLegalPeople:'',
+                newLegalPeopleCardType:'',
+                newLegalPeopleCardId:'',
+                newCompanyPhone:'',
+                newRemarks:''
+            },
             rules:{
 
             },
             companyChecktitile:'审核结果',
-
+            companyDetailstitle:'信息对比',
         },
 
         methods:{
@@ -182,6 +428,11 @@
                 this.currPage=1;
                 companyCheck_commonQuery(this,this.companyCheckform.companyName,this.currPage,this.pageSize);
             },
+            details:function(companyId){
+                companyCheck_getDetails(this,companyId);
+                this.dialogDetailsVisible = true;
+                this.companyDetailstitle="信息对比";
+            },
             checkFail:function (companyId) {
                 companyCheck_getFillData(this,companyId);
                 this.dialogFormVisible = true;
@@ -211,6 +462,7 @@
                     this.$refs[formName].resetFields();
                 }
                 this.dialogFormVisible = false;
+                this.dialogDetailsVisible = false;
             },
             saveCheckMessage:function (formName) {
                 var _that=this;
@@ -300,14 +552,14 @@
                 url:"[[@{/company/checkPass?companyId=}]]"+companyId,
                 success:function(ret){
                     if(ret.message == undefined){
-                        layer.msg('用户认证已过期，请重新登录', {icon:2,time:1000});
+                        layer.msg('用户认证已过期，请重新登录', {icon:2,time:2000});
                         window.location='@{/login}';
                         return;
                     }
                     if (ret.message != "") {
-                        layer.msg(ret.message, {icon: 2, time: 1000});
+                        layer.msg(ret.message, {icon: 2, time: 2000});
                     } else {
-                        layer.msg('审核成功', {icon: 1, time: 1000});
+                        layer.msg('审核成功', {icon: 1, time: 2000});
                         companyCheck_refreshThisTable();
                     }
                 }
@@ -318,7 +570,7 @@
     function companyCheck_batchPass() {
         var passList = companyCheck_vue.selectList;
         if (passList == '') {
-            layer.msg('请选择要审核的公司！', {icon: 2, time: 1000});
+            layer.msg('请选择要审核的公司！', {icon: 2, time: 2000});
         } else {
             var url = "[[@{/company/batchCheckPass}]]";
             var token=$("meta[name='_csrf_token']").attr("value");
@@ -335,7 +587,7 @@
                     },
                     data: JSON.stringify(passList),
                     success: function (data) {
-                        layer.msg(data.result);
+                        layer.msg(data.result,{time:2000});
                         companyCheck_refreshThisTable();
                     }
                 });
@@ -362,9 +614,9 @@
             data: JSON.stringify(formdata),
             success: function (data) {
                 if (data.errStr != "") {
-                    layer.msg(data.errStr, {icon: 2,time:1000});
+                    layer.msg(data.errStr, {icon: 2,time:2000});
                 } else {
-                    layer.msg('审核驳回，保存审核结果成功!', {icon: 1,time:1000});
+                    layer.msg('审核驳回，保存审核结果成功!', {icon: 1,time:2000});
                     companyCheck_refreshThisTable();
                     _that.$refs[formName].resetFields();
                     _that.dialogFormVisible = false;
@@ -420,6 +672,49 @@
     }
 
 
+    function companyCheck_getDetails(_self,id) {
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: encodeURI("[[@{/company/getCheckDetails?companyId=}]]" + id),
+            success: function (ret) {
+                var dictlist = [];
+                var dict = ret.dicts;
+                for (var i = 0; i < dict.length; i++) {
+                    dictlist.push({
+                        value: dict[i]["dictval"],
+                        label: dict[i]["dictcaption"]
+
+                    });
+                }
+                _self.legalPeopleCardTypes = dictlist;
+
+                if (ret.oldCompany != null) {
+                    _self.companyDetailsForm.oldCompanyName = ret.oldCompany.companyName;
+                    _self.companyDetailsForm.oldLicenseId = ret.oldCompany.licenseId;
+                    _self.companyDetailsForm.oldCompanyAddress = ret.oldCompany.companyAddress;
+                    _self.companyDetailsForm.oldLegalPeople = ret.oldCompany.legalPeople;
+                    _self.companyDetailsForm.oldLegalPeopleCardType = ret.oldCompany.legalPeopleCardType;
+                    _self.companyDetailsForm.oldLegalPeopleCardId = ret.oldCompany.legalPeopleCardId;
+                    _self.companyDetailsForm.oldCompanyPhone = ret.oldCompany.companyPhone;
+                    _self.companyDetailsForm.oldRemarks = ret.oldCompany.remarks;
+                }
+
+                if (ret.newCompany !=null){
+                    _self.companyDetailsForm.newCompanyName = ret.newCompany.companyName;
+                    _self.companyDetailsForm.newLicenseId = ret.newCompany.licenseId;
+                    _self.companyDetailsForm.newCompanyAddress = ret.newCompany.companyAddress;
+                    _self.companyDetailsForm.newLegalPeople = ret.newCompany.legalPeople;
+                    _self.companyDetailsForm.newLegalPeopleCardType = ret.newCompany.legalPeopleCardType;
+                    _self.companyDetailsForm.newLegalPeopleCardId = ret.newCompany.legalPeopleCardId;
+                    _self.companyDetailsForm.newCompanyPhone = ret.newCompany.companyPhone;
+                    _self.companyDetailsForm.newRemarks = ret.newCompany.remarks;
+                }
+            }
+        })
+    }
+
+
 </script>
 
 
