Newer
Older
xc-business-system / src / views / resource / person / register / component / resume.vue
<!-- 人员登记 基本信息 -->
<script name="RegisterResume" lang="ts" setup>
import { ElMessage, ElMessageBox, dayjs } from 'element-plus'
import type { IStaffPromoteInfo, IStaffResumeInfo } from '../person-regitster'
import ResumeDialog from './resumeDialog.vue'
import PromoteDialog from './promoteDialog.vue'
import { delPromoteRecList, delResumeRecList, getPromoteList, getResumeList } from '@/api/resource/register'
import type { TableColumn } from '@/components/NormalTable/table_interface'

const props = defineProps({
  operation: { type: String, default: '' },
  staffId: { type: String, default: '' },
})

/** ******* 经验履历表格 ********/
const rsmListQuery = {
  id: '',
  limit: 10,
  offset: 1,
}
const resumeColumns = ref<Array<TableColumn>>([
  { text: '履历名称', value: 'resumeName', align: 'center' },
  { text: '详细介绍', value: 'details', align: 'center' },
  { text: '时间', value: 'resumeDate', align: 'center', width: '200' },
]) // 表头
const rsmTotal = ref<number>(0) // 数据总条数
const resumeList = ref<IStaffResumeInfo[]>([]) // 表格数据
/** ******* 经验履历表格结束 ********/

/** ******* 晋升情况表格 ********/
const prmListQuery = {
  id: '',
  limit: 10,
  offset: 1,
}
const promoteColumns = ref<Array<TableColumn>>([
  { text: '晋升经历', value: 'promoteExperience', align: 'center' },
  { text: '晋升单位', value: 'company', align: 'center' },
  { text: '时间', value: 'promoteDate', align: 'center', width: '200' },
]) // 表头
const prmTotal = ref<number>(0) // 数据总条数
const promoteList = ref<IStaffPromoteInfo[]>([])
/** ******* 晋升情况表格结束 ********/

// 表格被选中的行
const resumeSelected = ref<IStaffResumeInfo[]>([])
const promoteSelected = ref<IStaffPromoteInfo[]>([])

// 子组件引用
const refResumeDialog = ref()
const refPromoteDialog = ref()

// 逻辑
// 表格多选
const rsmMultiSelect = (e: any) => {
  resumeSelected.value = e
}
const prmMultiSelect = (e: any) => {
  promoteSelected.value = e
}

const getResumeListByStaffId = () => {
  getResumeList(prmListQuery).then((res) => {
    if (res.code === 200) {
      rsmTotal.value = res.data.total
      resumeList.value = res.data.rows.map((item: any) => ({
        ...item,
        resumeDate: dayjs(item.resumeDate).format('YYYY-MM-DD'),
      }))
    }
  })
}

const getPromoteListByStaffId = () => {
  getPromoteList(prmListQuery).then((res) => {
    if (res.code === 200) {
      prmTotal.value = res.data.total
      promoteList.value = res.data.rows.map((item: any) => ({
        ...item,
        promoteDate: dayjs(item.promoteDate).format('YYYY-MM-DD'),
      }))
    }
  })
}

// 表格换页
const changeResumePage = (val: { size?: number; page?: number }) => {
  if (val && val.size) {
    rsmListQuery.limit = val.size
  }
  if (val && val.page) {
    rsmListQuery.offset = val.page
  }
  getResumeListByStaffId()
}

// 表格换页
const changePromotePage = (val: { size?: number; page?: number }) => {
  if (val && val.size) {
    prmListQuery.limit = val.size
  }
  if (val && val.page) {
    prmListQuery.offset = val.page
  }
  getPromoteListByStaffId()
}

// 删除经验履历记录
const delResumeRecords = () => {
  if (resumeSelected.value.length === 0) {
    ElMessage.warning('请至少选择一行')
    return
  }

  ElMessageBox.confirm('是否删除经验履历记录,此操作不可恢复', '提示', {
    confirmButtonText: '确认删除',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
  // 前端界面删除
    resumeList.value = resumeList.value.filter(item => resumeSelected.value.includes(item) === false)

    // 调用后端接口进行删除
    const abiIdsSelected = ref<string[]>([])
    abiIdsSelected.value = resumeSelected.value.map((item: { id: string }) => item.id)
    abiIdsSelected.value = abiIdsSelected.value.filter(item => item !== '')
    if (abiIdsSelected.value.length > 0) {
      delResumeRecList({ ids: abiIdsSelected.value }).then((res) => {
        if (res.code === 200) {
          ElMessage.success('删除经验履历记录成功')
        }
        else {
          ElMessage.error(`删除经验履历记录失败:${res.message}`)
        }

        getResumeListByStaffId()
      })
    }
  })
}

