47 4 сар өмнө
parent
commit
3a6a62382b

+ 15 - 0
src/api/system/studentAttendance/index.ts

@@ -66,4 +66,19 @@ export const StudentAttendanceApi = {
   exportStudentAttendance: async (params) => {
     return await request.download({ url: `/system/student-attendance/export-excel`, params })
   },
+
+  // 导出学生考勤正常记录 Excel
+  exportStudentAttendanceNormalExcel: async (params) => {
+    return await request.download({ url: `/system/student-attendance/export-normalExcel`, params })
+  },
+
+  // 导出学生考勤异常记录 Excel
+  exportStudentAttendanceErrorExcel: async (params) => {
+    return await request.download({ url: `/system/student-attendance/export-errorExcel`, params })
+  },
+
+  // 导出学生请假记录 Excel
+  exportStudentAttendanceExcusedExcel: async (params) => {
+    return await request.download({ url: `/system/student-attendance/export-excusedExcel`, params })
+  },
 }

+ 50 - 5
src/views/system/selfAchievement/UserAchievementForm.vue

@@ -4,7 +4,7 @@
       ref="formRef"
       :model="formData"
       :rules="formRules"
-      label-width="100px"
+      label-width="110px"
       v-loading="formLoading"
     >
 
@@ -23,16 +23,45 @@
         </el-select>
       </el-form-item>
 
+      <el-form-item label="署名" prop="sort">
+        <el-select v-model="formData.sort" placeholder="请选择署名次序">
+          <el-option
+            v-for="option in sorts"
+            :key="option.value"
+            :label="option.label"
+            :value="option.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="要求">
+        <div style="border: 1px solid #dcdfe6; padding: 10px; border-radius: 4px; background-color: #f5f7fa;">
+          通过学位论文答辩且在读期间完成下列要求之一:<br />
+          (1)要求学生至少以第一作者,或导师(含校内)为第一作者,学生为第二作者,第一署名单位为桂林理工大学,在本学科或相关学科国内外核心学术刊物、
+          国内外学术会议公开发表1篇论文;发表论文必须符合以下任一条件:北大中文核心期刊、被SCI、EI、SSCI、A&HCI收录的国际学术期刊、被SCI、EI、ISIP检索的会议论文<br />
+          (2)第一署名单位为桂林理工大学,获授权国家发明专利/实用新型专利(署名顺序为研究生第一,或者导师(含校内)第一、学生为第二)至少1项。<br />
+          (3)第一署名单位为桂林理工大学,学生排名第一,导师(含校内)作为指导老师,获得中国国际大学生创新大赛、
+          “挑战杯”大学生创业计划竞赛等全国性赛事省部级一等奖(金奖)或者国家级二等奖(银奖)以上奖项1项。
+          赛事认定参考桂林理工大学每年修订的《全国普通高校大学生竞赛目录》,若有异议,以学院学位委员会认可为准。
+        </div>
+      </el-form-item>
+
+      <el-form-item label="是否达到要求" required="true">
+        <el-switch v-model="canSubmit" />
+      </el-form-item>
+
       <el-form-item label="图片材料" prop="detail">
         <UploadImg v-model="formData.detail" />
       </el-form-item>
+
     </el-form>
     <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
+      <el-button @click="submitForm" type="primary" :disabled="!canSubmit || formLoading">确 定</el-button>
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
   </Dialog>
 </template>
+
 <script setup lang="ts">
 import { UserAchievementApi, UserAchievementVO } from '@/api/system/userAchievement'
 /** 成果 表单 */
@@ -50,6 +79,7 @@ const formData = ref({
   userId: undefined,
   achievementName: undefined,
   achievementType: undefined,
+  sort: undefined,
   userName: undefined,
   detail: undefined,
 })
@@ -57,17 +87,31 @@ const formRules = reactive({
   userId: [{ required: true, message: '用户id不能为空', trigger: 'blur' }],
   achievementName: [{ required: true, message: '成果名称不能为空', trigger: 'blur' }],
   achievementType: [{ required: true, message: '成果类型不能为空', trigger: 'change' }],
+  sort: [{ required: true, message: '署名不能为空', trigger: 'change' }],
   userName: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
+
 })
 const formRef = ref() // 表单 Ref
 
 // 成果类型选项
 const achievementTypes = ref([
-  { label: '论文', value: "1" },
-  { label: '专利', value: "2" },
-  { label: '著作', value: "3" },
+  { label: '北大中文核心期刊论文', value: "1" },
+  { label: 'SCI、EI、SSCI、A&HCI国际学术期刊论文', value: "2" },
+  { label: 'SCI、EI、ISIP会议论文', value: "3" },
+  { label: '专利', value: "4" },
+  { label: '著作', value: "5" },
+  { label: '竞赛', value: "6" },
+]);
+
+// 署名次序选项
+const sorts = ref([
+  { label: '第一作者', value: "1" },
+  { label: '第二作者', value: "2" },
 ]);
 
