瀏覽代碼

花名册调整,添加导入功能

lizhenhao 2 年之前
父節點
當前提交
c0d050bf6e

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

@@ -36,4 +36,18 @@ export default class RosterService {
       params: {ids: ids}
     })
   }
+  template () {
+    return request({
+      url: '/roster/base/import/template',
+      method: 'get',
+      responseType: 'blob'
+    })
+  }
+  importExcel (data) {
+    return request({
+      url: '/roster/base/import',
+      method: 'post',
+      data: data
+    })
+  }
 }

+ 36 - 36
src/views/modules/changes/dimission/DimissionList.vue

@@ -62,7 +62,40 @@
               <span v-else>{{!commonJS.isEmpty(scope.row.rosterBaseDTO.name)?scope.row.rosterBaseDTO.name:'--'}}</span>
             </template>
           </vxe-column>
-          <vxe-column width="120" title="离职审批" field="vettingStatus">
+
+          <vxe-column width="200" title="工号" field="rosterBaseDTO.jobNo"></vxe-column>
+          <vxe-column width="200" title="部门" field="soName"></vxe-column>
+          <vxe-column width="200" title="职位" field="jpName"></vxe-column>
+          <vxe-column width="200" title="手机号" field="rosterBaseDTO.mobile"></vxe-column>
+          <vxe-column width="200" title="入职日期" field="rosterBaseDTO.onboardingDate">
+            <template slot-scope="scope">
+              {{moment(scope.row.rosterBaseDTO.onboardingDate).format('YYYY-MM-DD')}}
+            </template>
+          </vxe-column>
+          <vxe-column width="200" title="最后工作日" field="lastWorkDate">
+            <template slot-scope="scope">
+              {{moment(scope.row.lastWorkDate).format('YYYY-MM-DD')}}
+            </template>
+          </vxe-column>
+          <vxe-column width="200" title="离职日期" field="dimissionDate">
+            <template slot-scope="scope">
+              {{moment(scope.row.dimissionDate).format('YYYY-MM-DD')}}
+            </template>
+          </vxe-column>
+          <vxe-column width="200" title="离职原因" field="changesDimissionReaDTOList">
+            <template slot-scope="scope">
+              {{getDimissionReaList(scope.row.changesDimissionReaDTOList)}}
+            </template>
+          </vxe-column>
+          <vxe-column width="200" title="原因说明" field="reasonDesc"></vxe-column>
+          <vxe-column width="200" title="离职类型" field="type">
+            <template slot-scope="scope">
+              {{$dictUtils.getDictLabel('dimission_type', scope.row.type, '-')}}
+            </template>
+          </vxe-column>
+          <vxe-column width="200" title="备注" field="remarks"></vxe-column>
+
+          <vxe-column width="120" title="离职审批" fixed="right" align="center" field="vettingStatus">
             <template slot-scope="scope">
               <el-button v-if="scope.row.vettingStatus === '4'" type="primary" @click="auditDetail(scope.row)" size="mini">
                 {{$dictUtils.getDictLabel("vetting_status", scope.row.vettingStatus, '-')}}
@@ -87,7 +120,7 @@
               </el-button>
             </template>
           </vxe-column>
-          <vxe-column width="120" title="离职交接" field="handoverStatus">
+          <vxe-column width="120" title="离职交接" fixed="right" align="center" field="handoverStatus">
             <template slot-scope="scope">
               <el-button v-if="scope.row.handoverStatus === '3'" type="primary"  @click="handoverDetail(scope.row)" size="mini">
                 {{$dictUtils.getDictLabel('handover_status', scope.row.handoverStatus, '-')}}
@@ -110,7 +143,7 @@
 
             </template>
           </vxe-column>
-          <vxe-column width="120" title="离职状态" field="status">
+          <vxe-column width="120" title="离职状态" fixed="right" align="center" field="status">
             <template slot-scope="scope">
               <el-button v-if="scope.row.status === '2'" type="success" size="mini">
                 {{$dictUtils.getDictLabel('dimission_status', scope.row.status, '-')}}
