Browse Source

花名册同步子系统

lizhenhao 1 year ago
parent
commit
e27deb484d

+ 1 - 1
.env.development

@@ -5,7 +5,7 @@ ENV = 'development'
 VUE_APP_BASE_API = '/api'
 
 # Jeeplus快速开发平台/后台地址
-VUE_APP_SERVER_URL = 'http://localhost:8084'
+VUE_APP_SERVER_URL = 'http://localhost:8085'
 
 #单点登录设置
 VUE_APP_SSO_LOGIN  = 'false'

+ 21 - 0
src/api/roster/RosterService.js

@@ -58,4 +58,25 @@ export default class RosterService {
       responseType: 'blob'
     })
   }
+  checkIsSyncFailed (rosterId) {
+    return request({
+      url: '/roster/base/checkIsSyncFailed',
+      method: 'get',
+      params: {rosterId: rosterId}
+    })
+  }
+  getPushFailedMsg (rosterId) {
+    return request({
+      url: '/roster/base/getPushFailedMsg',
+      method: 'get',
+      params: {rosterId: rosterId}
+    })
+  }
+  pushRosterSync (data) {
+    return request({
+      url: '/roster/base/pushRosterSync',
+      method: 'post',
+      data: data
+    })
+  }
 }

+ 264 - 199
src/views/modules/roster/RosterForm.vue

@@ -4,21 +4,21 @@
       :title="title"
       :close-on-click-modal="false"
       v-dialogDrag
-      width="1000px"
+      width="1300px"
       @close="close"
       @keyup.enter.native="doSubmit"
       :visible.sync="visible">
-      <el-row>
-        <el-col :span="24">
-          <el-tabs v-model="activeName" @tab-click="tabHandleClick" :before-leave="tabBeforeLeave">
-            <el-tab-pane v-for="(item, index) in $dictUtils.getDictList('roster_person_type')" :label="item.label" :name="item.value">
+<!--      <el-row>-->
+<!--        <el-col :span="24">-->
+<!--          <el-tabs v-model="activeName" @tab-click="tabHandleClick" :before-leave="tabBeforeLeave">-->
+<!--            <el-tab-pane v-for="(item, index) in $dictUtils.getDictList('roster_person_type')" :label="item.label" :name="item.value">-->
 
-            </el-tab-pane>
-          </el-tabs>
-        </el-col>
-      </el-row>
+<!--            </el-tab-pane>-->
+<!--          </el-tabs>-->
+<!--        </el-col>-->
+<!--      </el-row>-->
       <el-form size="middle" :model="inputForm" ref="inputForm" :rules="rules" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
-               label-width="125px" @submit.native.prevent>
+               label-width="140px" @submit.native.prevent>
 
         <el-divider content-position="left"><i class="el-icon-document"></i> 基础信息</el-divider>
         <div v-if="activeName === '1'" :key="keydiv1">
@@ -56,6 +56,31 @@
               <el-input v-model="inputForm.name" placeholder="请填写姓名"     clearable></el-input>
             </el-form-item>
           </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="是否允许登录" prop="loginFlag" :rules="[{required: true, message: '必须选择', trigger: 'blur'}]">
+              <el-radio-group v-model="inputForm.loginFlag">
+                <el-radio v-for="item in this.$dictUtils.getDictList('yes_no')" :label="item.value" :key="item.id">{{item.label}}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="密码:" prop="newPassword" :rules="inputForm.id?[]:[{required: true, message:'密码不能为空', trigger:'blur'}]">
+              <el-input v-model="inputForm.newPassword" maxlength="50" :placeholder="inputForm.id?'若不修改,请留空':'请输入密码'" show-password></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="确认密码" prop="confirmNewPassword" :rules="inputForm.id?[{validator: validatePass2, trigger: 'blur'}]:[{required: true, message:'确认密码不能为空', trigger:'blur'},{validator: validatePass2, trigger: 'blur'}]">
+              <el-input v-model="inputForm.confirmNewPassword" maxlength="50" :placeholder="inputForm.id?'':'请再次输入密码'" show-password></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="访问其他服务权限" prop="otherServiceFlag" :rules="[{required: true, message: '必须选择', trigger: 'blur'}]">
+              <el-radio-group size="middle" v-model="inputForm.otherServiceFlag">
+                <el-radio v-for="item in $dictUtils.getDictList('yes_no')" :label="item.value" :key="item.id">{{item.label}}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
           <el-col :span="12" >
             <el-form-item prop="officeId" :rules="[{required: true, message: '部门不能为空', trigger: 'blur'}]" label="部门">
               <SelectTree
