|
|
@@ -4,19 +4,9 @@
|
|
|
<div class="search-layout">
|
|
|
<section class="filter-panel">
|
|
|
<div class="filter-fields">
|
|
|
- <el-input
|
|
|
- @change="getList"
|
|
|
- v-model="searchQuery"
|
|
|
- placeholder="姓名 / 专业 / 业绩"
|
|
|
- clearable
|
|
|
- />
|
|
|
+ <el-input v-model="queryParams.expertName" placeholder="姓名 / 专业 / 业绩" clearable />
|
|
|
|
|
|
- <el-select
|
|
|
- @change="getList"
|
|
|
- v-model="queryParams.education"
|
|
|
- placeholder="请选择专家学历"
|
|
|
- clearable
|
|
|
- >
|
|
|
+ <el-select v-model="queryParams.education" placeholder="请选择专家学历" clearable>
|
|
|
<el-option
|
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.RD_EXPERT_EDUCATION)"
|
|
|
:key="dict.value"
|
|
|
@@ -25,12 +15,7 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
|
|
|
- <el-select
|
|
|
- @change="getList"
|
|
|
- v-model="queryParams.echelon"
|
|
|
- placeholder="请选择专家梯队"
|
|
|
- clearable
|
|
|
- >
|
|
|
+ <el-select v-model="queryParams.echelon" placeholder="请选择专家梯队" clearable>
|
|
|
<el-option
|
|
|
v-for="dict in getStrDictOptions(DICT_TYPE.RD_EXPERT_ECHELON)"
|
|
|
:key="dict.value"
|
|
|
@@ -39,9 +24,19 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
|
|
|
- <el-button type="primary" @click="handleAdd"
|
|
|
- ><Icon icon="ep:plus" class="mr-5px" />新增专家</el-button
|
|
|
- >
|
|
|
+ <div class="flex">
|
|
|
+ <el-button type="primary" @click="handleAdd"
|
|
|
+ ><Icon icon="ep:plus" class="mr-5px" />新增专家</el-button
|
|
|
+ >
|
|
|
+
|
|
|
+ <el-button type="primary" @click="getList"
|
|
|
+ ><Icon icon="ep:search" class="mr-5px" />搜索</el-button
|
|
|
+ >
|
|
|
+
|
|
|
+ <el-button type="primary" @click="handleReset"
|
|
|
+ ><Icon icon="ep:refresh" class="mr-5px" />重置</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</section>
|
|
|
|
|
|
@@ -587,15 +582,15 @@ const formRules = {
|
|
|
echelon: [{ required: true, message: '请选择专家层级', trigger: 'blur' }],
|
|
|
education: [{ required: true, message: '请选择专家学历', trigger: 'blur' }],
|
|
|
specialDirection: [{ required: true, message: '请选择专业方向', trigger: 'blur' }],
|
|
|
- softwareSkills: [{ required: true, message: '请选择专业软件技能', trigger: 'blur' }],
|
|
|
- teamIds: [{ required: true, message: '请选择所属团队', trigger: 'blur' }],
|
|
|
+ // softwareSkills: [{ required: true, message: '请选择专业软件技能', trigger: 'blur' }],
|
|
|
+ // teamIds: [{ required: true, message: '请选择所属团队', trigger: 'blur' }],
|
|
|
school: [{ required: true, message: '请输入毕业院校', trigger: 'blur' }],
|
|
|
birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
|
|
|
avatar: [{ required: true, message: '请上传头像', trigger: 'blur' }],
|
|
|
deptId: [{ required: true, message: '请选择部门', trigger: 'blur' }],
|
|
|
- formerPost: [{ required: true, message: '请输入历任岗位', trigger: 'blur' }],
|
|
|
- jobTitle: [{ required: true, message: '请输入岗位', trigger: 'blur' }],
|
|
|
- professionalTitle: [{ required: true, message: '请输入职称', trigger: 'blur' }],
|
|
|
+ // formerPost: [{ required: true, message: '请输入历任岗位', trigger: 'blur' }],
|
|
|
+ // jobTitle: [{ required: true, message: '请输入岗位', trigger: 'blur' }],
|
|
|
+ // professionalTitle: [{ required: true, message: '请输入职称', trigger: 'blur' }],
|
|
|
expertRank: [{ required: true, message: '请选择专家序列', trigger: 'blur' }]
|
|
|
}
|
|
|
|
|
|
@@ -723,12 +718,18 @@ type ExpertGroup = {
|
|
|
}
|
|
|
|
|
|
const selectedMember = ref('')
|
|
|
-const searchQuery = ref('')
|
|
|
const selectedEducation = ref('')
|
|
|
const selectedTeam = ref('')
|
|
|
const drawerVisible = ref(false)
|
|
|
const activeExpert = ref<ExpertProfile | null>(null)
|
|
|
|
|
|
+const resetQueryParams = () => ({
|
|
|
+ deptId: undefined,
|
|
|
+ education: undefined,
|
|
|
+ echelon: undefined,
|
|
|
+ expertName: undefined
|
|
|
+})
|
|
|
+
|
|
|
const wordCloudWords = [
|
|
|
{ text: '地质', size: 24, rotate: -8, color: '#7fcd72', left: '8%', top: '52%' },
|
|
|
{ text: '油藏', size: 30, rotate: 6, color: '#8ea4d8', left: '26%', top: '38%' },
|
|
|
@@ -918,7 +919,7 @@ const tableData = computed<TableRow[]>(() => {
|
|
|
|
|
|
const filteredTableData = computed(() => {
|
|
|
return tableData.value.filter((row) => {
|
|
|
- const query = searchQuery.value.trim().toLowerCase()
|
|
|
+ const query = queryParams.expertName?.trim().toLowerCase() || ''
|
|
|
const nameMatch = row.searchText.toLowerCase().includes(query)
|
|
|
const teamMatch = row.teamName.toLowerCase().includes(query)
|
|
|
const educationMatch = selectedEducation.value
|
|
|
@@ -950,7 +951,7 @@ const handleMemberClick = async (member: ExpertItem) => {
|
|
|
}
|
|
|
|
|
|
const handleWordClick = (word: string) => {
|
|
|
- searchQuery.value = word
|
|
|
+ queryParams.expertName = word
|
|
|
}
|
|
|
|
|
|
const handleTeamSelectionChange = (rows: any[]) => {
|
|
|
@@ -1111,24 +1112,9 @@ const queryParams = reactive({
|
|
|
expertName: undefined
|
|
|
})
|
|
|
|
|
|
-const submitForm = async () => {
|
|
|
- if (!formRef.value) return
|
|
|
-
|
|
|
- const valid = await formRef.value.validate().catch(() => false)
|
|
|
- if (!valid) return
|
|
|
-
|
|
|
- submitLoading.value = true
|
|
|
- try {
|
|
|
- formData.value.avatar = formData.value.avatar.path
|
|
|
- await createExpert({ ...formData.value })
|
|
|
- ElMessage.success('新增成功')
|
|
|
- closeDialog()
|
|
|
- await getList()
|
|
|
- } catch (error) {
|
|
|
- console.error(error)
|
|
|
- } finally {
|
|
|
- submitLoading.value = false
|
|
|
- }
|
|
|
+const handleReset = async () => {
|
|
|
+ Object.assign(queryParams, resetQueryParams())
|
|
|
+ await getList()
|
|
|
}
|
|
|
|
|
|
const submitExpertForm = async () => {
|
|
|
@@ -1172,8 +1158,10 @@ const submitExpertForm = async () => {
|
|
|
const getList = async () => {
|
|
|
loading.value = true
|
|
|
try {
|
|
|
- queryParams.expertName = searchQuery.value?.trim() || undefined
|
|
|
- const data = await getExpertList(queryParams)
|
|
|
+ const data = await getExpertList({
|
|
|
+ ...queryParams,
|
|
|
+ expertName: queryParams.expertName?.trim() || undefined
|
|
|
+ })
|
|
|
list.value = data
|
|
|
} finally {
|
|
|
loading.value = false
|