Browse Source

Merge branch 'master' of http://gogs.gisvg.com/YDM/graduate-ui

Crazy 4 months ago
parent
commit
bf53fdbe4a

BIN
public/templates/newceshi.docx


+ 4 - 0
src/api/system/studentSelectionProject/index.ts

@@ -55,6 +55,10 @@ export const studentSelectionProjectApi = {
   getProjectSupervisors: async () => {
     return await request.get({ url: `/system/student-selection-project/getProjectSupervisors`})
   },
+  // 获取当前项目的导师
+  getProjectInnerSupervisors: async () => {
+    return await request.get({ url: `/system/student-selection-project/getProjectInnerSupervisors`})
+  },
 
   // 提交校内导师分配
   updateInnerSupervisor: async (data) => {

+ 3 - 1
src/api/system/supervisorSelectionSetting/index.ts

@@ -10,7 +10,9 @@ export interface supervisorSelectionSettingVO {
   supervisorName :string//导师姓名
   userType:string;//导师类型
   occupiedAcademicSlots:number//已招的学硕名额
-  occupiedProfessionalSlots:number//已招的专硕名额
+  occupiedProfessionalSlots:number,//已招的专硕名额
+  agentProfessionalSlots : number,
+  agentAcademicSlots: number,
 }
 
 // 导师学硕专硕名额设置 API

+ 8 - 8
src/views/Home/Index.vue

@@ -45,11 +45,11 @@
                   <div class="mb-16px text-18px text-white ">未打卡人数</div>
                   <CountTo class="text-28px" :start-val="0" :end-val="totalSate.errorNum" :duration="2600" />
                 </div>
-                <el-divider direction="vertical" border-style="dashed" />
-                <div class="px-8px text-center" style="margin: auto;">
-                  <div class="mb-16px text-18px text-white ">请假人数</div>
-                  <CountTo class="text-28px" :start-val="0" :end-val="totalSate.excuseNum" :duration="2600" />
-                </div>
+<!--                <el-divider direction="vertical" border-style="dashed" />-->
+<!--                <div class="px-8px text-center" style="margin: auto;">-->
+<!--                  <div class="mb-16px text-18px text-white ">请假人数</div>-->
+<!--                  <CountTo class="text-28px" :start-val="0" :end-val="totalSate.excuseNum" :duration="2600" />-->
+<!--                </div>-->
               </div>
             </el-card>
           </el-card>
@@ -114,7 +114,7 @@
                             </el-row>
                           </div>
                         </div>
-                <vue3ScrollSeamless class="scroll-wrap text-color" :classOptions="classOptions" :dataList="list">
+                <vue3ScrollSeamless v-if="list.length > 0" class="scroll-wrap text-color" :classOptions="classOptions" :dataList="list">
                   <div v-if="list.length > 0">
                     <el-row
 v-for="(item, i) of list" :key="i" class="shouye"
@@ -189,7 +189,7 @@ v-for="(item, i) of list" :key="i" class="shouye"
                           </div>
                         </div>
 
-                <vue3ScrollSeamless class="scroll-wraps text-color" :classOptions="class2Options" :dataList="list2">
+                <vue3ScrollSeamless v-if="list2.length > 0" class="scroll-wraps text-color" :classOptions="class2Options" :dataList="list2">
                   <div v-if="list2.length > 0">
                     <el-row v-for="(item, i) of list2" :key="i" class="shouye" >
                       <!-- <el-col :span="6" class="center" style="padding: 10px; border: none;">
@@ -240,7 +240,7 @@ v-for="(item, i) of list" :key="i" class="shouye"
                   </el-col>
                 </el-row>
               </div>
-                <vue3ScrollSeamless class="scroll-wrapss  text-color" :classOptions="list1Options" :dataList="list1">
+                <vue3ScrollSeamless class="scroll-wrapss  text-color" :classOptions="list1Options" :dataList="list1" v-if="list1.length > 0">
                   <div v-if="list1.length > 0">
                     <el-row v-for="(item, i) of list1" :key="i" class="shouye" :style="{ marginBottom: '10px' }">
                       <!-- 增加行与行之间的间距 -->

+ 8 - 8
src/views/system/Home/Index.vue

@@ -61,13 +61,13 @@
                   class="text-28px" :start-val="0" :end-val="totalSate.errorNum"
                   :duration="2600"/>
               </div>
-              <el-divider direction="vertical" border-style="dashed"/>
-              <div class="px-8px text-center" style="margin: auto;">
-                <div class=" text-20px text-white fw-550">请假人数</div>
-                <CountTo
-                  class="text-28px" :start-val="0" :end-val="totalSate.excuseNum"
-                  :duration="2600"/>
-              </div>
+<!--              <el-divider direction="vertical" border-style="dashed"/>-->
+<!--              <div class="px-8px text-center" style="margin: auto;">-->
+<!--                <div class=" text-20px text-white fw-550">请假人数</div>-->
+<!--                <CountTo-->
+<!--                  class="text-28px" :start-val="0" :end-val="totalSate.excuseNum"-->
+<!--                  :duration="2600"/>-->
+<!--              </div>-->
             </div>
           </el-card>
           <el-row :gutter="8">
@@ -104,7 +104,7 @@
                 </div>
                 <vue3ScrollSeamless
                   class="scroll-wrap text-color " :classOptions="classOptions"
-                  :dataList="list">
+                  :dataList="list" v-if="list.length > 0">
                   <div v-if="list.length > 0">
                     <el-row
                       v-for="(item, i) of list" :key="i" class="shouye"

+ 3 - 3
src/views/system/studentAttendanceManage/studentAttendance/index.vue

@@ -8,9 +8,9 @@
       <div class="data-item" style="color: #f56c6c;">
         异常打卡人数: <span>{{ totalSate.errorNum }}</span>
       </div>
-      <div class="data-item" style="color: #e6a23c;">
-        请假人数: <span>{{ totalSate.excuseNum }}</span>
-      </div>
+<!--      <div class="data-item" style="color: #e6a23c;">-->
+<!--        请假人数: <span>{{ totalSate.excuseNum }}</span>-->
+<!--      </div>-->
     </div>
   </ContentWrap>
 

+ 3 - 3
src/views/system/studentAttendanceManage/studentAttendanceError/index.vue

@@ -8,9 +8,9 @@
       <div class="data-item" style="color: #f56c6c;">
         异常打卡人数: <span>{{ totalSate.errorNum }}</span>
       </div>
-      <div class="data-item" style="color: #e6a23c;">
-        请假人数: <span>{{ totalSate.excuseNum }}</span>
-      </div>
+<!--      <div class="data-item" style="color: #e6a23c;">-->
+<!--        请假人数: <span>{{ totalSate.excuseNum }}</span>-->
+<!--      </div>-->
     </div>
   </ContentWrap>
 

+ 3 - 3
src/views/system/studentAttendanceManage/studentAttendanceExcused/index.vue

@@ -8,9 +8,9 @@
       <div class="data-item" style="color: #f56c6c;">
         异常打卡人数: <span>{{ totalSate.errorNum }}</span>
       </div>
-      <div class="data-item" style="color: #e6a23c;">
-        请假人数: <span>{{ totalSate.excuseNum }}</span>
-      </div>
+<!--      <div class="data-item" style="color: #e6a23c;">-->
+<!--        请假人数: <span>{{ totalSate.excuseNum }}</span>-->
+<!--      </div>-->
     </div>
   </ContentWrap>
 

+ 7 - 4
src/views/system/studentSelection/studentSelectSupervisorRecord/record.vue

@@ -322,7 +322,7 @@ const handelWithdraw = async (id:number) => {
 // 添加一个响应式的变量来保存选中的行
 const selectedRows = ref([]);
 const selectableRows = (row) => {
-  return row.selectType === 2;
+  return row.selectType === 2 || row.selectType === 4;
 };
 // 处理复选框选择改变的函数
 const onRowSelectChange = (selected) => {
@@ -361,11 +361,14 @@ const exportWordTemplate = async () => {
       mobile: selectionBook.studentMobile || '无',
       nickname: selectionBook.supervisor || '无',
       title: result.workSupervisor || '无',
-      studentAchievementRequirement: selectionBook.studentAchievementRequirement || '无',
+      studentAchievementRequirement: selectionBook.studentAchievementRequirement || '通过学位论文答辩且在读期间完成下列要求之一:\n' +
+          '(1)要求学生至少以第一作者,或导师(含校内)为第一作者,学生为第二作者,第一署名单位为桂林理工大学,在本学科或相关学科国内外核心学术刊物、国内外学术会议公开发表1篇论文;发表论文必须符合以下任一条件:北大中文核心期刊、被SCI、EI、SSCI、A&HCI收录的国际学术期刊、被SCI、EI、ISIP检索的会议论文。\n' +
+          '(2)第一署名单位为桂林理工大学,获授权国家发明专利/实用新型专利(署名顺序为研究生第一,或者导师(含校内)第一、学生为第二)至少1项。\n' +
+          '(3)第一署名单位为桂林理工大学,学生排名第一,导师(含校内)作为指导老师,获得中国国际大学生创新大赛、“挑战杯”大学生创业计划竞赛等全国性赛事省部级一等奖(金奖)或者国家级二等奖(银奖)以上奖项1项。赛事认定参考桂林理工大学每年修订的《全国普通高校大学生竞赛目录》,若有异议,以学院学位委员会认可为准。',
       studentSignDate: formatDate(selectionBook.studentSignDate) || '无',
       supervisorSignDate: formatDate(selectionBook.supervisorSignDate) || '无',
-      supervisorSignature: selectionBook.supervisorSignature || '/none.png',
-      studentSignature: selectionBook.supervisorSignature || '/none.png'
+      supervisorSignature: selectionBook.supervisorSignature || '\n',
+      studentSignature: selectionBook.supervisorSignature || '\n'
     };
   }));
   console.log("导出的数据对象:", dataList);

+ 9 - 5
src/views/system/studentSelection/studentSelectSupervisorRecord/studentSelectSupervisorRecordForm.vue

@@ -17,24 +17,24 @@
         <el-row>
           <el-col :span="11">
             <el-form-item label="学生姓名">
-              <el-input v-model="studentData.nickname" placeholder="自动链接" disabled />
+              <el-input v-model="studentData.nickname" placeholder="" disabled />
             </el-form-item>
           </el-col>
           <el-col :span="13">
             <el-form-item label="学号">
-              <el-input v-model="studentData.userNumber" placeholder="自动链接" disabled />
+              <el-input v-model="studentData.userNumber" placeholder="" disabled />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="11">
             <el-form-item label="专业">
-              <el-input v-model="studentData.major" placeholder="自动链接" disabled />
+              <el-input v-model="studentData.major" placeholder="" disabled />
             </el-form-item>
           </el-col>
           <el-col :span="13">
             <el-form-item label="联系电话">
-              <el-input v-model="studentData.mobile" placeholder="自动链接" disabled />
+              <el-input v-model="studentData.mobile" placeholder="" disabled />
             </el-form-item>
           </el-col>
         </el-row>
@@ -65,7 +65,11 @@
         <el-row>
           <el-col :span="24">
             <el-form-item label="对研究生毕业时学术成果的要求">
-              <el-input type="textarea" v-model="supervisorData.studentAchievementRequirement" placeholder="(未填写时,默认学校及学院发表学术成果的需求执行)" disabled />
+              <el-input type="textarea" v-model="supervisorData.studentAchievementRequirement"
+                        placeholder="通过学位论文答辩且在读期间完成下列要求之一:
+(1)要求学生至少以第一作者,或导师(含校内)为第一作者,学生为第二作者,第一署名单位为桂林理工大学,在本学科或相关学科国内外核心学术刊物、国内外学术会议公开发表1篇论文;发表论文必须符合以下任一条件:北大中文核心期刊、被SCI、EI、SSCI、A&HCI收录的国际学术期刊、被SCI、EI、ISIP检索的会议论文。
+(2)第一署名单位为桂林理工大学,获授权国家发明专利/实用新型专利(署名顺序为研究生第一,或者导师(含校内)第一、学生为第二)至少1项。
+(3)第一署名单位为桂林理工大学,学生排名第一,导师(含校内)作为指导老师,获得中国国际大学生创新大赛、“挑战杯”大学生创业计划竞赛等全国性赛事省部级一等奖(金奖)或者国家级二等奖(银奖)以上奖项1项。赛事认定参考桂林理工大学每年修订的《全国普通高校大学生竞赛目录》,若有异议,以学院学位委员会认可为准。" disabled />
             </el-form-item>
           </el-col>
         </el-row>

+ 3 - 3
src/views/system/studentSelection/studentSelectionProject/index.vue

@@ -205,9 +205,9 @@
           </el-button>
 
           <el-button type="text"
-                     v-if="userInfo?.userType === '4'"
-                     @click="openCampusSupervisorSetting(scope.row.id)"
-                     v-hasPermi="['system:supervisor-selection-setting:query']"
+             v-if="userInfo?.userType === '4'"
+             @click="openCampusSupervisorSetting(scope.row.id)"
+             v-hasPermi="['system:supervisor-selection-setting:query']"
           >
             <Icon icon="ep:bell" />
             校内导师分配

+ 15 - 14
src/views/system/supervisorSelectionSetting/index.vue

@@ -171,11 +171,11 @@
             选择
           </el-button>
           <el-button
-              type="primary"
-              link
-              @click="openRecord()"
-              v-hasPermi="['system:student-select-supervisor-record:create']"
-              v-else-if="userInfo?.userType === '1' && selectStatus !== 0"
+            type="primary"
+            link
+            @click="openRecord()"
+            v-hasPermi="['system:student-select-supervisor-record:create']"
+            v-else-if="userInfo?.userType === '1' && selectStatus !== 0 && scope.row.selectType"
           >
             <Icon icon="ep:bell" />
             详情
@@ -206,7 +206,7 @@
             撤回
           </el-button> -->
 
-<!--名额设置-->
+          <!--名额设置-->
           <el-button
             link
             type="primary"
@@ -216,14 +216,14 @@
           >
             编辑
           </el-button>
-<!--          <el-button-->
-<!--            link-->
-<!--            type="danger"-->
-<!--            @click="handleDelete(scope.row.id)"-->
-<!--            v-hasPermi="['system:supervisor-selection-setting:delete']"-->
-<!--          >-->
-<!--            删除-->
-<!--          </el-button>-->
+<!-- <el-button-->
+<!--   link-->
+<!--   type="danger"-->
+<!--   @click="handleDelete(scope.row.id)"-->
+<!--   v-hasPermi="['system:supervisor-selection-setting:delete']"-->
+<!-- >-->
+<!--   删除-->
+<!-- </el-button>-->
         </template>
       </el-table-column>
     </el-table>
@@ -465,6 +465,7 @@ const openStudentSelectSupervisorPop = async (type: string,id:number,studentId:n
     message.error("已存在申请")
   }else{
     studentSelectSupervisorPop.value.open(type,id,studentId,projectId ,supervisorId)
+    selectStatus.value = 1;
   } 
 }
 