@@ -1116,178 +1141,178 @@
             </el-col>
           </el-row>
         </div>
-        <el-divider content-position="left"><i class="el-icon-document"></i> 人员资质</el-divider>
-        <div>
-          <el-row  :gutter="15" :key="index_certDto" v-for="(item,index_certDto) in inputForm.certDTOList">
-            <el-col :span="24">
-              <el-form-item label="" >
-                <el-divider content-position="left"> 人员资质 {{index_certDto + 1}}</el-divider>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="证书类型" :prop="'certDTOList[' + index_certDto + '].type'"
-                            :rules="[
-                            {required: true, message: '证书类型不能为空', trigger: 'change'}
-             ]">
-                <el-select v-model="inputForm.certDTOList[index_certDto].type" filterable @change="changeType(index_certDto)" placeholder="请选择证书类型"  style="width: 100%;">
-                  <el-option
-                    v-for="item in $dictUtils.getDictList('sys_cert_type')"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="证书编号" :prop="'certDTOList[' + index_certDto + '].no'"
-                            :rules="[
-                            {required: true, message: '证书编号不能为空', trigger: 'change'}
-             ]">
-                <el-input v-model="inputForm.certDTOList[index_certDto].no" placeholder="请填写证书编号"     clearable></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="发证机关" :prop="'certDTOList[' + index_certDto + '].authorities'"
-                            :rules="[
-             ]">
-                <el-input v-model="inputForm.certDTOList[index_certDto].authorities" placeholder="请填写发证机关"     clearable></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="发证日期" :prop="'certDTOList[' + index_certDto + '].issuedDate'"
-                            :rules="[
-             ]">
-                <el-date-picker
-                  placement="bottom-start"
-                  style="width: 100%"
-                  v-model="inputForm.certDTOList[index_certDto].issuedDate"
-                  type="date"
-                  placeholder="选择发证日期">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="注册日期" :prop="'certDTOList[' + index_certDto + '].enrollDate'"
-                            :rules="[
-             ]">
-                <el-date-picker
-                  placement="bottom-start"
-                  style="width: 100%"
-                  v-model="inputForm.certDTOList[index_certDto].enrollDate"
-                  type="date"
-                  placeholder="选择注册日期">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="到期日期" :prop="'certDTOList[' + index_certDto + '].expireDate'"
-                            :rules="[
-                            {required: true, message: '到期日期不能为空', trigger: 'blur'}
-             ]">
-                <el-date-picker
-                  placement="bottom-start"
-                  style="width: 100%"
-                  v-model="inputForm.certDTOList[index_certDto].expireDate"
-                  type="date"
-                  placeholder="选择到期日期">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="注册证书编号" :prop="'certDTOList[' + index_certDto + '].enrollCertNo'"
-                            :rules="[
-             ]">
-                <el-input v-model="inputForm.certDTOList[index_certDto].enrollCertNo" placeholder="请填写注册证书编号"     clearable></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="专业" :prop="'certDTOList[' + index_certDto + '].profession'"
-                            :rules="[
-             ]">
-                <el-select v-model="inputForm.certDTOList[index_certDto].profession" @change="changeProfession" placeholder="请填写专业"  style="width: 100%;">
-                  <el-option
-                    v-for="item in inputForm.certDTOList[index_certDto].professionList"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="附件" :prop="'certDTOList[' + index_certDto + '].fileUrl'"
-                            :rules="[
-               ]">
-                <el-popover
-                  placement="left"
-                  trigger="hover">
-                  <el-button style="width: 100%" @click="onPreview(inputForm.certDTOList[index_certDto].fileLsUrl)" :disabled="false" icon="el-icon-zoom-in"></el-button>
-                  <el-upload
-                    slot="reference"
-                    class="avatar-uploader"
-                    :action="`${$http.BASE_URL}/roster/base/webUpload/upload`"
-                    :show-file-list="false"
-                    :on-success="(response, file, fileList) => {
-                  return handleAvatarSuccess(response, file, fileList, index_certDto, 'certDto')
-                }"
-                    :before-upload="checkIsPic"
-                  >
-                    <img v-if="inputForm.certDTOList[index_certDto].fileLsUrl"
-                         style="width: 150px; height: 150px; line-height: 150px"
-                         :src="inputForm.certDTOList[index_certDto].fileLsUrl"/>
-                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-                  </el-upload>
-                </el-popover>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24" style="text-align: center">
-              <el-form-item label="" >
-                <el-button style="width: 50%" type="danger" @click="delRow(index_certDto,'certDto')" plain>删除人员资质 {{index_certDto + 1}}</el-button>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="15">
-            <el-col :span="24">
-              <el-form-item label="" >
-                <el-button style="width: 100%" type="primary" @click="addRow('certDto')" plain>新增人员资质</el-button>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </div>
-        <el-divider content-position="left"><i class="el-icon-document"></i> 直属领导</el-divider>
-        <el-row  :gutter="15">
-          <el-col :span="12">
-            <el-form-item label="汇报类型" prop="rosterLeadershipDTO.debriefType"
-                          :rules="[
-               ]">
-              <el-select v-model="inputForm.rosterLeadershipDTO.debriefType" style="width:100%" placeholder="请选择汇报类型">
-                <el-option
-                  v-for="item in $dictUtils.getDictList('debrief_type')"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="汇报对象" prop="rosterLeadershipDTO.supervisorId"
-                          :rules="[
-               ]">
-              <!--              <el-select v-model="inputForm.rosterLeadershipDTO.supervisorId" style="width:100%" placeholder="请选择汇报对象">-->
-              <!--                <el-option-->
-              <!--                  v-for="item in supervisorList"-->
-              <!--                  :key="item.id"-->
-              <!--                  :label="item.name"-->
-              <!--                  :value="item.id">-->
-              <!--                </el-option>-->
-              <!--              </el-select>-->
-              <UserSelect :limit='1' size="middle" :readonly="true" :value="inputForm.rosterLeadershipDTO.supervisorId" @getValue='(value, label) => {inputForm.rosterLeadershipDTO.supervisorId = value}'></UserSelect>
+<!--        <el-divider content-position="left"><i class="el-icon-document"></i> 人员资质</el-divider>-->
+<!--        <div>-->
+<!--          <el-row  :gutter="15" :key="index_certDto" v-for="(item,index_certDto) in inputForm.certDTOList">-->
+<!--            <el-col :span="24">-->
+<!--              <el-form-item label="" >-->
+<!--                <el-divider content-position="left"> 人员资质 {{index_certDto + 1}}</el-divider>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="证书类型" :prop="'certDTOList[' + index_certDto + '].type'"-->
+<!--                            :rules="[-->
+<!--                            {required: true, message: '证书类型不能为空', trigger: 'change'}-->
+<!--             ]">-->
+<!--                <el-select v-model="inputForm.certDTOList[index_certDto].type" filterable @change="changeType(index_certDto)" placeholder="请选择证书类型"  style="width: 100%;">-->
+<!--                  <el-option-->
+<!--                    v-for="item in $dictUtils.getDictList('sys_cert_type')"-->
+<!--                    :key="item.value"-->
+<!--                    :label="item.label"-->
+<!--                    :value="item.value">-->
+<!--                  </el-option>-->
+<!--                </el-select>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="证书编号" :prop="'certDTOList[' + index_certDto + '].no'"-->
+<!--                            :rules="[-->
+<!--                            {required: true, message: '证书编号不能为空', trigger: 'change'}-->
+<!--             ]">-->
+<!--                <el-input v-model="inputForm.certDTOList[index_certDto].no" placeholder="请填写证书编号"     clearable></el-input>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="发证机关" :prop="'certDTOList[' + index_certDto + '].authorities'"-->
+<!--                            :rules="[-->
+<!--             ]">-->
+<!--                <el-input v-model="inputForm.certDTOList[index_certDto].authorities" placeholder="请填写发证机关"     clearable></el-input>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="发证日期" :prop="'certDTOList[' + index_certDto + '].issuedDate'"-->
+<!--                            :rules="[-->
+<!--             ]">-->
+<!--                <el-date-picker-->
+<!--                  placement="bottom-start"-->
+<!--                  style="width: 100%"-->
+<!--                  v-model="inputForm.certDTOList[index_certDto].issuedDate"-->
+<!--                  type="date"-->
+<!--                  placeholder="选择发证日期">-->
+<!--                </el-date-picker>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="注册日期" :prop="'certDTOList[' + index_certDto + '].enrollDate'"-->
+<!--                            :rules="[-->
+<!--             ]">-->
+<!--                <el-date-picker-->
+<!--                  placement="bottom-start"-->
+<!--                  style="width: 100%"-->
+<!--                  v-model="inputForm.certDTOList[index_certDto].enrollDate"-->
+<!--                  type="date"-->
+<!--                  placeholder="选择注册日期">-->
+<!--                </el-date-picker>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="到期日期" :prop="'certDTOList[' + index_certDto + '].expireDate'"-->
+<!--                            :rules="[-->
+<!--                            {required: true, message: '到期日期不能为空', trigger: 'blur'}-->
+<!--             ]">-->
+<!--                <el-date-picker-->
+<!--                  placement="bottom-start"-->
+<!--                  style="width: 100%"-->
+<!--                  v-model="inputForm.certDTOList[index_certDto].expireDate"-->
+<!--                  type="date"-->
+<!--                  placeholder="选择到期日期">-->
+<!--                </el-date-picker>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="注册证书编号" :prop="'certDTOList[' + index_certDto + '].enrollCertNo'"-->
+<!--                            :rules="[-->
+<!--             ]">-->
+<!--                <el-input v-model="inputForm.certDTOList[index_certDto].enrollCertNo" placeholder="请填写注册证书编号"     clearable></el-input>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="专业" :prop="'certDTOList[' + index_certDto + '].profession'"-->
+<!--                            :rules="[-->
+<!--             ]">-->
+<!--                <el-select v-model="inputForm.certDTOList[index_certDto].profession" @change="changeProfession" placeholder="请填写专业"  style="width: 100%;">-->
+<!--                  <el-option-->
+<!--                    v-for="item in inputForm.certDTOList[index_certDto].professionList"-->
+<!--                    :key="item.value"-->
+<!--                    :label="item.label"-->
+<!--                    :value="item.value">-->
+<!--                  </el-option>-->
+<!--                </el-select>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="12">-->
+<!--              <el-form-item label="附件" :prop="'certDTOList[' + index_certDto + '].fileUrl'"-->
+<!--                            :rules="[-->
+<!--               ]">-->
+<!--                <el-popover-->
+<!--                  placement="left"-->
+<!--                  trigger="hover">-->
+<!--                  <el-button style="width: 100%" @click="onPreview(inputForm.certDTOList[index_certDto].fileLsUrl)" :disabled="false" icon="el-icon-zoom-in"></el-button>-->
+<!--                  <el-upload-->
+<!--                    slot="reference"-->
+<!--                    class="avatar-uploader"-->
+<!--                    :action="`${$http.BASE_URL}/roster/base/webUpload/upload`"-->
+<!--                    :show-file-list="false"-->
+<!--                    :on-success="(response, file, fileList) => {-->
+<!--                  return handleAvatarSuccess(response, file, fileList, index_certDto, 'certDto')-->
+<!--                }"-->
+<!--                    :before-upload="checkIsPic"-->
+<!--                  >-->
+<!--                    <img v-if="inputForm.certDTOList[index_certDto].fileLsUrl"-->
+<!--                         style="width: 150px; height: 150px; line-height: 150px"-->
+<!--                         :src="inputForm.certDTOList[index_certDto].fileLsUrl"/>-->
+<!--                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>-->
+<!--                  </el-upload>-->
+<!--                </el-popover>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--            <el-col :span="24" style="text-align: center">-->
+<!--              <el-form-item label="" >-->
+<!--                <el-button style="width: 50%" type="danger" @click="delRow(index_certDto,'certDto')" plain>删除人员资质 {{index_certDto + 1}}</el-button>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--          <el-row :gutter="15">-->
+<!--            <el-col :span="24">-->
+<!--              <el-form-item label="" >-->
+<!--                <el-button style="width: 100%" type="primary" @click="addRow('certDto')" plain>新增人员资质</el-button>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
+<!--        </div>-->
+<!--        <el-divider content-position="left"><i class="el-icon-document"></i> 直属领导</el-divider>-->
+<!--        <el-row  :gutter="15">-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="汇报类型" prop="rosterLeadershipDTO.debriefType"-->
+<!--                          :rules="[-->
+<!--               ]">-->
+<!--              <el-select v-model="inputForm.rosterLeadershipDTO.debriefType" style="width:100%" placeholder="请选择汇报类型">-->
+<!--                <el-option-->
+<!--                  v-for="item in $dictUtils.getDictList('debrief_type')"-->
+<!--                  :key="item.value"-->
+<!--                  :label="item.label"-->
+<!--                  :value="item.value">-->
+<!--                </el-option>-->
+<!--              </el-select>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="汇报对象" prop="rosterLeadershipDTO.supervisorId"-->
+<!--                          :rules="[-->
+<!--               ]">-->
+<!--              &lt;!&ndash;              <el-select v-model="inputForm.rosterLeadershipDTO.supervisorId" style="width:100%" placeholder="请选择汇报对象">&ndash;&gt;-->
+<!--              &lt;!&ndash;                <el-option&ndash;&gt;-->
+<!--              &lt;!&ndash;                  v-for="item in supervisorList"&ndash;&gt;-->
+<!--              &lt;!&ndash;                  :key="item.id"&ndash;&gt;-->
+<!--              &lt;!&ndash;                  :label="item.name"&ndash;&gt;-->
+<!--              &lt;!&ndash;                  :value="item.id">&ndash;&gt;-->
+<!--              &lt;!&ndash;                </el-option>&ndash;&gt;-->
+<!--              &lt;!&ndash;              </el-select>&ndash;&gt;-->
+<!--              <UserSelect :limit='1' size="middle" :readonly="true" :value="inputForm.rosterLeadershipDTO.supervisorId" @getValue='(value, label) => {inputForm.rosterLeadershipDTO.supervisorId = value}'></UserSelect>-->
 