@@ -120,39 +153,6 @@
               </el-button>
             </template>
           </vxe-column>
-          <vxe-column width="200" title="工号" field="rosterBaseDTO.jobNo"></vxe-column>
-          <vxe-column width="200" title="部门" field="soName"></vxe-column>
-          <vxe-column width="200" title="职位" field="jpName"></vxe-column>
-          <vxe-column width="200" title="手机号" field="rosterBaseDTO.mobile"></vxe-column>
-          <vxe-column width="200" title="入职日期" field="rosterBaseDTO.onboardingDate">
-            <template slot-scope="scope">
-              {{moment(scope.row.rosterBaseDTO.onboardingDate).format('YYYY-MM-DD')}}
-            </template>
-          </vxe-column>
-          <vxe-column width="200" title="最后工作日" field="lastWorkDate">
-            <template slot-scope="scope">
-              {{moment(scope.row.lastWorkDate).format('YYYY-MM-DD')}}
-            </template>
-          </vxe-column>
-          <vxe-column width="200" title="离职日期" field="dimissionDate">
-            <template slot-scope="scope">
-              {{moment(scope.row.dimissionDate).format('YYYY-MM-DD')}}
-            </template>
-          </vxe-column>
-          <vxe-column width="200" title="离职原因" field="changesDimissionReaDTOList">
-            <template slot-scope="scope">
-              {{getDimissionReaList(scope.row.changesDimissionReaDTOList)}}
-            </template>
-          </vxe-column>
-          <vxe-column width="200" title="原因说明" field="reasonDesc"></vxe-column>
-          <vxe-column width="200" title="离职类型" field="type">
-            <template slot-scope="scope">
-              {{$dictUtils.getDictLabel('dimission_type', scope.row.type, '-')}}
-            </template>
-          </vxe-column>
-          <vxe-column width="200" title="备注" field="remarks"></vxe-column>
-
-
           <vxe-column title="操作" width="50px" fixed="right" align="center">
             <template  slot-scope="scope">
               <el-dropdown size="small"  @command="handleCommand">

+ 2 - 1
src/views/modules/cw/projectRecords/ProjectRecordsList.vue

@@ -122,7 +122,8 @@
   import ProjectRecordsForm from './ProjectRecordsForm'
   import pick from 'lodash.pick'
   import UserService from '@/api/sys/UserService'
-  import UserSelect from '@/components/userSelect'
+  // import UserSelect from '@/components/userSelect'
+  import UserSelect from '@/views/modules/cw/workClientInfo/clientUserSelect'
   import ContractNameForm from '../workContract/ContractNameForm'
   import ProjectRecordsAddForm from './ProjectRecordsAddForm'
   export default {

+ 4 - 2
src/views/modules/cw/reportManagement/ReportManagementAddForm.vue

@@ -164,7 +164,7 @@
                           {required: true, message:'报告实际制作人不能为空', trigger:'blur'},
                           {required: true, message:'报告实际制作人不能为空', trigger:'change'}
                    ]">
-              <UserSelect size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelect>
+              <UserSelectAll size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelectAll>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -501,6 +501,7 @@
   import SelectUserTree from '@/views/modules/utils/treeUserSelect'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
   import UserSelect from '../workClientInfo/clientUserSelect'
+  import UserSelectAll from '@/components/userSelect'
   import ProjectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
   import ProjectReportService from '@/api/cw/reportManagement/ProjectReportService'
   import EnterpriseSearchService from '@/api/cw/common/EnterpriseSearchService'
@@ -620,7 +621,8 @@
       SelectTree,
       UserSelect,
       ReportServiceUnitForm,