+ 18 - 18
src/views/system/workroomTeacher/TeacherSelf/TForm.vue

@@ -132,22 +132,22 @@ const formData = ref({
 const formRules = reactive<FormRules>({
   username: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
   nickname: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
-  email: [
-    { required: true, message: '邮箱不能为空', trigger: 'blur' }, // 确保这是必填
-    {
-      type: 'email',
-      message: '请输入正确的邮箱地址',
-      trigger: ['blur', 'change']
-    }
-  ],
-  mobile: [
-    { required: true, message: '手机号码不能为空', trigger: 'blur' },
-    {
-      pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
-      message: '请输入正确的手机号码',
-      trigger: 'blur'
-    }
-  ],
+  // email: [
+  //   { required: true, message: '邮箱不能为空', trigger: 'blur' }, // 确保这是必填
+  //   {
+  //     type: 'email',
+  //     message: '请输入正确的邮箱地址',
+  //     trigger: ['blur', 'change']
+  //   }
+  // ],
+  // mobile: [
+  //   { required: true, message: '手机号码不能为空', trigger: 'blur' },
+  //   {
+  //     pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
+  //     message: '请输入正确的手机号码',
+  //     trigger: 'blur'
+  //   }
+  // ],
   userNumber: [{ required: true, message: '学号不能为空', trigger: 'blur' }],
   userType: [{ required: true, message: '用户类型不能为空', trigger: 'blur' }],
 })
@@ -158,8 +158,8 @@ const postList = ref([] as PostApi.PostVO[]) // 岗位列表
 
 //用户类型
 const userTypes = [
-  { value: '3', label: '导师' },
-  { value: '5', label: '外导师' },
+  { value: '3', label: '校内导师' },
+  { value: '5', label: '外导师' },
 ]
 
 /** 打开弹窗 */

+ 2 - 2
src/views/system/workroomTeacher/TeacherSelf/index.vue

@@ -55,7 +55,7 @@
             <Icon icon="fontisto:email" />
             <div class="div-label" style="margin-left: 8px;">个人简历:</div>
           </div>
-          <div class="remark-content">userInfo.introduction</div>
+          <div class="remark-content">{{ userInfo.introduction }}</div>
         </div>
         <div class="info-remark">
           <div style="display: flex; align-items: center;">
@@ -354,4 +354,4 @@ const cleanedremark = computed(() => {
   height: auto; /* 保持高度自动 */
 }
 
-</style>
+</style>