-            </el-form-item>
-          </el-col>
-        </el-row>
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
         </div>
         <div v-if="activeName === '2'" :key="keydiv2">
           <el-row  :gutter="15">
@@ -1546,7 +1571,11 @@
           postIdList: [],
           roleIdList: [],
           companyId: '',
-          manageOfficeIds: ''
+          manageOfficeIds: '',
+          newPassword: '',
+          confirmNewPassword: '',
+          loginFlag: '',
+          otherServiceFlag: ''
         },
         jobPositionList: [],
         positionList: [],
@@ -1710,7 +1739,11 @@
           postIdList: [],
           roleIdList: [],
           companyId: '',
-          manageOfficeIds: ''
+          manageOfficeIds: '',
+          newPassword: '',
+          confirmNewPassword: '',
+          loginFlag: '',
+          otherServiceFlag: ''
         }
         this.inputForm.id = id
         if (method === 'add') {
@@ -1748,6 +1781,12 @@
             })
           }
           if (method !== 'edit' && method !== 'view') {
+            if (this.commonJS.isEmpty(this.inputForm.loginFlag)) {
+              this.inputForm.loginFlag = '1'
+            }
+            if (this.commonJS.isEmpty(this.inputForm.otherServiceFlag)) {
+              this.inputForm.otherServiceFlag = '0'
+            }
             this.$refs.uploadComponent.newUpload(method, [], 'roster', '', '附件')
           }
         })