-      ProjectRecoredChooseCom
+      ProjectRecoredChooseCom,
+      UserSelectAll
     },
     methods: {
       getKeyWatch (keyWatch) {

+ 4 - 2
src/views/modules/cw/reportManagement/ReportManagementForm.vue

@@ -164,7 +164,7 @@
                               {required: true, message:'报告实际制作人不能为空', trigger:'blur'},
                           {required: true, message:'报告实际制作人不能为空', trigger:'change'}
                    ]">
-                  <UserSelect size="medium" :readonly="true" :disabled="method === 'view'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelect>
+                  <UserSelectAll size="medium" :readonly="true" :disabled="method === 'view'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelectAll>
                 </el-form-item>
               </el-col>
 
@@ -849,6 +849,7 @@
   import SelectUserTree from '@/views/modules/utils/treeUserSelect'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
   import UserSelect from '../workClientInfo/clientUserSelect'
+  import UserSelectAll from '@/components/userSelect'
   import ProjectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
   import EnterpriseSearchService from '@/api/cw/common/EnterpriseSearchService'
   // import WorkClientChooseForm from '../workClientInfo/WorkClientChooseForm'
@@ -997,7 +998,8 @@
       WorkContractChooseCom,
       UpLoadComponentDialog,
       ReportServiceUnitForm,
-      ProjectRecoredChooseCom
+      ProjectRecoredChooseCom,
+      UserSelectAll
     },
     methods: {
       // seeFileInfo (index) {

+ 4 - 2
src/views/modules/cw/reportManagement/ReportManagementSignatureForm.vue

@@ -164,7 +164,7 @@
             <el-form-item label="报告实际制作人" prop="realCreate"
                           :rules="[
                    ]">
-              <UserSelect size="medium" :readonly="true" :disabled="true" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelect>
+              <UserSelectAll size="medium" :readonly="true" :disabled="true" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelectAll>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -481,6 +481,7 @@
   // import WorkClientChooseForm from '../workClientInfo/WorkClientChooseForm'
   import ReportServiceUnitForm from './ReportServiceUnitForm'
   import ProcessService from '@/api/flowable/ProcessService'
+  import UserSelectAll from '@/components/userSelect'
   // import UpLoadComponentDialog from '@/views/common/UpLoadComponentDialog'
   // import ProjectInfoForm from './ProjectInfoForm'
   import ProjectRecoredChooseCom from '../projectRecords/ProjectRecordsChooseCom'
@@ -640,7 +641,8 @@
       ReportServiceUnitForm,
       ProcessService,
       // ProjectInfoForm,
-      ProjectRecoredChooseCom
+      ProjectRecoredChooseCom,
+      UserSelectAll
       // UpLoadComponentDialog
     },
     methods: {

+ 4 - 2
src/views/modules/cw/reportManagement/ReportManagementTaskForm.vue

@@ -131,7 +131,7 @@
             <el-form-item label="报告实际制作人" prop="realCreate"
                           :rules="[
                    ]">
-              <UserSelect size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelect>
+              <UserSelectAll size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelectAll>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -260,6 +260,7 @@
   import EnterpriseSearchService from '@/api/cw/common/EnterpriseSearchService'
   // import WorkClientChooseForm from '../workClientInfo/WorkClientChooseForm'
   import ReportServiceUnitForm from './ReportServiceUnitForm'
+  import UserSelectAll from '@/components/userSelect'
   // import UpLoadComponentDialog from '@/views/common/UpLoadComponentDialog'
   // import ProjectInfoForm from './ProjectInfoForm'
   import ProjectRecoredChooseCom from '../projectRecords/ProjectRecordsChooseCom'
@@ -359,7 +360,8 @@
       UserSelect,
       ReportServiceUnitForm,
       // ProjectInfoForm,
-      ProjectRecoredChooseCom
+      ProjectRecoredChooseCom,
+      UserSelectAll
       // UpLoadComponentDialog
     },
     methods: {

+ 4 - 2
src/views/modules/cw/reportManagement/reportReview/ReportReviewForm.vue

@@ -148,7 +148,7 @@
               <el-form-item label="报告实际制作人" prop="realCreate"
                             :rules="[
                    ]">
