|
@@ -31,6 +31,21 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</CtForm>
|
|
|
+
|
|
|
+ <CtDialog :visible="showDialog" :widthType="1" titleClass="text-h6" :footer="false" title="重复职位列表" @close="showDialog = false">
|
|
|
+ <CtTable
|
|
|
+ :items="tableItems"
|
|
|
+ :headers="headers"
|
|
|
+ :loading="false"
|
|
|
+ :elevation="0"
|
|
|
+ :isTools="false"
|
|
|
+ :showPage="false"
|
|
|
+ >
|
|
|
+ <template #actions="{ item }">
|
|
|
+ <v-btn :disabled="!item.id" color="primary" variant="text" @click="handleDetails(item)">详情</v-btn>
|
|
|
+ </template>
|
|
|
+ </CtTable>
|
|
|
+ </CtDialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -45,6 +60,9 @@ import Confirm from '@/plugins/confirm'
|
|
|
import Snackbar from '@/plugins/snackbar'
|
|
|
import { useI18n } from '@/hooks/web/useI18n';
|
|
|
import { getJobAdvertised } from '@/api/enterprise'
|
|
|
+import { formatName } from '@/utils/getText'
|
|
|
+import { dealDictArrayData } from '@/utils/position'
|
|
|
+import { timesTampChange } from '@/utils/date'
|
|
|
|
|
|
const { t } = useI18n()
|
|
|
const props = defineProps({
|
|
@@ -63,11 +81,31 @@ const showTemplateBtn = ref(true)
|
|
|
const formPageRef = ref()
|
|
|
let query = reactive({})
|
|
|
|
|
|
+// 重复职位弹窗
|
|
|
+const showDialog = ref(false)
|
|
|
+const tableItems = ref([])
|
|
|
+const headers = [
|
|
|
+ { title: '职位名称', key: 'name', sortable: false, value: item => formatName(item.name) },
|
|
|
+ { title: '薪资', key: 'payTo', sortable: false, value: item => !item.payFrom && !item.payTo ? '面议' : `${item.payFrom}-${item.payTo}/${item.payName}` },
|
|
|
+ { title: '学历要求', key: 'eduName', sortable: false },
|
|
|
+ { title: '工作经验', key: 'expName', sortable: false },
|
|
|
+ { title: '地区', key: 'area', sortable: false, value: item => !item.areaId ? '全国' : item.area?.str },
|
|
|
+ { title: '状态', key: 'status', sortable: false, value: item => !item.status ? '' : item.status === '0' ? '招聘中' : '已关闭' },
|
|
|
+ { title: '创建时间', key: 'createTime', sortable: false, value: item => timesTampChange(item.createTime) },
|
|
|
+ { title: '更新时间', key: 'updateTime', sortable: false, value: item => timesTampChange(item.updateTime) },
|
|
|
+ { title: '操作', key: 'actions', sortable: false }
|
|
|
+]
|
|
|
+
|
|
|
+const handleDetails = (item) => {
|
|
|
+ window.open(`/recruit/enterprise/position/details?id=${item.id}`)
|
|
|
+}
|
|
|
+
|
|
|
// 效验职位名称是否重复
|
|
|
const handleValidName = async (item, val) => {
|
|
|
if (!val) return
|
|
|
try {
|
|
|
const data = await getJobAdvertised({ jobName: val })
|
|
|
+ tableItems.value = data ? dealDictArrayData([], data) : []
|
|
|
|
|
|
if (data && data.length > 0) {
|
|
|
Confirm(
|
|
@@ -76,6 +114,7 @@ const handleValidName = async (item, val) => {
|
|
|
{ sureText: '查看已有职位', cancelText: '继续发布' }
|
|
|
).then(() => {
|
|
|
// 弹窗查看已有职位
|
|
|
+ showDialog.value = true
|
|
|
})
|
|
|
}
|
|
|
} catch {}
|
|
@@ -98,6 +137,7 @@ const items = ref({
|
|
|
key: 'name',
|
|
|
value: '',
|
|
|
label: '职位名称 *',
|
|
|
+ blur: handleValidName, // 效验职位名称是否重复
|
|
|
rules: [v => !!v || '请填写职位名称']
|
|
|
},
|
|
|
{
|