@@ -1759,22 +1798,37 @@
             this.loading = true
             if (this.$refs.uploadComponent.checkProgress()) {
               this.loading = false
-              return
+            } else {
+              if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+                this.rosterService.checkIsSyncFailed(this.inputForm.id).then(({data}) => {
+                  if (this.commonJS.isNotEmpty(data) && !data.success) {
+                    // 不允许保存
+                    this.$message.warning(data.message)
+                    this.loading = false
+                  } else {
+                    this.submitTrue()
+                  }
+                })
+              } else {
+                this.submitTrue()
+              }
             }
-            this.inputForm.personType = this.activeName
-            this.checkMoment()
-            this.inputForm.rosterFilesDTOList = this.$refs.uploadComponent.getDataList()
-            this.rosterService.save(this.inputForm).then(({data}) => {
-              this.close()
-              this.$message.success(data)
-              this.$emit('refreshDataList')
-              this.loading = false
-            }).catch(() => {
-              this.loading = false
-            })
           }
         })
       },
+      submitTrue () {
+        this.inputForm.personType = this.activeName
+        this.checkMoment()
+        this.inputForm.rosterFilesDTOList = this.$refs.uploadComponent.getDataList()
+        this.rosterService.save(this.inputForm).then(({data}) => {
+          this.close()
+          this.$message.success(data)
+          this.$emit('refreshDataList')
+          this.loading = false
+        }).catch(() => {
+          this.loading = false
+        })
+      },
       close () {
         this.$refs.uploadComponent.clearUpload()
         this.$refs.inputForm.resetFields()
@@ -1847,7 +1901,11 @@
           postIdList: [],
           roleIdList: [],
           companyId: '',
-          manageOfficeIds: ''
+          manageOfficeIds: '',
+          newPassword: '',
+          confirmNewPassword: '',
+          loginFlag: '',
+          otherServiceFlag: ''
         }
         this.keydiv1 = Math.random()
         this.keydiv2 = Math.random()
