yintai-company-home-am/views/jobs/list.tsx

318 lines
8.1 KiB
TypeScript

import type { TableData } from 'lib/type/TableData'
import In18FormDialog from '../../components/In18FormDialog.vue'
import { LOCALES } from '../../data/const'
const data: TableData = {
async fetchFun(self, data) {
const res = await self.api?.getDataList(data)
return res
},
addNods: [
(self: any) => {
return (
self.bean &&
<In18FormDialog
show={self.bean.showEditorDialog}
id={self.bean.id}
form={self.bean.form}
locales={self.bean.locales}
onClose={() => {
self.bean.showEditorDialog = false;
self.bean.id = null;
}}
onSubmit={async (data) => {
const params = {
...data,
id: data.id ? String(data.id) : undefined,
job_area: data.job_area ? String(data.job_area) : undefined,
job_unit: data.job_unit ? String(data.job_unit) : undefined,
job_type: data.job_type ? String(data.job_type) : undefined,
recruit_count: data.recruit_count ? String(data.recruit_count) : undefined,
}
if(data.id) {
await self.api?.updateData(params)
} else {
await self.api?.addData(params)
}
self.bean.showEditorDialog = false;
self.bean.id = null;
self.methods.fetchData()
}}
translateApi={self.api?.translate}
detailApi={async (id: number) => {
const res = await self.api?.getDetail(id);
const data = res.data;
Object.keys(data).forEach((langKey) => {
const langData = data[langKey];
Object.keys(langData).forEach((fieldKey) => {
const field = self.bean.form.find((f:any) => f.key === fieldKey);
if (fieldKey === 'title') {
data[langKey]['name'] = langData[fieldKey];
}
if(fieldKey === 'category') {
data[langKey]['job_type'] = langData[fieldKey].job_type;
data[langKey]['job_area'] = langData[fieldKey].job_area;
data[langKey]['job_unit'] = langData[fieldKey].job_unit;
}
if (!field) return;
data[langKey][fieldKey] = langData[fieldKey];
})
})
console.log('data', data)
return data
}}
/>
)
}
],
launchTask: [
async (self: any) => {
if (self.bean) {
self.bean.id = null;
console.log('self.bean.jobTypes', self.bean.jobTypes)
self.bean.form = [
{
name: '职业类别',
key: 'job_type',
type: 'select',
value: '',
getItems: () => self.bean.jobTypes,
must: true,
shouldTranslate: false,
},
{
name: '业务领域',
key: 'job_area',
type: 'select',
getItems: () => self.bean.jobAreas,
value: '',
must: true,
shouldTranslate: false,
},
{
name: '所属板块',
key: 'job_unit',
type: 'select',
getItems: () => self.bean.jobUnits,
value: '',
must: true,
shouldTranslate: false,
},
{
name: '招聘人数',
key: 'recruit_count',
type: 'input',
value: '',
must: true,
shouldTranslate: false,
},
{
name: '城市',
key: 'city',
type: 'input',
value: '',
must: true,
shouldTranslate: false,
},
{
name: '岗位名称',
key: 'name',
type: 'input',
value: '',
must: true,
shouldTranslate: true,
},
{
name: '岗位描述',
key: 'description',
type: 'textarea',
value: '',
must: true,
shouldTranslate: true,
},
{
name: '任职需求',
key: 'requirement',
type: 'textarea',
value: '',
must: true,
shouldTranslate: true,
},
{
name: '联系方式',
key: 'contract_info',
type: 'input',
value: '',
must: true,
shouldTranslate: true,
},
];
self.bean.locales = LOCALES
}
},
async (self: any) => {
if (self.bean) {
const types = ['job_type', 'job_area', 'job_unit'] as const
const results = await Promise.all(
types.map((type) =>
self.api?.getCategoryList({ page: 1, size: 1000, type })
)
)
const toOptions = (items: any[]) => items.map((item: any) => ({ key: item.id, name: item.name }));
[self.bean.jobTypes, self.bean.jobAreas, self.bean.jobUnits] = results.map(
(res) => toOptions(res?.data?.items ?? [])
)
}
}
],
fliter: [
{
key: 'id',
name: 'ID',
type: 'input'
},
{
key: 'lang',
name: '语言',
type: 'select',
value: 'ZH',
getItems: (self) => {
return self.bean ? self.bean.locales : []
}
},
{
key: 'title',
name: '职位名称',
type: 'input',
},
{
key: 'job_type',
name: '职业类别',
type: 'select',
getItems: (self) => {
return self.bean ? self.bean.jobTypes : []
}
},
{
key: 'job_area',
name: '业务领域',
type: 'select',
getItems: (self) => {
return self.bean ? self.bean.jobAreas : []
}
},
{
key: 'job_unit',
name: '所属板块',
type: 'select',
getItems: (self) => {
return self.bean ? self.bean.jobUnits : []
}
},
{
type: 'onlyFun',
onlyFun: {
title: '新建',
type: ' ' as any,
fun(self) {
if (self.bean) {
self.bean.id = null;
self.bean.showEditorDialog = true;
}
}
}
},
],
tableColumns: [
{
key: 'id',
name: 'ID',
width: '80px',
showJson: '*'
},
{
key: 'lang',
name: '语言',
width: '80px'
},
{
key: 'title',
name: '职位名称',
width: '200px'
},
{
key: 'category',
name: '职业类型 | 业务领域 | 所属板块',
renderBodyCell(data) {
let item: any = {}
try {
item = JSON.parse(data.row.category)
} catch (error) {
item = data.row.category
}
return <div style="display: flex; gap: 5px;">
<el-tag>{item.job_type_name}</el-tag>
<el-tag type="warning">{item.job_area_name}</el-tag>
<el-tag type="success">{item.job_unit_name}</el-tag>
</div>
},
},
{
key: 'description',
name: '岗位描述',
},
{
key: 'requirement',
name: '任职需求',
},
{
key: 'recruit_count',
name: '招聘人数',
width: '80px'
},
{
key: 'contract_info',
name: '联系方式',
width: '200px'
},
{
key: 'create_time',
name: '创建时间',
},
{
key: 'table_tools',
name: '操作',
buttons: [
{
type: 'onlyFun',
key: 'update',
onlyFun: {
title: '编辑',
type: ' ' as any,
fun(self, row) {
if (self.bean) {
self.bean.id = row.id;
self.bean.showEditorDialog = true;
}
}
}
},
{
type: 'popoverConfirm',
key: 'delete',
confirm: {
title: '删除',
primary: 'id',
subFun(self, data) {
return self.api?.deleteData(data)
}
}
}
]
}
]
}
export default data