+// 控制提交的开关
+const canSubmit = ref(true)
+
 /** 打开弹窗 */
 const open = async (type: string, id?: number) => {
   dialogVisible.value = true
@@ -118,6 +162,7 @@ const resetForm = () => {
     userId: undefined,
     achievementName: undefined,
     achievementType: undefined,
+    sort: undefined,
     userName: undefined,
     detail: undefined,
   }

+ 41 - 8
src/views/system/selfAchievement/index.vue

@@ -25,12 +25,26 @@
           clearable
           class="!w-240px"
         >
-          <el-option :label="'论文'" :value="1" />
-          <el-option :label="'专利'" :value="2" />
-          <el-option :label="'著作'" :value="3" />
+          <el-option :label="'北大中文核心期刊论文'" :value="1" />
+          <el-option :label="'SCI、EI、SSCI、A&HCI国际学术期刊论文'" :value="2" />
+          <el-option :label="'SCI、EI、ISIP会议论文'" :value="3" />
+          <el-option :label="'专利'" :value="4" />
+          <el-option :label="'著作'" :value="5" />
+          <el-option :label="'竞赛'" :value="6" />
         </el-select>
       </el-form-item>
-      <el-form-item label="创建时间" prop="createTime">
+      <el-form-item label="署名" prop="sort">
+        <el-select
+          v-model="queryParams.sort"
+          placeholder="请选择署名"
+          clearable
+          class="!w-240px"
+        >
+          <el-option :label="'第一作者'" :value="1" />
+          <el-option :label="'第二作者'" :value="2" />
+        </el-select>
+      </el-form-item>
+      <!-- <el-form-item label="创建时间" prop="createTime">
         <el-date-picker
           v-model="queryParams.createTime"
           value-format="YYYY-MM-DD HH:mm:ss"
@@ -40,7 +54,7 @@
           :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
           class="!w-220px"
         />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@@ -77,16 +91,34 @@
           <span>
             {{
               rowData.row.achievementType == 1
-               ? '论文'
-                : rowData.row.achievementType ==2
-               ? '专利'
+               ? '北大中文核心期刊论文'
+                : rowData.row.achievementType == 2
+               ? 'SCI、EI、SSCI、A&HCI国际学术期刊论文'
                 : rowData.row.achievementType == 3
+               ? 'SCI、EI、ISIP会议论文'
+                : rowData.row.achievementType ==4
+               ? '专利'
+                : rowData.row.achievementType == 5
                ? '著作'
+                : rowData.row.achievementType == 6
+               ? '竞赛'
                 : '未知类型'
             }}
           </span>
         </template>
       </el-table-column>
+      <el-table-column label="署名" align="center" prop="sort">
+        <template #default="rowData">
+          <span>
+            {{ 
+              rowData.row.sort == 1
+               ? '第一作者'
+                : rowData.row.sort == 2
+               ? '第二作者'
+                : '其他'
+            }}</span>
+        </template>
+      </el-table-column>
       <el-table-column
         label="创建时间"
         align="center"
@@ -155,6 +187,7 @@ const queryParams = reactive({
   userId: undefined,
   achievementName: undefined,
   achievementType: undefined,
+  sort: undefined,
   userName: undefined,
   createTime: [],
   detail: undefined,

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

@@ -35,7 +35,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="工作间名称" prop="deptName">
+      <el-form-item label="工作间名称" prop="deptName" v-if="userInfo.userType === '4'">
         <el-input
           placeholder="请输入工作间名称 "
           v-model="queryParams.deptName"
@@ -60,20 +60,20 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           plain
           @click="openForm('create')"
           v-hasPermi="['system:student-attendance:create']"
         >
           <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
+        </el-button> -->
         <el-button
           type="success"
           plain
           @click="handleExport"
           :loading="exportLoading"
-          v-hasPermi="['system:student-attendance:export']"
+          v-hasPermi="['system:student-attendance:exportNormal']"
         >
           <Icon icon="ep:download" class="mr-5px" /> 导出
         </el-button>
@@ -279,7 +279,7 @@ const handleExport = async () => {
     await message.exportConfirm()
     // 发起导出
     exportLoading.value = true
-    const data = await StudentAttendanceApi.exportStudentAttendance(queryParams)
+    const data = await StudentAttendanceApi.exportStudentAttendanceNormalExcel(queryParams)
     download.excel(data, '学生考勤记录.xls')
   } catch {
   } finally {

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

@@ -35,7 +35,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="工作间名称" prop="deptName">
+      <el-form-item label="工作间名称" prop="deptName" v-if="userInfo.userType === '4'">
         <el-input
           placeholder="请输入工作间名称 "
           v-model="queryParams.deptName"
@@ -72,20 +72,20 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           plain
           @click="openForm('create')"
           v-hasPermi="['system:student-attendance:create']"
         >
           <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
+        </el-button> -->
         <el-button
           type="success"
           plain
           @click="handleExport"
           :loading="exportLoading"
-          v-hasPermi="['system:student-attendance:export']"
+          v-hasPermi="['system:student-attendance:exportError']"
         >
           <Icon icon="ep:download" class="mr-5px" /> 导出
         </el-button>
@@ -265,7 +265,7 @@ const handleExport = async () => {
     await message.exportConfirm()
     // 发起导出
     exportLoading.value = true
-    const data = await StudentAttendanceApi.exportStudentAttendance(queryParams)
+    const data = await StudentAttendanceApi.exportStudentAttendanceErrorExcel(queryParams)
     download.excel(data, '学生考勤记录.xls')
   } catch {
   } finally {

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

@@ -35,7 +35,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="工作间名称" prop="deptName">
+      <el-form-item label="工作间名称" prop="deptName" v-if="userInfo.userType === '4'">
         <el-input
           placeholder="请输入工作间名称 "
           v-model="queryParams.deptName"
@@ -85,7 +85,7 @@
           plain
           @click="handleExport"
           :loading="exportLoading"
-          v-hasPermi="['system:student-attendance:export']"
+          v-hasPermi="['system:student-attendance:excusedError']"
         >
           <Icon icon="ep:download" class="mr-5px" /> 导出
         </el-button>
@@ -265,7 +265,7 @@ const handleExport = async () => {
     await message.exportConfirm()
     // 发起导出
     exportLoading.value = true
-    const data = await StudentAttendanceApi.exportStudentAttendance(queryParams)
+    const data = await StudentAttendanceApi.exportStudentAttendanceExcusedExcel(queryParams)
     download.excel(data, '学生考勤记录.xls')
   } catch {
   } finally {

+ 1 - 1
src/views/system/studentAttendanceManage/studentFaceManage/index.vue

@@ -35,7 +35,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="工作间名称" prop="deptName">
+      <el-form-item label="工作间名称" prop="deptName" v-if="userInfo.userType === '4'">
         <el-input
           placeholder="请输入工作间名称 "
           v-model="queryParams.deptName"

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

@@ -231,7 +231,7 @@ const formData = ref({
 const formRules = reactive<FormRules>({
   username: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
   nickname: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
-  password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
+  // password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
   email: [
     { required: true, message: '邮箱不能为空', trigger: 'blur' }, // 确保这是必填
     {

+ 1 - 1
src/views/system/workroomCollege/userAchievement/UserAchievementForm.vue

@@ -69,7 +69,7 @@ const formRules = reactive({
   userId: [{ required: true, message: '用户id不能为空', trigger: 'blur' }],
   achievementName: [{ required: true, message: '成果名称不能为空', trigger: 'blur' }],
   achievementType: [{ required: true, message: '成果类型不能为空', trigger: 'change' }],
-  userName: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
+  // userName: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
 })
 const formRef = ref() // 表单 Ref
 

+ 4 - 4
src/views/system/workroomCollege/userAchievement/index.vue

@@ -60,14 +60,14 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           plain
           @click="openForm('create')"
           v-hasPermi="['system:user-achievement:create']"
         >
           <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
+        </el-button> -->
         <el-button
           type="success"
           plain
@@ -117,7 +117,7 @@
           <a :href="row.detail" target="_blank" v-if="row.detail">{{ row.detail }}</a>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" min-width="120px">
+      <!-- <el-table-column label="操作" align="center" min-width="120px">
         <template #default="rowData">
           <el-button
             link
@@ -136,7 +136,7 @@
             删除
           </el-button>
         </template>
-      </el-table-column>
+      </el-table-column> -->
     </el-table>
     <!-- 分页 -->
     <Pagination

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

@@ -213,7 +213,7 @@ const formData = ref({
 const formRules = reactive<FormRules>({
   username: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
   nickname: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
-  password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
+  // password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
   email: [
     { required: true, message: '邮箱不能为空', trigger: 'blur' },
     {

+ 1 - 1
src/views/system/workroomTeacher/userAchievement/UserAchievementForm.vue

@@ -66,7 +66,7 @@ const formRules = reactive({
   userId: [{ required: true, message: '用户id不能为空', trigger: 'blur' }],
   achievementName: [{ required: true, message: '成果名称不能为空', trigger: 'blur' }],
   achievementType: [{ required: true, message: '成果类型不能为空', trigger: 'change' }],
-  userName: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
+  // userName: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
 })
 const formRef = ref() // 表单 Ref
 

+ 4 - 4
src/views/system/workroomTeacher/userAchievement/index.vue

@@ -60,14 +60,14 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           plain
           @click="openForm('create')"
           v-hasPermi="['system:user-achievement:create']"
         >
           <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
+        </el-button> -->
         <el-button
           type="success"
           plain
@@ -117,7 +117,7 @@
           <a :href="row.detail" target="_blank" v-if="row.detail">{{ row.detail }}</a>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" min-width="120px">
+      <!-- <el-table-column label="操作" align="center" min-width="120px">
         <template #default="rowData">
           <el-button
             link
@@ -136,7 +136,7 @@
             删除
           </el-button>
         </template>
-      </el-table-column>
+      </el-table-column> -->
     </el-table>
     <!-- 分页 -->
     <Pagination