@@ -2269,12 +2327,19 @@
       },
       changeProfession () {
         this.$forceUpdate()
+      },
+      validatePass2  (rule, value, callback) {
+        if (value !== this.inputForm.newPassword) {
+          callback(new Error('两次输入密码不一致!'))
+        } else {
+          callback()
+        }
       }
     }
   }
 </script>
 <style scoped>
-  /deep/ .el-form-item__content {
-    line-height: 1px;
-  }
+  /*/deep/ .el-form-item__content {*/
+  /*  line-height: 1px;*/
+  /*}*/
 </style>

+ 63 - 16
src/views/modules/roster/RosterList.vue

@@ -163,9 +163,9 @@
 
             <vxe-column title="操作" width="120px" fixed="right" align="center">
               <template  slot-scope="scope">
-                <!--              <el-button v-if="hasPermission('roster:base:view')" type="text" icon="el-icon-view" size="small" @click="view(scope.row)">查看</el-button>-->
-                <el-button v-if="hasPermission('roster:base:edit')" type="text"  size="small" @click="edit(scope.row)">修改</el-button>
-                <el-button v-if="hasPermission('roster:base:del')" type="text"   size="small" @click="del(scope.row.id)">删除</el-button>
+                <el-button v-if="hasPermission('roster:base:edit') && (commonJS.isEmpty(scope.row.pushFailed) || scope.row.pushFailed)" type="text" size="small" @click="edit(scope.row)">修改</el-button>
+                <el-button v-if="hasPermission('roster:base:del') && (commonJS.isEmpty(scope.row.pushFailed) || scope.row.pushFailed)" type="text"  size="small" @click="del(scope.row.id)">删除</el-button>
+                <el-button v-if="hasPermission('roster:base:edit') && !scope.row.pushFailed" type="text"  size="small" @click="pushData(scope.row.id)">推送</el-button>
               </template>
             </vxe-column>
           </vxe-table>
