47 7 місяців тому
батько
коміт
0c90e8f9c2

+ 2 - 1
src/api/system/dept/index.ts

@@ -18,7 +18,8 @@ export interface DeptVO {
   // supervisor?: string
   supervisorNum?:number
   studentNum?:number
-  // userAchievements?:any
+  // userAchievements:any
+  // achievement:any
 }
 
 // 查询部门(精简)列表

+ 15 - 0
src/router/modules/remaining.ts

@@ -1,5 +1,6 @@
 import { Layout } from '@/utils/routerHelper'
 import UserAchievement from '@/views/system/workroomTeacher/userAchievement/index.vue'
+import deptInfo from '@/views/system/workroomCollege/deptInfo/index.vue'
 
 const { t } = useI18n()
 /**
@@ -61,6 +62,20 @@ const remainingRouter: AppRouteRecordRaw[] = [
           noTagsView: false,
           hidden: true
         }
+      },
+      {
+        path: 'dept-info',
+        component: deptInfo,
+        name: 'DeptInfo',
+        meta: {
+          title: '工作间信息',
+          icon: 'ep:dept',
+          noCache: false,
+          affix: false,
+          breadcrumb: false,
+          noTagsView: false,
+          hidden: true
+        }
       }
     ]
   },

+ 56 - 4
src/views/system/graduateStudent/UserForm.vue

@@ -14,7 +14,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="工作间" prop="deptId">
+          <el-form-item label="工作间" prop="deptId" v-if="userInfo.userType === '4'">
             <el-tree-select
               v-model="formData.deptId"
               :data="deptList"
@@ -26,6 +26,25 @@
           </el-form-item>
         </el-col>
       </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="年级">
+            <el-select v-model="formData.grade" placeholder="请选择">
+              <el-option
+                v-for="year in gradeOptions"
+                :key="year"
+                :label="year"
+                :value="year"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="学号">
+            <el-input v-model="formData.userNumber" placeholder="请输入学号" />
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="手机号码" prop="mobile">
@@ -100,7 +119,7 @@
         </el-col>
 
         <el-col :span="12">
-              <el-form-item label="导师名称" prop="supervisorId">
+              <el-form-item label="导师名称" prop="supervisorId" v-if="userInfo.userType === '4'">
                   <el-select
                     v-model="formData.supervisor"
                     @change="handleSupervisorChange"
@@ -118,9 +137,14 @@
                   </el-select>
           </el-form-item>
         </el-col>
-        
       </el-row>
-      
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="导师电话" prop="supervisorMobile" v-if="userInfo.userType === '4'">
+            <el-input v-model="formData.supervisorMobile" maxlength="11" placeholder="请输入导师电话" />
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row>
         <el-col :span="24">
           <el-form-item label="备注">
@@ -143,12 +167,22 @@ import * as PostApi from '@/api/system/post'
 import * as DeptApi from '@/api/system/dept'
 import * as UserApi from '@/api/system/user'
 import { FormRules } from 'element-plus'
+import { computed } from 'vue';
+import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
 
 defineOptions({ name: 'SystemUserForm' })
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 
+const userInfo = ref({} as ProfileVO)
+const getUserInfo = async () => {
+  const users = await getUserProfile()
+  console.log(users)
+  userInfo.value = users
+}
+
+
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
@@ -156,6 +190,8 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   nickname: '',
   deptId: '',
+  grade: '',
+  userNumber: '',
   mobile: '',
   email: '',
   id: undefined,
@@ -169,6 +205,7 @@ const formData = ref({
   userType: '',
   supervisor:'',
   supervisorId:'',
+  supervisorMobile: '',
   workPlace:""
 })
 const formRules = reactive<FormRules>({
@@ -203,6 +240,17 @@ const userTypes = ref([
   // { label: '学院', value: "4" }
 ]);
 
+const currentYear = new Date().getFullYear(); // 获取当前年份
+const gradeOptions = computed(() => {
+  return [
+    currentYear +'级',          // 今年
+    currentYear - 1 +'级',      // 去年
+    currentYear - 2 +'级',      // 前年
+    currentYear - 3 +'级',      // 大前年
+    currentYear - 4 +'级',      // 大大前年
+  ];
+});
+
 //获取所有导师
 const users = ref()
 const getSupervisor= async () => {
@@ -276,6 +324,8 @@ const resetForm = () => {
   formData.value = {
     nickname: '',
     deptId: '',
+    grade: '',
+    userNumber: '',
     mobile: '',
     email: '',
     id: undefined,
@@ -289,11 +339,13 @@ const resetForm = () => {
     userType: '',
     supervisor:'',
     supervisorId:'',
+    supervisorMobile: '',
     workPlace:""
   }
   formRef.value?.resetFields()
 }
 onMounted(() => {
   getSupervisor()
+  getUserInfo()
 })
 </script>

+ 4 - 4
src/views/system/graduateStudent/index.vue

@@ -47,7 +47,7 @@
               class="!w-240px"
             />
           </el-form-item>
-          <el-form-item label="状态" prop="status">
+          <!-- <el-form-item label="状态" prop="status">
             <el-select
               v-model="queryParams.status"
               placeholder="用户状态"
@@ -61,7 +61,7 @@
                 :value="dict.value"
               />
             </el-select>
-          </el-form-item>
+          </el-form-item> -->
           <el-form-item label="创建时间" prop="createTime">
             <el-date-picker
               v-model="queryParams.createTime"
@@ -157,7 +157,7 @@
             width="120" 
           />
 
-          <el-table-column label="状态" key="status">
+          <!-- <el-table-column label="状态" key="status">
             <template #default="scope">
               <el-switch
                 v-model="scope.row.status"
@@ -166,7 +166,7 @@
                 @change="handleStatusChange(scope.row)"
               />
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column
             label="创建时间"
             align="center"

+ 10 - 0
src/views/system/workroomCollege/dept/index.vue

@@ -126,6 +126,9 @@
           >
             修改
           </el-button>
+          <el-button type="text" @click="openUserAchievement(scope.row.id)">
+            详情
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -140,6 +143,7 @@ import { handleTree } from '@/utils/tree'
 import * as DeptApi from '@/api/system/dept'
 import DeptForm from './DeptForm.vue'
 import * as UserApi from '@/api/system/user'
+import { useRouter } from 'vue-router'
 
 defineOptions({ name: 'SystemDept' })
 
@@ -192,6 +196,12 @@ const handleSupervisorChange = (value: number) => {
   }
 }
 
+const router = useRouter()
+const openUserAchievement = (id) => {
+  router.push({ name: 'DeptInfo', query: { id: id} });
+}
+
+
 /** 展开/折叠操作 */
 const toggleExpandAll = () => {
   refreshTable.value = false

+ 324 - 0
src/views/system/workroomCollege/deptInfo/index.vue

@@ -0,0 +1,324 @@
+<template>
+  <!-- <el-card class="workspace-info card-border mb-2">
+    <div class="workspace-name">
+      <div class="card-header">
+        <span>{{ form.name }}</span>
+      </div>
+    </div>
+  </el-card> -->
+  <div class="flex">
+    <el-card class="workspace-info w-1/3">
+      <template #header>
+        <div class="card-header">
+          <span>工作间信息</span>
+        </div>
+      </template>
+      <ul class="user-info">
+        <li class="info-item">
+          <Icon class="mr-5px" icon="ep:user" />
+          <span class="info-label">负责人名称:</span>
+          <span class="pull-right">{{ userInfo.user?.map(user => user.nickname).join(', ') }}</span>
+        </li>
+
+
+        <li class="info-item">
+          <Icon class="mr-5px" icon="fontisto:email" />
+          <span class="info-label">工作室邮箱:</span>
+          <span class="pull-right">{{ userInfo.email }}</span>
+        </li>   
+        <li class="info-item">
+          <Icon class="mr-5px" icon="ep:phone" />
+          <span class="info-label">工作室号码:</span>
+          <span class="pull-right">{{ userInfo.phone }}</span>
+        </li>
+        <li class="info-item">
+          <Icon class="mr-5px" icon="fontisto:email" />
+          <span class="info-label">导师人数:</span>
+          <span class="pull-right">{{ userInfo.supervisorNum }}</span>
+        </li>   
+        <li class="info-item">
+          <Icon class="mr-5px" icon="ep:user" />
+          <span class="info-label">学生人数:</span>
+          <span class="pull-right">{{ userInfo.studentNum }}</span>
+        </li>   
+        <!-- <li class="info-item" v-for="(url, index) in userAchievements.value.datil" :key="index">
+          <Icon class="mr-5px" icon="fontisto:email" />
+          <span class="info-label">成果展示:</span>
+          <span class="pull-right">{{ userInfo.achievement }}</span>
+          <img :src="url" alt="成就展示图片" class="user-image" />
+        </li> -->
+      </ul>
+    </el-card>
+    <el-card class="workspace-info ml-3 w-2/3">
+      <template #header>
+        <div class="card-header">
+          <span>{{ userInfo.name }}</span>
+        </div>
+      </template>
+      <el-form ref="formRef" :model="form" label-width="100px" :rules="rules" style="margin-left: 5%; margin-right: 5%;;">
+        <el-form-item>
+          <template #label>
+            <span style="font-weight: bold;">负责人信息</span>
+          </template>
+          <span style="font-weight: bold;">------</span>
+        </el-form-item>
+        <el-form-item label="负责人名称" prop="leaderUserId">
+          <el-select
+          v-model="form.leaderUserId"
+          @change="handleSupervisorChange"
+          placeholder="请选择负责人"
+          clearable
+          filterable
+          multiple
+          :disabled="!isEditMode"
+        >
+          <el-option
+            v-for="user in users"
+            :key="user.id"
+            :label="user.nickname"
+            :value="user.id"
+          />
+        </el-select>
+        </el-form-item>
+        <el-form-item>
+          <template #label>
+            <span style="font-weight: bold;">工作间信息</span>
+          </template>
+          <span style="font-weight: bold;">------</span>
+        </el-form-item>
+        <el-form-item label="工作室号码" prop="phone">
+          <el-input v-model="form.phone" :disabled="!isEditMode"/>
+        </el-form-item>
+        <el-form-item label="工作室邮箱" prop="email">
+          <el-input v-model="form.email" :disabled="!isEditMode"/>
+        </el-form-item>
+        
+        <el-form-item label="工作间地址" prop="address">
+          <el-input v-model="form.address" :disabled="!isEditMode"/>
+        </el-form-item>
+        <el-form-item label="工作间名称" prop="name">
+          <el-input v-model="form.name" :disabled="!isEditMode"/>
+        </el-form-item>
+        <el-form-item label="工作间简介" prop="description">
+          <el-input type="textarea" v-model="form.description" :disabled="!isEditMode"/>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="warning" @click="toggleEditMode">{{ isEditMode ? '保存' : '修改' }}</el-button>
+          <el-button type="primary" @click="submit">保存</el-button>
+          <!-- <el-button type="danger" @click="init">重置</el-button> -->
+        </el-form-item>
+      </el-form>
+    </el-card>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, reactive, ref, onMounted } from 'vue';
+import type { FormRules } from 'element-plus';
+// import type { FormExpose } from '@/components/Form'
+import { useI18n } from 'vue-i18n';
+import { useMessage } from '@/hooks/web/useMessage';
+import { updateDept, DeptVO, getUserDept } from '@/api/system/dept/index';
+import { getDept } from '@/api/system/dept/index';
+import * as UserApi from '@/api/system/user';
+
+export default defineComponent({
+  setup() {
+    const { t } = useI18n();
+    const message = useMessage();
+    const formRef = ref();
+
+    const route = useRoute()
+    const id = ref(route.query.id);
+
+    
+    const form = reactive({
+      id: id.value,
+      supervisor: '',  
+      phone: '',
+      email: '',
+      address: '',
+      name: '',
+      leaderUserId: [],
+      nickname: '', 
+      description: '',
+    });
+
+    // 表单校验规则
+    const rules = reactive<FormRules>({
+      leaderUserId: [
+        { required: true, message: '请选择导师名称', trigger: 'blur' }
+      ],
+      phone: [
+        { required: true, message: '请输入负责人电话', trigger: 'blur' },
+        {
+          pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+          message: '请输入正确的手机号码',
+          trigger: 'blur'
+        }
+      ],
+      email: [
+        { required: true, message: '请输入邮箱', trigger: 'blur' },
+        {
+          type: 'email',
+          message: '请输入正确的邮箱格式',
+          trigger: ['blur', 'change']
+        }
+      ],
+      address: [
+        { required: true, message: '请输入工作间地址', trigger: 'blur' }
+      ],
+      name: [
+        { required: true, message: '请输入工作间名称', trigger: 'blur' }
+      ],
+      description: [
+        { required: false, message: '请输入工作间简介', trigger: 'blur' }
+      ],
+    });
+
+    // 将 userInfo 定义放入 setup 中
+    const userInfo = ref({} as DeptVO);  
+    const fetchUserInfo = async (id) => {
+      const users = await getDept(id);
+      console.log(users,'userInfo');
+      userInfo.value = users;
+        // name: users.user[0].nickname // 提取 nickname
+    };
+
+  //获取所有导师
+const users = ref()
+const getSupervisor= async () => {
+  try {
+    const response = await UserApi.getSupervisor()
+    users.value = response
+  } catch (error) {
+    console.error('Error fetching user data:', error)
+  }
+}
+
+//传supervisorId给form.leaderUserId
+const handleSupervisorChange = (values) => {
+  form.leaderUserId = values;  // values 是选择的用户ID数组
+}
+
+const isEditMode = ref(false);
+
+// 切换编辑模式
+const toggleEditMode = () => {
+  if (isEditMode.value) {
+    // 在“保存”状态下执行保存操作
+    submit();
+  }
+  isEditMode.value = !isEditMode.value;
+};
+
+    // 表单提交
+    const submit = async () => {
+      try {
+        await formRef.value?.validate();
+        console.log('提交的数据:', form);
+        await updateDept(form).then((res) => {
+          console.log('更新成功:', res);
+        });
+        message.success('成功');
+      } catch (error) {
+        console.error('提交错误:', error);
+        message.error('错误');
+      }
+    };
+
+
+    // 表单重置
+    const init = async () => {
+      const res = await getDept(id.value);
+      console.log('获取的数据:', res);
+      form.id = res.id;
+      form.address = res.address;
+      form.supervisor = res.user.nickname;
+      form.phone = res.phone;
+      form.email = res.email;
+      form.name = res.name;
+      form.leaderUserId = res.user.id;
+      form.description = res.description;
+      userInfo.value = res.user; 
+    };
+
+    onMounted(async () => {
+      await init();
+      // await fetchUserInfo(form.id);
+      if (id.value) {
+        await fetchUserInfo(id.value); // 传入获取到的 ID
+      }
+      getSupervisor();
+    });
+
+    return {
+      t,
+      form,
+      userInfo,
+      isEditMode,
+      toggleEditMode,
+      submit,
+      init,
+      rules,
+      formRef,
+      users,
+      handleSupervisorChange,
+      getSupervisor,
+    };
+  }
+});
+
+</script>
+
+<style scoped>
+
+.label-bold {
+  font-weight: bold; /* 设置字体加粗 */
+}
+
+.workspace-name {
+  height: 20px;
+}
+
+.card-header {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.user-info {
+  margin-left: 5%;
+  margin-right: 5%;
+  margin-top: 60px;
+  padding-right: 0;
+  padding-left: 0;
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+  list-style: none;
+}
+
+.info-item {
+  margin-bottom: 10px;
+  padding: 11px 0;
+  margin-bottom: -1px;
+  font-size: 13px;
+  border-top: 1px solid #e7eaec;
+  border-bottom: 1px solid #e7eaec;
+}
+
+.pull-right {
+  float: right !important;
+}
+
+.info-label {
+  font-weight: bold;
+}
+
+.personal-info {
+  margin-top: 20px;
+}
+
+
+</style>

+ 24 - 1
src/views/system/workroomCollege/user/UserForm.vue

@@ -127,7 +127,27 @@
         </el-col>
 
       </el-row>
-
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="是否毕业" >
+            <el-select 
+              v-model="formData.isGraduate" 
+              prop="isGraduate" 
+              placeholder="是否达成毕业条件" 
+              clearable
+            >
+              <el-option
+                label='已达成'
+                :value="0" 
+              />
+              <el-option
+                label='未达成' 
+                :value="1"  
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row>
         <el-col :span="24">
           <el-form-item label="备注">
@@ -176,6 +196,7 @@ const formData = ref({
   userType: undefined,
   supervisor:'',
   supervisorId:'',
+  isGraduate: 0,
 })
 const formRules = reactive<FormRules>({
   username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
@@ -208,6 +229,7 @@ const userTypes = ref([
   // { label: '学院', value: "4" }
 ]);
 
+
 //获取所有导师
 const users = ref()
 const getSupervisor= async () => {
@@ -294,6 +316,7 @@ const resetForm = () => {
     userType: undefined,
     supervisor:'',
     supervisorId:'',
+    isGraduate: 0,
   }
   formRef.value?.resetFields()
 }

+ 10 - 1
src/views/system/workroomCollege/user/student.vue

@@ -156,6 +156,9 @@
                 >
                   <Icon icon="ep:edit" />修改
                 </el-button>
+                <el-button type="text" @click="openUserAchievement(scope.row.id)">
+                  成果详情
+                </el-button>
                 <el-button
                   link
                   type="danger"
@@ -247,7 +250,7 @@ const queryParams = reactive({
   mobile: undefined,
   status: undefined,
   deptId: undefined,
-  createTime: []
+  createTime: [],
 })
 const queryFormRef = ref() // 搜索的表单
 
@@ -263,6 +266,12 @@ const getList = async () => {
   }
 }
 
+const router = useRouter()
+const openUserAchievement = (id) => {
+  router.push({ name: 'UserAchievement', query: { id: id} });
+}
+
+
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.pageNo = 1

+ 13 - 1
src/views/system/workroomCollege/user/teacher.vue

@@ -143,6 +143,9 @@
                 >
                   <Icon icon="ep:edit" />修改
                 </el-button>
+                <el-button type="text" @click="openUserAchievement(scope.row.id)">
+                  成果详情
+                </el-button>
                 <el-button
                   link
                   type="danger"
@@ -198,7 +201,7 @@
   </el-row>
 
   <!-- 添加或修改用户对话框 -->
-  <UserForm ref="formRef" @success="getList" />
+  <UserForm ref="formRef" @success="getList" :showIsGraduate="showIsGraduate"/>
   <!-- 用户导入对话框 -->
   <UserImportForm ref="importFormRef" @success="getList" />
   <!-- 分配角色 -->
@@ -235,18 +238,27 @@ const queryParams = reactive({
 })
 const queryFormRef = ref() // 搜索的表单
 
+const showIsGraduate = ref(false);
+
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
   try {
     const data = await UserApi.getTeacherPage(queryParams)
+    console.log(data, 'data');
     list.value = data.list
     total.value = data.total
+    showIsGraduate.value = data.list.some(user => user.hasOwnProperty('isGraduate'));
   } finally {
     loading.value = false
   }
 }
 
+const router = useRouter()
+const openUserAchievement = (id) => {
+  router.push({ name: 'UserAchievement', query: { id: id} });
+}
+
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.pageNo = 1

+ 64 - 79
src/views/system/workroomTeacher/dept/index.vue

@@ -19,14 +19,16 @@
           <span class="info-label">负责人名称:</span>
           <span class="pull-right">{{ userInfo.user?.map(user => user.nickname).join(', ') }}</span>
         </li>
+
+
         <li class="info-item">
           <Icon class="mr-5px" icon="fontisto:email" />
-          <span class="info-label">负责人邮箱:</span>
+          <span class="info-label">工作室邮箱:</span>
           <span class="pull-right">{{ userInfo.email }}</span>
         </li>   
         <li class="info-item">
           <Icon class="mr-5px" icon="ep:phone" />
-          <span class="info-label">手机号码:</span>
+          <span class="info-label">工作室号码:</span>
           <span class="pull-right">{{ userInfo.phone }}</span>
         </li>
         <li class="info-item">
@@ -39,7 +41,7 @@
           <span class="info-label">学生人数:</span>
           <span class="pull-right">{{ userInfo.studentNum }}</span>
         </li>   
-        <!-- <li class="info-item" v-for="(url, index) in userAchievements" :key="index">
+        <!-- <li class="info-item" v-for="(url, index) in userAchievements.value.datil" :key="index">
           <Icon class="mr-5px" icon="fontisto:email" />
           <span class="info-label">成果展示:</span>
           <span class="pull-right">{{ userInfo.achievement }}</span>
@@ -60,28 +62,23 @@
           </template>
           <span style="font-weight: bold;">------</span>
         </el-form-item>
-        <el-form-item label="负责人名称" prop="supervisor">
-            <el-select
-              v-model="form.supervisor"
-              @change="handleSupervisorChange"
-              placeholder="请选择导师名称"
-              multiple
-              clearable
-              filterable
-            >
-              <el-option
-                v-for="supervisor in supervisors"
-                :key="supervisor.id"
-                :label="supervisor.nickname"
-                :value="supervisor.id"
-              />
-            </el-select>
-        </el-form-item>
-        <el-form-item label="负责人电话" prop="phone">
-          <el-input v-model="form.phone"/>
-        </el-form-item>
-        <el-form-item label="负责人邮箱" prop="email">
-          <el-input v-model="form.email"/>
+        <el-form-item label="负责人名称" prop="leaderUserId">
+          <el-select
+          v-model="form.leaderUserId"
+          @change="handleSupervisorChange"
+          placeholder="请选择负责人"
+          clearable
+          filterable
+          multiple
+          :disabled="!isEditMode"
+        >
+          <el-option
+            v-for="user in users"
+            :key="user.id"
+            :label="user.nickname"
+            :value="user.id"
+          />
+        </el-select>
         </el-form-item>
         <el-form-item>
           <template #label>
@@ -89,25 +86,24 @@
           </template>
           <span style="font-weight: bold;">------</span>
         </el-form-item>
+        <el-form-item label="工作室号码" prop="phone">
+          <el-input v-model="form.phone" :disabled="!isEditMode"/>
+        </el-form-item>
+        <el-form-item label="工作室邮箱" prop="email">
+          <el-input v-model="form.email" :disabled="!isEditMode"/>
+        </el-form-item>
+        
         <el-form-item label="工作间地址" prop="address">
-          <el-input v-model="form.address"/>
+          <el-input v-model="form.address" :disabled="!isEditMode"/>
         </el-form-item>
         <el-form-item label="工作间名称" prop="name">
-          <el-input v-model="form.name"/>
-        </el-form-item>
-        <!-- <el-form-item label="导师人数" prop="supervisorNum">
-          <el-input v-model.number="form.supervisorNum"/>
+          <el-input v-model="form.name" :disabled="!isEditMode"/>
         </el-form-item>
-        <el-form-item label="学生人数" prop="studentNum">
-          <el-input v-model.number="form.studentNum"/>
-        </el-form-item> -->
         <el-form-item label="工作间简介" prop="description">
-          <el-input type="textarea" v-model="form.description"/>
+          <el-input type="textarea" v-model="form.description" :disabled="!isEditMode"/>
         </el-form-item>
-        <!-- <el-form-item label="成果展示" prop="achievement">
-          <el-input type="textarea" v-model="form.achievement"/>
-        </el-form-item> -->
         <el-form-item>
+          <el-button type="warning" @click="toggleEditMode">{{ isEditMode ? '保存' : '修改' }}</el-button>
           <el-button type="primary" @click="submit">保存</el-button>
           <!-- <el-button type="danger" @click="init">重置</el-button> -->
         </el-form-item>
@@ -133,24 +129,19 @@ export default defineComponent({
 
     const form = reactive({
       id: '',
-      supervisor: [],  
+      supervisor: '',  
       phone: '',
       email: '',
       address: '',
       name: '',
-      leaderUserId: '',
+      leaderUserId: [],
       nickname: '', 
-      // supervisor: '',
-
-      // supervisorNum: '',
-      // studentNum: '',
       description: '',
-      // achievement: '',
     });
 
     // 表单校验规则
     const rules = reactive<FormRules>({
-      supervisor: [
+      leaderUserId: [
         { required: true, message: '请选择导师名称', trigger: 'blur' }
       ],
       phone: [
@@ -178,52 +169,44 @@ export default defineComponent({
       description: [
         { required: false, message: '请输入工作间简介', trigger: 'blur' }
       ],
-      // supervisorNum: [
-      //   { required: true, message: '请输入导师人数', trigger: 'blur' },
-      // ],
-      // studentNum: [
-      //   { required: true, message: '请输入学生人数', trigger: 'blur' }
-      // ]
     });
 
-   
-
     // 将 userInfo 定义放入 setup 中
     const userInfo = ref({} as DeptVO);  
     const fetchUserInfo = async () => {
       const users = await getUserDept();
-      console.log(users,'09');
+      console.log(users,'userInfo');
       userInfo.value = {...users,
         // name: users.user[0].nickname // 提取 nickname
       };
     };
 
-    // 获取导师列表
-    const supervisors = ref();
-    const getSupervisor= async () => {
-      try {
-        const response = await UserApi.getSupervisor()
-        supervisors.value = response
-        console.log('导师列表:', supervisors.value);
-        
-      } catch (error) {
-        console.error('Error fetching user data:', error)
-      }
-    }
+  //获取所有导师
+const users = ref()
+const getSupervisor= async () => {
+  try {
+    const response = await UserApi.getSupervisor()
+    users.value = response
+  } catch (error) {
+    console.error('Error fetching user data:', error)
+  }
+}
 
-    // const formData = unref(formRef)?.formModel as DeptVO
-    // console.log('提交的数据:', formData);
+//传supervisorId给form.leaderUserId
+const handleSupervisorChange = (values) => {
+  form.leaderUserId = values;  // values 是选择的用户ID数组
+}
 
-    //传supervisorId给formData.supervisorId
-    const handleSupervisorChange = (value: number) => {
-      // const formData = unref(formRef)?.formModel as DeptVO
-        console.log(form);
-      const selectedSupervisors = supervisors.value.find(supervisor => supervisor.id === value);
-      if (selectedSupervisors) {
-        form.supervisor = selectedSupervisors;
-        // form.supervisorId = selectedUser.nickname;
-      }
-    }
+const isEditMode = ref(false);
+
+// 切换编辑模式
+const toggleEditMode = () => {
+  if (isEditMode.value) {
+    // 在“保存”状态下执行保存操作
+    submit();
+  }
+  isEditMode.value = !isEditMode.value;
+};
 
     // 表单提交
     const submit = async () => {
@@ -266,11 +249,13 @@ export default defineComponent({
       t,
       form,
       userInfo,
+      isEditMode,
+      toggleEditMode,
       submit,
       init,
       rules,
       formRef,
-      supervisors,
+      users,
       handleSupervisorChange,
       getSupervisor,
     };

+ 23 - 1
src/views/system/workroomTeacher/user/UserForm.vue

@@ -125,7 +125,27 @@
           </el-form-item>
         </el-col>
       </el-row>
-      
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="是否毕业">
+            <el-select 
+              v-model="formData.isGraduate" 
+              prop="isGraduate" 
+              placeholder="是否达成毕业条件" 
+              clearable
+            >
+              <el-option
+                label='已达成'
+                :value="0" 
+              />
+              <el-option
+                label='未达成' 
+                :value="1"  
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
 
 
       <el-row>
@@ -176,6 +196,7 @@ const formData = ref({
   userType: undefined,
   supervisor:'',
   supervisorId:'',
+  isGraduate: 0,
 })
 const formRules = reactive<FormRules>({
   username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
@@ -292,6 +313,7 @@ const resetForm = () => {
     userType: undefined,
     supervisor:'',
     supervisorId:'',
+    isGraduate: 0,
   }
   formRef.value?.resetFields()
 }