jinxia.mo 4 недель назад
Родитель
Сommit
de8925910b

+ 93 - 1
back-ui/src/views/dz/cards/components/CardTable.vue

@@ -66,6 +66,16 @@
             <span v-else>-</span>
           </template>
         </el-table-column>
+        <el-table-column label="定向" prop="directedStudy" align="center" width="140">
+          <template #default="scope">
+            <div v-if="getFirstDirectedStudy(scope.row)" class="cursor-pointer text-blue-500 hover:text-blue-700" @click="handleShowDirectedStudy(scope.row)">
+              <el-tooltip :content="getFirstDirectedStudy(scope.row)" placement="top" :disabled="!getFirstDirectedStudy(scope.row)">
+                <div class="truncate">{{ getFirstDirectedStudy(scope.row) }}</div>
+              </el-tooltip>
+            </div>
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
         <el-table-column label="卡类型" prop="type" align="center" min-width="120">
           <template #default="scope">
             <dict-tag :options="card_type" :value="scope.row.type" />
@@ -123,11 +133,30 @@
         </el-table-column>
       </el-table>
     </div>
+    
+    <!-- 定向信息弹窗 -->
+    <el-dialog v-model="directedStudyDialogVisible" title="定向信息" width="900px">
+      <el-table :data="directedStudyList" class="w-full" style="width: 100%">
+        <el-table-column label="序号" type="index" width="60" align="center"></el-table-column>
+        <el-table-column label="编码" prop="code" min-width="120" align="center"></el-table-column>
+        <el-table-column label="学校" prop="universityName" min-width="200" align="center">
+          <template #default="scope">
+            <span>{{ scope.row.universityName }}{{ scope.row.universityId ? `(${scope.row.universityId})` : '' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="专业" prop="majorName" min-width="200" align="center">
+          <template #default="scope">
+            <span>{{ scope.row.majorName }}{{ scope.row.majorId ? `(${scope.row.majorId})` : '' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="专业类" prop="majorAncestors" min-width="200" align="center"></el-table-column>
+      </el-table>
+    </el-dialog>
   </div>
 </template>
 <script setup>
 import DictTag from '@/components/DictTag/index.vue';
-import { getCurrentInstance } from 'vue';
+import { getCurrentInstance, ref } from 'vue';
 const { proxy } = getCurrentInstance();
 const { card_type, exam_type, card_distribute_status, card_status, card_settlement_status, card_time_status, card_pay_status } = 
 proxy.useDict("card_type", "exam_type", "card_distribute_status", "card_status", "card_settlement_status", "card_time_status", "card_pay_status");
@@ -161,6 +190,69 @@ const handleDelete = (row) => {
 const getAssignExamType = (row) => {
   return row && row.assignExamType ? row.assignExamType : null;
 };
+
+// 解析directedStudy JSON并获取第一个的显示文本
+const getFirstDirectedStudy = (row) => {
+  if (!row || !row.directedStudy) {
+    return null;
+  }
+  try {
+    const directedStudy = typeof row.directedStudy === 'string' 
+      ? JSON.parse(row.directedStudy) 
+      : row.directedStudy;
+    
+    if (Array.isArray(directedStudy) && directedStudy.length > 0) {
+      const first = directedStudy[0];
+      const universityName = first?.universityName || '';
+      const majorName = first?.majorName || '';
+      if (universityName || majorName) {
+        const parts = [];
+        if (universityName) parts.push(universityName);
+        if (majorName) parts.push(majorName);
+        return parts.join(' - ');
+      }
+    }
+  } catch (e) {
+    console.error('解析directedStudy失败:', e);
+  }
+  return null;
+};
+
+// 获取完整的directedStudy列表
+const getDirectedStudyList = (row) => {
+  if (!row || !row.directedStudy) {
+    return [];
+  }
+  try {
+    const directedStudy = typeof row.directedStudy === 'string' 
+      ? JSON.parse(row.directedStudy) 
+      : row.directedStudy;
+    
+    if (Array.isArray(directedStudy)) {
+      return directedStudy.map(item => ({
+        code: item?.code || '-',
+        majorName: item?.majorName || '-',
+        majorId: item?.majorId || null,
+        universityName: item?.universityName || '-',
+        universityId: item?.universityId || null,
+        majorAncestors: item?.majorAncestors || '-'
+      }));
+    }
+  } catch (e) {
+    console.error('解析directedStudy失败:', e);
+  }
+  return [];
+};
+
+// 弹窗相关
+const directedStudyDialogVisible = ref(false);
+const directedStudyList = ref([]);
+
+// 显示定向信息弹窗
+const handleShowDirectedStudy = (row) => {
+  directedStudyList.value = getDirectedStudyList(row);
+  directedStudyDialogVisible.value = true;
+};
 </script>
 <style lang="scss" scoped>
 /* 在弹窗中使用时的样式 */

+ 11 - 3
back-ui/src/views/dz/cards/index.vue

@@ -17,12 +17,20 @@
             <ie-select v-model="queryParams.type" :options="card_type" class="w-[180px]!" clearable />
           </el-form-item>
         </el-col>
-        <el-col :span="7">
+        <el-col :span="6">
           <el-form-item label="卡分配日期" prop="assignTimeRange">
             <el-date-picker v-model="queryParams.assignTimeRange" type="daterange" range-separator="至"
               start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD" class="w-[180px]!" />
           </el-form-item>
         </el-col>
+        <el-col :span="6">
+          <el-form-item>
+            <div class="flex gap-x-2">
+              <el-button type="primary" icon="Search" @click="handleQuery" class="w-[80px]">搜索</el-button>
+              <el-button icon="Refresh" @click="resetQuery" class="w-[80px]">重置</el-button>
+            </div>
+          </el-form-item>
+        </el-col>
       </el-row>
       <!-- 其他表单项:每行4个 -->
       <el-row :gutter="20">
@@ -120,14 +128,14 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row :gutter="20">
+      <!-- <el-row :gutter="20">
         <el-col :span="6">
           <el-form-item>
             <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
             <el-button icon="Refresh" @click="resetQuery">重置</el-button>
           </el-form-item>
         </el-col>
-      </el-row>
+      </el-row> -->
     </el-form>
     <el-row class="mt-2">
       <CustomButton icon="plus" v-hasPermi="['dz:cards:issue']" @click="handleAddCard">制卡</CustomButton>

+ 28 - 0
ie-admin/src/main/java/com/ruoyi/web/controller/dz/DzCardsController.java

@@ -2,6 +2,7 @@ package com.ruoyi.web.controller.dz;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.ValidationException;
@@ -76,6 +77,33 @@ public class DzCardsController extends BaseController
         prepare(dzCards);
         startPage();
         List<DzCards> list = dzCardsService.selectDzCardsList2(dzCards);
+        
+        // 根据cardIds查询用户,并将用户的directedStudy设置给DzCard
+        if (!CollectionUtils.isEmpty(list)) {
+            List<Long> cardIds = list.stream()
+                    .map(DzCards::getCardId)
+                    .filter(cardId -> cardId != null)
+                    .collect(Collectors.toList());
+            
+            if (!CollectionUtils.isEmpty(cardIds)) {
+                List<SysUser> users = sysUserService.selectUserByCardIds(cardIds);
+                // 创建cardId到user的映射
+                Map<Long, SysUser> userMap = users.stream()
+                        .filter(user -> user.getCardId() != null)
+                        .collect(Collectors.toMap(SysUser::getCardId, user -> user, (existing, replacement) -> existing));
+                
+                // 遍历list,设置directedStudy
+                for (DzCards card : list) {
+                    if (card.getCardId() != null) {
+                        SysUser user = userMap.get(card.getCardId());
+                        if (user != null && user.getDirectedStudy() != null) {
+                            card.setDirectedStudy(user.getDirectedStudy());
+                        }
+                    }
+                }
+            }
+        }
+        
         return getDataTable(list);
     }
 

+ 11 - 0
ie-system/src/main/java/com/ruoyi/dz/domain/DzCards.java

@@ -179,6 +179,9 @@ public class DzCards extends BaseEntity
     /** 统计类型(用于详情查询) */
     private String statisticsType;
 
+    /** 定向学习 */
+    private String directedStudy;
+
     public Long getTeacherId() {
         return teacherId;
     }
@@ -617,6 +620,14 @@ public class DzCards extends BaseEntity
         this.statisticsType = statisticsType;
     }
 
+    public String getDirectedStudy() {
+        return directedStudy;
+    }
+
+    public void setDirectedStudy(String directedStudy) {
+        this.directedStudy = directedStudy;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)