// 删除晋升情况记录
const delPromoteRecords = () => {
  if (promoteSelected.value.length === 0) {
    ElMessage.warning('请至少选择一行')
    return
  }

  ElMessageBox.confirm('是否删除晋升情况记录,此操作不可恢复', '提示', {
    confirmButtonText: '确认删除',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
  // 前端界面删除
    promoteList.value = promoteList.value.filter(item => promoteSelected.value.includes(item) === false)

    // 调用后端接口进行删除
    const proIdsSelected = ref<string[]>([])
    proIdsSelected.value = promoteSelected.value.map((item: { id: string }) => item.id)
    proIdsSelected.value = proIdsSelected.value.filter(item => item !== '')
    if (proIdsSelected.value.length > 0) {
      delPromoteRecList({ ids: proIdsSelected.value }).then((res) => {
        if (res.code === 200) {
          ElMessage.success('删除晋升情况记录成功')
        }
        else {
          ElMessage.error(`删除晋升情况记录失败:${res.message}`)
        }

        getPromoteListByStaffId()
      })
    }
  })
}

// 编辑
const showEditDialog = (row: IStaffResumeInfo | IStaffPromoteInfo, tableName: string) => {
  switch (tableName) {
    case 'resume' :
      refResumeDialog.value.initRecordData(row)
      refResumeDialog.value.showRecordDialog(true, '编辑')
      break

    case 'promote':
      refPromoteDialog.value.initRecordData(row)
      refPromoteDialog.value.showRecordDialog(true, '编辑')
      break

    default:
      break
  }
}

// 新增
const addEditableRow = (tableName: string) => {
  switch (tableName) {
    case 'resume':
      refResumeDialog.value.showRecordDialog(true, '新增')
      break

    case 'promote':
      refPromoteDialog.value.showRecordDialog(true, '新增')
      break
    default:
      break
  }
}

watch(() => props.staffId, (newVal: string) => {
  rsmListQuery.id = newVal
  prmListQuery.id = newVal

  getResumeListByStaffId()
  getPromoteListByStaffId()
})
</script>

<template>
  <app-container>
    <el-form ref="resumeFormRef" label-position="right" label-width="110px" border stripe>
      <table-container title="经验履历">
        <template v-if="props.operation !== 'detail'" #btns-right>
          <el-button type="primary" @click="addEditableRow('resume')">
            增加行
          </el-button>
          <el-button type="info" @click="delResumeRecords">
            删除行
          </el-button>
        </template>

        <!-- 表格区域 -->
        <normal-table
          id="resumeTabel"
          :data="resumeList" :total="rsmTotal" :columns="resumeColumns"
          :query="{ limit: rsmListQuery.limit, offset: rsmListQuery.offset }"
          :is-showmulti-select="props.operation !== 'detail'"
          @change="changeResumePage"
          @multi-select="rsmMultiSelect"
        >
          <template #preColumns>
            <el-table-column label="序号" width="55" align="center">
              <template #default="scope">
                {{ (rsmListQuery.offset - 1) * rsmListQuery.limit + scope.$index + 1 }}
              </template>
            </el-table-column>
          </template>

          <template #columns>
            <el-table-column v-if="props.operation !== 'detail'" fixed="right" label="操作" align="center" width="130">
              <template #default="{ row }">
                <el-button size="small" type="primary" @click="showEditDialog(row, 'resume')">
                  编辑
                </el-button>
              </template>
            </el-table-column>
          </template>
        </normal-table>
      </table-container>

      <table-container title="晋升情况" style="margin-top: 30px;">
        <template v-if="props.operation !== 'detail'" #btns-right>
          <el-button type="primary" @click="addEditableRow('promote')">
            增加行
          </el-button>
          <el-button type="info" @click="delPromoteRecords">
            删除行
          </el-button>
        </template>

        <!-- 表格区域 -->
        <normal-table
          id="promoteTabel"
          :data="promoteList" :total="rsmTotal" :columns="promoteColumns"
          :query="{ limit: prmListQuery.limit, offset: prmListQuery.offset }"
          :is-showmulti-select="props.operation !== 'detail'"
          @change="changePromotePage"
          @multi-select="prmMultiSelect"
        >
          <template #preColumns>
            <el-table-column label="序号" width="55" align="center">
              <template #default="scope">
                {{ (rsmListQuery.offset - 1) * prmListQuery.limit + scope.$index + 1 }}
              </template>
            </el-table-column>
          </template>

          <template #columns>
            <el-table-column v-if="props.operation !== 'detail'" fixed="right" label="操作" align="center" width="130">
              <template #default="{ row }">
                <el-button size="small" type="primary" @click="showEditDialog(row, 'promote')">
                  编辑
                </el-button>
              </template>
            </el-table-column>
          </template>
        </normal-table>
      </table-container>
    </el-form>

    <resume-dialog ref="refResumeDialog" :staff-id="props.staffId" @record-saved="getResumeListByStaffId" />
    <promote-dialog ref="refPromoteDialog" :staff-id="props.staffId" @record-saved="getPromoteListByStaffId" />
  </app-container>
</template>