Przeglądaj źródła

Merge branch 'sso' of shuzhihua/randd-vue into master

yanghao 1 miesiąc temu
rodzic
commit
01bb54a821

+ 1 - 1
.env.local

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=true
 
 # 请求路径
-VITE_BASE_URL='http://172.21.10.129:38080'
+VITE_BASE_URL='http://192.168.188.86:38080'
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server

+ 4 - 1
src/components/Dialog/src/Dialog.vue

@@ -12,6 +12,8 @@ const props = defineProps({
   title: propTypes.string.def('Dialog'),
   fullscreen: propTypes.bool.def(true),
   width: propTypes.oneOfType([String, Number]).def('40%'),
+  closeOnClickModal: propTypes.bool.def(true),
+  closeOnPressEscape: propTypes.bool.def(true),
   scroll: propTypes.bool.def(false), // 是否开启滚动条。如果是的话,按照 maxHeight 设置最大高度
   maxHeight: propTypes.oneOfType([String, Number]).def('400px')
 })
@@ -73,7 +75,8 @@ function closedHandler() {
 <template>
   <ElDialog
     v-bind="getBindValue"
-    :close-on-click-modal="true"
+    :close-on-click-modal="closeOnClickModal"
+    :close-on-press-escape="closeOnPressEscape"
     :fullscreen="isFullscreen"
     :width="width"
     destroy-on-close

+ 1 - 1
src/components/UploadFile/src/UploadImg.vue

@@ -119,7 +119,7 @@ const beforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
 // 图片上传成功提示
 const uploadSuccess: UploadProps['onSuccess'] = (res: any): void => {
   message.success('上传成功')
-  emit('update:modelValue', res.data)
+  emit('update:modelValue', res.data?.path || res.data || '')
 }
 
 // 图片上传错误提示

+ 38 - 54
src/views/expert/list/index.vue

@@ -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>
 
@@ -250,6 +245,8 @@
     <Dialog
       :title="dialogTitle"
       v-model="dialogVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
       destroy-on-close
       @close="closeDialog"
       width="60%"
@@ -587,15 +584,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 +720,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,17 +921,11 @@ const tableData = computed<TableRow[]>(() => {
 
 const filteredTableData = computed(() => {
   return tableData.value.filter((row) => {
-    const query = searchQuery.value.trim().toLowerCase()
-    const nameMatch = row.searchText.toLowerCase().includes(query)
-    const teamMatch = row.teamName.toLowerCase().includes(query)
     const educationMatch = selectedEducation.value
       ? row.education === selectedEducation.value
       : true
     const selectedTeamMatch = selectedTeam.value ? row.teamName === selectedTeam.value : true
 
-    if (query && !nameMatch && !teamMatch) {
-      return false
-    }
     if (!educationMatch || !selectedTeamMatch) {
       return false
     }
@@ -950,7 +947,7 @@ const handleMemberClick = async (member: ExpertItem) => {
 }
 
 const handleWordClick = (word: string) => {
-  searchQuery.value = word
+  queryParams.expertName = word
 }
 
 const handleTeamSelectionChange = (rows: any[]) => {
@@ -1111,24 +1108,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 +1154,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