-                <UserSelect size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelect>
+                <UserSelectAll size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.realCreate" @getValue='(value) => {inputForm.realCreate = value}'></UserSelectAll>
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -610,6 +610,7 @@
   import SelectUserTree from '@/views/modules/utils/treeUserSelect'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
   import UserSelect from '../../workClientInfo/clientUserSelect'
+  import UserSelectAll from '@/components/userSelect'
   import ReportCancellApplyService from '@/api/cw/reportCancellApply/ReportCancellApplyService'
   import ReportReviewService from '@/api/cw/reportManagement/ReportReviewService'
   import ProjectReportService from '@/api/cw/reportManagement/ProjectReportService'
@@ -750,7 +751,8 @@
       SelectUserTree,
       UpLoadComponent,
       SelectTree,
-      UserSelect
+      UserSelect,
+      UserSelectAll
       // ReportCancellApplyChooseCom
     },
     methods: {

+ 51 - 49
src/views/modules/roster/RosterForm.vue

@@ -13,30 +13,30 @@
 
         <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="headshot"
-                          :rules="[
-                 ]">
-              <el-popover
-                placement="left"
-                trigger="hover">
-                <el-button style="width: 100%" @click="onPreview(inputForm.headshotLsUrl)" :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, null, 'head')
-                  }"
-                  :before-upload="checkIsPic"
-                >
-                  <img style="width: 150px; height: 150px; line-height: 150px" v-if="inputForm.headshotLsUrl" :src="inputForm.headshotLsUrl"/>
-                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-                </el-upload>
-              </el-popover>
-            </el-form-item>
-          </el-col>
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="头像" prop="headshot"-->
+<!--                          :rules="[-->
+<!--                 ]">-->
+<!--              <el-popover-->
+<!--                placement="left"-->
+<!--                trigger="hover">-->
+<!--                <el-button style="width: 100%" @click="onPreview(inputForm.headshotLsUrl)" :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, null, 'head')-->
+<!--                  }"-->
+<!--                  :before-upload="checkIsPic"-->
+<!--                >-->
+<!--                  <img style="width: 150px; height: 150px; line-height: 150px" v-if="inputForm.headshotLsUrl" :src="inputForm.headshotLsUrl"/>-->
+<!--                  <i v-else class="el-icon-plus avatar-uploader-icon"></i>-->
+<!--                </el-upload>-->
+<!--              </el-popover>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
         </el-row>
         <el-row  :gutter="15">
           <el-col :span="12">
@@ -195,7 +195,7 @@
                  ]">
               <el-select v-model="inputForm.contractType" placeholder="请选择合同类型" style="width:100%;">
                 <el-option
-                  v-for="item in $dictUtils.getDictList('contract_type')"
+                  v-for="item in $dictUtils.getDictList('roster_contract_type')"
                   :key="item.value"
                   :label="item.label"
                   :value="item.value">
@@ -218,9 +218,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="入职日期" prop="onboardingDate"
-                          :rules="[{required: true, message: '入职日期不能为空', trigger: 'blur'}
-                 ]">
+            <el-form-item label="入职日期" prop="onboardingDate">
               <el-date-picker
                 placement="bottom-start"
                 style="width: 100%"
@@ -257,9 +255,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="出生日期" prop="birthDate"
-                          :rules="[{required: true, message: '出生日期不能为空', trigger: 'blur'}
-                 ]">
+            <el-form-item label="出生日期" prop="birthDate">
               <el-date-picker
                 placement="bottom-start"
                 style="width: 100%"
@@ -554,14 +550,16 @@
               <el-form-item label="工资卡分支行" :prop="'rosterBankCardsDTOList[' + index_bank + '].payrollCardBranches'"
                             :rules="[
                  ]">
