|
@@ -1,231 +0,0 @@
|
|
|
-<template>
|
|
|
- <div class="casually-name">
|
|
|
- <div class="star-title">
|
|
|
- <i></i>
|
|
|
- <span>工作经历(按照时间倒序填写)</span>
|
|
|
- </div>
|
|
|
- <el-tag class="add-tag" type="primary" effect="plain" v-if="!readOnly" @click="onAddItem()"
|
|
|
- >+ 新增</el-tag
|
|
|
- >
|
|
|
- <el-table
|
|
|
- class="detail-table"
|
|
|
- :header-cell-style="{
|
|
|
- background: '#F2F4F8',
|
|
|
- color: '#000000'
|
|
|
- }"
|
|
|
- :data="tableData"
|
|
|
- >
|
|
|
- <el-table-column prop="startTime" label="起始时间">
|
|
|
- <template #default="scope">
|
|
|
- <el-date-picker
|
|
|
- v-model="scope.row.startTime"
|
|
|
- type="date"
|
|
|
- format="YYYY-MM-DD"
|
|
|
- value-format="x"
|
|
|
- v-if="scope.row.isEdit"
|
|
|
- />
|
|
|
- <span v-else>{{ moment(scope.row.startTime).format('YYYY-MM-DD') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="endTime" label="终止时间">
|
|
|
- <template #default="scope">
|
|
|
- <el-date-picker
|
|
|
- v-model="scope.row.endTime"
|
|
|
- type="date"
|
|
|
- format="YYYY-MM-DD"
|
|
|
- value-format="x"
|
|
|
- v-if="scope.row.isEdit"
|
|
|
- />
|
|
|
- <span v-else>{{ moment(scope.row.endTime).format('YYYY-MM-DD') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="workLocation" label="工作单位">
|
|
|
- <template #default="scope">
|
|
|
- <el-input v-model="scope.row.workLocation" v-if="scope.row.isEdit" />
|
|
|
- <span v-else>{{ scope.row.workLocation }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="post" label="岗位">
|
|
|
- <template #default="scope">
|
|
|
- <el-input v-model="scope.row.post" v-if="scope.row.isEdit" />
|
|
|
- <span v-else>{{ scope.row.post }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="resignReason" label="离职原因">
|
|
|
- <template #default="scope">
|
|
|
- <el-input v-model="scope.row.resignReason" v-if="scope.row.isEdit" />
|
|
|
- <span v-else>{{ scope.row.resignReason }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="jyxy" label="是否有竞业限制/未尽法律事宜">
|
|
|
- <template #default="scope">
|
|
|
- <el-input v-model="scope.row.jyxy" v-if="scope.row.isEdit" />
|
|
|
- <span v-else>{{ scope.row.jyxy }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="competitionDetail" label="具体条款">
|
|
|
- <template #default="scope">
|
|
|
- <el-input v-model="scope.row.competitionDetail" v-if="scope.row.isEdit" />
|
|
|
- <span v-else>{{ scope.row.competitionDetail }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column fixed="right" label="操作" width="140" v-if="!readOnly">
|
|
|
- <template #default="scope">
|
|
|
- <el-button
|
|
|
- link
|
|
|
- type="primary"
|
|
|
- size="small"
|
|
|
- @click="onSaveItem(scope.$index)"
|
|
|
- v-if="scope.row.isEdit"
|
|
|
- >
|
|
|
- 保存
|
|
|
- </el-button>
|
|
|
- <el-button link type="primary" size="small" @click="onEditItem(scope.$index)" v-else>
|
|
|
- 编辑
|
|
|
- </el-button>
|
|
|
- <el-button link type="primary" size="small" @click="deleteRow(scope.$index)">
|
|
|
- 删除
|
|
|
- </el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-<script lang="ts" setup>
|
|
|
-/**
|
|
|
- * @description 工作经历
|
|
|
- */
|
|
|
-import { cloneDeep } from 'lodash-es'
|
|
|
-import moment from 'moment'
|
|
|
-
|
|
|
-interface ITable {
|
|
|
- id?: string
|
|
|
- userId?: string
|
|
|
- workLocation?: string // 工作单位
|
|
|
- post?: string // 职位
|
|
|
- startTime?: string // 开始时间
|
|
|
- endTime?: string // 结束时间
|
|
|
- resignReason?: string // 离职原因
|
|
|
- jyxy?: string // 是否有竞业限制/未尽法律事宜
|
|
|
- competitionDetail?: string // 具体条款
|
|
|
- isEdit?: boolean // 是否可编辑
|
|
|
-}
|
|
|
-const tableData = ref<ITable[]>([])
|
|
|
-
|
|
|
-const $emit = defineEmits<{
|
|
|
- (e: 'onSave', v: any): void
|
|
|
-}>()
|
|
|
-
|
|
|
-interface IProps {
|
|
|
- defaultData: any[]
|
|
|
- onlyRead?: boolean
|
|
|
-}
|
|
|
-const props = defineProps<IProps>()
|
|
|
-const { defaultData } = props
|
|
|
-const readOnly = ref(props.onlyRead)
|
|
|
-watch(
|
|
|
- () => props.onlyRead,
|
|
|
- (newVal) => {
|
|
|
- readOnly.value = newVal
|
|
|
- }
|
|
|
-)
|
|
|
-watch(
|
|
|
- () => props.defaultData,
|
|
|
- (newVal) => {
|
|
|
- tableData.value = newVal.map((item: any) => {
|
|
|
- return {
|
|
|
- ...item,
|
|
|
- isEdit: false
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
-)
|
|
|
-onMounted(() => {
|
|
|
- if (defaultData && defaultData.length) {
|
|
|
- tableData.value = defaultData.map((item: any) => {
|
|
|
- return {
|
|
|
- ...item,
|
|
|
- isEdit: false
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-// 新增行
|
|
|
-const onAddItem = (index: number) => {
|
|
|
- tableData.value.push({
|
|
|
- workLocation: '',
|
|
|
- post: '',
|
|
|
- startTime: '',
|
|
|
- endTime: '',
|
|
|
- resignReason: '',
|
|
|
- jyxy: '',
|
|
|
- competitionDetail: '',
|
|
|
- isEdit: true
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-// 保存行
|
|
|
-const onSaveItem = (index: number) => {
|
|
|
- tableData.value.forEach((item: any, num: number) => {
|
|
|
- if (num == index) {
|
|
|
- item.isEdit = false
|
|
|
- }
|
|
|
- })
|
|
|
- const changeData = cloneDeep(tableData.value).map((item: any) => {
|
|
|
- delete item.isEdit
|
|
|
- return item
|
|
|
- })
|
|
|
- $emit('onSave', changeData)
|
|
|
-}
|
|
|
-
|
|
|
-// 编辑行
|
|
|
-const onEditItem = (index: number) => {
|
|
|
- tableData.value[index].isEdit = true
|
|
|
-}
|
|
|
-
|
|
|
-// 删除
|
|
|
-const deleteRow = (index: number) => {
|
|
|
- tableData.value.splice(index, 1)
|
|
|
- const changeData = cloneDeep(tableData.value).map((item: any) => {
|
|
|
- delete item.isEdit
|
|
|
- return item
|
|
|
- })
|
|
|
- $emit('onSave', changeData)
|
|
|
-}
|
|
|
-</script>
|
|
|
-<style scoped lang="scss">
|
|
|
-.casually-name {
|
|
|
- position: relative;
|
|
|
-}
|
|
|
-.star-title {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- margin-bottom: 8px;
|
|
|
-
|
|
|
- i {
|
|
|
- display: block;
|
|
|
- width: 16px;
|
|
|
- height: 16px;
|
|
|
- margin-right: 9px;
|
|
|
- background: url('../../../../assets/imgs/OA/mine/star.png') center no-repeat;
|
|
|
- background-size: 100%;
|
|
|
- }
|
|
|
-
|
|
|
- span {
|
|
|
- font-size: 18px;
|
|
|
- font-weight: bold;
|
|
|
- color: #000000;
|
|
|
- }
|
|
|
-}
|
|
|
-.add-tag {
|
|
|
- position: absolute;
|
|
|
- top: 2px;
|
|
|
- right: 0;
|
|
|
- cursor: pointer;
|
|
|
-}
|
|
|
-.detail-table {
|
|
|
- width: 100%;
|
|
|
- min-height: 100px;
|
|
|
-}
|
|
|
-</style>
|