|
|
@@ -323,7 +323,21 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="所属团队" prop="teamIds" />
|
|
|
+ <el-form-item label="所属团队" prop="teamIds">
|
|
|
+ <el-select
|
|
|
+ v-model="formData.teamIds"
|
|
|
+ placeholder="请选择所属团队"
|
|
|
+ clearable
|
|
|
+ multiple
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="team in formTeamOptions"
|
|
|
+ :key="team.value"
|
|
|
+ :label="team.label"
|
|
|
+ :value="team.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
@@ -400,41 +414,44 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { computed, ref } from 'vue'
|
|
|
+import { computed, onMounted, reactive, ref } from 'vue'
|
|
|
import { createExpert, getExpertList } from '@/api/expert'
|
|
|
import * as DeptApi from '@/api/system/dept'
|
|
|
import { defaultProps } from '@/utils/tree'
|
|
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
|
|
-const deptList2 = ref<Tree[]>([]) // 树形结构
|
|
|
|
|
|
-const formLoading = ref(false) // 表单加载中
|
|
|
-const submitLoading = ref(false) // 提交按钮加载中
|
|
|
-
|
|
|
-// 对话框相关
|
|
|
-const dialogVisible = ref(false)
|
|
|
-const dialogTitle = ref('')
|
|
|
-const isEdit = ref(false)
|
|
|
-
|
|
|
-// 表单相关
|
|
|
-const formRef = ref()
|
|
|
-const formData = ref({
|
|
|
+const defaultFormData = () => ({
|
|
|
expertName: '',
|
|
|
achievement: '',
|
|
|
echelon: '',
|
|
|
education: '',
|
|
|
- specialDirection: '',
|
|
|
- softwareSkills: '',
|
|
|
- teamIds: '',
|
|
|
- school: null,
|
|
|
+ specialDirection: [],
|
|
|
+ softwareSkills: [],
|
|
|
+ teamIds: [],
|
|
|
+ school: '',
|
|
|
birthday: null,
|
|
|
avatar: '',
|
|
|
deptId: '',
|
|
|
formerPost: '',
|
|
|
jobTitle: '',
|
|
|
professionalTitle: '',
|
|
|
- expertRank: ''
|
|
|
+ expertRank: []
|
|
|
})
|
|
|
|
|
|
+const deptList2 = ref<Tree[]>([]) // 树形结构
|
|
|
+
|
|
|
+const formLoading = ref(false) // 表单加载中
|
|
|
+const submitLoading = ref(false) // 提交按钮加载中
|
|
|
+
|
|
|
+// 对话框相关
|
|
|
+const dialogVisible = ref(false)
|
|
|
+const dialogTitle = ref('')
|
|
|
+const isEdit = ref(false)
|
|
|
+
|
|
|
+// 表单相关
|
|
|
+const formRef = ref()
|
|
|
+const formData = ref(defaultFormData())
|
|
|
+
|
|
|
const formRules = {
|
|
|
expertName: [{ required: true, message: '请输入专家名称', trigger: 'blur' }],
|
|
|
achievement: [{ required: true, message: '请输入成果', trigger: 'blur' }],
|
|
|
@@ -455,24 +472,7 @@ const formRules = {
|
|
|
|
|
|
// 重置表单
|
|
|
const resetForm = () => {
|
|
|
- formData.value = {
|
|
|
- measureName: '',
|
|
|
- measureUnit: '',
|
|
|
- dutyPerson: '',
|
|
|
- brand: '',
|
|
|
- modelName: '',
|
|
|
- classify: '',
|
|
|
- status: '',
|
|
|
- offTime: null,
|
|
|
- buyDate: null,
|
|
|
- remark: '',
|
|
|
- deptId: '',
|
|
|
- measureCode: '',
|
|
|
- // validity: null, // 有效期
|
|
|
-
|
|
|
- measurePrice: 0, // 价格
|
|
|
- measureCertNo: ''
|
|
|
- }
|
|
|
+ formData.value = defaultFormData()
|
|
|
formRef.value?.clearValidate()
|
|
|
}
|
|
|
// 关闭对话框
|
|
|
@@ -704,6 +704,13 @@ const teamOptions = [
|
|
|
{ label: '第三梯队', value: '第三梯队' }
|
|
|
]
|
|
|
|
|
|
+const formTeamOptions = [
|
|
|
+ { label: '技术评审组', value: 1 },
|
|
|
+ { label: '经营评审组', value: 2 },
|
|
|
+ { label: '成果验收组', value: 3 },
|
|
|
+ { label: '专项咨询组', value: 4 }
|
|
|
+]
|
|
|
+
|
|
|
const cellBookmarks = ['技术', '经营', '商务', '安全', '法务']
|
|
|
|
|
|
const getColumnPercent = (row: TableRow, index: number) => {
|
|
|
@@ -776,9 +783,29 @@ 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 {
|
|
|
+ await createExpert({ ...formData.value })
|
|
|
+ ElMessage.success('新增成功')
|
|
|
+ closeDialog()
|
|
|
+ await getList()
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error)
|
|
|
+ } finally {
|
|
|
+ submitLoading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
const getList = async () => {
|
|
|
loading.value = true
|
|
|
try {
|
|
|
+ queryParams.expertName = searchQuery.value?.trim() || undefined
|
|
|
const data = await getExpertList(queryParams)
|
|
|
list.value = data.list
|
|
|
} finally {
|