-                <el-select v-model="inputForm.rosterBankCardsDTOList[index_bank].payrollCardBranches" placeholder="请选择工资卡分支行"  style="width: 100%;">
-                  <el-option
-                    v-for="item in $dictUtils.getDictList('bank_name')"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </el-option>
-                </el-select>
+<!--                <el-select v-model="inputForm.rosterBankCardsDTOList[index_bank].payrollCardBranches" placeholder="请选择工资卡分支行"  style="width: 100%;">-->
+<!--                  <el-option-->
+<!--                    v-for="item in $dictUtils.getDictList('bank_name')"-->
+<!--                    :key="item.value"-->
+<!--                    :label="item.label"-->
+<!--                    :value="item.value">-->
+<!--                  </el-option>-->
+<!--                </el-select>-->
+                <el-input v-model="inputForm.rosterBankCardsDTOList[index_bank].payrollCardBranches" placeholder="请填写工资卡分支行"></el-input>
+
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -1067,14 +1065,16 @@
             <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>
+<!--              <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' :value="inputForm.rosterLeadershipDTO.supervisorId" @getValue='(value, label) => {inputForm.rosterLeadershipDTO.supervisorId = value}'></UserSelect>
+
             </el-form-item>
           </el-col>
         </el-row>
@@ -1099,6 +1099,7 @@
   import OSSService from '@/api/sys/OSSService'
   import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
   import UpLoadComponent from '@/views/common/UpLoadComponent'
+  import UserSelect from '@/components/userSelect'
   export default {
     data () {
       let checkIdCard = (rule, value, callback) => {
@@ -1241,12 +1242,13 @@
     components: {
       SelectTree,
       ElImageViewer,
-      UpLoadComponent
+      UpLoadComponent,
+      UserSelect
     },
     methods: {
       init (method, id) {
         this.queryAllPosition()
-        this.queryAllSupervisor()
+        // this.queryAllSupervisor()
         this.method = method
         this.inputForm = {
           name: '',

+ 33 - 2
src/views/modules/roster/RosterList.vue

@@ -14,10 +14,11 @@
       </el-form-item>
     </el-form>
     <div class="bg-white top">
-      <vxe-toolbar :refresh="{query: refreshList}" custom>
+      <vxe-toolbar :refresh="{query: refreshList}" import custom>
         <template #buttons>
           <el-button v-if="hasPermission('roster:base:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">新建</el-button>
           <el-button v-if="hasPermission('roster:base:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()" :disabled="$refs.rosterTable && $refs.rosterTable.getCheckboxRecords().length === 0" plain>删除</el-button>
+          <el-button v-if="hasPermission('roster:base:import')" size="small"  @click="template()" plain>模板下载</el-button>
           <el-button v-if="showButton" type="primary" size="small" icon="el-icon-arrow-down" @click="showTabs()" plain>展示分类</el-button>
           <el-button v-if="disableButton" type="primary" size="small" icon="el-icon-arrow-up" @click="disableTabs()" plain>收起分类</el-button>
         </template>
@@ -43,7 +44,11 @@
           @sort-change="sortChangeHandle"
           :sort-config="{remote:true}"
           :data="dataList"
-          :import-config="{}"
+          :import-config="{
+                    importMethod: importMethod,
+                    types: ['xls', 'xlsx'],
+                    remote: true
+                    }"
           :checkbox-config="{}">
           <vxe-column type="seq" width="60" title="序号"></vxe-column>
           <vxe-column type="checkbox"  width="40px"></vxe-column>
@@ -217,6 +222,32 @@
         this.workerTypeList = []
         this.showButton = true
         this.disableButton = false
+      },
+      // 模板下载
+      template () {
+        this.rosterService.template().then((res) => {
+          // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(res.data, '花名册导入模板')
+        }).catch(function (err) {
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
+      },
+      // 自定义服务端导入
+      importMethod ({ file }) {
+        // 处理表单
+        const formBody = new FormData()
+        formBody.append('file', file)
+        this.loading = true
+        this.rosterService.importExcel(formBody).then(result => {
+          this.loading = false
+          this.refreshList()
+          this.$message.success(result.data)
+        }).catch(() => {
+          this.refreshList()
+          this.loading = false
+        })
       }
     }
   }