123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <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="!tableData.length && !readOnly"
- @click="onAddItem(-1)"
- >+ 新增</el-tag
- >
- <el-table
- class="detail-table"
- :header-cell-style="{
- background: '#F2F4F8',
- color: '#000000'
- }"
- :data="tableData"
- >
- <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="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="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>
- <el-button link type="primary" size="small" @click="onAddItem(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.splice(index + 1, 0, {
- 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)
- }
- </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>
|