@@ -341,20 +341,32 @@
       },
       // 删除
       del (id) {
-        let ids = id || this.$refs.rosterTable.getCheckboxRecords().map(item => {
-          return item.id
-        }).join(',')
-        this.$confirm(`删除花名册数据时会将关联的用户数据同时删除,确定删除所选项吗?`, '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          this.loading = true
-          this.rosterService.delete(ids).then(({data}) => {
-            this.$message.success(data)
+        this.rosterService.checkIsSyncFailed(id).then(({data}) => {
+          if (this.commonJS.isNotEmpty(data) && !data.success) {
+            // 不允许删除
+            this.$message.warning(data.message)
             this.refreshList()
-            this.loading = false
-          })
+          } else {
+            let ids = id || this.$refs.rosterTable.getCheckboxRecords().map(item => {
+              return item.id
+            }).join(',')
+            this.$confirm(`删除花名册数据时会同时删除关联的用户数据以及子系统数据,确定删除吗?`, '提示', {
+              confirmButtonText: '确定',
+              cancelButtonText: '取消',
+              type: 'warning'
+            }).then(() => {
+              this.loading = true
+              this.rosterService.delete(ids).then(({data}) => {
+                if (data.success) {
+                  this.$message.success(data.message)
+                } else {
+                  this.$message.warning(data.message)
+                }
+                this.refreshList()
+                this.loading = false
+              })
+            })
+          }
         })
       },
       resetSearch () {
@@ -453,6 +465,41 @@
             console.log(err.response)
           }
         })
+      },
+      pushData (rosterId) {
+        this.loading = true
+        this.rosterService.getPushFailedMsg(rosterId).then(({data}) => {
+          this.loading = false
+          if (this.commonJS.isNotEmpty(data) && !data.success) {
+            this.$confirm(data.message, '提示', {
+              confirmButtonText: '重新推送',
+              cancelButtonText: '取消',
+              type: 'warning'
+            }).then(() => {
+              this.loading = true
+              let param = {
+                id: rosterId
+              }
+              this.rosterService.pushRosterSync(param).then(({data}) => {
+                if (data) {
+                  this.$message.success('推送数据到子系统成功')
+                } else {
+                  this.$message.error('推送数据到子系统失败,请稍后再进行尝试')
+                }
+                this.loading = false
+                this.refreshList()
+              }).catch(() => {
+                this.loading = false
+                this.refreshList()
+              })
+            })
+          } else {
+            this.$message.success('没有需要推送的数据')
+            this.refreshList()
+          }
+        }).catch(() => {
+          this.loading = false
+        })
       }
     }
   }