Browse Source

所有模块接口都已接完,登录分配权限进行中

hzj18279462576@163.com 3 months ago
parent
commit
0b7c3a0714

+ 84 - 0
src/api/alumni-activity.js

@@ -0,0 +1,84 @@
+// 校友信息管理
+// 引入axios请求实例(已封装好baseURL、请求拦截器携带token)
+import request from "@/utils/request";
+
+// 11.1.	获取状态下拉列表数据
+export function queryStatus() {
+  return request({
+    url: "/api/alumniActivity/queryStatus",
+    method: "get",
+  });
+}
+
+// 11.8.	获取组织下拉列表数据
+export function queryClubDatas(params) {
+  return request({
+    url: "/api/alumniClub/queryClubDatas",
+    method: "get",
+    params
+  });
+}
+
+// 11.2.	获取活动分页数据
+export function queryActivityPages(params) {
+  return request({
+    url: "/api/alumniActivity/queryActivityPages",
+    method: "get",
+    params,
+  });
+}
+
+// 11.3.	新增活动数据
+export function insertActivity(data) {
+  return request({
+    url: "/api/alumniActivity/insertActivity",
+    method: "post",
+    data: data,
+  });
+}
+
+// 11.6.	更新活动数据
+export function updateActivity(data) {
+  return request({
+    url: "/api/alumniActivity/updateActivity",
+    method: "post",
+    data: data,
+  });
+}
+
+// 11.7.	删除活动数据
+export function deleteActivityById(params) {
+  return request({
+    url: "/api/alumniActivity/deleteActivityById",
+    method: "get",
+    params: params,
+  });
+}
+
+// 11.9.	获取审核状态下拉列表数据
+export function queryPassTypes() {
+  return request({
+    url: "/api/alumniClub/queryPassTypes",
+    method: "get",
+  });
+}
+
+// 11.10.	获取活动报名审核分页数据
+export function queryReportPages(params) {
+  return request({
+    url: "/api/alumniActivity/queryReportPages",
+    method: "get",
+    params
+  });
+}
+
+// 11.11.	审核申请报名数据
+export function toExamineReport(params) {
+  return request({
+    url: "/api/alumniActivity/toExamineReport",
+    method: "get",
+    params,
+  });
+}
+
+

+ 71 - 0
src/api/alumni-card.js

@@ -0,0 +1,71 @@
+// 校友信息管理
+// 引入axios请求实例(已封装好baseURL、请求拦截器携带token)
+import request from '@/utils/request'
+
+// 19.7.	电子校友卡分页列表数据
+export function queryEUsersPage(params) {
+  return request({
+    url: `/api/alumniUser/queryEUsersPage`,
+    method: 'get',
+    params
+  })
+}
+
+// 19.8.	审核电子校友卡数据
+export function toExamineUser(params) {
+  return request({
+    url: `/api/alumniUser/toExamineUser`,
+    method: 'get',
+    params
+  })
+}
+
+// 在校经历下拉列表数据
+export function queryEducations() {
+  return request({
+    url: '/api/alumniUser/queryEducations',
+    method: 'get',
+  })
+}
+
+// 审核状态下拉列表数据
+export function queryPassTypes() {
+  return request({
+    url: '/api/alumniClub/queryPassTypes',
+    method: 'get',
+  })
+}
+
+// 7.1.	获取毕业年份下拉列表数据
+export function queryGraduate() {
+  return request({
+    url: '/api/alumniUser/queryGraduate',
+    method: 'get',
+  })
+}
+
+// 7.2.	获取学院下拉列表数据
+export function queryColleges() {
+  return request({
+    url: '/api/alumniOrg/queryColleges',
+    method: 'get',
+  })
+}
+
+// 7.3.	根据学院ID获取入学年下拉列表数据
+export function queryPeriods(params) {
+  return request({
+    url: '/api/alumniOrg/queryPeriods',
+    method: 'get',
+    params
+  })
+}
+
+// 7.4.	根据入学年ID获取专业下拉列表数据
+export function queryMajors(params) {
+  return request({
+    url: '/api/alumniOrg/queryMajors',
+    method: 'get',
+    params
+  })
+}

+ 37 - 0
src/api/alumni-cooperation.js

@@ -0,0 +1,37 @@
+// 校友信息管理
+// 引入axios请求实例(已封装好baseURL、请求拦截器携带token)
+import request from '@/utils/request'
+
+// 21.3.	校友合作分页列表数据
+export function queryWebCooperationPage(params) {
+  return request({
+    url: `/api/alumniCooperation/queryWebCooperationPage`,
+    method: 'get',
+    params
+  })
+}
+
+// 21.4.	审核校友合作数据
+export function toExamineCoo(params) {
+  return request({
+    url: `/api/alumniCooperation/toExamineCoo`,
+    method: 'get',
+    params
+  })
+}
+
+// 审核状态下拉列表数据
+export function queryPassTypes() {
+  return request({
+    url: '/api/alumniClub/queryPassTypes',
+    method: 'get',
+  })
+}
+
+// 信息类型下拉列表数据
+export function queryTypes() {
+  return request({
+    url: '/api/alumniCooperation/queryTypes',
+    method: 'get',
+  })
+}

+ 29 - 0
src/api/alumni-enterprise.js

@@ -0,0 +1,29 @@
+// 校友信息管理
+// 引入axios请求实例(已封装好baseURL、请求拦截器携带token)
+import request from '@/utils/request'
+
+// 19.7.	电子校友卡分页列表数据
+export function queryWebEnterprisePage(params) {
+  return request({
+    url: `/api/alumniEnterprise/queryWebEnterprisePage`,
+    method: 'get',
+    params
+  })
+}
+
+// 19.8.	审核电子校友卡数据
+export function toExamineEnterprise(params) {
+  return request({
+    url: `/api/alumniEnterprise/toExamineEnterprise`,
+    method: 'get',
+    params
+  })
+}
+
+// 审核状态下拉列表数据
+export function queryPassTypes() {
+  return request({
+    url: '/api/alumniClub/queryPassTypes',
+    method: 'get',
+  })
+}

+ 4 - 3
src/api/alumni-square.js

@@ -12,10 +12,11 @@ export function insertPosts(data) {
 }
 }
 
 
 // 17.2.	获取组织分类下拉列表数据
 // 17.2.	获取组织分类下拉列表数据
-export function queryCategoryDatas() {
+export function queryCategoryDatas(params) {
   return request({
   return request({
-    url: '/api/alumniCategory/queryCategoryDatas',
-    method: 'get'
+    url: '/api/alumniClub/queryClubDatas',
+    method: 'get',
+    params
   })
   })
 }
 }
 
 

+ 36 - 0
src/api/alumni-style.js

@@ -0,0 +1,36 @@
+// 校友风采
+import request from "@/utils/request";
+
+// 12.3.	校友风采分页数据
+export function queryEndorsePage(params) {
+  return request({
+    url: `/api/alumniEndorse/queryEndorsePage`,
+    method: "get",
+    params,
+  });
+}
+// 12.1.	新增校友风采数据
+export function insertEndorseData(data) {
+  return request({
+    url: "/api/alumniEndorse/insertEndorseData",
+    method: "post",
+    data,
+  });
+}
+// 12.2.	编辑校友风采数据
+export function updateEndorseData(data) {
+  return request({
+    url: "/api/alumniEndorse/updateEndorseData",
+    method: "post",
+    data,
+  });
+}
+
+// 12.4.	删除校友风采数据
+export function deleteEndorseById(params) {
+  return request({
+    url: "/api/alumniEndorse/deleteEndorseById",
+    method: "get",
+    params, // 传修改后的菜单对象,必须带id
+  });
+}

+ 27 - 0
src/api/homecoming-service.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+// 18.1.	返校服务分页数据
+export function returnPages(params) {
+  return request({
+    url: "/api/alumniReturn/returnPages",
+    method: "get",
+    params: params,
+  });
+}
+
+// 18.2.	审核返校数据
+export function toExamineReturn(params) {
+  return request({
+    url: "/api/alumniReturn/toExamineReturn",
+    method: "get",
+    params: params,
+  });
+}
+
+// 18.3.	校区下拉列表数据
+export function querySchools() {
+  return request({
+    url: "/api/alumniReturn/querySchools",
+    method: "get",
+  });
+}

+ 4 - 4
src/components/richtext.vue

@@ -76,14 +76,14 @@ const uploadImg = async (file, insertFn) => {
     ElMessage({
     ElMessage({
       type: "success",
       type: "success",
       showClose: true,
       showClose: true,
-      message: res.msg,
+      message: res.message,
       center: true,
       center: true,
     });
     });
   } else {
   } else {
     ElMessage({
     ElMessage({
       type: "error",
       type: "error",
       showClose: true,
       showClose: true,
-      message: res.msg,
+      message: res.message,
       center: true,
       center: true,
     });
     });
   }
   }
@@ -165,7 +165,7 @@ const customPaste = (editor, event, callback) => {
   const html = event.clipboardData.getData("text/html"); // 获取粘贴的 html
   const html = event.clipboardData.getData("text/html"); // 获取粘贴的 html
   const text = event.clipboardData.getData("text/plain"); // 获取粘贴的纯文本
   const text = event.clipboardData.getData("text/plain"); // 获取粘贴的纯文本
   const rtf = event.clipboardData.getData("text/rtf"); // 获取 rtf 数据(如从 word wsp 复制粘贴)
   const rtf = event.clipboardData.getData("text/rtf"); // 获取 rtf 数据(如从 word wsp 复制粘贴)
-  console.log(html);
+  // console.log(html);
 
 
   // 自定义插入内容
   // 自定义插入内容
   // editor.insertText("自定义插入内容");
   // editor.insertText("自定义插入内容");
@@ -198,7 +198,7 @@ const customPaste = (editor, event, callback) => {
 
 
 const handleCreated = (editor) => {
 const handleCreated = (editor) => {
   editorRef.value = editor; // 记录 editor 实例,重要!
   editorRef.value = editor; // 记录 editor 实例,重要!
-  console.log(props.fatherMessage);
+  // console.log(props.fatherMessage);
   editor.setHtml(props.fatherMessage.data);
   editor.setHtml(props.fatherMessage.data);
   // if (props.fatherMessage.flag) {
   // if (props.fatherMessage.flag) {
   //   editor.enable();
   //   editor.enable();

+ 1 - 1
src/utils/request.js

@@ -39,7 +39,7 @@ service.interceptors.request.use(
 service.interceptors.response.use(
 service.interceptors.response.use(
   (response) => {
   (response) => {
     // console.log(response);
     // console.log(response);
-    if (response.data.message == "登录凭证已失效,请重新登录") {
+    if (response.data.message == "登录凭证已失效,请重新登录") {
       router.push("/login");
       router.push("/login");
     } 
     } 
       // 1. 获取后端返回的数据(response.data 是后端真正返回的内容)
       // 1. 获取后端返回的数据(response.data 是后端真正返回的内容)

+ 261 - 139
src/views/alumni-activity/ActivityAudit.vue

@@ -6,7 +6,7 @@
           <span>报名人 :</span>
           <span>报名人 :</span>
           <el-input
           <el-input
             clearable
             clearable
-            v-model.trim="searchInput.name"
+            v-model.trim="searchInput.userName"
             class="w-50 m-2"
             class="w-50 m-2"
             placeholder="请输入发布人"
             placeholder="请输入发布人"
             style="width: 180px"
             style="width: 180px"
@@ -16,7 +16,7 @@
           <span>活动名称 :</span>
           <span>活动名称 :</span>
           <el-input
           <el-input
             clearable
             clearable
-            v-model.trim="searchInput.name"
+            v-model.trim="searchInput.theme"
             class="w-50 m-2"
             class="w-50 m-2"
             placeholder="请输入活动名称"
             placeholder="请输入活动名称"
             style="width: 180px"
             style="width: 180px"
@@ -24,13 +24,30 @@
         </div>
         </div>
         <div class="condition">
         <div class="condition">
           <span>所属组织 :</span>
           <span>所属组织 :</span>
-          <el-select
+          <!-- <el-select
             clearable
             clearable
-            v-model="searchInput.name"
+            v-model="searchInput.orgId"
             placeholder="请选择所属组织"
             placeholder="请选择所属组织"
           >
           >
             <el-option
             <el-option
-              v-for="i in collegeData"
+              v-for="i in clubData"
+              :key="i.id"
+              :label="i.name"
+              :value="i.id"
+            />
+          </el-select> -->
+          <el-select
+            v-model="searchInput.orgId"
+            filterable
+            clearable
+            remote
+            reserve-keyword
+            placeholder="请搜索或选择所属组织"
+            :remote-method="remoteMethod"
+            :loading="clubLoading"
+          >
+            <el-option
+              v-for="i in clubData"
               :key="i.id"
               :key="i.id"
               :label="i.name"
               :label="i.name"
               :value="i.id"
               :value="i.id"
@@ -41,11 +58,11 @@
           <span>审核状态 :</span>
           <span>审核状态 :</span>
           <el-select
           <el-select
             clearable
             clearable
-            v-model="searchInput.name"
+            v-model="searchInput.isPass"
             placeholder="请选择审核状态"
             placeholder="请选择审核状态"
           >
           >
             <el-option
             <el-option
-              v-for="i in collegeData"
+              v-for="i in categoryData"
               :key="i.id"
               :key="i.id"
               :label="i.name"
               :label="i.name"
               :value="i.id"
               :value="i.id"
@@ -93,33 +110,50 @@
       >
       >
         <!-- <el-table-column type="selection" align="center" width="55" /> -->
         <!-- <el-table-column type="selection" align="center" width="55" /> -->
         <el-table-column type="index" align="center" label="序号" width="60" />
         <el-table-column type="index" align="center" label="序号" width="60" />
-        <el-table-column align="center" prop="school" label="报名人" />
-        <el-table-column align="center" prop="school" label="联系电话" />
-        <el-table-column align="center" prop="school" label="活动名称" />
-        <el-table-column align="center" prop="school" label="活动时间" />
-        <el-table-column align="center" prop="school" label="报名截止时间" />
-        <el-table-column align="center" prop="school" label="所属组织" />
-        <el-table-column align="center" prop="school" label="活动地点" />
-        <el-table-column align="center" prop="school" label="报名时间" />
+        <el-table-column align="center" prop="userName" label="报名人" />
+        <el-table-column align="center" prop="phone" label="联系电话" />
+        <el-table-column align="center" prop="theme" label="活动名称" />
+        <el-table-column align="center" prop="timeStr" label="活动时间">
+          <template #default="{ row }">
+            <span>{{ row.startTime }} ~ {{ row.endTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="school" label="报名截止时间">
+          <template #default="{ row }">
+            <span>{{ row.signsTime }} ~ {{ row.signeTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="orgName" label="所属组织" />
+        <el-table-column align="center" prop="address" label="活动地点" />
+        <el-table-column align="center" prop="createTime" label="报名时间" />
         <!-- <el-table-column width="100" align="center" label="组织城市">
         <!-- <el-table-column width="100" align="center" label="组织城市">
           <template #default="{ row }">
           <template #default="{ row }">
             <span v-if="row.retentionState == 2">是</span>
             <span v-if="row.retentionState == 2">是</span>
             <span v-if="row.retentionState == 1">否</span>
             <span v-if="row.retentionState == 1">否</span>
           </template>
           </template>
         </el-table-column> -->
         </el-table-column> -->
-        <el-table-column align="center" prop="sex" label="审核状态" />
-        <el-table-column align="center" prop="college" label="审核人" />
-        <el-table-column align="center" prop="college" label="审核时间" />
+        <el-table-column align="center" prop="statusName" label="审核状态" />
+        <el-table-column align="center" prop="applyUserAdmin" label="审核人" />
+        <el-table-column align="center" prop="passTime" label="审核时间" />
         <el-table-column align="center" label="操作" fixed="right" width="200">
         <el-table-column align="center" label="操作" fixed="right" width="200">
           <template #default="{ row }">
           <template #default="{ row }">
-            <el-button type="primary" @click="updateS(row)" link
+            <el-button type="primary" @click="infoClick(row)" link
               >详情</el-button
               >详情</el-button
             >
             >
-            <el-button type="primary" @click="updateS(row)" link
+            <el-button
+              type="primary"
+              v-if="row.passName == '待审核'"
+              @click="operationPassChange(row)"
+              link
               >通过</el-button
               >通过</el-button
             >
             >
-            <el-button type="danger" @click="deleteS(row)" link>拒绝</el-button>
-            <el-button type="danger" @click="deleteS(row)" link>删除</el-button>
+            <el-button
+              type="danger"
+              v-if="row.passName == '待审核'"
+              @click="operationRefuseChange(row)"
+              link
+              >拒绝</el-button
+            >
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
@@ -147,7 +181,7 @@
     :close-on-press-escape="false"
     :close-on-press-escape="false"
     :title="dialongTitle"
     :title="dialongTitle"
     align-center
     align-center
-    width="560"
+    width="540"
     :before-close="cancelAdd"
     :before-close="cancelAdd"
     destroy-on-close
     destroy-on-close
     draggable
     draggable
@@ -156,39 +190,19 @@
       ref="ruleFormRef"
       ref="ruleFormRef"
       :model="ruleForm"
       :model="ruleForm"
       :rules="rules"
       :rules="rules"
-      label-width="100px"
+      label-width="90px"
       class="demo-ruleForm"
       class="demo-ruleForm"
       :size="formSize"
       :size="formSize"
       label-position="right"
       label-position="right"
       status-icon
       status-icon
     >
     >
-      <el-form-item label="新闻标题 :" prop="dormitory">
-        <el-input
-          clearable
-          v-model.trim="ruleForm.dormitory"
-          class="w-50 m-2"
-          placeholder="请输入新闻标题"
-        />
-      </el-form-item>
-      <el-form-item label="新闻分类 :" prop="school">
-        <el-select
-          @change="schoolFormChange"
-          v-model="ruleForm.school"
-          clearable
-          placeholder="请选择新闻分类"
-        >
-          <el-option
-            v-for="i in schoolData"
-            :key="i.id"
-            :label="i.school"
-            :value="`${i.school},${i.id}`"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="新闻内容 :" prop="bedNumber">
+      <el-form-item
+        label="审批意见 :"
+        :prop="dialongTitle == '拒绝审批' ? 'passValue' : ''"
+      >
         <el-input
         <el-input
-          v-model.trim="ruleForm.bedNumber"
-          placeholder="请输入新闻内容"
+          v-model.trim="ruleForm.passValue"
+          placeholder="请输入审批意见"
           clearable
           clearable
           :autosize="{ minRows: 4 }"
           :autosize="{ minRows: 4 }"
           type="textarea"
           type="textarea"
@@ -207,52 +221,54 @@
       </el-form-item>
       </el-form-item>
     </el-form>
     </el-form>
   </el-dialog>
   </el-dialog>
-  <!-- 项目导入 -->
+  <!-- 详情 -->
   <el-dialog
   <el-dialog
     class="projectImport"
     class="projectImport"
-    v-model="buildImportVisible"
+    v-model="infoVisible"
     :close-on-click-modal="false"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     :close-on-press-escape="false"
-    title="寝室信息导入"
+    title="详情"
     align-center
     align-center
     width="600"
     width="600"
-    :before-close="cancelProjectImport"
+    :before-close="cancelInfo"
+    draggable
   >
   >
-    <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
-    <p class="down">
-      <span>寝室信息导入模板下载</span
-      ><span @click="templateDown">模板下载</span>
-    </p>
-    <el-upload
-      class="avatar-uploader"
-      action="#"
-      :auto-upload="false"
-      :on-remove="projectImportRemove"
-      :on-change="projectImportChange"
-      :before-upload="beforeAvatarProImport"
-      ref="buildRef"
-      :limit="1"
-      :on-exceed="projectImportExceed"
-    >
-      <template #trigger>
-        <el-button class="queding" type="primary">
-          &nbsp;&nbsp;导入文件&nbsp;&nbsp;
-        </el-button>
-      </template>
-    </el-upload>
-    <div class="options">
-      <el-button
-        color="rgba(9, 101, 98, 1)"
-        class="queding"
-        type="primary"
-        @click="projectImportConfirm(buildRef)"
-        :loading="buildImportLoading"
-      >
-        &nbsp;&nbsp;确认导入&nbsp;&nbsp;
-      </el-button>
-      <el-button @click="cancelProjectImport"
-        >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
-      >
+    <div style="margin-bottom: 15px">
+      <el-descriptions :column="1">
+        <el-descriptions-item label="报名人 :">
+          {{ infoData.userName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="联系电话 :">
+          {{ infoData.phone }}
+        </el-descriptions-item>
+        <el-descriptions-item label="活动名称 :">
+          {{ infoData.theme }}
+        </el-descriptions-item>
+        <el-descriptions-item label="活动时间 :">
+          {{ infoData.startTime }}~{{ infoData.endTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="报名截止时间 :">
+          {{ infoData.signsTime }}~{{ infoData.signeTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="所属组织 :">
+          {{ infoData.orgName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="活动地点 :">
+          {{ infoData.address }}
+        </el-descriptions-item>
+        <el-descriptions-item label="报名时间 :">
+          {{ infoData.createTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="审核状态 :">
+          {{ infoData.statusName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="审核人 :">
+          {{ infoData.applyUserAdmin }}
+        </el-descriptions-item>
+        <el-descriptions-item label="审核时间 :">
+          {{ infoData.passTime }}
+        </el-descriptions-item>
+      </el-descriptions>
     </div>
     </div>
   </el-dialog>
   </el-dialog>
 </template>
 </template>
@@ -274,6 +290,13 @@ import lodash from "lodash";
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 
 
+import {
+  queryPassTypes,
+  queryReportPages,
+  toExamineReport,
+  queryClubDatas,
+} from "@/api/alumni-activity.js";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
@@ -289,11 +312,11 @@ const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  userName: "",
+  theme: "",
+  orgId: "",
+  isPass: "",
+  createTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -302,60 +325,78 @@ const total = ref(0); // 当前总数
 const selectIds = ref([]); // 勾选的全部数据
 const selectIds = ref([]); // 勾选的全部数据
 
 
 const addDialogVisible = ref(false); // 控制添加账号弹窗
 const addDialogVisible = ref(false); // 控制添加账号弹窗
+const categoryData = ref();
+const clubData = ref();
+const clubLoading = ref(false); // 加载状态
+const pageParams = reactive({
+  pageNum: 1, // 当前页
+  pageSize: 500, // 每页条数
+  keyword: "", // 搜索关键词(可选)
+});
 
 
 // 表单数据
 // 表单数据
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  passValue: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  passValue: [{ required: true, message: "审批意见不能为空", trigger: "blur" }],
 });
 });
 
 
+const infoVisible = ref(false);
+const infoData = ref({});
+
 // 获取账户列表
 // 获取账户列表
 const getList = async () => {
 const getList = async () => {
   loading.value = true;
   loading.value = true;
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    userName: searchInput.userName,
+    theme: searchInput.theme,
+    orgId: searchInput.orgId,
+    isPass: searchInput.isPass,
   };
   };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  queryReportPages(params).then((res) => {
+    console.log(res, "获取活动报名审核分页数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      loading.value = false;
+    } else {
+      loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.userName = "";
+  searchInput.theme = "";
+  searchInput.orgId = "";
+  searchInput.createTime = null;
+  searchInput.isPass = null;
+  currentPage.value = 1;
+  getList();
+}, 300);
 
 
-// 添加账号
-const addlist = () => {
-  dialongTitle.value = "发布新闻";
-  addDialogVisible.value = true;
-  ruleForm.school = null;
-};
-// 添加账号
-const updateS = (row) => {
-  console.log(row);
-  dialongTitle.value = "编辑新闻";
-  addDialogVisible.value = true;
-};
 const deleteS = async (row) => {
 const deleteS = async (row) => {
   ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
   ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
     confirmButtonText: "确认",
     confirmButtonText: "确认",
@@ -372,12 +413,19 @@ const deleteS = async (row) => {
       loading.value = false;
       loading.value = false;
     });
     });
 };
 };
-// 保留
-const retainS = async (row, flag) => {
-  let data = {
-    dormitoryIds: [row.id], // 当前页
-    retentionState: flag, //保留状态 1:开放,2:保留
-  };
+// 通过
+const operationPassChange = async (row) => {
+  dialongTitle.value = "通过审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
+};
+// 拒绝
+const operationRefuseChange = async (row) => {
+  dialongTitle.value = "拒绝审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
 
 
 // 确认添加员工
 // 确认添加员工
@@ -385,7 +433,29 @@ const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        id: ruleForm.id,
+        isPass: dialongTitle.value == "通过审批" ? 2 : 3,
+        passValue: ruleForm.passValue,
+      };
+      let res = await toExamineReport(data);
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -416,22 +486,74 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
+};
+
+const infoClick = (row) => {
+  console.log(row);
+
+  infoVisible.value = true;
+  infoData.value = row;
+};
+
+const cancelInfo = () => {
+  infoVisible.value = false;
 };
 };
 
 
-const cancelProjectImport = () => {
-  buildImportVisible.value = false;
-  if (buildRef.value) {
-    buildRef.value.clearFiles();
-    buildFile.value = null;
+const categoryList = async () => {
+  let res = await queryPassTypes();
+  console.log(res, "获取审核状态下拉列表数据");
+  if (res.code == 200) {
+    categoryData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
+// 获取组织下拉列表数据
+const clubList = async () => {
+  let params = {
+    currentPage: pageParams.pageNum,
+    pageCount: pageParams.pageSize,
+    keyword: pageParams.keyword,
+  };
+  let res = await queryClubDatas(params);
+  console.log(res, "获取组织下拉列表数据");
+  if (res.code == 200) {
+    clubData.value = res.data.list;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+const remoteMethod = (query) => {
+  console.log(query);
+  pageParams.keyword = query;
+  clubLoading.value = true;
+  clubList().then(() =>{
+    clubLoading.value = false;
+  })
+};
 
 
-onBeforeMount(() => {});
+onBeforeMount(() => {
+  getList();
+  categoryList();
+  clubList();
+});
 onUnmounted(() => {
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
   // document.removeEventListener("keyup", Enters);
 });
 });

+ 928 - 0
src/views/alumni-activity/ActivityList copy.vue

@@ -0,0 +1,928 @@
+<template>
+  <div class="scroll">
+    <div class="middle">
+      <div class="filter">
+        <div class="condition">
+          <span>活动名称 :</span>
+          <el-input
+            clearable
+            v-model.trim="searchInput.theme"
+            class="w-50 m-2"
+            placeholder="请输入活动名称"
+            style="width: 180px"
+          />
+        </div>
+        <div class="condition">
+          <span>活动状态 :</span>
+          <el-select
+            clearable
+            v-model="searchInput.statuId"
+            placeholder="请选择活动状态"
+          >
+            <el-option
+              v-for="i in statusData"
+              :key="i.id"
+              :label="i.name"
+              :value="i.id"
+            />
+          </el-select>
+        </div>
+        <div class="condition">
+          <span>活动时间 :</span>
+          <el-date-picker
+            v-model="searchInput.createTime"
+            unlink-panels
+            type="datetimerange"
+            range-separator="-"
+            start-placeholder="起始时间"
+            end-placeholder="结束时间"
+            format="YYYY-MM-DD HH:mm:ss"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择日期"
+          />
+        </div>
+        <el-button
+          style="margin-left: 20px"
+          color="rgba(38, 151, 255, 1)"
+          type="primary"
+          class="search"
+          @click="searchBtn"
+          ><span>查询</span></el-button
+        >
+        <el-button @click="resetBtn" plain color="rgba(43, 153, 255, 1)"
+          >重置</el-button
+        >
+      </div>
+      <!-- 按钮列表 -->
+      <div class="gongneng">
+        <el-button
+          type="primary"
+          style="margin-left: 0"
+          color="rgba(38, 151, 255, 1)"
+          @click="addlist"
+          >创建活动</el-button
+        >
+      </div>
+    </div>
+    <div class="footer" v-loading="tableLoading">
+      <el-table
+        :row-class-name="tableRowClassName"
+        :data="tableData.list"
+        @selection-change="handleSelectionChange"
+        style="width: 100%"
+        :header-cell-style="{
+          background: 'rgba(240, 243, 247, 1)',
+          height: '50px',
+          border: 0,
+        }"
+      >
+        <!-- <el-table-column type="selection" align="center" width="55" /> -->
+        <el-table-column type="index" align="center" label="序号" width="60" />
+        <el-table-column align="center" prop="theme" label="活动名称" />
+        <el-table-column prop="timeStr" align="center" label="活动时间">
+          <template #default="{ row }">
+            <span>{{ row.startTime }} ~ {{ row.endTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="address" label="活动地点" />
+        <el-table-column
+          show-overflow-tooltip
+          align="center"
+          prop="themeDetail"
+          label="活动详情"
+        >
+          <template #default="{ row }">
+            <div
+              class="html-content"
+              style="color: #2697ff; cursor: pointer"
+              @click="handleTooltipShow(row.themeDetail)"
+            >
+              详情
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="sex" label="报名截止时间">
+          <template #default="{ row }">
+            <span>{{ row.signsTime }} ~ {{ row.signeTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="orgName" label="所属组织" />
+        <el-table-column align="center" prop="publisherName" label="发起人" />
+        <el-table-column align="center" prop="createTime" label="创建时间" />
+        <el-table-column
+          align="center"
+          prop="activityStatuName"
+          label="活动状态"
+        />
+        <el-table-column
+          align="center"
+          prop="reportNumber"
+          label="已报名人数"
+        />
+        <el-table-column align="center" label="操作" fixed="right" width="200">
+          <template #default="{ row }">
+            <el-button type="primary" @click="updateS(row)" link
+              >编辑</el-button
+            >
+            <el-button type="danger" @click="deleteS(row)" link>删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <!-- 分页组件 -->
+      <div class="pageSize">
+        <span></span>
+        <el-pagination
+          background
+          :current-page="currentPage"
+          :page-size="pageSize"
+          :page-sizes="[10, 20, 30, 40]"
+          layout="total,sizes, prev, pager, next, jumper, slot"
+          :total="total"
+          @size-change="handleSizeChange"
+          @update:current-page="handleCurrentChange"
+        />
+      </div>
+    </div>
+    <!-- 添加账号弹窗 -->
+    <el-dialog
+      class="addStaff"
+      v-model="addDialogVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :title="dialongTitle"
+      align-center
+      width="780"
+      :before-close="cancelAdd"
+      destroy-on-close
+      draggable
+    >
+      <el-form
+        ref="ruleFormRef"
+        :model="ruleForm"
+        :rules="rules"
+        label-width="120px"
+        class="demo-ruleForm"
+        :size="formSize"
+        label-position="right"
+        status-icon
+      >
+        <el-form-item label="活动名称 :" prop="theme">
+          <el-input
+            clearable
+            v-model.trim="ruleForm.theme"
+            class="w-50 m-2"
+            placeholder="请输入活动名称"
+          />
+        </el-form-item>
+        <el-form-item label="所属组织 :" prop="orgId">
+          <el-select
+            v-model="ruleForm.orgId"
+            clearable
+            placeholder="请选择所属组织"
+            popper-class="club-select"
+            ref="selectRef"
+            :loading="loading"
+            :filterable="true"
+            @filter-change="handleFilter"
+          >
+            <el-option
+              v-for="i in clubData"
+              :key="i.id"
+              :label="i.name"
+              :value="`${i.name},${i.id}`"
+            />
+            <!-- 加载提示/无更多提示 -->
+            <div v-if="clubData.length" class="select-loading">
+              <span v-if="loading">加载中...</span>
+              <span v-else-if="noMore">已加载全部数据</span>
+            </div>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="活动详情 :" prop="themeDetail">
+          <!-- <el-input
+            v-model.trim="ruleForm.themeDetail"
+            placeholder="请输入活动详情"
+            clearable
+            :autosize="{ minRows: 4 }"
+            type="textarea"
+          /> -->
+          <Richtext
+            @richtextClick="richtextClick"
+            :fatherMessage="fatherMessage"
+          ></Richtext>
+        </el-form-item>
+        <el-form-item label="活动时间 :" prop="activeTime" style="width: 520px">
+          <el-date-picker
+            v-model="ruleForm.activeTime"
+            unlink-panels
+            type="datetimerange"
+            range-separator="-"
+            start-placeholder="起始时间"
+            end-placeholder="结束时间"
+            format="YYYY-MM-DD HH:mm:ss"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择日期"
+          />
+        </el-form-item>
+        <el-form-item label="活动地点 :" prop="address">
+          <el-input
+            clearable
+            v-model.trim="ruleForm.address"
+            class="w-50 m-2"
+            placeholder="请输入活动地点"
+          />
+        </el-form-item>
+        <el-form-item
+          label="报名截止时间 :"
+          prop="signTime"
+          style="width: 520px"
+        >
+          <el-date-picker
+            v-model="ruleForm.signTime"
+            unlink-panels
+            type="datetimerange"
+            range-separator="-"
+            start-placeholder="起始时间"
+            end-placeholder="结束时间"
+            format="YYYY-MM-DD HH:mm:ss"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择日期"
+          />
+        </el-form-item>
+        <el-form-item label="报名总人数 :" prop="totalNumber">
+          <el-input
+            clearable
+            v-model.trim="ruleForm.totalNumber"
+            class="w-50 m-2"
+            placeholder="请输入报名总人数"
+          />
+        </el-form-item>
+        <el-form-item class="options">
+          <el-button @click="cancelAdd">取消</el-button>
+          <el-button
+            color="rgba(0, 97, 255, 1)"
+            class="queding"
+            type="primary"
+            @click="submitAdd(ruleFormRef)"
+          >
+            确定
+          </el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <el-dialog
+      class="tooltips"
+      v-model="tooltipVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      title="新闻内容"
+      align-center
+      width="800"
+      destroy-on-close
+      draggable
+    >
+      <span v-html="tooltipContent"></span>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import {
+  ref,
+  watch,
+  reactive,
+  nextTick,
+  onBeforeMount,
+  onUnmounted,
+} from "vue";
+import { useRouter } from "vue-router";
+import { genFileId, ElMessage, ElMessageBox } from "element-plus";
+import { dayjs } from "element-plus";
+import lodash from "lodash";
+import { Delete, Download, Plus, ZoomIn } from "@element-plus/icons-vue";
+import { storeToRefs } from "pinia";
+import { useCounterStore } from "@/stores/index";
+import { api as viewerApi } from "v-viewer";
+
+import Richtext from "./Richtext.vue";
+
+import {
+  queryStatus,
+  queryActivityPages,
+  insertActivity,
+  queryClubDatas,
+  updateActivity,
+  deleteActivityById,
+} from "@/api/alumni-activity.js";
+
+const router = useRouter();
+const store = useCounterStore();
+
+// 为避免解构时失去响应性
+const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
+
+const fatherMessage = ref({
+  data: "",
+  flag: false,
+});
+// 富文本传过来的数据
+const richtextClick = (data) => {
+  console.log(data, "富文本传过来的数据");
+  // params.value.safetyNotice = data.html;
+  fatherMessage.value.data=data.html
+  ruleForm.themeDetail = data.html;
+  // accountRuleForm.contentText = data.text;
+};
+
+// 表格数据
+const tableLoading = ref(false);
+const tableData = reactive({
+  list: [{}],
+});
+const dialongTitle = ref("新增账号"); // 弹窗标题
+
+const searchInput = reactive({
+  theme: "",
+  statuId: "",
+  createTime: "",
+}); // 搜索按钮数据
+
+const currentPage = ref(1); // 当前页
+const pageSize = ref(10);
+const total = ref(0); // 当前总数
+const selectIds = ref([]); // 勾选的全部数据
+
+const statusData = ref();
+
+// 下拉数据相关
+const selectRef = ref(null); // select组件ref
+const clubData = ref([]); // 已加载的组织列表
+const loading = ref(false); // 加载状态
+const noMore = ref(false); // 是否无更多数据
+const pageParams = reactive({
+  pageNum: 1, // 当前页
+  pageSize: 5, // 每页条数
+  keyword: "", // 搜索关键词(可选)
+});
+let scrollListener = null; // 滚动监听函数(用于销毁)
+
+const addDialogVisible = ref(false); // 控制添加账号弹窗
+
+// 表单数据
+const formSize = ref("default");
+const ruleFormRef = ref();
+const ruleForm = reactive({
+  theme: "",
+  orgId: "",
+  themeDetail: "",
+  activeTime: "",
+  address: "",
+  signTime: "",
+  totalNumber: "",
+  id: "",
+});
+// 表单验证
+const rules = reactive({
+  theme: [{ required: true, message: "活动名称不能为空", trigger: "blur" }],
+  orgId: [{ required: true, message: "所属组织不能为空", trigger: "blur" }],
+  themeDetail: [
+    { required: true, message: "活动详情不能为空", trigger: "blur" },
+  ],
+  activeTime: [
+    { required: true, message: "活动时间不能为空", trigger: "blur" },
+  ],
+  address: [{ required: true, message: "活动地点不能为空", trigger: "blur" }],
+  signTime: [
+    { required: true, message: "报名截止时间不能为空", trigger: "blur" },
+  ],
+  totalNumber: [
+    { required: true, message: "报名总人数不能为空", trigger: "blur" },
+  ],
+});
+
+// Tooltip 相关响应式变量
+const tooltipVisible = ref(false);
+const tooltipContent = ref("");
+
+// 处理 Tooltip 显示(判断是否溢出 + 更新内容)
+const handleTooltipShow = (htmlContent) => {
+  tooltipVisible.value = true;
+  tooltipContent.value = htmlContent;
+};
+
+// 获取账户列表
+const getList = async () => {
+  tableLoading.value = true;
+  let params = {
+    currentPage: currentPage.value, // 当前页
+    pageCount: pageSize.value, // 一页数据条数
+    theme: searchInput.theme,
+    statuId: searchInput.statuId,
+  };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  queryActivityPages(params).then((res) => {
+    console.log(res, "获取活动分页数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      tableLoading.value = false;
+    } else {
+      tableLoading.value = false;
+    }
+  });
+};
+
+// 搜索功能
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.theme = "";
+  searchInput.statuId = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+
+const top = () => {};
+
+// 添加账号
+const addlist = () => {
+  dialongTitle.value = "创建活动";
+  addDialogVisible.value = true;
+  ruleForm.theme = "";
+  ruleForm.orgId = "";
+  ruleForm.themeDetail = "";
+  ruleForm.address = "";
+  ruleForm.signTime = "";
+  ruleForm.totalNumber = "";
+  ruleForm.id = "";
+  fatherMessage.value.data =""
+};
+// 添加账号
+const updateS = (row) => {
+  console.log(row);
+  dialongTitle.value = "编辑活动";
+  addDialogVisible.value = true;
+  ruleForm.theme = row.theme;
+  ruleForm.orgId = `${row.orgName},${row.orgId}`;
+  ruleForm.themeDetail = row.themeDetail;
+  ruleForm.activeTime = [row.startTime, row.endTime];
+  ruleForm.address = row.address;
+  ruleForm.signTime = [row.signsTime, row.signeTime];
+  ruleForm.totalNumber = row.totalNumber;
+  ruleForm.id = row.id;
+  fatherMessage.value.data = row.themeDetail;
+};
+const deleteS = async (row) => {
+  ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+  })
+    .then(async () => {
+      let params = {
+        id: row.id,
+      };
+      let res = await deleteActivityById(params);
+      if (res.code == 200) {
+        getList();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
+    })
+    .catch(() => {
+      tableLoading.value = false;
+    });
+};
+
+// 确认添加员工
+const submitAdd = lodash.debounce(async (formEl) => {
+  if (!formEl) return;
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      let data = {
+        theme: ruleForm.theme,
+        orgId: ruleForm.orgId.split(",")[1],
+        orgName: ruleForm.orgId.split(",")[0],
+        themeDetail: ruleForm.themeDetail,
+        startTime: ruleForm.activeTime[0],
+        endTime: ruleForm.activeTime[1],
+        address: ruleForm.address,
+        signsTime: ruleForm.signTime[0],
+        signeTime: ruleForm.signTime[1],
+        totalNumber: ruleForm.totalNumber,
+      };
+      let res = "";
+      if (dialongTitle.value == "创建活动") {
+        res = await insertActivity(data);
+      } else {
+        data.id = ruleForm.id;
+        res = await updateActivity(data);
+      }
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+}, 1000);
+
+const cancelAdd = () => {
+  addDialogVisible.value = false;
+};
+
+// 多选框功能
+const handleSelectionChange = (val) => {
+  // console.log(val);
+  selectIds.value = val.map((i) => i.id);
+  console.log(selectIds.value);
+};
+
+// 表格斑马纹颜色修改
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 0) {
+    return "even";
+  } else if (rowIndex % 2 !== 0) {
+    return "odd";
+  }
+  return "";
+};
+// 每页显示条数
+const handleSizeChange = (value) => {
+  console.log(value, "每页显示条数");
+  pageSize.value = value;
+  getList();
+};
+// 分页
+const handleCurrentChange = (value) => {
+  // console.log(value);
+  currentPage.value = value;
+  getList();
+};
+
+
+const statusList = async () => {
+  let res = await queryStatus();
+  console.log(res, "状态下拉");
+  if (res.code == 200) {
+    statusData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+// 获取组织下拉列表数据
+const clubList = async () => {
+  let params = {
+    currentPage: 1,
+    pageCount: 1000,
+  };
+  let res = await queryClubDatas(params);
+  console.log(res, "获取组织下拉列表数据");
+  if (res.code == 200) {
+    clubData.value = res.data.list;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+
+// 1. 加载分页数据
+const loadClubList = async (isReset = false) => {
+  if (isReset) {
+    pageParams.pageNum = 1;
+    clubData.value = [];
+    noMore.value = false;
+  }
+  if (noMore.value || loading.value) return;
+
+  loading.value = true;
+  try {
+    const res = await queryClubDatas({
+      currentPage: pageParams.pageNum,
+      pageCount: pageParams.pageSize,
+      keyword: pageParams.keyword,
+    });
+    if (res.code == 200) {
+      console.log(res, "获取组织下拉列表数据");
+
+      const { list, totalCount } = res.data;
+      clubData.value = [...clubData.value, ...list];
+      noMore.value = clubData.value.length >= totalCount;
+      pageParams.pageNum += 1;
+    } else {
+      ElMessage.error("加载失败:" + res.message);
+    }
+  } catch (error) {
+    console.error("加载异常:", error);
+    ElMessage.error("加载失败,请重试");
+  } finally {
+    loading.value = false;
+  }
+};
+
+// 2. 滚动到底判断逻辑(独立函数)
+const checkScrollBottom = (e) => {
+  // 防抖:避免频繁触发
+  if (loading.value || noMore.value) return;
+
+  const { scrollTop, scrollHeight, clientHeight } = e.target;
+  // 距离底部10px内触发加载
+  if (scrollTop + clientHeight >= scrollHeight - 10) {
+    loadClubList();
+  }
+};
+let scrollContainer = "";
+// 3. 初始化滚动监听(找到滚动容器并绑定事件)
+const initScrollListener = async () => {
+  await nextTick(); // 等待下拉面板渲染完成
+  // 步骤1:找到自定义类名的下拉面板
+  const popperDiv = document.querySelector(".club-select");
+  if (!popperDiv) return;
+
+  // 步骤2:找到下拉面板内的滚动容器(el-select固定类名)
+  scrollContainer = popperDiv.querySelector(".el-select-dropdown__wrap");
+  if (!scrollContainer) return;
+
+  // 步骤3:绑定滚动事件(防抖版)
+  let debounceTimer = null;
+  scrollListener = (e) => {
+    clearTimeout(debounceTimer);
+    debounceTimer = setTimeout(() => {
+      checkScrollBottom(e);
+    }, 100);
+  };
+  scrollContainer.addEventListener("scroll", scrollListener);
+};
+
+// 4. 移除滚动监听(避免内存泄漏)
+const removeScrollListener = () => {
+  if (scrollContainer && scrollListener) {
+    scrollContainer.removeEventListener("scroll", scrollListener);
+    scrollContainer = null;
+    scrollListener = null;
+  }
+};
+
+// 5. 下拉面板显隐事件(核心:绑定/解绑监听)
+const handleVisibleChange = async (visible) => {
+  if (visible) {
+    // 打开下拉:初始化监听 + 加载第一页
+    await initScrollListener();
+    loadClubList(true);
+  } else {
+    // 关闭下拉:移除监听 + 清空防抖
+    removeScrollListener();
+  }
+};
+
+// 6. 搜索功能
+const handleFilter = (keyword) => {
+  pageParams.keyword = keyword;
+  loadClubList(true);
+};
+
+onBeforeMount(() => {
+  getList();
+  statusList();
+  clubList();
+});
+onUnmounted(() => {
+  if (scrollListener) {
+    const selectPanel = selectRef.value?.popperRef?.el;
+    const scrollContainer = selectPanel?.querySelector(
+      ".el-select-dropdown__wrap",
+    );
+    scrollContainer?.removeEventListener("scroll", scrollListener);
+  }
+});
+</script>
+
+<style scoped lang="scss">
+.scroll {
+  width: calc(100% - 60px);
+  height: calc(100% - 61px);
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+
+  .middle {
+    width: calc(100%);
+    color: #000;
+    .filter {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      .search {
+        margin-left: 0 !important;
+        color: #fff;
+      }
+      .condition {
+        display: flex;
+        align-items: center;
+        margin: 10px 30px 10px 0;
+        :deep(.el-input .el-input__inner) {
+          font-size: 14px;
+        }
+        .el-select {
+          width: 220px;
+        }
+        span {
+          margin: 0 10px 0 0;
+        }
+      }
+    }
+    .gongneng {
+      margin: 10px 0;
+      .el-button {
+        color: #fff;
+        margin-right: 15px;
+      }
+    }
+  }
+  .footer {
+    width: calc(100%);
+    flex: 1;
+    margin: 0 auto;
+    overflow: auto;
+
+    .el-table--fit {
+      height: calc(100% - 60px);
+      :deep(.el-table__header-wrapper) {
+        background-color: #000;
+        font-size: 15px;
+        color: #000;
+        .cell {
+          color: #000;
+        }
+      }
+      :deep(.el-table__row) {
+        height: 50px;
+        font-size: 15px;
+        color: #000;
+      }
+      :deep(.el-table__row td) {
+        padding: 0;
+        border: 0;
+      }
+
+      .el-button--primary {
+        margin-left: 5px;
+      }
+      :deep(.el-table__body .even) {
+        background-color: #fff;
+      }
+      :deep(.el-table__body .odd) {
+        background-color: rgba(240, 243, 247, 1);
+      }
+    }
+
+    .pageSize {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin: 0 30px;
+      height: 60px;
+
+      span {
+        color: #000;
+      }
+
+      .el-pagination {
+        // width: 1600px;
+        :deep(.el-pagination__total) {
+          color: #000;
+        }
+
+        :deep(.el-pagination__goto) {
+          color: #000;
+        }
+
+        :deep(.el-pagination__classifier) {
+          color: #000;
+        }
+
+        :deep(.el-input__wrapper) {
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          box-shadow: none;
+        }
+
+        :deep(.el-pager li) {
+          margin: 0 5px;
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          background-color: transparent;
+        }
+
+        :deep(.el-pager li.is-active) {
+          // background-color: rgba(0, 97, 255, 0.8);
+          border: 1px solid rgba(0, 97, 255, 1);
+          color: rgba(0, 97, 255, 1);
+        }
+
+        :deep(.btn-prev) {
+          margin-right: 5px;
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          background-color: transparent;
+        }
+
+        :deep(.btn-next) {
+          margin-left: 5px;
+          border: 1px solid rgba(0, 0, 0, 1);
+          border-radius: 5px;
+          background-color: transparent;
+        }
+      }
+    }
+  }
+}
+
+// 添加员工弹窗样式
+.addStaff {
+  .el-dialog__body {
+    padding: 20px 20px 10px 20px;
+    .el-input {
+      width: 400px;
+    }
+    .el-textarea {
+      width: 400px;
+    }
+    .el-select {
+      width: 400px;
+    }
+    .el-form-item {
+      :deep(.el-form-item__content) {
+        .el-cascader {
+          .el-input {
+            width: 400px;
+          }
+        }
+      }
+    }
+  }
+}
+
+:deep(.tooltips) {
+  .el-dialog__body {
+    padding: 10px 20px 10px 20px;
+  }
+}
+</style>
+<style lang="scss">
+/* 加载提示样式 */
+.select-loading {
+  padding: 8px;
+  text-align: center;
+  color: #999;
+  font-size: 14px;
+}
+
+/* 优化下拉框高度,避免滚动不明显 */
+.club-select {
+  .el-select-dropdown__wrap {
+    max-height: 150px !important; /* 限制下拉面板高度,触发滚动 */
+  }
+}
+</style>
+>

+ 447 - 286
src/views/alumni-activity/ActivityList.vue

@@ -6,7 +6,7 @@
           <span>活动名称 :</span>
           <span>活动名称 :</span>
           <el-input
           <el-input
             clearable
             clearable
-            v-model.trim="searchInput.name"
+            v-model.trim="searchInput.theme"
             class="w-50 m-2"
             class="w-50 m-2"
             placeholder="请输入活动名称"
             placeholder="请输入活动名称"
             style="width: 180px"
             style="width: 180px"
@@ -16,11 +16,11 @@
           <span>活动状态 :</span>
           <span>活动状态 :</span>
           <el-select
           <el-select
             clearable
             clearable
-            v-model="searchInput.name"
+            v-model="searchInput.statuId"
             placeholder="请选择活动状态"
             placeholder="请选择活动状态"
           >
           >
             <el-option
             <el-option
-              v-for="i in collegeData"
+              v-for="i in statusData"
               :key="i.id"
               :key="i.id"
               :label="i.name"
               :label="i.name"
               :value="i.id"
               :value="i.id"
@@ -64,7 +64,7 @@
         >
         >
       </div>
       </div>
     </div>
     </div>
-    <div class="footer" v-loading="loading">
+    <div class="footer" v-loading="tableLoading">
       <el-table
       <el-table
         :row-class-name="tableRowClassName"
         :row-class-name="tableRowClassName"
         :data="tableData.list"
         :data="tableData.list"
@@ -78,31 +78,47 @@
       >
       >
         <!-- <el-table-column type="selection" align="center" width="55" /> -->
         <!-- <el-table-column type="selection" align="center" width="55" /> -->
         <el-table-column type="index" align="center" label="序号" width="60" />
         <el-table-column type="index" align="center" label="序号" width="60" />
-        <el-table-column align="center" prop="school" label="活动名称" />
-        <el-table-column width="100" align="center" label="活动时间">
+        <el-table-column align="center" prop="theme" label="活动名称" />
+        <el-table-column prop="timeStr" align="center" label="活动时间">
           <template #default="{ row }">
           <template #default="{ row }">
-            <span v-if="row.retentionState == 2">是</span>
-            <span v-if="row.retentionState == 1">否</span>
+            <span>{{ row.startTime }} ~ {{ row.endTime }}</span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
+        <el-table-column align="center" prop="address" label="活动地点" />
         <el-table-column
         <el-table-column
           show-overflow-tooltip
           show-overflow-tooltip
           align="center"
           align="center"
-          prop="dormitory"
-          label="活动地点"
+          prop="themeDetail"
+          label="活动详情"
+        >
+          <template #default="{ row }">
+            <div
+              class="html-content"
+              style="color: #2697ff; cursor: pointer"
+              @click="handleTooltipShow(row.themeDetail)"
+            >
+              详情
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="sex" label="报名截止时间">
+          <template #default="{ row }">
+            <span>{{ row.signsTime }} ~ {{ row.signeTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="orgName" label="所属组织" />
+        <el-table-column align="center" prop="publisherName" label="发起人" />
+        <el-table-column align="center" prop="createTime" label="创建时间" />
+        <el-table-column
+          align="center"
+          prop="activityStatuName"
+          label="活动状态"
         />
         />
         <el-table-column
         <el-table-column
-          show-overflow-tooltip
           align="center"
           align="center"
-          prop="dormitory"
-          label="活动详情"
+          prop="reportNumber"
+          label="已报名人数"
         />
         />
-        <el-table-column align="center" prop="sex" label="报名截止时间" />
-        <el-table-column align="center" prop="college" label="所属组织" />
-        <el-table-column align="center" prop="major" label="发起人" />
-        <el-table-column align="center" prop="major" label="创建时间" />
-        <el-table-column align="center" prop="major" label="活动状态" />
-        <el-table-column align="center" prop="major" label="已报名" />
         <el-table-column align="center" label="操作" fixed="right" width="200">
         <el-table-column align="center" label="操作" fixed="right" width="200">
           <template #default="{ row }">
           <template #default="{ row }">
             <el-button type="primary" @click="updateS(row)" link
             <el-button type="primary" @click="updateS(row)" link
@@ -127,155 +143,167 @@
         />
         />
       </div>
       </div>
     </div>
     </div>
-  </div>
-  <!-- 添加账号弹窗 -->
-  <el-dialog
-    class="addStaff"
-    v-model="addDialogVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    :title="dialongTitle"
-    align-center
-    width="580"
-    :before-close="cancelAdd"
-    destroy-on-close
-    draggable
-  >
-    <el-form
-      ref="ruleFormRef"
-      :model="ruleForm"
-      :rules="rules"
-      label-width="120px"
-      class="demo-ruleForm"
-      :size="formSize"
-      label-position="right"
-      status-icon
+    <!-- 添加账号弹窗 -->
+    <el-dialog
+      class="addStaff"
+      v-model="addDialogVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :title="dialongTitle"
+      align-center
+      width="780"
+      :before-close="cancelAdd"
+      destroy-on-close
+      draggable
     >
     >
-      <el-form-item label="活动名称 :" prop="dormitory">
-        <el-input
-          clearable
-          v-model.trim="ruleForm.dormitory"
-          class="w-50 m-2"
-          placeholder="请输入活动名称"
-        />
-      </el-form-item>
-      <el-form-item label="所属组织 :" prop="school">
-        <el-select
-          @change="schoolFormChange"
-          v-model="ruleForm.school"
-          clearable
-          placeholder="请选择所属组织"
-        >
-          <el-option
-            v-for="i in schoolData"
-            :key="i.id"
-            :label="i.school"
-            :value="`${i.school},${i.id}`"
+      <el-form
+        ref="ruleFormRef"
+        :model="ruleForm"
+        :rules="rules"
+        label-width="120px"
+        class="demo-ruleForm"
+        :size="formSize"
+        label-position="right"
+        status-icon
+      >
+        <el-form-item label="活动名称 :" prop="theme">
+          <el-input
+            clearable
+            v-model.trim="ruleForm.theme"
+            class="w-50 m-2"
+            placeholder="请输入活动名称"
           />
           />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="活动详情 :" prop="bedNumber">
-        <el-input
-          v-model.trim="ruleForm.bedNumber"
-          placeholder="请输入活动详情"
-          clearable
-          :autosize="{ minRows: 4 }"
-          type="textarea"
-        />
-      </el-form-item>
-      <el-form-item label="活动时间 :" prop="dormitory">
-        <el-input
-          clearable
-          v-model.trim="ruleForm.dormitory"
-          class="w-50 m-2"
-          placeholder="请输入活动时间"
-        />
-      </el-form-item>
-      <el-form-item label="活动地点 :" prop="dormitory">
-        <el-input
-          clearable
-          v-model.trim="ruleForm.dormitory"
-          class="w-50 m-2"
-          placeholder="请输入活动地点"
-        />
-      </el-form-item>
-     <el-form-item label="报名截止时间 :" prop="dormitory">
-        <el-input
-          clearable
-          v-model.trim="ruleForm.dormitory"
-          class="w-50 m-2"
-          placeholder="请输入报名截止时间"
-        />
-      </el-form-item>
-      <el-form-item label="报名总人数 :" prop="dormitory">
-        <el-input
-          clearable
-          v-model.trim="ruleForm.dormitory"
-          class="w-50 m-2"
-          placeholder="请输入报名总人数"
-        />
-      </el-form-item>
-      <el-form-item class="options">
-        <el-button @click="cancelAdd">取消</el-button>
-        <el-button
-          color="rgba(0, 97, 255, 1)"
-          class="queding"
-          type="primary"
-          @click="submitAdd(ruleFormRef)"
+        </el-form-item>
+        <el-form-item label="所属组织 :" prop="orgId">
+          <!-- <el-select
+            v-model="ruleForm.orgId"
+            clearable
+            placeholder="请搜索或选择所属组织"
+            popper-class="club-select"
+            ref="selectRef"
+            :loading="loading"
+            :filterable="true"
+            @filter-change="handleFilter"
+          >
+            <el-option
+              v-for="i in clubData"
+              :key="i.id"
+              :label="i.name"
+              :value="`${i.name},${i.id}`"
+            />
+            加载提示/无更多提示
+            <div v-if="clubData.length" class="select-loading">
+              <span v-if="loading">加载中...</span>
+              <span v-else-if="noMore">已加载全部数据</span>
+            </div>
+          </el-select> -->
+          <el-select
+            v-model="ruleForm.orgId"
+            filterable
+            clearable
+            remote
+            reserve-keyword
+            placeholder="请搜索或选择所属组织"
+            :remote-method="remoteMethod"
+            :loading="loading"
+          >
+            <el-option
+              v-for="i in clubData"
+              :key="i.id"
+              :label="i.name"
+              :value="`${i.name},${i.id}`"
+            />
+          </el-select>
+          <!-- <el-button @click="resetOrgId" plain color="rgba(43, 153, 255, 1)"
+            >重置</el-button
+          > -->
+        </el-form-item>
+        <el-form-item label="活动详情 :" prop="themeDetail">
+          <!-- <el-input
+            v-model.trim="ruleForm.themeDetail"
+            placeholder="请输入活动详情"
+            clearable
+            :autosize="{ minRows: 4 }"
+            type="textarea"
+          /> -->
+          <Richtext
+            @richtextClick="richtextClick"
+            :fatherMessage="fatherMessage"
+          ></Richtext>
+        </el-form-item>
+        <el-form-item label="活动时间 :" prop="activeTime" style="width: 520px">
+          <el-date-picker
+            v-model="ruleForm.activeTime"
+            unlink-panels
+            type="datetimerange"
+            range-separator="-"
+            start-placeholder="起始时间"
+            end-placeholder="结束时间"
+            format="YYYY-MM-DD HH:mm:ss"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择日期"
+          />
+        </el-form-item>
+        <el-form-item label="活动地点 :" prop="address">
+          <el-input
+            clearable
+            v-model.trim="ruleForm.address"
+            class="w-50 m-2"
+            placeholder="请输入活动地点"
+          />
+        </el-form-item>
+        <el-form-item
+          label="报名截止时间 :"
+          prop="signTime"
+          style="width: 520px"
         >
         >
-          确定
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </el-dialog>
-  <!-- 项目导入 -->
-  <el-dialog
-    class="projectImport"
-    v-model="buildImportVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    title="寝室信息导入"
-    align-center
-    width="600"
-    :before-close="cancelProjectImport"
-  >
-    <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
-    <p class="down">
-      <span>寝室信息导入模板下载</span
-      ><span @click="templateDown">模板下载</span>
-    </p>
-    <el-upload
-      class="avatar-uploader"
-      action="#"
-      :auto-upload="false"
-      :on-remove="projectImportRemove"
-      :on-change="projectImportChange"
-      :before-upload="beforeAvatarProImport"
-      ref="buildRef"
-      :limit="1"
-      :on-exceed="projectImportExceed"
+          <el-date-picker
+            v-model="ruleForm.signTime"
+            unlink-panels
+            type="datetimerange"
+            range-separator="-"
+            start-placeholder="起始时间"
+            end-placeholder="结束时间"
+            format="YYYY-MM-DD HH:mm:ss"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择日期"
+          />
+        </el-form-item>
+        <el-form-item label="报名总人数 :" prop="totalNumber">
+          <el-input
+            clearable
+            v-model.trim="ruleForm.totalNumber"
+            class="w-50 m-2"
+            placeholder="请输入报名总人数"
+          />
+        </el-form-item>
+        <el-form-item class="options">
+          <el-button @click="cancelAdd">取消</el-button>
+          <el-button
+            color="rgba(0, 97, 255, 1)"
+            class="queding"
+            type="primary"
+            @click="submitAdd(ruleFormRef)"
+          >
+            确定
+          </el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <el-dialog
+      class="tooltips"
+      v-model="tooltipVisible"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      title="活动详情"
+      align-center
+      width="800"
+      destroy-on-close
+      draggable
     >
     >
-      <template #trigger>
-        <el-button class="queding" type="primary">
-          &nbsp;&nbsp;导入文件&nbsp;&nbsp;
-        </el-button>
-      </template>
-    </el-upload>
-    <div class="options">
-      <el-button
-        color="rgba(9, 101, 98, 1)"
-        class="queding"
-        type="primary"
-        @click="projectImportConfirm(buildRef)"
-        :loading="buildImportLoading"
-      >
-        &nbsp;&nbsp;确认导入&nbsp;&nbsp;
-      </el-button>
-      <el-button @click="cancelProjectImport"
-        >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
-      >
-    </div>
-  </el-dialog>
+      <span v-html="tooltipContent"></span>
+    </el-dialog>
+  </div>
 </template>
 </template>
 
 
 <script setup>
 <script setup>
@@ -296,53 +324,47 @@ import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 import { api as viewerApi } from "v-viewer";
 import { api as viewerApi } from "v-viewer";
 
 
+import Richtext from "./Richtext.vue";
+
+import {
+  queryStatus,
+  queryActivityPages,
+  insertActivity,
+  queryClubDatas,
+  updateActivity,
+  deleteActivityById,
+} from "@/api/alumni-activity.js";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
 // 为避免解构时失去响应性
 // 为避免解构时失去响应性
 const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
 const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
 
 
-// 维护当前的文件列表
-const fileList = ref([]);
-
-// 核心:文件变化时直接覆盖
-const handleFileChange = (newFile) => {
-  // 直接用新文件替换整个列表,实现覆盖
-  fileList.value = [newFile];
-};
-
-// 上传前检查:如果已有文件,给出提示
-const handleBeforeUpload = () => {
-  if (fileList.value.length > 0) {
-    ElMessage.info("新图片将覆盖原有图片");
-  }
-  return true;
-};
-
-const handleRemove = () => {
-  fileList.value = [];
-  console.log("删除图片");
-};
-
-// 图片预览
-const handlePictureCardPreview = (file) => {
-  viewerApi({ images: fileList.value,zIndex: 2020 });
+const fatherMessage = ref({
+  data: "",
+  flag: false,
+});
+// 富文本传过来的数据
+const richtextClick = (data) => {
+  console.log(data, "富文本传过来的数据");
+  // params.value.safetyNotice = data.html;
+  fatherMessage.value.data = data.html;
+  ruleForm.themeDetail = data.html;
+  // accountRuleForm.contentText = data.text;
 };
 };
 
 
 // 表格数据
 // 表格数据
-const loading = ref(false);
+const tableLoading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
   list: [{}],
   list: [{}],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  theme: "",
+  statuId: "",
+  createTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -350,106 +372,136 @@ const pageSize = ref(10);
 const total = ref(0); // 当前总数
 const total = ref(0); // 当前总数
 const selectIds = ref([]); // 勾选的全部数据
 const selectIds = ref([]); // 勾选的全部数据
 
 
+const statusData = ref();
+
+// 下拉数据相关
+const selectRef = ref(null); // select组件ref
+const clubData = ref([]); // 已加载的组织列表
+const loading = ref(false); // 加载状态
+const pageParams = reactive({
+  pageNum: 1, // 当前页
+  pageSize: 500, // 每页条数
+  keyword: "", // 搜索关键词(可选)
+});
+
 const addDialogVisible = ref(false); // 控制添加账号弹窗
 const addDialogVisible = ref(false); // 控制添加账号弹窗
-const options = ref([
-  {
-    value: "guide",
-    label: "Guide",
-    children: [
-      {
-        value: "disciplines",
-        label: "Disciplines",
-        children: [
-          {
-            value: "consistency",
-            label: "Consistency",
-          },
-          {
-            value: "feedback",
-            label: "Feedback",
-          },
-          {
-            value: "efficiency",
-            label: "Efficiency",
-          },
-          {
-            value: "controllability",
-            label: "Controllability",
-          },
-        ],
-      },
-      {
-        value: "navigation",
-        label: "Navigation",
-        children: [
-          {
-            value: "side nav",
-            label: "Side Navigation",
-          },
-          {
-            value: "top nav",
-            label: "Top Navigation",
-          },
-        ],
-      },
-    ],
-  },
-]);
 
 
 // 表单数据
 // 表单数据
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  theme: "",
+  orgId: "",
+  themeDetail: "",
+  activeTime: "",
+  address: "",
+  signTime: "",
+  totalNumber: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  theme: [{ required: true, message: "活动名称不能为空", trigger: "blur" }],
+  orgId: [{ required: true, message: "所属组织不能为空", trigger: "blur" }],
+  themeDetail: [
+    { required: true, message: "活动详情不能为空", trigger: "blur" },
+  ],
+  activeTime: [
+    { required: true, message: "活动时间不能为空", trigger: "blur" },
+  ],
+  address: [{ required: true, message: "活动地点不能为空", trigger: "blur" }],
+  signTime: [
+    { required: true, message: "报名截止时间不能为空", trigger: "blur" },
+  ],
+  totalNumber: [
+    { required: true, message: "报名总人数不能为空", trigger: "blur" },
+  ],
 });
 });
 
 
+// Tooltip 相关响应式变量
+const tooltipVisible = ref(false);
+const tooltipContent = ref("");
+
+// 处理 Tooltip 显示(判断是否溢出 + 更新内容)
+const handleTooltipShow = (htmlContent) => {
+  tooltipVisible.value = true;
+  tooltipContent.value = htmlContent;
+};
+
 // 获取账户列表
 // 获取账户列表
 const getList = async () => {
 const getList = async () => {
-  loading.value = true;
+  tableLoading.value = true;
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    theme: searchInput.theme,
+    statuId: searchInput.statuId,
   };
   };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  queryActivityPages(params).then((res) => {
+    console.log(res, "获取活动分页数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      tableLoading.value = false;
+    } else {
+      tableLoading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
-
-const top = () => {};
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.theme = "";
+  searchInput.statuId = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
 
 
 // 添加账号
 // 添加账号
 const addlist = () => {
 const addlist = () => {
-  dialongTitle.value = "创建组织";
+  dialongTitle.value = "创建活动";
   addDialogVisible.value = true;
   addDialogVisible.value = true;
-  ruleForm.school = null;
+  ruleForm.theme = "";
+  ruleForm.orgId = "";
+  ruleForm.themeDetail = "";
+  ruleForm.address = "";
+  ruleForm.signTime = "";
+  ruleForm.totalNumber = "";
+  ruleForm.id = "";
+  fatherMessage.value.data = "";
 };
 };
 // 添加账号
 // 添加账号
 const updateS = (row) => {
 const updateS = (row) => {
   console.log(row);
   console.log(row);
-  dialongTitle.value = "编辑组织";
+  dialongTitle.value = "编辑活动";
   addDialogVisible.value = true;
   addDialogVisible.value = true;
+  ruleForm.theme = row.theme;
+  pageParams.keyword=row.orgName
+  clubList().then(() => {
+    ruleForm.orgId = `${row.orgName},${row.orgId}`;
+  })
+  ruleForm.themeDetail = row.themeDetail;
+  ruleForm.activeTime = [row.startTime, row.endTime];
+  ruleForm.address = row.address;
+  ruleForm.signTime = [row.signsTime, row.signeTime];
+  ruleForm.totalNumber = row.totalNumber;
+  ruleForm.id = row.id;
+  fatherMessage.value.data = row.themeDetail;
 };
 };
 const deleteS = async (row) => {
 const deleteS = async (row) => {
   ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
   ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
@@ -458,29 +510,73 @@ const deleteS = async (row) => {
     type: "warning",
     type: "warning",
   })
   })
     .then(async () => {
     .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
+      let params = {
+        id: row.id,
       };
       };
+      let res = await deleteActivityById(params);
+      if (res.code == 200) {
+        getList();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     })
     })
     .catch(() => {
     .catch(() => {
-      loading.value = false;
+      tableLoading.value = false;
     });
     });
 };
 };
-// 保留
-const retainS = async (row, flag) => {
-  let data = {
-    dormitoryIds: [row.id], // 当前页
-    retentionState: flag, //保留状态 1:开放,2:保留
-  };
-};
 
 
 // 确认添加员工
 // 确认添加员工
 const submitAdd = lodash.debounce(async (formEl) => {
 const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        theme: ruleForm.theme,
+        orgId: ruleForm.orgId.split(",")[1],
+        orgName: ruleForm.orgId.split(",")[0],
+        themeDetail: ruleForm.themeDetail,
+        startTime: ruleForm.activeTime[0],
+        endTime: ruleForm.activeTime[1],
+        address: ruleForm.address,
+        signsTime: ruleForm.signTime[0],
+        signeTime: ruleForm.signTime[1],
+        totalNumber: ruleForm.totalNumber,
+      };
+      let res = "";
+      if (dialongTitle.value == "创建活动") {
+        res = await insertActivity(data);
+      } else {
+        data.id = ruleForm.id;
+        res = await updateActivity(data);
+      }
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -511,25 +607,67 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
-const cancelProjectImport = () => {
-  buildImportVisible.value = false;
-  if (buildRef.value) {
-    buildRef.value.clearFiles();
-    buildFile.value = null;
+const statusList = async () => {
+  let res = await queryStatus();
+  console.log(res, "状态下拉");
+  if (res.code == 200) {
+    statusData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+// 获取组织下拉列表数据
+const clubList = async () => {
+  loading.value = true;
+  let params = {
+    currentPage: pageParams.pageNum,
+    pageCount: pageParams.pageSize,
+    keyword: pageParams.keyword,
+  };
+  let res = await queryClubDatas(params);
+  console.log(res, "获取组织下拉列表数据");
+  if (res.code == 200) {
+    loading.value = false;
+    clubData.value = res.data.list;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
 
 
-onBeforeMount(() => {});
-onUnmounted(() => {
-  // document.removeEventListener("keyup", Enters);
+const remoteMethod = (query) => {
+  console.log(query);
+  pageParams.keyword = query;
+  loading.value = true;
+  clubList().then(() =>{
+    loading.value = false;
+  })
+};
+
+onBeforeMount(() => {
+  getList();
+  statusList();
+  clubList();
 });
 });
+onUnmounted(() => {});
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
@@ -697,4 +835,27 @@ onUnmounted(() => {
     }
     }
   }
   }
 }
 }
+
+:deep(.tooltips) {
+  .el-dialog__body {
+    padding: 10px 20px 10px 20px;
+  }
+}
+</style>
+<style lang="scss">
+/* 加载提示样式 */
+.select-loading {
+  padding: 8px;
+  text-align: center;
+  color: #999;
+  font-size: 14px;
+}
+
+/* 优化下拉框高度,避免滚动不明显 */
+.club-select {
+  .el-select-dropdown__wrap {
+    max-height: 250px !important; /* 限制下拉面板高度,触发滚动 */
+  }
+}
 </style>
 </style>
+>

+ 241 - 0
src/views/alumni-activity/Richtext.vue

@@ -0,0 +1,241 @@
+<template>
+  <div class="richText">
+    <div class="box" style="">
+      <Toolbar
+        class="boxToolbar"
+        :editor="editorRef"
+        :defaultConfig="toolbarConfig"
+        :mode="mode"
+      />
+      <Editor
+        class="boxEditor"
+        v-model="valueHtml"
+        :defaultConfig="editorConfig"
+        :mode="mode"
+        @onCreated="handleCreated"
+        @onChange="handleChange"
+        @onDestroyed="handleDestroyed"
+        @onFocus="handleFocus"
+        @onBlur="handleBlur"
+        @customAlert="customAlert"
+        @customPaste="customPaste"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { Calendar } from "@element-plus/icons-vue";
+import { dayjs } from "element-plus";
+import lodash, { reduce } from "lodash";
+import { uploadFile } from "@/api/uploadFile";
+
+import "@wangeditor/editor/dist/css/style.css"; // 引入 css
+
+import { onBeforeUnmount, nextTick, ref, shallowRef, onMounted } from "vue";
+import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
+import { DomEditor, createToolbar } from "@wangeditor/editor";
+
+// 编辑器实例,必须用 shallowRef
+const editorRef = shallowRef();
+
+const props = defineProps({
+  fatherMessage: {},
+});
+const emit = defineEmits(["richtextClick"]);
+
+// 内容 HTML
+const valueHtml = ref();
+const toolbarConfig = {
+  // JS 语法
+  /* 工具栏配置 */
+  excludeKeys: [
+    "insertLink",
+    "insertVideo",
+    "insertTable",
+    "fullScreen",
+    "insertImage",
+    // "group-image",
+    "group-video",
+    "todo",
+  ],
+};
+const uploadImg = async (file, insertFn) => {
+  // let imgData = new FormData();
+  console.log(file);
+  let srcImg = file;
+  let data = new FormData();
+  data.set("file", srcImg);
+  let res = await uploadFile(data);
+  console.log(res, "导入照片");
+  if (res.code == 200) {
+    let href = res.data.fileUrl;
+    insertFn(href);
+    ElMessage({
+      type: "success",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+const editorConfig = {
+  placeholder: "请输入内容......",
+  MENU_CONF: {
+    uploadImage: {
+      // 自定义上传图片 方法
+      customUpload: uploadImg,
+      // 自定义插入图片 方法
+      // customInsert: insertImg,
+      //上传图片配置
+      // server: "https://	jgy-1325577833.cos.ap-guangzhou.myqcloud.com", //上传接口地址
+      fieldName: "file", //上传文件名
+      methods: "post",
+      metaWithUrl: false, // 参数拼接到 url 上
+      // 单个文件上传成功之后
+      // onSuccess(file, res) {
+      //   console.log(file, res);
+      // },
+      // 自定义插入图片
+      customInsert(res, insertFn) {
+        console.log(res);
+        // insertFn(res.url)
+      },
+    },
+    // insertImage: {
+    //   onInsertedImage(imageNode) {
+    //     if (imageNode == null) return;
+    //     const { src, alt, url, href } = imageNode;
+    //     console.log("inserted image", src, alt, url, href);
+    //   },
+    //   checkImage: customCheckImageFn, // 也支持 async 函数
+    //   parseImageSrc: customParseImageSrc, // 也支持 async 函数
+    // },
+    // editImage: {
+    //   onUpdatedImage(imageNode) {
+    //     if (imageNode == null) return;
+    //     const { src, alt, url } = imageNode;
+    //     console.log("updated image", src, alt, url);
+    //   },
+    //   checkImage: customCheckImageFn, // 也支持 async 函数
+    //   parseImageSrc: customParseImageSrc, // 也支持 async 函数
+    // },
+  },
+};
+const mode = ref("default"); // 默认模式
+// const mode = ref("simple"); // 简易模式
+
+const handleChange = (editor) => {
+  // console.log("change:", editor);
+  // console.log("change:", editor.getText());
+  // console.log("change:", editor.getHtml());
+  emit("richtextClick", {
+    html: editor.getHtml(),
+    text: editor.getText(),
+  });
+};
+const handleDestroyed = (editor) => {
+  console.log("destroyed", editor);
+};
+const handleFocus = (editor) => {
+  console.log("focus", editor);
+  const toolbar = DomEditor.getToolbar(editor);
+
+  const curToolbarConfig = toolbar.getConfig();
+  console.log(curToolbarConfig.toolbarKeys); // 当前菜单排序和分组
+};
+const handleBlur = (editor) => {
+  console.log("blur", editor);
+};
+const customAlert = (info, type) => {
+  alert(`【自定义提示】${type} - ${info}`);
+};
+// 粘贴事件对象
+const customPaste = (editor, event, callback) => {
+  console.log("ClipboardEvent 粘贴事件对象", event);
+  const html = event.clipboardData.getData("text/html"); // 获取粘贴的 html
+  const text = event.clipboardData.getData("text/plain"); // 获取粘贴的纯文本
+  const rtf = event.clipboardData.getData("text/rtf"); // 获取 rtf 数据(如从 word wsp 复制粘贴)
+  // console.log(html);
+
+  // 自定义插入内容
+  // editor.insertText("自定义插入内容");
+
+  // 返回 false ,阻止默认粘贴行为
+  // event.preventDefault();
+  // callback(false); // 返回值(注意,vue 事件的返回值,不能用 return)
+
+  // 返回 true ,继续默认的粘贴行为
+  callback(true);
+};
+
+// // 自定义图片上传
+// editorConfig.MENU_CONF["uploadImage"] = {
+//   async customUpload(file, insertFn) {
+//     let formData = new FormData();
+//     formData.append("files", file);
+//     try {
+//       // 这里结合实际场景写自己上传图片的逻辑,此处代码仅为示例
+//       const { data } = await upload(formData);
+//       // 对图片进行处理,同样需要结合实际场景
+//       data.forEach((item) => {
+//         insertFn(item, "image", item);
+//       });
+//     } catch (error) {
+//       console.log(error);
+//     }
+//   },
+// };
+
+const handleCreated = (editor) => {
+  editorRef.value = editor; // 记录 editor 实例,重要!
+  // console.log(props.fatherMessage);
+  editor.setHtml(props.fatherMessage.data);
+  // if (props.fatherMessage.flag) {
+  //   editor.enable();
+  // } else {
+  //   editor.disable();
+  // }
+};
+
+// 模拟 ajax 异步获取内容
+onMounted(() => {
+  // console.log(props.fatherMessage.data);
+});
+
+// 组件销毁时,也及时销毁编辑器
+onBeforeUnmount(() => {
+  console.log("销毁组件");
+  const editor = editorRef.value;
+  if (editor == null) return;
+  editor.destroy();
+});
+</script>
+
+<style scoped lang="scss">
+.richText {
+  width: 100%;
+  min-height: 300px;
+  .box {
+    height: 300px;
+    .boxToolbar {
+      border-top: 1px solid #ccc;
+      border-left: 1px solid #ccc;
+      border-right: 1px solid #ccc;
+    }
+    .boxEditor {
+      height: calc(100% - 80px) !important;
+      border: 1px solid #ccc;
+    }
+  }
+}
+</style>

+ 17 - 3
src/views/alumni-album/PhotoAudit.vue

@@ -115,9 +115,15 @@
         <el-table-column align="center" prop="createTime" label="上传时间" />
         <el-table-column align="center" prop="createTime" label="上传时间" />
         <el-table-column align="center" prop="passName" label="审核状态">
         <el-table-column align="center" prop="passName" label="审核状态">
           <template #default="{ row }">
           <template #default="{ row }">
-            <span v-if="row.passName=='已通过'" style="color:#67c23a">{{ row.passName }}</span>
-            <span v-if="row.passName=='待审核'" style="color:#409eff">{{ row.passName }}</span>
-            <span v-if="row.passName=='已拒绝'" style="color:#f56c6c">{{ row.passName }}</span>
+            <span v-if="row.passName == '已通过'" style="color: #67c23a">{{
+              row.passName
+            }}</span>
+            <span v-if="row.passName == '待审核'" style="color: #409eff">{{
+              row.passName
+            }}</span>
+            <span v-if="row.passName == '已拒绝'" style="color: #f56c6c">{{
+              row.passName
+            }}</span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column align="center" prop="userName" label="审核人" />
         <el-table-column align="center" prop="userName" label="审核人" />
@@ -357,6 +363,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
     }
     }
   });
   });
 };
 };
@@ -493,11 +505,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 const infoClick = (row) => {
 const infoClick = (row) => {

+ 9 - 1
src/views/alumni-album/PhotoCategory.vue

@@ -246,6 +246,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
     }
     }
   });
   });
 };
 };
@@ -335,7 +341,7 @@ const submitAdd = lodash.debounce(async (formEl) => {
           center: true,
           center: true,
         });
         });
         getList();
         getList();
-        categoryList()
+        categoryList();
       } else {
       } else {
         ElMessage({
         ElMessage({
           type: "error",
           type: "error",
@@ -374,11 +380,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 const cancelProjectImport = () => {
 const cancelProjectImport = () => {

+ 6 - 0
src/views/alumni-album/PhotoList.vue

@@ -381,6 +381,12 @@ const getList = async () => {
     loading.value = false;
     loading.value = false;
   } else {
   } else {
     loading.value = false;
     loading.value = false;
+    ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
   }
   }
 };
 };
 
 

+ 357 - 337
src/views/alumni-card/alumni-card.vue

@@ -21,11 +21,11 @@
             <span>在校经历 :</span>
             <span>在校经历 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.year"
+              v-model="searchInput.educationId"
               placeholder="请选择在校经历"
               placeholder="请选择在校经历"
             >
             >
               <el-option
               <el-option
-                v-for="i in yearData"
+                v-for="i in educationData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -36,11 +36,11 @@
             <span>审核状态 :</span>
             <span>审核状态 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.college"
+              v-model="searchInput.isPass"
               placeholder="请选择审核状态"
               placeholder="请选择审核状态"
             >
             >
               <el-option
               <el-option
-                v-for="i in collegeData"
+                v-for="i in passData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -61,15 +61,16 @@
               placeholder="请选择日期"
               placeholder="请选择日期"
             />
             />
           </div>
           </div>
+
           <div class="condition">
           <div class="condition">
-            <span>入学年 :</span>
+            <span>毕业年 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.major"
-              placeholder="请选择入学年"
+              v-model="searchInput.graduateId"
+              placeholder="请选择毕业年"
             >
             >
               <el-option
               <el-option
-                v-for="i in majorData"
+                v-for="i in graduateData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -77,14 +78,15 @@
             </el-select>
             </el-select>
           </div>
           </div>
           <div class="condition">
           <div class="condition">
-            <span>毕业年 :</span>
+            <span>学院 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.class"
-              placeholder="请选择毕业年"
+              v-model="searchInput.collegeId"
+              placeholder="请选择学院"
+              @change="collegeChange"
             >
             >
               <el-option
               <el-option
-                v-for="i in classData"
+                v-for="i in collegeData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -92,14 +94,15 @@
             </el-select>
             </el-select>
           </div>
           </div>
           <div class="condition">
           <div class="condition">
-            <span>学院 :</span>
+            <span>入学年 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.major"
-              placeholder="请选择学院"
+              v-model="searchInput.periodId"
+              placeholder="请选择入学年"
+              @change="periodChange"
             >
             >
               <el-option
               <el-option
-                v-for="i in majorData"
+                v-for="i in periodData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -110,11 +113,11 @@
             <span>专业 :</span>
             <span>专业 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.class"
+              v-model="searchInput.majorId"
               placeholder="请选择专业"
               placeholder="请选择专业"
             >
             >
               <el-option
               <el-option
-                v-for="i in classData"
+                v-for="i in majorData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -153,33 +156,55 @@
             align="center"
             align="center"
             width="60"
             width="60"
           />
           />
-          <el-table-column align="center" prop="school" label="姓名" />
-          <el-table-column width="100" align="center" label="性别">
+          <el-table-column align="center" prop="userName" label="姓名" />
+          <el-table-column align="center" prop="genderStr" label="性别">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="educationBackground"
+            label="在校经历"
+          />
+          <el-table-column align="center" prop="graduateName" label="毕业年" />
+          <el-table-column align="center" prop="collegeName" label="学院" />
+          <el-table-column align="center" prop="periodName" label="入学年" />
+          <el-table-column align="center" prop="majorName" label="专业" />
+          <el-table-column align="center" prop="headImage" label="照片">
             <template #default="{ row }">
             <template #default="{ row }">
-              <span v-if="row.retentionState == 2">是</span>
-              <span v-if="row.retentionState == 1">否</span>
+              <div class="img-preview-list" v-if="row.headImage">
+                <div
+                  class="img-item"
+                  style="width: 60px; height: 60px; margin: 10px 0"
+                >
+                  <img
+                    :src="row.headImage"
+                    alt="图片预览"
+                    class="preview-img"
+                    v-viewer
+                  />
+                </div>
+              </div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center" prop="dormitory" label="在校经历" />
-          <el-table-column align="center" prop="dormitory" label="入学年" />
-          <el-table-column align="center" prop="sex" label="毕业年" />
-          <el-table-column align="center" prop="college" label="学院" />
-          <el-table-column align="center" prop="major" label="专业" />
-          <el-table-column align="center" prop="major" label="照片" />
-          <el-table-column align="center" prop="major" label="编号" />
-          <el-table-column align="center" prop="status" label="审核状态">
+          <el-table-column align="center" prop="phone" label="编号" />
+          <el-table-column align="center" prop="passName" label="审核状态">
             <template #default="{ row }">
             <template #default="{ row }">
-              <span v-if="row.status == 1">满员</span>
-              <span v-if="row.status == 2">全空</span>
-              <span v-if="row.status == 3">缺额</span>
+              <span v-if="row.passName == '已通过'" style="color: #67c23a">{{
+                row.passName
+              }}</span>
+              <span v-if="row.passName == '待审核'" style="color: #409eff">{{
+                row.passName
+              }}</span>
+              <span v-if="row.passName == '已拒绝'" style="color: #f56c6c">{{
+                row.passName
+              }}</span>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
+          <el-table-column align="center" prop="freeBedNumber" label="审核人" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             prop="freeBedNumber"
             prop="freeBedNumber"
-            label="审核人"
+            label="审核时间"
           />
           />
-          <el-table-column align="center" prop="freeBedNumber" label="审核时间" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             label="操作"
             label="操作"
@@ -187,18 +212,23 @@
             width="200"
             width="200"
           >
           >
             <template #default="{ row }">
             <template #default="{ row }">
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button type="primary" @click="infoClick(row)" link
                 >详情</el-button
                 >详情</el-button
               >
               >
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button
+                v-if="row.passName == '待审核'"
+                type="primary"
+                @click="operationPassChange(row)"
+                link
                 >通过</el-button
                 >通过</el-button
               >
               >
-              <el-button type="danger" @click="deleteS(row)" link
+              <el-button
+                v-if="row.passName == '待审核'"
+                type="danger"
+                @click="operationRefuseChange(row)"
+                link
                 >拒绝</el-button
                 >拒绝</el-button
               >
               >
-              <el-button type="danger" @click="deleteS(row)" link
-                >删除</el-button
-              >
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
@@ -226,7 +256,7 @@
       :close-on-press-escape="false"
       :close-on-press-escape="false"
       :title="dialongTitle"
       :title="dialongTitle"
       align-center
       align-center
-      width="560"
+      width="540"
       :before-close="cancelAdd"
       :before-close="cancelAdd"
       destroy-on-close
       destroy-on-close
       draggable
       draggable
@@ -235,107 +265,22 @@
         ref="ruleFormRef"
         ref="ruleFormRef"
         :model="ruleForm"
         :model="ruleForm"
         :rules="rules"
         :rules="rules"
-        label-width="100px"
+        label-width="90px"
         class="demo-ruleForm"
         class="demo-ruleForm"
         :size="formSize"
         :size="formSize"
         label-position="right"
         label-position="right"
         status-icon
         status-icon
       >
       >
-        <el-form-item label="校区名称 :" prop="school">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            @change="schoolFormChange"
-            v-model="ruleForm.school"
-            clearable
-            placeholder="请选择校区名称"
-          >
-            <el-option
-              v-for="i in schoolData"
-              :key="i.id"
-              :label="i.school"
-              :value="`${i.school},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼栋名称 :" prop="build">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            clearable
-            v-model="ruleForm.build"
-            placeholder="请选择楼栋名称"
-            @change="buildFormChange"
-          >
-            <el-option
-              v-for="i in buildFormData"
-              :key="i.id"
-              :label="i.build"
-              :value="`${i.build},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="寝室号 :" prop="dormitory">
-          <el-input
-            clearable
-            v-model.trim="ruleForm.dormitory"
-            class="w-50 m-2"
-            placeholder="请输入寝室号"
-          />
-        </el-form-item>
-        <el-form-item label="寝室性别 :" prop="sex">
-          <el-select
-            disabled
-            v-model="ruleForm.sex"
-            placeholder="请选择寝室性别"
-          >
-            <el-option label="男" value="男" />
-            <el-option label="女" value="女" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="所属学院 :" prop="college">
-          <el-select
-            @change="collegeFormChange"
-            v-model="ruleForm.college"
-            clearable
-            multiple
-            collapse-tags
-            collapse-tags-tooltip
-            :max-collapse-tags="2"
-            placeholder="请选择所属学院"
-          >
-            <el-option
-              v-for="i in collegeData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <!-- <el-form-item label="专业 :" prop="major">
-          <el-select
-            clearable
-            v-model="ruleForm.major"
-            placeholder="请选择专业"
-          >
-            <el-option
-              v-for="i in majorFormData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item> -->
-        <el-form-item label="床位数 :" prop="bedNumber">
-          <el-input
-            v-model.trim="ruleForm.bedNumber"
-            placeholder="请输入床位数"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item label="备注 :" prop="remark">
+        <el-form-item
+          label="审批意见 :"
+          :prop="dialongTitle == '拒绝审批' ? 'passValue' : ''"
+        >
           <el-input
           <el-input
-            v-model.trim="ruleForm.remark"
-            placeholder="请输入备注"
+            v-model.trim="ruleForm.passValue"
+            placeholder="请输入审批意见"
             clearable
             clearable
+            :autosize="{ minRows: 4 }"
+            type="textarea"
           />
           />
         </el-form-item>
         </el-form-item>
         <el-form-item class="options">
         <el-form-item class="options">
@@ -351,52 +296,68 @@
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
     </el-dialog>
     </el-dialog>
-    <!-- 项目导入 -->
+    <!-- 详情 -->
     <el-dialog
     <el-dialog
       class="projectImport"
       class="projectImport"
-      v-model="buildImportVisible"
+      v-model="infoVisible"
       :close-on-click-modal="false"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       :close-on-press-escape="false"
-      title="寝室信息导入"
+      title="详情"
       align-center
       align-center
       width="600"
       width="600"
-      :before-close="cancelProjectImport"
+      :before-close="cancelInfo"
+      draggable
     >
     >
-      <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
-      <p class="down">
-        <span>寝室信息导入模板下载</span
-        ><span @click="templateDown">模板下载</span>
-      </p>
-      <el-upload
-        class="avatar-uploader"
-        action="#"
-        :auto-upload="false"
-        :on-remove="projectImportRemove"
-        :on-change="projectImportChange"
-        :before-upload="beforeAvatarProImport"
-        ref="buildRef"
-        :limit="1"
-        :on-exceed="projectImportExceed"
-      >
-        <template #trigger>
-          <el-button class="queding" type="primary">
-            &nbsp;&nbsp;导入文件&nbsp;&nbsp;
-          </el-button>
-        </template>
-      </el-upload>
-      <div class="options">
-        <el-button
-          color="rgba(9, 101, 98, 1)"
-          class="queding"
-          type="primary"
-          @click="projectImportConfirm(buildRef)"
-          :loading="buildImportLoading"
-        >
-          &nbsp;&nbsp;确认导入&nbsp;&nbsp;
-        </el-button>
-        <el-button @click="cancelProjectImport"
-          >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
-        >
+      <div style="margin-bottom: 15px">
+        <el-descriptions :column="1">
+          <el-descriptions-item label="姓名 :">{{
+            infoData.userName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="性别 :">{{
+            infoData.genderStr
+          }}</el-descriptions-item>
+          <el-descriptions-item label="在校经历 :">{{
+            infoData.educationBackground
+          }}</el-descriptions-item>
+          <el-descriptions-item label="毕业年 :">{{
+            infoData.graduateName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="学院 :">{{
+            infoData.collegeName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="入学年 :">{{
+            infoData.periodName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="专业 :">{{
+            infoData.majorName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="照片 :">
+            <div class="img-preview-list" v-if="infoData.headImage">
+              <div
+                class="img-item"
+                style="width: 60px; height: 60px; margin: 10px 0"
+              >
+                <img
+                  :src="infoData.headImage"
+                  alt="图片预览"
+                  class="preview-img"
+                />
+              </div>
+            </div>
+          </el-descriptions-item>
+          <el-descriptions-item label="编号 :">{{
+            infoData.phone
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核状态 :">{{
+            infoData.passName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核人 :">{{
+            infoData.applyUserName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核时间 :">{{
+            infoData.passTime
+          }}</el-descriptions-item>
+        </el-descriptions>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
   </div>
   </div>
@@ -419,6 +380,17 @@ import lodash from "lodash";
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 
 
+import {
+  queryEUsersPage,
+  toExamineUser,
+  queryEducations,
+  queryPassTypes,
+  queryGraduate,
+  queryColleges,
+  queryPeriods,
+  queryMajors,
+} from "@/api/alumni-card.js";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
@@ -430,15 +402,17 @@ const loading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
   list: [{}],
   list: [{}],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
   name: "",
   name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  educationId: "",
+  isPass: "",
+  createTime: "",
+  collegeId: "",
+  periodId: "",
+  majorId: "",
+  graduateId: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -452,42 +426,29 @@ const addDialogVisible = ref(false); // 控制添加账号弹窗
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  passValue: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  passValue: [{ required: true, message: "审批意见不能为空", trigger: "blur" }],
 });
 });
 
 
-// 导入
-const buildImportVisible = ref(false);
-const buildRef = ref();
-const buildFile = ref();
-const buildImportLoading = ref(false);
+const infoVisible = ref(false);
+const infoData = ref({});
 
 
-// 入学年
-const yearData = ref([]);
 // 学院
 // 学院
 const collegeData = ref([]);
 const collegeData = ref([]);
+// 入学年
+const periodData = ref([]);
 // 专业
 // 专业
 const majorData = ref([]);
 const majorData = ref([]);
-// 班级
-const classData = ref([]);
+// 毕业年份下拉
+const graduateData = ref();
+// 在校经历下拉列表数据
+const educationData = ref();
+// 审核状态下拉列表数据
+const passData = ref();
 
 
 // 获取账户列表
 // 获取账户列表
 const getList = async () => {
 const getList = async () => {
@@ -495,57 +456,108 @@ const getList = async () => {
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    name: searchInput.name,
+    educationId: searchInput.educationId,
+    isPass: searchInput.isPass,
+    collegeId: searchInput.collegeId,
+    periodId: searchInput.periodId,
+    majorId: searchInput.majorId,
+    graduateId: searchInput.graduateId,
   };
   };
+  if (searchInput.createTime) {
+    params.pstartTime = searchInput.createTime[0];
+    params.pendTime = searchInput.createTime[1];
+  }
+  queryEUsersPage(params).then((res) => {
+    console.log(res, "校友分页列表数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      loading.value = false;
+    } else {
+      loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.name = "";
+  searchInput.collegeId = "";
+  searchInput.periodId = "";
+  searchInput.majorId = "";
+
+  searchInput.educationId = "";
+  searchInput.isPass = "";
+  searchInput.createTime = "";
+  searchInput.graduateId = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+
+const infoClick = (row) => {
+  console.log(row);
 
 
-// 添加账号
-const addlist = () => {
-  dialongTitle.value = "新增寝室信息";
-  addDialogVisible.value = true;
-  ruleForm.school = null;
+  infoVisible.value = true;
+  infoData.value = row;
 };
 };
-// 添加账号
-const updateS = (row) => {
-  console.log(row);
-  dialongTitle.value = "编辑寝室信息";
-  addDialogVisible.value = true;
+
+const cancelInfo = () => {
+  infoVisible.value = false;
 };
 };
-const deleteS = async (row) => {
-  ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
-    confirmButtonText: "确认",
-    cancelButtonText: "取消",
-    type: "warning",
-  })
-    .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
-      };
-    })
-    .catch(() => {
-      loading.value = false;
-    });
+
+// 通过
+const operationPassChange = async (row) => {
+  dialongTitle.value = "通过审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
-// 保留
-const retainS = async (row, flag) => {
-  let data = {
-    dormitoryIds: [row.id], // 当前页
-    retentionState: flag, //保留状态 1:开放,2:保留
-  };
+// 拒绝
+const operationRefuseChange = async (row) => {
+  dialongTitle.value = "拒绝审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
 
 
-// 确认添加员工
 const submitAdd = lodash.debounce(async (formEl) => {
 const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        id: ruleForm.id,
+        isPass: dialongTitle.value == "通过审批" ? 2 : 3,
+        passValue: ruleForm.passValue,
+      };
+      let res = await toExamineUser(data);
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -576,118 +588,126 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
-// 楼栋导出
-const exportbtn = async () => {
+// 学院下拉列表数据
+const collegeList = async () => {
+  let res = await queryColleges();
+  console.log(res, "学院下拉列表数据");
+  if (res.code == 200) {
+    collegeData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+
+// 入学年下拉列表数据
+const collegeChange = async (val) => {
   let params = {
   let params = {
-    accountId: sessionStorage.getItem("accountId"),
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
-    dormitoryId: searchInput.dormitoryId,
-    sex: searchInput.sex,
-    status: searchInput.status,
-    collegeId: searchInput.collegeId ? searchInput.collegeId : "",
-    retentionState: searchInput.retentionState,
+    collegeId: val,
   };
   };
-  //   let res = await https.getBlob(
-  //     "/welcome/api/welcome-dormitory/welcomeDormitoryExport",
-  //     "params",
-  //     params
-  //   );
-  //   console.log(res, "寝室导出");
-  //   let name = `寝室信息管理`;
-  //   var content = res;
-  //   var datas = new Blob([content]);
-  //   var downloadUrl = window.URL.createObjectURL(datas);
-  //   var anchor = document.createElement("a");
-  //   anchor.href = downloadUrl;
-  //   anchor.download = name + ".xlsx";
-  //   anchor.click();
-  //   window.URL.revokeObjectURL(datas);
-  //   ElMessage({
-  //     type: "success",
-  //     showClose: true,
-  //     message: "导出成功",
-  //     center: true,
-  //   });
-};
-// 楼栋导入 (--------------------------------------------------)
-const importBtn = () => {
-  buildImportVisible.value = true;
-};
-// 模板下载
-const templateDown = async () => {
-  //   let res = await https.get(
-  //     "/welcome/api/welcome-dormitory/downloadDormitoryExcel",
-  //     "params"
-  //   );
-  //   console.log(res, "模板下载");
-  //   if (res.code == 200) {
-  //     window.location.href = res.data;
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
+  let res = await queryPeriods(params);
+  console.log(res, "入学年下拉列表数据");
+  if (res.code == 200) {
+    periodData.value = res.data;
+
+    searchInput.periodId = ""; // 入学年
+    majorData.value = []; // 专业
+    searchInput.majorId = ""; // 专业
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
 };
 };
-// 移出照片
-const projectImportRemove = (uploadFile, uploadFiles) => {
-  console.log(uploadFile, uploadFiles);
-  buildFile.value = "";
+
+// 专业下拉列表数据
+const periodChange = async (val) => {
+  let params = {
+    periodId: val,
+  };
+  let res = await queryMajors(params);
+  console.log(res, "专业下拉列表数据");
+  if (res.code == 200) {
+    majorData.value = res.data;
+    searchInput.majorId = ""; // 班级
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
 };
 };
 
 
-// 导入项目
-const projectImportConfirm = async () => {
-  buildImportLoading.value = true;
-  let data = new FormData();
-  data.set("file", buildFile.value);
-  //   let res = await https.post(
-  //     "/welcome/api/welcome-dormitory/importDormitoryExcel",
-  //     "data",
-  //     data
-  //   );
-  //   console.log(res, "导入项目");
-  //   if (res.code == 200) {
-  //     buildImportVisible.value = false;
-
-  //     buildImportLoading.value = false;
-  //     getList();
-  //     ElMessage({
-  //       type: "success",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
+// 在校经历下拉列表数据
+const educationList = async () => {
+  let res = await queryEducations();
+  console.log(res, "在校经历下拉列表数据");
+  if (res.code == 200) {
+    educationData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
+// 审核状态下拉列表数据
+const passList = async () => {
+  let res = await queryPassTypes();
+  console.log(res, "审核状态下拉列表数据");
+  if (res.code == 200) {
+    passData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
 };
 };
-const cancelProjectImport = () => {
-  buildImportVisible.value = false;
-  if (buildRef.value) {
-    buildRef.value.clearFiles();
-    buildFile.value = null;
+// 毕业年份下拉列表数据
+const graduateList = async () => {
+  let res = await queryGraduate();
+  console.log(res, "毕业年份下拉列表数据");
+  if (res.code == 200) {
+    graduateData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
-  //   getList();
-  //   schoolList();
-  //   collegeList();
+  getList();
+  collegeList();
+  educationList();
+  passList();
+  graduateList();
 });
 });
 onUnmounted(() => {
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
   // document.removeEventListener("keyup", Enters);

+ 243 - 337
src/views/alumni-cooperation/alumni-cooperation.vue

@@ -11,7 +11,7 @@
             <span>内容 :</span>
             <span>内容 :</span>
             <el-input
             <el-input
               clearable
               clearable
-              v-model.trim="searchInput.name"
+              v-model.trim="searchInput.keyWord"
               class="w-50 m-2"
               class="w-50 m-2"
               placeholder="请输入内容"
               placeholder="请输入内容"
               style="width: 180px"
               style="width: 180px"
@@ -21,11 +21,11 @@
             <span>信息类型 :</span>
             <span>信息类型 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.year"
+              v-model="searchInput.type"
               placeholder="请选择信息类型"
               placeholder="请选择信息类型"
             >
             >
               <el-option
               <el-option
-                v-for="i in yearData"
+                v-for="i in infoTypeData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -36,11 +36,11 @@
             <span>审核状态 :</span>
             <span>审核状态 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.college"
+              v-model="searchInput.isPass"
               placeholder="请选择审核状态"
               placeholder="请选择审核状态"
             >
             >
               <el-option
               <el-option
-                v-for="i in collegeData"
+                v-for="i in passData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -88,31 +88,47 @@
           }"
           }"
         >
         >
           <!-- <el-table-column type="selection" align="center" width="55" /> -->
           <!-- <el-table-column type="selection" align="center" width="55" /> -->
-          <el-table-column align="center" prop="school" label="标题" />
-          <el-table-column width="100" align="center" label="信息类型">
+          <el-table-column align="center" prop="title" label="标题" />
+          <el-table-column
+            width="100"
+            prop="typeName"
+            align="center"
+            label="信息类型"
+          >
+          </el-table-column>
+          <el-table-column align="center" prop="content" label="内容" />
+          <el-table-column align="center" prop="image" label="图片" width="170">
             <template #default="{ row }">
             <template #default="{ row }">
-              <span v-if="row.retentionState == 2">是</span>
-              <span v-if="row.retentionState == 1">否</span>
+              <div class="img-preview-list" v-if="row.imageList">
+                <div
+                  class="img-item"
+                  style="width: 60px; height: 60px; margin: 10px 0"
+                  v-for="i in row.imageList"
+                  :key="i.id"
+                >
+                  <img v-viewer :src="i" alt="图片预览" class="preview-img" />
+                </div>
+              </div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center" prop="dormitory" label="内容" />
-          <el-table-column align="center" prop="sex" label="图片" />
-          <el-table-column align="center" prop="college" label="发布人" />
-          <el-table-column align="center" prop="major" label="联系方式" />
-          <el-table-column align="center" prop="major" label="发布时间" />
-          <el-table-column align="center" prop="status" label="审核状态">
+          <el-table-column align="center" prop="userName" label="发布人" />
+          <el-table-column align="center" prop="phone" label="联系方式" />
+          <el-table-column align="center" prop="createTime" label="发布时间" />
+          <el-table-column align="center" label="审核状态">
             <template #default="{ row }">
             <template #default="{ row }">
-              <span v-if="row.status == 1">满员</span>
-              <span v-if="row.status == 2">全空</span>
-              <span v-if="row.status == 3">缺额</span>
+              <span v-if="row.passName == '已通过'" style="color: #67c23a">{{
+                row.passName
+              }}</span>
+              <span v-if="row.passName == '待审核'" style="color: #409eff">{{
+                row.passName
+              }}</span>
+              <span v-if="row.passName == '已拒绝'" style="color: #f56c6c">{{
+                row.passName
+              }}</span>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center" prop="freeBedNumber" label="审核人" />
-          <el-table-column
-            align="center"
-            prop="freeBedNumber"
-            label="审核时间"
-          />
+          <el-table-column align="center" prop="applyUserName" label="审核人" />
+          <el-table-column align="center" prop="passTime" label="审核时间" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             label="操作"
             label="操作"
@@ -120,18 +136,23 @@
             width="200"
             width="200"
           >
           >
             <template #default="{ row }">
             <template #default="{ row }">
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button type="primary" @click="infoClick(row)" link
                 >详情</el-button
                 >详情</el-button
               >
               >
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button
+                v-if="row.passName == '待审核'"
+                type="primary"
+                @click="operationPassChange(row)"
+                link
                 >通过</el-button
                 >通过</el-button
               >
               >
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button
+                v-if="row.passName == '待审核'"
+                type="danger"
+                @click="operationRefuseChange(row)"
+                link
                 >拒绝</el-button
                 >拒绝</el-button
               >
               >
-              <el-button type="danger" @click="deleteS(row)" link
-                >删除</el-button
-              >
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
@@ -159,7 +180,7 @@
       :close-on-press-escape="false"
       :close-on-press-escape="false"
       :title="dialongTitle"
       :title="dialongTitle"
       align-center
       align-center
-      width="560"
+      width="540"
       :before-close="cancelAdd"
       :before-close="cancelAdd"
       destroy-on-close
       destroy-on-close
       draggable
       draggable
@@ -168,107 +189,22 @@
         ref="ruleFormRef"
         ref="ruleFormRef"
         :model="ruleForm"
         :model="ruleForm"
         :rules="rules"
         :rules="rules"
-        label-width="100px"
+        label-width="90px"
         class="demo-ruleForm"
         class="demo-ruleForm"
         :size="formSize"
         :size="formSize"
         label-position="right"
         label-position="right"
         status-icon
         status-icon
       >
       >
-        <el-form-item label="校区名称 :" prop="school">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            @change="schoolFormChange"
-            v-model="ruleForm.school"
-            clearable
-            placeholder="请选择校区名称"
-          >
-            <el-option
-              v-for="i in schoolData"
-              :key="i.id"
-              :label="i.school"
-              :value="`${i.school},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼栋名称 :" prop="build">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            clearable
-            v-model="ruleForm.build"
-            placeholder="请选择楼栋名称"
-            @change="buildFormChange"
-          >
-            <el-option
-              v-for="i in buildFormData"
-              :key="i.id"
-              :label="i.build"
-              :value="`${i.build},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="寝室号 :" prop="dormitory">
-          <el-input
-            clearable
-            v-model.trim="ruleForm.dormitory"
-            class="w-50 m-2"
-            placeholder="请输入寝室号"
-          />
-        </el-form-item>
-        <el-form-item label="寝室性别 :" prop="sex">
-          <el-select
-            disabled
-            v-model="ruleForm.sex"
-            placeholder="请选择寝室性别"
-          >
-            <el-option label="男" value="男" />
-            <el-option label="女" value="女" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="所属学院 :" prop="college">
-          <el-select
-            @change="collegeFormChange"
-            v-model="ruleForm.college"
-            clearable
-            multiple
-            collapse-tags
-            collapse-tags-tooltip
-            :max-collapse-tags="2"
-            placeholder="请选择所属学院"
-          >
-            <el-option
-              v-for="i in collegeData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <!-- <el-form-item label="专业 :" prop="major">
-          <el-select
-            clearable
-            v-model="ruleForm.major"
-            placeholder="请选择专业"
-          >
-            <el-option
-              v-for="i in majorFormData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item> -->
-        <el-form-item label="床位数 :" prop="bedNumber">
-          <el-input
-            v-model.trim="ruleForm.bedNumber"
-            placeholder="请输入床位数"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item label="备注 :" prop="remark">
+        <el-form-item
+          label="审批意见 :"
+          :prop="dialongTitle == '拒绝审批' ? 'passValue' : ''"
+        >
           <el-input
           <el-input
-            v-model.trim="ruleForm.remark"
-            placeholder="请输入备注"
+            v-model.trim="ruleForm.passValue"
+            placeholder="请输入审批意见"
             clearable
             clearable
+            :autosize="{ minRows: 4 }"
+            type="textarea"
           />
           />
         </el-form-item>
         </el-form-item>
         <el-form-item class="options">
         <el-form-item class="options">
@@ -284,52 +220,60 @@
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
     </el-dialog>
     </el-dialog>
-    <!-- 项目导入 -->
+    <!-- 详情 -->
     <el-dialog
     <el-dialog
       class="projectImport"
       class="projectImport"
-      v-model="buildImportVisible"
+      v-model="infoVisible"
       :close-on-click-modal="false"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       :close-on-press-escape="false"
-      title="寝室信息导入"
+      title="详情"
       align-center
       align-center
       width="600"
       width="600"
-      :before-close="cancelProjectImport"
+      :before-close="cancelInfo"
+      draggable
     >
     >
-      <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
-      <p class="down">
-        <span>寝室信息导入模板下载</span
-        ><span @click="templateDown">模板下载</span>
-      </p>
-      <el-upload
-        class="avatar-uploader"
-        action="#"
-        :auto-upload="false"
-        :on-remove="projectImportRemove"
-        :on-change="projectImportChange"
-        :before-upload="beforeAvatarProImport"
-        ref="buildRef"
-        :limit="1"
-        :on-exceed="projectImportExceed"
-      >
-        <template #trigger>
-          <el-button class="queding" type="primary">
-            &nbsp;&nbsp;导入文件&nbsp;&nbsp;
-          </el-button>
-        </template>
-      </el-upload>
-      <div class="options">
-        <el-button
-          color="rgba(9, 101, 98, 1)"
-          class="queding"
-          type="primary"
-          @click="projectImportConfirm(buildRef)"
-          :loading="buildImportLoading"
-        >
-          &nbsp;&nbsp;确认导入&nbsp;&nbsp;
-        </el-button>
-        <el-button @click="cancelProjectImport"
-          >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
-        >
+      <div style="margin-bottom: 15px">
+        <el-descriptions :column="1">
+          <el-descriptions-item label="标题 :">{{
+            infoData.title
+          }}</el-descriptions-item>
+          <el-descriptions-item label="信息类型 :">{{
+            infoData.typeName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="内容 :">{{
+            infoData.content
+          }}</el-descriptions-item>
+          <el-descriptions-item label="图片 :">
+            <div class="img-preview-list" v-if="infoData.imageList">
+              <div
+                class="img-item"
+                style="width: 60px; height: 60px; margin: 10px 0"
+                v-for="i in infoData.imageList"
+                :key="i.id"
+              >
+                <img v-viewer :src="i" alt="图片预览" class="preview-img" />
+              </div>
+            </div>
+          </el-descriptions-item>
+          <el-descriptions-item label="发布人 :">{{
+            infoData.userName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="联系方式 :">{{
+            infoData.phone
+          }}</el-descriptions-item>
+          <el-descriptions-item label="发布时间 :">{{
+            infoData.createTime
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核状态 :">{{
+            infoData.passName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核人 :">{{
+            infoData.applyUserName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核时间 :">{{
+            infoData.passTime
+          }}</el-descriptions-item>
+        </el-descriptions>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
   </div>
   </div>
@@ -352,6 +296,13 @@ import lodash from "lodash";
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 
 
+import {
+  queryWebCooperationPage,
+  toExamineCoo,
+  queryPassTypes,
+  queryTypes,
+} from "@/api/alumni-cooperation.js";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
@@ -361,17 +312,15 @@ const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
 // 表格数据
 // 表格数据
 const loading = ref(false);
 const loading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
-  list: [{}],
+  list: [],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  keyWord: "",
+  type: "",
+  isPass: "",
+  createTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -385,42 +334,19 @@ const addDialogVisible = ref(false); // 控制添加账号弹窗
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  passValue: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  passValue: [{ required: true, message: "审批意见不能为空", trigger: "blur" }],
 });
 });
 
 
-// 导入
-const buildImportVisible = ref(false);
-const buildRef = ref();
-const buildFile = ref();
-const buildImportLoading = ref(false);
-
-// 入学年
-const yearData = ref([]);
-// 学院
-const collegeData = ref([]);
-// 专业
-const majorData = ref([]);
-// 班级
-const classData = ref([]);
+const infoVisible = ref(false);
+const infoData = ref({});
+
+const infoTypeData = ref();
+const passData = ref();
 
 
 // 获取账户列表
 // 获取账户列表
 const getList = async () => {
 const getList = async () => {
@@ -428,57 +354,104 @@ const getList = async () => {
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    keyWord: searchInput.keyWord,
+    address: searchInput.address,
+    isPass: searchInput.isPass,
   };
   };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  queryWebCooperationPage(params).then((res) => {
+    console.log(res, "校友合作分页列表数据");
+    if (res.code == 200) {
+      res.data.list.forEach((item) => {
+        if (item.image) {
+          item.imageList = item.image.split(",");
+        }
+      });
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      loading.value = false;
+    } else {
+      loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.keyWord = "";
+  searchInput.type = "";
+  searchInput.isPass = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+
+const infoClick = (row) => {
+  console.log(row);
 
 
-// 添加账号
-const addlist = () => {
-  dialongTitle.value = "新增寝室信息";
-  addDialogVisible.value = true;
-  ruleForm.school = null;
+  infoVisible.value = true;
+  infoData.value = row;
 };
 };
-// 添加账号
-const updateS = (row) => {
-  console.log(row);
-  dialongTitle.value = "编辑寝室信息";
-  addDialogVisible.value = true;
+
+const cancelInfo = () => {
+  infoVisible.value = false;
 };
 };
-const deleteS = async (row) => {
-  ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
-    confirmButtonText: "确认",
-    cancelButtonText: "取消",
-    type: "warning",
-  })
-    .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
-      };
-    })
-    .catch(() => {
-      loading.value = false;
-    });
+
+// 通过
+const operationPassChange = async (row) => {
+  dialongTitle.value = "通过审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
-// 保留
-const retainS = async (row, flag) => {
-  let data = {
-    dormitoryIds: [row.id], // 当前页
-    retentionState: flag, //保留状态 1:开放,2:保留
-  };
+// 拒绝
+const operationRefuseChange = async (row) => {
+  dialongTitle.value = "拒绝审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
 
 
-// 确认添加员工
 const submitAdd = lodash.debounce(async (formEl) => {
 const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        id: ruleForm.id,
+        isPass: dialongTitle.value == "通过审批" ? 2 : 3,
+        passValue: ruleForm.passValue,
+      };
+      let res = await toExamineCoo(data);
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -509,118 +482,51 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
-// 楼栋导出
-const exportbtn = async () => {
-  let params = {
-    accountId: sessionStorage.getItem("accountId"),
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
-    dormitoryId: searchInput.dormitoryId,
-    sex: searchInput.sex,
-    status: searchInput.status,
-    collegeId: searchInput.collegeId ? searchInput.collegeId : "",
-    retentionState: searchInput.retentionState,
-  };
-  //   let res = await https.getBlob(
-  //     "/welcome/api/welcome-dormitory/welcomeDormitoryExport",
-  //     "params",
-  //     params
-  //   );
-  //   console.log(res, "寝室导出");
-  //   let name = `寝室信息管理`;
-  //   var content = res;
-  //   var datas = new Blob([content]);
-  //   var downloadUrl = window.URL.createObjectURL(datas);
-  //   var anchor = document.createElement("a");
-  //   anchor.href = downloadUrl;
-  //   anchor.download = name + ".xlsx";
-  //   anchor.click();
-  //   window.URL.revokeObjectURL(datas);
-  //   ElMessage({
-  //     type: "success",
-  //     showClose: true,
-  //     message: "导出成功",
-  //     center: true,
-  //   });
-};
-// 楼栋导入 (--------------------------------------------------)
-const importBtn = () => {
-  buildImportVisible.value = true;
-};
-// 模板下载
-const templateDown = async () => {
-  //   let res = await https.get(
-  //     "/welcome/api/welcome-dormitory/downloadDormitoryExcel",
-  //     "params"
-  //   );
-  //   console.log(res, "模板下载");
-  //   if (res.code == 200) {
-  //     window.location.href = res.data;
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
-};
-// 移出照片
-const projectImportRemove = (uploadFile, uploadFiles) => {
-  console.log(uploadFile, uploadFiles);
-  buildFile.value = "";
+// 审核状态下拉列表数据
+const passList = async () => {
+  let res = await queryPassTypes();
+  console.log(res, "审核状态下拉列表数据");
+  if (res.code == 200) {
+    passData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
 };
 };
 
 
-// 导入项目
-const projectImportConfirm = async () => {
-  buildImportLoading.value = true;
-  let data = new FormData();
-  data.set("file", buildFile.value);
-  //   let res = await https.post(
-  //     "/welcome/api/welcome-dormitory/importDormitoryExcel",
-  //     "data",
-  //     data
-  //   );
-  //   console.log(res, "导入项目");
-  //   if (res.code == 200) {
-  //     buildImportVisible.value = false;
-
-  //     buildImportLoading.value = false;
-  //     getList();
-  //     ElMessage({
-  //       type: "success",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
-};
-const cancelProjectImport = () => {
-  buildImportVisible.value = false;
-  if (buildRef.value) {
-    buildRef.value.clearFiles();
-    buildFile.value = null;
+// 信息类型下拉列表数据
+const infoTypeList = async () => {
+  let res = await queryTypes();
+  console.log(res, "信息类型下拉列表数据");
+  if (res.code == 200) {
+    infoTypeData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
-  //   getList();
-  //   schoolList();
-  //   collegeList();
+  getList();
+  passList();
+  infoTypeList();
 });
 });
 onUnmounted(() => {
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
   // document.removeEventListener("keyup", Enters);

+ 260 - 337
src/views/alumni-enterprise/alumni-enterprise.vue

@@ -11,7 +11,7 @@
             <span>企业名称 :</span>
             <span>企业名称 :</span>
             <el-input
             <el-input
               clearable
               clearable
-              v-model.trim="searchInput.name"
+              v-model.trim="searchInput.keyWord"
               class="w-50 m-2"
               class="w-50 m-2"
               placeholder="请输入企业名称"
               placeholder="请输入企业名称"
               style="width: 180px"
               style="width: 180px"
@@ -21,7 +21,7 @@
             <span>办公地址 :</span>
             <span>办公地址 :</span>
             <el-input
             <el-input
               clearable
               clearable
-              v-model.trim="searchInput.name"
+              v-model.trim="searchInput.address"
               class="w-50 m-2"
               class="w-50 m-2"
               placeholder="请输入办公地址"
               placeholder="请输入办公地址"
               style="width: 180px"
               style="width: 180px"
@@ -31,11 +31,11 @@
             <span>审核状态 :</span>
             <span>审核状态 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.college"
+              v-model="searchInput.isPass"
               placeholder="请选择审核状态"
               placeholder="请选择审核状态"
             >
             >
               <el-option
               <el-option
-                v-for="i in collegeData"
+                v-for="i in passData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -83,54 +83,110 @@
           }"
           }"
         >
         >
           <!-- <el-table-column type="selection" align="center" width="55" /> -->
           <!-- <el-table-column type="selection" align="center" width="55" /> -->
-          <el-table-column align="center" prop="school" label="企业名称" />
-          <el-table-column width="100" align="center" label="企业性质">
+          <el-table-column align="center" prop="name" label="企业名称" />
+          <el-table-column
+            width="100"
+            align="center"
+            prop="natureBusiness"
+            label="企业性质"
+          >
+          </el-table-column>
+          <el-table-column
+            align="center"
+            prop="industryInvolved"
+            label="所属行业"
+          />
+          <el-table-column align="center" prop="scale" label="企业规模" />
+          <el-table-column align="center" prop="address" label="办公地址" />
+          <el-table-column
+            align="center"
+            prop="introduction"
+            label="企业简介"
+          />
+          <el-table-column align="center" prop="logo" label="企业LOGO">
             <template #default="{ row }">
             <template #default="{ row }">
-              <span v-if="row.retentionState == 2">是</span>
-              <span v-if="row.retentionState == 1">否</span>
+              <div class="img-preview-list" v-if="row.logo">
+                <div
+                  class="img-item"
+                  style="width: 60px; height: 60px; margin: 10px 0"
+                >
+                  <img
+                    v-viewer
+                    :src="row.logo"
+                    alt="图片预览"
+                    class="preview-img"
+                  />
+                </div>
+              </div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center" prop="dormitory" label="所属行业" />
-          <el-table-column align="center" prop="sex" label="企业规模" />
-          <el-table-column align="center" prop="college" label="办公地址" />
-          <el-table-column align="center" prop="major" label="企业简介" />
-          <el-table-column align="center" prop="major" label="企业LOGO" />
-          <el-table-column align="center" prop="major" label="封面图片" />
-          <el-table-column align="center" prop="major" label="校友姓名" />
-          <el-table-column align="center" prop="major" label="联系电话" />
-          <el-table-column align="center" prop="status" label="审核状态">
+          <el-table-column align="center" prop="image" label="封面图片">
             <template #default="{ row }">
             <template #default="{ row }">
-              <span v-if="row.status == 1">满员</span>
-              <span v-if="row.status == 2">全空</span>
-              <span v-if="row.status == 3">缺额</span>
+              <div class="img-preview-list" v-if="row.image">
+                <div
+                  class="img-item"
+                  style="width: 60px; height: 60px; margin: 10px 0"
+                >
+                  <img
+                    v-viewer
+                    :src="row.image"
+                    alt="图片预览"
+                    class="preview-img"
+                  />
+                </div>
+              </div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column align="center" prop="freeBedNumber" label="审核人" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
-            prop="freeBedNumber"
-            label="审核时间"
+            prop="cooperationName"
+            label="校友姓名"
           />
           />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
+            prop="cooperationPhone"
+            label="联系电话"
+          />
+          <el-table-column align="center" prop="status" label="审核状态">
+            <template #default="{ row }">
+              <span v-if="row.statusName == '已通过'" style="color: #67c23a">{{
+                row.passName
+              }}</span>
+              <span v-if="row.statusName == '待审核'" style="color: #409eff">{{
+                row.passName
+              }}</span>
+              <span v-if="row.statusName == '已拒绝'" style="color: #f56c6c">{{
+                row.passName
+              }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="applyUserName" label="审核人" />
+          <el-table-column align="center" prop="passTime" label="审核时间" />
+          <el-table-column
+            align="center"
             label="操作"
             label="操作"
             fixed="right"
             fixed="right"
             width="200"
             width="200"
           >
           >
             <template #default="{ row }">
             <template #default="{ row }">
               <div class="options">
               <div class="options">
-                <el-button type="primary" @click="updateS(row)" link
+                <el-button type="primary" @click="infoClick(row)" link
                   >详情</el-button
                   >详情</el-button
                 >
                 >
-                <el-button type="primary" @click="updateS(row)" link
+                <el-button
+                  v-if="row.passName == '待审核'"
+                  type="primary"
+                  @click="operationPassChange(row)"
+                  link
                   >通过</el-button
                   >通过</el-button
                 >
                 >
-                <el-button type="primary" @click="updateS(row)" link
+                <el-button
+                  v-if="row.passName == '待审核'"
+                  type="danger"
+                  @click="operationRefuseChange(row)"
+                  link
                   >拒绝</el-button
                   >拒绝</el-button
                 >
                 >
-                <el-button type="danger" @click="deleteS(row)" link
-                  >删除</el-button
-                >
               </div>
               </div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
@@ -159,7 +215,7 @@
       :close-on-press-escape="false"
       :close-on-press-escape="false"
       :title="dialongTitle"
       :title="dialongTitle"
       align-center
       align-center
-      width="560"
+      width="540"
       :before-close="cancelAdd"
       :before-close="cancelAdd"
       destroy-on-close
       destroy-on-close
       draggable
       draggable
@@ -168,107 +224,22 @@
         ref="ruleFormRef"
         ref="ruleFormRef"
         :model="ruleForm"
         :model="ruleForm"
         :rules="rules"
         :rules="rules"
-        label-width="100px"
+        label-width="90px"
         class="demo-ruleForm"
         class="demo-ruleForm"
         :size="formSize"
         :size="formSize"
         label-position="right"
         label-position="right"
         status-icon
         status-icon
       >
       >
-        <el-form-item label="校区名称 :" prop="school">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            @change="schoolFormChange"
-            v-model="ruleForm.school"
-            clearable
-            placeholder="请选择校区名称"
-          >
-            <el-option
-              v-for="i in schoolData"
-              :key="i.id"
-              :label="i.school"
-              :value="`${i.school},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼栋名称 :" prop="build">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            clearable
-            v-model="ruleForm.build"
-            placeholder="请选择楼栋名称"
-            @change="buildFormChange"
-          >
-            <el-option
-              v-for="i in buildFormData"
-              :key="i.id"
-              :label="i.build"
-              :value="`${i.build},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="寝室号 :" prop="dormitory">
-          <el-input
-            clearable
-            v-model.trim="ruleForm.dormitory"
-            class="w-50 m-2"
-            placeholder="请输入寝室号"
-          />
-        </el-form-item>
-        <el-form-item label="寝室性别 :" prop="sex">
-          <el-select
-            disabled
-            v-model="ruleForm.sex"
-            placeholder="请选择寝室性别"
-          >
-            <el-option label="男" value="男" />
-            <el-option label="女" value="女" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="所属学院 :" prop="college">
-          <el-select
-            @change="collegeFormChange"
-            v-model="ruleForm.college"
-            clearable
-            multiple
-            collapse-tags
-            collapse-tags-tooltip
-            :max-collapse-tags="2"
-            placeholder="请选择所属学院"
-          >
-            <el-option
-              v-for="i in collegeData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <!-- <el-form-item label="专业 :" prop="major">
-          <el-select
-            clearable
-            v-model="ruleForm.major"
-            placeholder="请选择专业"
-          >
-            <el-option
-              v-for="i in majorFormData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item> -->
-        <el-form-item label="床位数 :" prop="bedNumber">
-          <el-input
-            v-model.trim="ruleForm.bedNumber"
-            placeholder="请输入床位数"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item label="备注 :" prop="remark">
+        <el-form-item
+          label="审批意见 :"
+          :prop="dialongTitle == '拒绝审批' ? 'passValue' : ''"
+        >
           <el-input
           <el-input
-            v-model.trim="ruleForm.remark"
-            placeholder="请输入备注"
+            v-model.trim="ruleForm.passValue"
+            placeholder="请输入审批意见"
             clearable
             clearable
+            :autosize="{ minRows: 4 }"
+            type="textarea"
           />
           />
         </el-form-item>
         </el-form-item>
         <el-form-item class="options">
         <el-form-item class="options">
@@ -284,52 +255,67 @@
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
     </el-dialog>
     </el-dialog>
-    <!-- 项目导入 -->
+    <!-- 详情 -->
     <el-dialog
     <el-dialog
       class="projectImport"
       class="projectImport"
-      v-model="buildImportVisible"
+      v-model="infoVisible"
       :close-on-click-modal="false"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       :close-on-press-escape="false"
-      title="寝室信息导入"
+      title="详情"
       align-center
       align-center
       width="600"
       width="600"
-      :before-close="cancelProjectImport"
+      :before-close="cancelInfo"
+      draggable
     >
     >
-      <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
-      <p class="down">
-        <span>寝室信息导入模板下载</span
-        ><span @click="templateDown">模板下载</span>
-      </p>
-      <el-upload
-        class="avatar-uploader"
-        action="#"
-        :auto-upload="false"
-        :on-remove="projectImportRemove"
-        :on-change="projectImportChange"
-        :before-upload="beforeAvatarProImport"
-        ref="buildRef"
-        :limit="1"
-        :on-exceed="projectImportExceed"
-      >
-        <template #trigger>
-          <el-button class="queding" type="primary">
-            &nbsp;&nbsp;导入文件&nbsp;&nbsp;
-          </el-button>
-        </template>
-      </el-upload>
-      <div class="options">
-        <el-button
-          color="rgba(9, 101, 98, 1)"
-          class="queding"
-          type="primary"
-          @click="projectImportConfirm(buildRef)"
-          :loading="buildImportLoading"
-        >
-          &nbsp;&nbsp;确认导入&nbsp;&nbsp;
-        </el-button>
-        <el-button @click="cancelProjectImport"
-          >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
-        >
+      <div style="margin-bottom: 15px">
+        <el-descriptions :column="1">
+          <el-descriptions-item label="企业名称 :">{{
+            infoData.name
+          }}</el-descriptions-item>
+          <el-descriptions-item label="企业性质 :">{{
+            infoData.natureBusiness
+          }}</el-descriptions-item>
+          <el-descriptions-item label="所属行业 :">{{
+            infoData.industryInvolved
+          }}</el-descriptions-item>
+          <el-descriptions-item label="企业规模 :">{{
+            infoData.scale
+          }}</el-descriptions-item>
+          <el-descriptions-item label="办公地址 :">{{
+            infoData.address
+          }}</el-descriptions-item>
+          <el-descriptions-item label="企业简介 :">{{
+            infoData.introduction
+          }}</el-descriptions-item>
+          <el-descriptions-item label="企业LOGO :">{{
+            infoData.logo
+          }}</el-descriptions-item>
+          <el-descriptions-item label="封面图片 :">
+            <div class="img-preview-list" v-if="infoData.image">
+              <div
+                class="img-item"
+                style="width: 60px; height: 60px; margin: 10px 0"
+              >
+                <img :src="infoData.image" alt="图片预览" class="preview-img" />
+              </div>
+            </div>
+          </el-descriptions-item>
+          <el-descriptions-item label="校友姓名 :">{{
+            infoData.cooperationName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="联系电话 :">{{
+            infoData.cooperationPhone
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核状态 :">{{
+            infoData.statusName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核人 :">{{
+            infoData.applyUserName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="审核时间 :">{{
+            infoData.passTime
+          }}</el-descriptions-item>
+        </el-descriptions>
       </div>
       </div>
     </el-dialog>
     </el-dialog>
   </div>
   </div>
@@ -352,6 +338,12 @@ import lodash from "lodash";
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 
 
+import {
+  queryWebEnterprisePage,
+  queryPassTypes,
+  toExamineEnterprise,
+} from "@/api/alumni-enterprise.js";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
@@ -363,15 +355,14 @@ const loading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
   list: [{}],
   list: [{}],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
+const passData = ref([]);
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  keyWord: "",
+  address: "",
+  isPass: "",
+  createTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -385,42 +376,16 @@ const addDialogVisible = ref(false); // 控制添加账号弹窗
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  passValue: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  passValue: [{ required: true, message: "审批意见不能为空", trigger: "blur" }],
 });
 });
 
 
-// 导入
-const buildImportVisible = ref(false);
-const buildRef = ref();
-const buildFile = ref();
-const buildImportLoading = ref(false);
-
-// 入学年
-const yearData = ref([]);
-// 学院
-const collegeData = ref([]);
-// 专业
-const majorData = ref([]);
-// 班级
-const classData = ref([]);
+const infoVisible = ref(false);
+const infoData = ref({});
 
 
 // 获取账户列表
 // 获取账户列表
 const getList = async () => {
 const getList = async () => {
@@ -428,57 +393,99 @@ const getList = async () => {
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    keyWord: searchInput.keyWord,
+    address: searchInput.address,
+    isPass: searchInput.isPass,
   };
   };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  queryWebEnterprisePage(params).then((res) => {
+    console.log(res, "校友企业分页列表数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      loading.value = false;
+    } else {
+      loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.keyWord = "";
+  searchInput.address = "";
+  searchInput.isPass = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+
+const infoClick = (row) => {
+  console.log(row);
 
 
-// 添加账号
-const addlist = () => {
-  dialongTitle.value = "新增寝室信息";
-  addDialogVisible.value = true;
-  ruleForm.school = null;
+  infoVisible.value = true;
+  infoData.value = row;
 };
 };
-// 添加账号
-const updateS = (row) => {
-  console.log(row);
-  dialongTitle.value = "编辑寝室信息";
-  addDialogVisible.value = true;
+
+const cancelInfo = () => {
+  infoVisible.value = false;
 };
 };
-const deleteS = async (row) => {
-  ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
-    confirmButtonText: "确认",
-    cancelButtonText: "取消",
-    type: "warning",
-  })
-    .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
-      };
-    })
-    .catch(() => {
-      loading.value = false;
-    });
+
+// 通过
+const operationPassChange = async (row) => {
+  dialongTitle.value = "通过审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
-// 保留
-const retainS = async (row, flag) => {
-  let data = {
-    dormitoryIds: [row.id], // 当前页
-    retentionState: flag, //保留状态 1:开放,2:保留
-  };
+// 拒绝
+const operationRefuseChange = async (row) => {
+  dialongTitle.value = "拒绝审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
 
 
-// 确认添加员工
 const submitAdd = lodash.debounce(async (formEl) => {
 const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        id: ruleForm.id,
+        isPass: dialongTitle.value == "通过审批" ? 2 : 3,
+        passValue: ruleForm.passValue,
+      };
+      let res = await toExamineEnterprise(data);
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -509,118 +516,34 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
-// 楼栋导出
-const exportbtn = async () => {
-  let params = {
-    accountId: sessionStorage.getItem("accountId"),
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
-    dormitoryId: searchInput.dormitoryId,
-    sex: searchInput.sex,
-    status: searchInput.status,
-    collegeId: searchInput.collegeId ? searchInput.collegeId : "",
-    retentionState: searchInput.retentionState,
-  };
-  //   let res = await https.getBlob(
-  //     "/welcome/api/welcome-dormitory/welcomeDormitoryExport",
-  //     "params",
-  //     params
-  //   );
-  //   console.log(res, "寝室导出");
-  //   let name = `寝室信息管理`;
-  //   var content = res;
-  //   var datas = new Blob([content]);
-  //   var downloadUrl = window.URL.createObjectURL(datas);
-  //   var anchor = document.createElement("a");
-  //   anchor.href = downloadUrl;
-  //   anchor.download = name + ".xlsx";
-  //   anchor.click();
-  //   window.URL.revokeObjectURL(datas);
-  //   ElMessage({
-  //     type: "success",
-  //     showClose: true,
-  //     message: "导出成功",
-  //     center: true,
-  //   });
-};
-// 楼栋导入 (--------------------------------------------------)
-const importBtn = () => {
-  buildImportVisible.value = true;
-};
-// 模板下载
-const templateDown = async () => {
-  //   let res = await https.get(
-  //     "/welcome/api/welcome-dormitory/downloadDormitoryExcel",
-  //     "params"
-  //   );
-  //   console.log(res, "模板下载");
-  //   if (res.code == 200) {
-  //     window.location.href = res.data;
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
-};
-// 移出照片
-const projectImportRemove = (uploadFile, uploadFiles) => {
-  console.log(uploadFile, uploadFiles);
-  buildFile.value = "";
-};
-
-// 导入项目
-const projectImportConfirm = async () => {
-  buildImportLoading.value = true;
-  let data = new FormData();
-  data.set("file", buildFile.value);
-  //   let res = await https.post(
-  //     "/welcome/api/welcome-dormitory/importDormitoryExcel",
-  //     "data",
-  //     data
-  //   );
-  //   console.log(res, "导入项目");
-  //   if (res.code == 200) {
-  //     buildImportVisible.value = false;
-
-  //     buildImportLoading.value = false;
-  //     getList();
-  //     ElMessage({
-  //       type: "success",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
-};
-const cancelProjectImport = () => {
-  buildImportVisible.value = false;
-  if (buildRef.value) {
-    buildRef.value.clearFiles();
-    buildFile.value = null;
+// 审核状态下拉列表数据
+const passList = async () => {
+  let res = await queryPassTypes();
+  console.log(res, "审核状态下拉列表数据");
+  if (res.code == 200) {
+    passData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
-  //   getList();
-  //   schoolList();
-  //   collegeList();
+  getList();
+  passList();
 });
 });
 onUnmounted(() => {
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
   // document.removeEventListener("keyup", Enters);

+ 10 - 0
src/views/alumni-info/alumni-info.vue

@@ -625,6 +625,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
     }
     }
   });
   });
 };
 };
@@ -930,6 +936,10 @@ const exportbtn = async () => {
 // 楼栋导入 (--------------------------------------------------)
 // 楼栋导入 (--------------------------------------------------)
 const importBtn = () => {
 const importBtn = () => {
   buildImportVisible.value = true;
   buildImportVisible.value = true;
+  buildFile.value = "";
+  if (buildRef.value) {
+    buildRef.value.clearFiles();
+  }
 };
 };
 // 模板下载
 // 模板下载
 const templateDown = async () => {
 const templateDown = async () => {

+ 34 - 13
src/views/alumni-new/NewsClassification.vue

@@ -4,7 +4,14 @@
       <div class="filter">
       <div class="filter">
         <div class="condition">
         <div class="condition">
           <span>分类名称 :</span>
           <span>分类名称 :</span>
-          <el-select
+          <el-input
+            clearable
+            v-model.trim="searchInput.keyword"
+            class="w-50 m-2"
+            placeholder="请输入分类名称"
+            style="width: 180px"
+          />
+          <!-- <el-select
             clearable
             clearable
             v-model="searchInput.year"
             v-model="searchInput.year"
             placeholder="请选择分类名称"
             placeholder="请选择分类名称"
@@ -15,13 +22,13 @@
               :label="i.name"
               :label="i.name"
               :value="i.id"
               :value="i.id"
             />
             />
-          </el-select>
+          </el-select> -->
         </div>
         </div>
         <div class="condition">
         <div class="condition">
           <span>创建人 :</span>
           <span>创建人 :</span>
           <el-input
           <el-input
             clearable
             clearable
-            v-model.trim="searchInput.name"
+            v-model.trim="searchInput.userName"
             class="w-50 m-2"
             class="w-50 m-2"
             placeholder="请输入创建人"
             placeholder="请输入创建人"
             style="width: 180px"
             style="width: 180px"
@@ -79,7 +86,7 @@
               </div>
               </div>
             </template>
             </template>
             <p>创建时间: {{ i.createTime }}</p>
             <p>创建时间: {{ i.createTime }}</p>
-            <p>创建人: {{ i.createUser }}</p>
+            <p>创建人: {{ i.userName }}</p>
             <template #footer>
             <template #footer>
               <div class="card-footer">
               <div class="card-footer">
                 <el-button type="primary" @click="updateS(i)" link>编辑</el-button>
                 <el-button type="primary" @click="updateS(i)" link>编辑</el-button>
@@ -196,11 +203,9 @@ const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  keyword: "",
+  userName: "",
+  createTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -229,8 +234,7 @@ const getList = async () => {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
     userName: searchInput.userName,
     userName: searchInput.userName,
-    clubId: searchInput.clubId,
-    isPass: searchInput.isPass,
+    keyword: searchInput.keyword,
   };
   };
   if (searchInput.createTime) {
   if (searchInput.createTime) {
     params.startTime = searchInput.createTime[0];
     params.startTime = searchInput.createTime[0];
@@ -244,13 +248,28 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
     }
     }
   });
   });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.keyword = "";
+  searchInput.userName = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
 
 
 // 添加账号
 // 添加账号
 const addlist = () => {
 const addlist = () => {
@@ -361,11 +380,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 const cancelProjectImport = () => {
 const cancelProjectImport = () => {

+ 187 - 41
src/views/alumni-new/NewsFocus.vue

@@ -6,7 +6,7 @@
           <span>新闻分类 :</span>
           <span>新闻分类 :</span>
           <el-select
           <el-select
             clearable
             clearable
-            v-model="searchInput.name"
+            v-model="searchInput.categoryId"
             placeholder="请选择新闻分类"
             placeholder="请选择新闻分类"
           >
           >
             <el-option
             <el-option
@@ -21,7 +21,7 @@
           <span>发布人 :</span>
           <span>发布人 :</span>
           <el-input
           <el-input
             clearable
             clearable
-            v-model.trim="searchInput.name"
+            v-model.trim="searchInput.userName"
             class="w-50 m-2"
             class="w-50 m-2"
             placeholder="请输入发布人"
             placeholder="请输入发布人"
             style="width: 180px"
             style="width: 180px"
@@ -147,7 +147,6 @@
     width="890"
     width="890"
     :before-close="cancelAdd"
     :before-close="cancelAdd"
     destroy-on-close
     destroy-on-close
-    
     draggable
     draggable
   >
   >
     <el-form
     <el-form
@@ -160,18 +159,45 @@
       label-position="right"
       label-position="right"
       status-icon
       status-icon
     >
     >
-      <el-form-item label="新闻标题 :" prop="dormitory">
+      <el-form-item label="封面图 :" prop="coverImg">
+        <div class="img-preview-list">
+          <div class="img-item" v-if="ruleForm.coverImg">
+            <img
+              v-viewer
+              :src="ruleForm.coverImg"
+              alt="图片预览"
+              class="preview-img"
+              @click="handlePreview(ruleForm.coverImg)"
+            />
+            <span class="delete-btn" @click="handleDelete(index)">
+              <el-icon><Delete /></el-icon>
+            </span>
+          </div>
+          <el-upload
+            action="#"
+            :auto-upload="false"
+            :on-change="handleFileChange"
+            :before-upload="beforeUpload"
+            class="upload-btn"
+            accept="image/*"
+          >
+            <el-icon><Plus /></el-icon>
+            <span class="upload-txt">点击上传图片</span>
+          </el-upload>
+        </div>
+      </el-form-item>
+      <el-form-item label="新闻标题 :" prop="theme">
         <el-input
         <el-input
           clearable
           clearable
-          v-model.trim="ruleForm.dormitory"
+          v-model.trim="ruleForm.theme"
           class="w-50 m-2"
           class="w-50 m-2"
           placeholder="请输入新闻标题"
           placeholder="请输入新闻标题"
         />
         />
       </el-form-item>
       </el-form-item>
-      <el-form-item label="新闻分类 :" prop="school">
+      <el-form-item label="新闻分类 :" prop="categoryId">
         <el-select
         <el-select
           @change="schoolFormChange"
           @change="schoolFormChange"
-          v-model="ruleForm.school"
+          v-model="ruleForm.categoryId"
           clearable
           clearable
           placeholder="请选择新闻分类"
           placeholder="请选择新闻分类"
         >
         >
@@ -183,7 +209,7 @@
           />
           />
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
-      <el-form-item label="新闻内容 :" prop="bedNumber">
+      <el-form-item label="新闻内容 :" prop="content">
         <!-- <el-input
         <!-- <el-input
           v-model.trim="ruleForm.bedNumber"
           v-model.trim="ruleForm.bedNumber"
           placeholder="请输入新闻内容"
           placeholder="请输入新闻内容"
@@ -272,6 +298,7 @@ import { useRouter } from "vue-router";
 import { genFileId, ElMessage, ElMessageBox } from "element-plus";
 import { genFileId, ElMessage, ElMessageBox } from "element-plus";
 import { dayjs } from "element-plus";
 import { dayjs } from "element-plus";
 import lodash from "lodash";
 import lodash from "lodash";
+import { Delete, Download, Plus, ZoomIn } from "@element-plus/icons-vue";
 
 
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
@@ -285,6 +312,7 @@ import {
   updateAlumniNews,
   updateAlumniNews,
   deleteAlumniNews,
   deleteAlumniNews,
 } from "@/api/alumni-new.js";
 } from "@/api/alumni-new.js";
+import { uploadFile } from "@/api/uploadFile";
 
 
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
@@ -297,15 +325,12 @@ const loading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
   list: [{}],
   list: [{}],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  categoryId: "",
+  userName: "",
+  createTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -320,26 +345,20 @@ const addDialogVisible = ref(false); // 控制添加账号弹窗
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  coverImg: "",
+  theme: "",
+  categoryId: "",
+  content: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  coverImg: [{ required: true, message: "封面图不能为空", trigger: "blur" }],
+  theme: [{ required: true, message: "标题不能为空", trigger: "blur" }],
+  categoryId: [
+    { required: true, message: "所属分类不能为空", trigger: "blur" },
+  ],
+  content: [{ required: true, message: "内容不能为空", trigger: "blur" }],
 });
 });
 
 
 // Tooltip 相关响应式变量
 // Tooltip 相关响应式变量
@@ -358,9 +377,8 @@ const getList = async () => {
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
+    categoryId: searchInput.categoryId,
     userName: searchInput.userName,
     userName: searchInput.userName,
-    clubId: searchInput.clubId,
-    isPass: searchInput.isPass,
   };
   };
   if (searchInput.createTime) {
   if (searchInput.createTime) {
     params.startTime = searchInput.createTime[0];
     params.startTime = searchInput.createTime[0];
@@ -374,25 +392,103 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
     }
     }
   });
   });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.categoryId = "";
+  searchInput.userName = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+
+const handleDelete = (index) => {
+  ruleForm.coverImg = "";
+};
+
+const handlePreview = (images) => {
+  // 核心:复制数组,把点击的图片移到第一位
+  // const newImages = [...images]; // 拷贝原数组,避免修改原数据
+  // const currentImg = newImages.splice(index, 1)[0]; // 取出当前点击的图片
+  // newImages.unshift(currentImg); // 放到数组开头
+  // 传给预览器,此时插件显示的第一张就是点击的图片
+  // viewerApi({
+  //   images: newImages,
+  //   zIndex: 3000,
+  // });
+};
+
+// 上传前的校验
+const beforeUpload = (file) => {
+  // 校验文件类型
+  const isImage = file.type.startsWith("image/");
+  if (!isImage) {
+    ElMessage.error("只能上传图片格式文件");
+    return false;
+  }
+  // 校验文件大小(2MB)
+  const isLt2M = file.size / 1024 / 1024 < 2;
+  if (!isLt2M) {
+    ElMessage.error("图片大小不能超过2MB");
+    return false;
+  }
+  return true;
+};
+
+// 文件选择变化时触发
+const handleFileChange = async (file, newFileList) => {
+  console.log(file);
+  let formData = new FormData();
+  formData.append("file", file.raw);
+  let res = await uploadFile(formData);
+  // console.log(res.data.fileUrl);
+  if (res.code == 200) {
+    ruleForm.coverImg = res.data.fileUrl; // 赋值给响应式fileList,页面自动刷新
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
+};
 
 
 // 添加账号
 // 添加账号
 const addlist = () => {
 const addlist = () => {
   dialongTitle.value = "发布新闻";
   dialongTitle.value = "发布新闻";
   addDialogVisible.value = true;
   addDialogVisible.value = true;
-  ruleForm.school = null;
+  ruleForm.coverImg = "";
+  ruleForm.theme = "";
+  ruleForm.categoryId = "";
+  ruleForm.content = "";
+  fatherMessage.value.data =""
+  ruleForm.id = "";
 };
 };
 // 添加账号
 // 添加账号
 const updateS = (row) => {
 const updateS = (row) => {
   console.log(row);
   console.log(row);
   dialongTitle.value = "编辑新闻";
   dialongTitle.value = "编辑新闻";
   addDialogVisible.value = true;
   addDialogVisible.value = true;
+  ruleForm.coverImg = row.coverImg;
+  ruleForm.theme = row.theme;
+  ruleForm.categoryId = `${row.categoryName},${row.categoryId}`;
+  ruleForm.content = row.content;
+  fatherMessage.value.data = row.content;
+  ruleForm.id = row.id;
 };
 };
 const deleteS = async (row) => {
 const deleteS = async (row) => {
   ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
   ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
@@ -401,10 +497,26 @@ const deleteS = async (row) => {
     type: "warning",
     type: "warning",
   })
   })
     .then(async () => {
     .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
+      let params = {
+        id: row.id,
       };
       };
+      let res = await deleteAlumniNews(params);
+      if (res.code == 200) {
+        getList();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     })
     })
     .catch(() => {
     .catch(() => {
       loading.value = false;
       loading.value = false;
@@ -416,7 +528,37 @@ const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        categoryId: ruleForm.categoryId.split(",")[1],
+        categoryName: ruleForm.categoryId.split(",")[0],
+        theme: ruleForm.theme,
+        coverImg: ruleForm.coverImg,
+        content: ruleForm.content,
+      };
+      let res = "";
+      if (dialongTitle.value == "发布新闻") {
+        res = await insertAlumniNews(data);
+      } else {
+        data.id = ruleForm.id;
+        res = await updateAlumniNews(data);
+      }
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -432,6 +574,7 @@ const handleSelectionChange = (val) => {
   // console.log(val);
   // console.log(val);
   selectIds.value = val.map((i) => i.id);
   selectIds.value = val.map((i) => i.id);
   console.log(selectIds.value);
   console.log(selectIds.value);
+  
 };
 };
 
 
 // 表格斑马纹颜色修改
 // 表格斑马纹颜色修改
@@ -447,11 +590,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList()
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList()
 };
 };
 
 
 const cancelProjectImport = () => {
 const cancelProjectImport = () => {
@@ -483,9 +628,10 @@ const fatherMessage = ref({
 });
 });
 // 富文本传过来的数据
 // 富文本传过来的数据
 const richtextClick = (data) => {
 const richtextClick = (data) => {
-  console.log(data, "富文本传过来的数据");
+  // console.log(data, "富文本传过来的数据");
   // params.value.safetyNotice = data.html;
   // params.value.safetyNotice = data.html;
-  // fatherMessage.value.data=data.html
+  fatherMessage.value.data=data.html
+  ruleForm.content = data.html;
   // accountRuleForm.contentText = data.text;
   // accountRuleForm.contentText = data.text;
 };
 };
 
 

+ 8 - 0
src/views/alumni-organization/ApplicationAudit.vue

@@ -397,6 +397,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
     }
     }
   });
   });
 };
 };
@@ -547,11 +553,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 const cancelProjectImport = () => {
 const cancelProjectImport = () => {

+ 8 - 0
src/views/alumni-organization/CategoryManage.vue

@@ -246,6 +246,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
     }
     }
   });
   });
 };
 };
@@ -374,11 +380,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 const cancelProjectImport = () => {
 const cancelProjectImport = () => {

+ 8 - 0
src/views/alumni-organization/OrganizationList.vue

@@ -496,6 +496,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
     }
     }
   });
   });
 };
 };
@@ -697,11 +703,13 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 const cancelProjectImport = () => {
 const cancelProjectImport = () => {

+ 73 - 9
src/views/alumni-square/alumni-square.vue

@@ -86,7 +86,7 @@
               <p @click="viewDetails(i)" class="content">
               <p @click="viewDetails(i)" class="content">
                 {{ i.content }}
                 {{ i.content }}
               </p>
               </p>
-              <div class="img-preview-list" style="height: 92px;">
+              <div class="img-preview-list" style="height: 92px;overflow: hidden;">
                 <div
                 <div
                   class="img-item"
                   class="img-item"
                   v-for="(url, index) in i.imageLists"
                   v-for="(url, index) in i.imageLists"
@@ -203,7 +203,7 @@
       :close-on-press-escape="false"
       :close-on-press-escape="false"
       :title="dialongTitle"
       :title="dialongTitle"
       align-center
       align-center
-      width="560"
+      width="650"
       :before-close="cancelAdd"
       :before-close="cancelAdd"
       destroy-on-close
       destroy-on-close
       draggable
       draggable
@@ -219,7 +219,7 @@
         status-icon
         status-icon
       >
       >
         <el-form-item label="组织分类 :" prop="categoryId">
         <el-form-item label="组织分类 :" prop="categoryId">
-          <el-select
+          <!-- <el-select
             v-model="ruleForm.categoryId"
             v-model="ruleForm.categoryId"
             clearable
             clearable
             placeholder="请选择组织分类"
             placeholder="请选择组织分类"
@@ -230,6 +230,23 @@
               :label="i.name"
               :label="i.name"
               :value="i.id"
               :value="i.id"
             />
             />
+          </el-select> -->
+          <el-select
+            v-model="ruleForm.categoryId"
+            filterable
+            clearable
+            remote
+            reserve-keyword
+            placeholder="请搜索或选择组织"
+            :remote-method="remoteMethod"
+            :loading="clubLoading"
+          >
+            <el-option
+              v-for="i in clubData"
+              :key="i.id"
+              :label="i.name"
+              :value="i.id"
+            />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
         <el-form-item label="内容 :" prop="content">
         <el-form-item label="内容 :" prop="content">
@@ -349,7 +366,7 @@
       :close-on-press-escape="false"
       :close-on-press-escape="false"
       title="详情"
       title="详情"
       align-center
       align-center
-      width="600"
+      width="680"
       :before-close="cancelDetails"
       :before-close="cancelDetails"
       destroy-on-close
       destroy-on-close
       draggable
       draggable
@@ -591,6 +608,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
     }
     }
   });
   });
 };
 };
@@ -686,11 +709,24 @@ const handleFileChange = async (file, newFileList) => {
   }
   }
 };
 };
 
 
-const categoryData = ref();
-const categoryList = async () => {
-  let res = await queryCategoryDatas();
+const clubData = ref();
+const clubLoading = ref(false); // 加载状态
+const pageParams = reactive({
+  pageNum: 1, // 当前页
+  pageSize: 500, // 每页条数
+  keyword: "", // 搜索关键词(可选)
+});
+// 获取组织下拉列表数据
+const clubList = async () => {
+  let params = {
+    currentPage: pageParams.pageNum,
+    pageCount: pageParams.pageSize,
+    keyword: pageParams.keyword,
+  };
+  let res = await queryCategoryDatas(params);
+  console.log(res, "获取组织下拉列表数据");
   if (res.code == 200) {
   if (res.code == 200) {
-    categoryData.value = res.data;
+    clubData.value = res.data.list;
   } else {
   } else {
     ElMessage({
     ElMessage({
       type: "error",
       type: "error",
@@ -700,6 +736,32 @@ const categoryList = async () => {
     });
     });
   }
   }
 };
 };
+const remoteMethod = (query) => {
+  console.log(query);
+  pageParams.keyword = query;
+  clubLoading.value = true;
+  clubList().then(() =>{
+    clubLoading.value = false;
+  })
+};
+// const categoryData = ref();
+// const categoryList = async () => {
+//   let params = {
+//     currentPage: 1,
+//     pageCount: 1000,
+//   }
+//   let res = await queryCategoryDatas(params);
+//   if (res.code == 200) {
+//     categoryData.value = res.data.list;
+//   } else {
+//     ElMessage({
+//       type: "error",
+//       showClose: true,
+//       message: res.message,
+//       center: true,
+//     });
+//   }
+// };
 
 
 // 搜索功能
 // 搜索功能
 const searchBtn = lodash.debounce(async () => {
 const searchBtn = lodash.debounce(async () => {
@@ -899,16 +961,18 @@ const cancelOperation = () => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList()
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList()
 };
 };
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
   getList();
   getList();
-  categoryList();
+  clubList();
   //   collegeList();
   //   collegeList();
 });
 });
 onUnmounted(() => {
 onUnmounted(() => {

+ 187 - 100
src/views/alumni-style/alumni-style.vue

@@ -11,7 +11,7 @@
             <span>姓名 :</span>
             <span>姓名 :</span>
             <el-input
             <el-input
               clearable
               clearable
-              v-model.trim="searchInput.name"
+              v-model.trim="searchInput.keyword"
               class="w-50 m-2"
               class="w-50 m-2"
               placeholder="请输入姓名"
               placeholder="请输入姓名"
               style="width: 180px"
               style="width: 180px"
@@ -57,22 +57,39 @@
       <div class="footer" v-loading="loading">
       <div class="footer" v-loading="loading">
         <div class="card_all">
         <div class="card_all">
           <el-space wrap>
           <el-space wrap>
-            <el-card style="max-width: 480px" v-for="o in 16" :key="o">
+            <el-card
+              style="max-width: 480px"
+              v-for="i in tableData.list"
+              :key="i.id"
+            >
               <template #header>
               <template #header>
                 <div class="card-header">
                 <div class="card-header">
-                  <p>创建人: 张三</p>
-                  <span>创建时间: 2026-01-06 14:26:00</span>
+                  <p> {{ i.name }}</p>
+                  <span>创建时间: {{ i.createTime }}</span>
                 </div>
                 </div>
               </template>
               </template>
               <p>
               <p>
-                北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。
-                江山如此多娇,引无数英雄竞折腰。惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。
+                {{ i.descript }}
               </p>
               </p>
+              <div class="img-preview-list" style="height: 92px">
+                <div class="img-item" style="height: 80px; margin-bottom: 10px">
+                  <img
+                    :src="i.image"
+                    alt="图片预览"
+                    class="preview-img"
+                    v-viewer
+                  />
+                </div>
+              </div>
               <template #footer>
               <template #footer>
                 <div class="card-footer">
                 <div class="card-footer">
-                  <el-button type="primary" link>编辑</el-button>
+                  <el-button @click="updateS(i)" type="primary" link
+                    >编辑</el-button
+                  >
                   <span class="line">|</span>
                   <span class="line">|</span>
-                  <el-button type="danger" link>删除</el-button>
+                  <el-button @click="deleteS(i)" type="danger" link
+                    >删除</el-button
+                  >
                 </div>
                 </div>
               </template>
               </template>
             </el-card>
             </el-card>
@@ -117,58 +134,48 @@
         label-position="right"
         label-position="right"
         status-icon
         status-icon
       >
       >
-        <el-form-item label="姓名 :" prop="dormitory">
+        <el-form-item label="姓名 :" prop="name">
           <el-input
           <el-input
             clearable
             clearable
-            v-model.trim="ruleForm.dormitory"
+            v-model.trim="ruleForm.name"
             class="w-50 m-2"
             class="w-50 m-2"
             placeholder="请输入姓名"
             placeholder="请输入姓名"
           />
           />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="个人简介 :" prop="bedNumber">
+        <el-form-item label="个人简介 :" prop="descript">
           <el-input
           <el-input
-            v-model.trim="ruleForm.bedNumber"
+            v-model.trim="ruleForm.descript"
             placeholder="请输入个人简介"
             placeholder="请输入个人简介"
             clearable
             clearable
             :autosize="{ minRows: 4 }"
             :autosize="{ minRows: 4 }"
             type="textarea"
             type="textarea"
           />
           />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="照片 :" prop="dormitory">
-          <el-upload
-            action="#"
-            list-type="picture-card"
-            :auto-upload="false"
-            :file-list="fileList"
-            :on-change="handleFileChange"
-            :before-upload="handleBeforeUpload"
-          >
-            <el-icon><Plus /></el-icon>
-
-            <template #file="{ file }">
-              <div>
-                <img
-                  class="el-upload-list__item-thumbnail"
-                  :src="file.url"
-                  alt=""
-                />
-                <span class="el-upload-list__item-actions">
-                  <span
-                    class="el-upload-list__item-preview"
-                    @click="handlePictureCardPreview(file)"
-                  >
-                    <el-icon><ZoomIn /></el-icon>
-                  </span>
-                  <span
-                    class="el-upload-list__item-delete"
-                    @click="handleRemove(file)"
-                  >
-                    <el-icon><Delete /></el-icon>
-                  </span>
-                </span>
-              </div>
-            </template>
-          </el-upload>
+        <el-form-item label="照片 :" prop="image">
+          <div class="img-preview-list">
+            <div class="img-item" v-if="ruleForm.image">
+              <img
+                v-viewer
+                :src="ruleForm.image"
+                alt="图片预览"
+                class="preview-img"
+              />
+              <span class="delete-btn" @click="handleDelete(index)">
+                <el-icon><Delete /></el-icon>
+              </span>
+            </div>
+            <el-upload
+              action="#"
+              :auto-upload="false"
+              :on-change="handleFileChange"
+              :before-upload="beforeUpload"
+              class="upload-btn"
+              accept="image/*"
+            >
+              <el-icon><Plus /></el-icon>
+              <span class="upload-txt">点击上传图片</span>
+            </el-upload>
+          </div>
         </el-form-item>
         </el-form-item>
         <el-form-item class="options">
         <el-form-item class="options">
           <el-button @click="cancelAdd">取消</el-button>
           <el-button @click="cancelAdd">取消</el-button>
@@ -253,6 +260,14 @@ import { api as viewerApi } from "v-viewer";
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 
 
+import {
+  queryEndorsePage,
+  insertEndorseData,
+  updateEndorseData,
+  deleteEndorseById,
+} from "@/api/alumni-style";
+import { uploadFile } from "@/api/uploadFile";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
@@ -264,15 +279,11 @@ const loading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
   list: [{}],
   list: [{}],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  keyword: "",
+  createTime:""
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -286,53 +297,54 @@ const addDialogVisible = ref(false); // 控制添加账号弹窗
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  name: "",
+  image: "",
+  descript: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
+  image: [{ required: true, message: "照片不能为空", trigger: "blur" }],
+  descript: [{ required: true, message: "个人简介不能为空", trigger: "blur" }],
 });
 });
 
 
-// 维护当前的文件列表
-const fileList = ref([]);
-
-// 核心:文件变化时直接覆盖
-const handleFileChange = (newFile) => {
-  // 直接用新文件替换整个列表,实现覆盖
-  fileList.value = [newFile];
-};
-
-// 上传前检查:如果已有文件,给出提示
-const handleBeforeUpload = () => {
-  if (fileList.value.length > 0) {
-    ElMessage.info("新图片将覆盖原有图片");
+// 上传前的校验
+const beforeUpload = (file) => {
+  // 校验文件类型
+  const isImage = file.type.startsWith("image/");
+  if (!isImage) {
+    ElMessage.error("只能上传图片格式文件");
+    return false;
+  }
+  // 校验文件大小(2MB)
+  const isLt2M = file.size / 1024 / 1024 < 2;
+  if (!isLt2M) {
+    ElMessage.error("图片大小不能超过2MB");
+    return false;
   }
   }
   return true;
   return true;
 };
 };
-
-const handleRemove = () => {
-  fileList.value = [];
-  console.log("删除图片");
+// 文件选择变化时触发
+const handleFileChange = async (file, newFileList) => {
+  console.log(file);
+  let formData = new FormData();
+  formData.append("file", file.raw);
+  let res = await uploadFile(formData);
+  // console.log(res.data.fileUrl);
+  if (res.code == 200) {
+    ruleForm.image = res.data.fileUrl; // 赋值给响应式fileList,页面自动刷新
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
+  }
 };
 };
-
-// 图片预览
-const handlePictureCardPreview = (file) => {
-  viewerApi({ images: fileList.value,zIndex: 2020 });
+const handleDelete = (index) => {
+  ruleForm.image = "";
 };
 };
 
 
 // 获取账户列表
 // 获取账户列表
@@ -341,20 +353,49 @@ const getList = async () => {
   let params = {
   let params = {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    keyword: searchInput.keyword,
   };
   };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  queryEndorsePage(params).then((res) => {
+    console.log(res, "校友风采分页数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      loading.value = false;
+    } else {
+      loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.keyword = "";
+  searchInput.createTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
 
 
 // 添加账号
 // 添加账号
 const addlist = () => {
 const addlist = () => {
   dialongTitle.value = "新增";
   dialongTitle.value = "新增";
   addDialogVisible.value = true;
   addDialogVisible.value = true;
-  ruleForm.school = null;
+  ruleForm.name = "";
+  ruleForm.image = "";
+  ruleForm.descript = "";
 };
 };
 // 添加账号
 // 添加账号
 const updateS = (row) => {
 const updateS = (row) => {
@@ -369,10 +410,26 @@ const deleteS = async (row) => {
     type: "warning",
     type: "warning",
   })
   })
     .then(async () => {
     .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
+      let params = {
+        id: row.id,
       };
       };
+      let res = await deleteEndorseById(params);
+      if (res.code == 200) {
+        getList();
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     })
     })
     .catch(() => {
     .catch(() => {
       loading.value = false;
       loading.value = false;
@@ -384,7 +441,35 @@ const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        name: ruleForm.name,
+        image: ruleForm.image,
+        descript: ruleForm.descript,
+      };
+      let res = "";
+      if (dialongTitle.value == "新增") {
+        res = await insertEndorseData(data);
+      } else {
+        data.id = ruleForm.id;
+        res = await updateEndorseData(data);
+      }
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -406,15 +491,17 @@ const handleSelectionChange = (val) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
-  //   getList();
+  getList();
   //   schoolList();
   //   schoolList();
   //   collegeList();
   //   collegeList();
 });
 });

+ 257 - 380
src/views/homecoming-service/homecoming-service.vue

@@ -11,7 +11,7 @@
             <span>申请人 :</span>
             <span>申请人 :</span>
             <el-input
             <el-input
               clearable
               clearable
-              v-model.trim="searchInput.name"
+              v-model.trim="searchInput.userName"
               class="w-50 m-2"
               class="w-50 m-2"
               placeholder="请输入申请人"
               placeholder="请输入申请人"
               style="width: 180px"
               style="width: 180px"
@@ -21,11 +21,11 @@
             <span>校区 :</span>
             <span>校区 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.year"
+              v-model="searchInput.schoolId"
               placeholder="请选择校区"
               placeholder="请选择校区"
             >
             >
               <el-option
               <el-option
-                v-for="i in yearData"
+                v-for="i in schoolData"
                 :key="i.id"
                 :key="i.id"
                 :label="i.name"
                 :label="i.name"
                 :value="i.id"
                 :value="i.id"
@@ -36,15 +36,12 @@
             <span>审核状态 :</span>
             <span>审核状态 :</span>
             <el-select
             <el-select
               clearable
               clearable
-              v-model="searchInput.college"
+              v-model="searchInput.isPass"
               placeholder="请选择审核状态"
               placeholder="请选择审核状态"
             >
             >
-              <el-option
-                v-for="i in collegeData"
-                :key="i.id"
-                :label="i.name"
-                :value="i.id"
-              />
+              <el-option label="待审核" :value="1" />
+              <el-option label="已通过" :value="2" />
+              <el-option label="已拒绝" :value="3" />
             </el-select>
             </el-select>
           </div>
           </div>
           <div class="condition">
           <div class="condition">
@@ -64,7 +61,7 @@
           <div class="condition">
           <div class="condition">
             <span>返校日期 :</span>
             <span>返校日期 :</span>
             <el-date-picker
             <el-date-picker
-              v-model="searchInput.createTime"
+              v-model="searchInput.rCreateTime"
               unlink-panels
               unlink-panels
               type="datetimerange"
               type="datetimerange"
               range-separator="-"
               range-separator="-"
@@ -107,32 +104,43 @@
             align="center"
             align="center"
             width="60"
             width="60"
           />
           />
-          <el-table-column align="center" prop="school" label="申请人" />
-          <el-table-column align="center" prop="dormitory" label="联系电话" />
-          <el-table-column align="center" prop="sex" label="返校日期" />
-          <el-table-column align="center" prop="college" label="离校日期" />
-          <el-table-column align="center" prop="major" label="校区" />
-          <el-table-column align="center" prop="major" label="返校事由" />
-          <el-table-column align="center" prop="bedNumber" label="事由说明" />
+          <el-table-column align="center" prop="userName" label="申请人" />
+          <el-table-column align="center" prop="phone" label="联系电话" />
+          <el-table-column align="center" prop="returnsTime" label="返校日期" />
+          <el-table-column align="center" prop="returneTime" label="离校日期" />
+          <el-table-column align="center" prop="schoolName" label="校区" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
-            prop="freeBedNumber"
-            label="是否需要停车位"
+            prop="remark"
+            show-overflow-tooltip
+            label="返校事由"
           />
           />
-          <el-table-column align="center" prop="status" label="审核状态">
-            <template #default="{ row }">
-              <span v-if="row.status == 1">满员</span>
-              <span v-if="row.status == 2">全空</span>
-              <span v-if="row.status == 3">缺额</span>
-            </template>
-          </el-table-column>
-          <el-table-column align="center" prop="freeBedNumber" label="审核人" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
+            prop="reason"
             show-overflow-tooltip
             show-overflow-tooltip
-            prop="remark"
-            label="审核时间"
+            label="事由说明"
+          />
+          <el-table-column
+            align="center"
+            prop="ifParkingSpotName"
+            label="是否需要停车位"
           />
           />
+          <el-table-column align="center" prop="passName" label="审核状态">
+            <template #default="{ row }">
+              <span v-if="row.passName == '已通过'" style="color: #67c23a">{{
+                row.passName
+              }}</span>
+              <span v-if="row.passName == '待审核'" style="color: #409eff">{{
+                row.passName
+              }}</span>
+              <span v-if="row.passName == '已拒绝'" style="color: #f56c6c">{{
+                row.passName
+              }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="applyUserName" label="审核人" />
+          <el-table-column align="center" prop="passTime" label="审核时间" />
           <el-table-column
           <el-table-column
             align="center"
             align="center"
             label="操作"
             label="操作"
@@ -140,18 +148,26 @@
             width="200"
             width="200"
           >
           >
             <template #default="{ row }">
             <template #default="{ row }">
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button type="primary" @click="infoClick(row)" link
                 >详情</el-button
                 >详情</el-button
               >
               >
-              <el-button type="primary" @click="updateS(row)" link
+              <el-button
+                v-if="row.passName == '待审核'"
+                type="primary"
+                @click="operationPassChange(row)"
+                link
                 >通过</el-button
                 >通过</el-button
               >
               >
-              <el-button type="danger" @click="deleteS(row)" link
+              <el-button
+                v-if="row.passName == '待审核'"
+                type="danger"
+                @click="operationRefuseChange(row)"
+                link
                 >拒绝</el-button
                 >拒绝</el-button
               >
               >
-              <el-button type="danger" @click="deleteS(row)" link
+              <!-- <el-button type="danger" @click="deleteS(row)" link
                 >删除</el-button
                 >删除</el-button
-              >
+              > -->
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
@@ -172,186 +188,103 @@
       </div>
       </div>
     </div>
     </div>
     <!-- 添加账号弹窗 -->
     <!-- 添加账号弹窗 -->
-    <el-dialog
-      class="addStaff"
-      v-model="addDialogVisible"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      :title="dialongTitle"
-      align-center
-      width="560"
-      :before-close="cancelAdd"
-      destroy-on-close
-      draggable
+  <el-dialog
+    class="addStaff"
+    v-model="addDialogVisible"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    :title="dialongTitle"
+    align-center
+    width="540"
+    :before-close="cancelAdd"
+    destroy-on-close
+    draggable
+  >
+    <el-form
+      ref="ruleFormRef"
+      :model="ruleForm"
+      :rules="rules"
+      label-width="90px"
+      class="demo-ruleForm"
+      :size="formSize"
+      label-position="right"
+      status-icon
     >
     >
-      <el-form
-        ref="ruleFormRef"
-        :model="ruleForm"
-        :rules="rules"
-        label-width="100px"
-        class="demo-ruleForm"
-        :size="formSize"
-        label-position="right"
-        status-icon
+      <el-form-item
+        label="审批意见 :"
+        :prop="dialongTitle == '拒绝审批' ? 'passValue' : ''"
       >
       >
-        <el-form-item label="校区名称 :" prop="school">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            @change="schoolFormChange"
-            v-model="ruleForm.school"
-            clearable
-            placeholder="请选择校区名称"
-          >
-            <el-option
-              v-for="i in schoolData"
-              :key="i.id"
-              :label="i.school"
-              :value="`${i.school},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼栋名称 :" prop="build">
-          <el-select
-            :disabled="dialongTitle == '编辑寝室信息'"
-            clearable
-            v-model="ruleForm.build"
-            placeholder="请选择楼栋名称"
-            @change="buildFormChange"
-          >
-            <el-option
-              v-for="i in buildFormData"
-              :key="i.id"
-              :label="i.build"
-              :value="`${i.build},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="寝室号 :" prop="dormitory">
-          <el-input
-            clearable
-            v-model.trim="ruleForm.dormitory"
-            class="w-50 m-2"
-            placeholder="请输入寝室号"
-          />
-        </el-form-item>
-        <el-form-item label="寝室性别 :" prop="sex">
-          <el-select
-            disabled
-            v-model="ruleForm.sex"
-            placeholder="请选择寝室性别"
-          >
-            <el-option label="男" value="男" />
-            <el-option label="女" value="女" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="所属学院 :" prop="college">
-          <el-select
-            @change="collegeFormChange"
-            v-model="ruleForm.college"
-            clearable
-            multiple
-            collapse-tags
-            collapse-tags-tooltip
-            :max-collapse-tags="2"
-            placeholder="请选择所属学院"
-          >
-            <el-option
-              v-for="i in collegeData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item>
-        <!-- <el-form-item label="专业 :" prop="major">
-          <el-select
-            clearable
-            v-model="ruleForm.major"
-            placeholder="请选择专业"
-          >
-            <el-option
-              v-for="i in majorFormData"
-              :key="i.id"
-              :label="i.name"
-              :value="`${i.name},${i.id}`"
-            />
-          </el-select>
-        </el-form-item> -->
-        <el-form-item label="床位数 :" prop="bedNumber">
-          <el-input
-            v-model.trim="ruleForm.bedNumber"
-            placeholder="请输入床位数"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item label="备注 :" prop="remark">
-          <el-input
-            v-model.trim="ruleForm.remark"
-            placeholder="请输入备注"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item class="options">
-          <el-button @click="cancelAdd">取消</el-button>
-          <el-button
-            color="rgba(0, 97, 255, 1)"
-            class="queding"
-            type="primary"
-            @click="submitAdd(ruleFormRef)"
-          >
-            确定
-          </el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-    <!-- 项目导入 -->
-    <el-dialog
-      class="projectImport"
-      v-model="buildImportVisible"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      title="寝室信息导入"
-      align-center
-      width="600"
-      :before-close="cancelProjectImport"
-    >
-      <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
-      <p class="down">
-        <span>寝室信息导入模板下载</span
-        ><span @click="templateDown">模板下载</span>
-      </p>
-      <el-upload
-        class="avatar-uploader"
-        action="#"
-        :auto-upload="false"
-        :on-remove="projectImportRemove"
-        :on-change="projectImportChange"
-        :before-upload="beforeAvatarProImport"
-        ref="buildRef"
-        :limit="1"
-        :on-exceed="projectImportExceed"
-      >
-        <template #trigger>
-          <el-button class="queding" type="primary">
-            &nbsp;&nbsp;导入文件&nbsp;&nbsp;
-          </el-button>
-        </template>
-      </el-upload>
-      <div class="options">
+        <el-input
+          v-model.trim="ruleForm.passValue"
+          placeholder="请输入审批意见"
+          clearable
+          :autosize="{ minRows: 4 }"
+          type="textarea"
+        />
+      </el-form-item>
+      <el-form-item class="options">
+        <el-button @click="cancelAdd">取消</el-button>
         <el-button
         <el-button
-          color="rgba(9, 101, 98, 1)"
+          color="rgba(0, 97, 255, 1)"
           class="queding"
           class="queding"
           type="primary"
           type="primary"
-          @click="projectImportConfirm(buildRef)"
-          :loading="buildImportLoading"
+          @click="submitAdd(ruleFormRef)"
         >
         >
-          &nbsp;&nbsp;确认导入&nbsp;&nbsp;
+          确定
         </el-button>
         </el-button>
-        <el-button @click="cancelProjectImport"
-          >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
-        >
-      </div>
-    </el-dialog>
+      </el-form-item>
+    </el-form>
+  </el-dialog>
+  <!-- 详情 -->
+  <el-dialog
+    class="projectImport"
+    v-model="infoVisible"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    title="详情"
+    align-center
+    width="600"
+    :before-close="cancelInfo"
+    draggable
+  >
+    <div style="margin-bottom: 15px">
+      <el-descriptions :column="1">
+        <el-descriptions-item label="申请人 :">{{
+          infoData.userName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="联系电话 :">{{
+          infoData.phone
+        }}</el-descriptions-item>
+        <el-descriptions-item label="返校日期 :">{{
+          infoData.returnsTime
+        }}</el-descriptions-item>
+        <el-descriptions-item label="离校日期 :">{{
+          infoData.returneTime
+        }}</el-descriptions-item>
+        <el-descriptions-item label="校区 :">{{
+          infoData.schoolName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="返校事由 :">{{
+          infoData.remark
+        }}</el-descriptions-item>
+        <el-descriptions-item label="事由说明 :">{{
+          infoData.reason
+        }}</el-descriptions-item>
+        <el-descriptions-item label="是否需要停车位 :">{{
+          infoData.ifParkingSpotName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="审核状态 :">{{
+          infoData.passName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="审核人 :">{{
+          infoData.applyUserName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="审核时间 :">{{
+          infoData.passTime
+        }}</el-descriptions-item>
+      </el-descriptions>
+    </div>
+  </el-dialog>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -372,6 +305,12 @@ import lodash from "lodash";
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
 
 
+import {
+  returnPages,
+  toExamineReturn,
+  querySchools,
+} from "@/api/homecoming-service.js";
+
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
 
 
@@ -383,15 +322,14 @@ const loading = ref(false);
 const tableData = reactive({
 const tableData = reactive({
   list: [{}],
   list: [{}],
 });
 });
-const activeIndex = ref(); // 默认跳转路由
 const dialongTitle = ref("新增账号"); // 弹窗标题
 const dialongTitle = ref("新增账号"); // 弹窗标题
 
 
 const searchInput = reactive({
 const searchInput = reactive({
-  name: "",
-  year: null,
-  college: null,
-  major: null,
-  class: null,
+  userName: "",
+  schoolId: "",
+  isPass: "",
+  createTime: "",
+  rCreateTime: "",
 }); // 搜索按钮数据
 }); // 搜索按钮数据
 
 
 const currentPage = ref(1); // 当前页
 const currentPage = ref(1); // 当前页
@@ -399,48 +337,24 @@ const pageSize = ref(10);
 const total = ref(0); // 当前总数
 const total = ref(0); // 当前总数
 const selectIds = ref([]); // 勾选的全部数据
 const selectIds = ref([]); // 勾选的全部数据
 
 
+const schoolData=ref([]) //校区数据
+
 const addDialogVisible = ref(false); // 控制添加账号弹窗
 const addDialogVisible = ref(false); // 控制添加账号弹窗
 
 
 // 表单数据
 // 表单数据
 const formSize = ref("default");
 const formSize = ref("default");
 const ruleFormRef = ref();
 const ruleFormRef = ref();
 const ruleForm = reactive({
 const ruleForm = reactive({
-  school: "靖安校区", //校区名称
-  build: "", //楼栋名称
-  dormitory: "", //寝室号
-  sex: "男", //寝室性别
-  college: "", //所属学院
-  major: "", //所属专业
-  bedNumber: "", //床位数
-  // "gradestr": "",              //所属年级
-  remark: "", //备注
+  passValue: "",
   id: "",
   id: "",
 });
 });
 // 表单验证
 // 表单验证
 const rules = reactive({
 const rules = reactive({
-  school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
-  build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
-  dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
-  sex: [{ required: true, message: "寝室性别不能为空", trigger: "blur" }],
-  college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
-  major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
-  bedNumber: [{ required: true, message: "床位数不能为空", trigger: "blur" }],
+  passValue: [{ required: true, message: "审批意见不能为空", trigger: "blur" }],
 });
 });
 
 
-// 导入
-const buildImportVisible = ref(false);
-const buildRef = ref();
-const buildFile = ref();
-const buildImportLoading = ref(false);
-
-// 入学年
-const yearData = ref([]);
-// 学院
-const collegeData = ref([]);
-// 专业
-const majorData = ref([]);
-// 班级
-const classData = ref([]);
+const infoVisible = ref(false);
+const infoData = ref({});
 
 
 // 获取账户列表
 // 获取账户列表
 const getList = async () => {
 const getList = async () => {
@@ -449,56 +363,103 @@ const getList = async () => {
     currentPage: currentPage.value, // 当前页
     currentPage: currentPage.value, // 当前页
     pageCount: pageSize.value, // 一页数据条数
     pageCount: pageSize.value, // 一页数据条数
     schoolId: searchInput.schoolId,
     schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
+    userName: searchInput.userName,
+    isPass: searchInput.isPass,
   };
   };
+  if (searchInput.createTime) {
+    params.startTime = searchInput.createTime[0];
+    params.endTime = searchInput.createTime[1];
+  }
+  if (searchInput.rCreateTime) {
+    params.rstartTime = searchInput.rCreateTime[0];
+    params.rendTime = searchInput.rCreateTime[1];
+  }
+  returnPages(params).then((res) => {
+    console.log(res, "获取新闻分页数据");
+    if (res.code == 200) {
+      tableData.list = res.data.list;
+      total.value = res.data.totalCount;
+      loading.value = false;
+    } else {
+      loading.value = false;
+      ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+    }
+  });
 };
 };
 
 
 // 搜索功能
 // 搜索功能
-const searchBtn = lodash.debounce(async () => {}, 300);
-const resetBtn = lodash.debounce(async () => {}, 300);
+const searchBtn = lodash.debounce(async () => {
+  currentPage.value = 1;
+  getList();
+}, 300);
+const resetBtn = lodash.debounce(async () => {
+  searchInput.isPass = "";
+  searchInput.schoolId = "";
+  searchInput.userName = "";
+  searchInput.createTime = "";
+  searchInput.rCreateTime = "";
+  currentPage.value = 1;
+  getList();
+}, 300);
+
+const infoClick = (row) => {
+  console.log(row);
 
 
-// 添加账号
-const addlist = () => {
-  dialongTitle.value = "新增寝室信息";
-  addDialogVisible.value = true;
-  ruleForm.school = null;
+  infoVisible.value = true;
+  infoData.value = row;
 };
 };
-// 添加账号
-const updateS = (row) => {
-  console.log(row);
-  dialongTitle.value = "编辑寝室信息";
-  addDialogVisible.value = true;
+
+const cancelInfo = () => {
+  infoVisible.value = false;
 };
 };
-const deleteS = async (row) => {
-  ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
-    confirmButtonText: "确认",
-    cancelButtonText: "取消",
-    type: "warning",
-  })
-    .then(async () => {
-      loading.value = true;
-      let data = {
-        dormitoryId: row.id, // 当前页
-      };
-    })
-    .catch(() => {
-      loading.value = false;
-    });
+
+// 通过
+const operationPassChange = async (row) => {
+  dialongTitle.value = "通过审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
-// 保留
-const retainS = async (row, flag) => {
-  let data = {
-    dormitoryIds: [row.id], // 当前页
-    retentionState: flag, //保留状态 1:开放,2:保留
-  };
+// 拒绝
+const operationRefuseChange = async (row) => {
+  dialongTitle.value = "拒绝审批";
+  addDialogVisible.value = true;
+  ruleForm.passValue = null;
+  ruleForm.id = row.id;
 };
 };
 
 
-// 确认添加员工
 const submitAdd = lodash.debounce(async (formEl) => {
 const submitAdd = lodash.debounce(async (formEl) => {
   if (!formEl) return;
   if (!formEl) return;
   await formEl.validate(async (valid, fields) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
     if (valid) {
-      console.log(data);
+      let data = {
+        id: ruleForm.id,
+        isPass: dialongTitle.value == "通过审批" ? 2 : 3,
+        passValue: ruleForm.passValue,
+      };
+      let res = await toExamineReturn(data);
+      if (res.code == 200) {
+        addDialogVisible.value = false;
+        ElMessage({
+          type: "success",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+        getList();
+      } else {
+        ElMessage({
+          type: "error",
+          showClose: true,
+          message: res.message,
+          center: true,
+        });
+      }
     } else {
     } else {
       console.log("error submit!", fields);
       console.log("error submit!", fields);
     }
     }
@@ -529,117 +490,33 @@ const tableRowClassName = ({ row, rowIndex }) => {
 const handleSizeChange = (value) => {
 const handleSizeChange = (value) => {
   console.log(value, "每页显示条数");
   console.log(value, "每页显示条数");
   pageSize.value = value;
   pageSize.value = value;
+  getList();
 };
 };
 // 分页
 // 分页
 const handleCurrentChange = (value) => {
 const handleCurrentChange = (value) => {
   // console.log(value);
   // console.log(value);
   currentPage.value = value;
   currentPage.value = value;
+  getList();
 };
 };
 
 
-// 楼栋导出
-const exportbtn = async () => {
-  let params = {
-    accountId: sessionStorage.getItem("accountId"),
-    schoolId: searchInput.schoolId,
-    buildId: searchInput.buildId,
-    dormitoryId: searchInput.dormitoryId,
-    sex: searchInput.sex,
-    status: searchInput.status,
-    collegeId: searchInput.collegeId ? searchInput.collegeId : "",
-    retentionState: searchInput.retentionState,
-  };
-  //   let res = await https.getBlob(
-  //     "/welcome/api/welcome-dormitory/welcomeDormitoryExport",
-  //     "params",
-  //     params
-  //   );
-  //   console.log(res, "寝室导出");
-  //   let name = `寝室信息管理`;
-  //   var content = res;
-  //   var datas = new Blob([content]);
-  //   var downloadUrl = window.URL.createObjectURL(datas);
-  //   var anchor = document.createElement("a");
-  //   anchor.href = downloadUrl;
-  //   anchor.download = name + ".xlsx";
-  //   anchor.click();
-  //   window.URL.revokeObjectURL(datas);
-  //   ElMessage({
-  //     type: "success",
-  //     showClose: true,
-  //     message: "导出成功",
-  //     center: true,
-  //   });
-};
-// 楼栋导入 (--------------------------------------------------)
-const importBtn = () => {
-  buildImportVisible.value = true;
-};
-// 模板下载
-const templateDown = async () => {
-  //   let res = await https.get(
-  //     "/welcome/api/welcome-dormitory/downloadDormitoryExcel",
-  //     "params"
-  //   );
-  //   console.log(res, "模板下载");
-  //   if (res.code == 200) {
-  //     window.location.href = res.data;
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
-};
-// 移出照片
-const projectImportRemove = (uploadFile, uploadFiles) => {
-  console.log(uploadFile, uploadFiles);
-  buildFile.value = "";
-};
-
-// 导入项目
-const projectImportConfirm = async () => {
-  buildImportLoading.value = true;
-  let data = new FormData();
-  data.set("file", buildFile.value);
-  //   let res = await https.post(
-  //     "/welcome/api/welcome-dormitory/importDormitoryExcel",
-  //     "data",
-  //     data
-  //   );
-  //   console.log(res, "导入项目");
-  //   if (res.code == 200) {
-  //     buildImportVisible.value = false;
-
-  //     buildImportLoading.value = false;
-  //     getList();
-  //     ElMessage({
-  //       type: "success",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   } else {
-  //     ElMessage({
-  //       type: "error",
-  //       showClose: true,
-  //       message: res.message,
-  //       center: true,
-  //     });
-  //   }
-};
-const cancelProjectImport = () => {
-  buildImportVisible.value = false;
-  if (buildRef.value) {
-    buildRef.value.clearFiles();
-    buildFile.value = null;
+const schoolList = async () => {
+  let res = await querySchools();
+  // console.log(res, "相册分类下拉列表数据");
+  if (res.code == 200) {
+    schoolData.value = res.data;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
-  //   getList();
-  //   schoolList();
+  getList();
+    schoolList();
   //   collegeList();
   //   collegeList();
 });
 });
 onUnmounted(() => {
 onUnmounted(() => {

+ 32 - 9
src/views/permission/Account.vue

@@ -80,7 +80,12 @@
         <!-- <el-table-column type="selection" align="center" width="55" /> -->
         <!-- <el-table-column type="selection" align="center" width="55" /> -->
         <el-table-column type="index" align="center" label="序号" width="60" />
         <el-table-column type="index" align="center" label="序号" width="60" />
         <el-table-column align="center" prop="account" label="账号" />
         <el-table-column align="center" prop="account" label="账号" />
-        <el-table-column width="100" align="center" prop="roleName" label="角色">
+        <el-table-column
+          width="100"
+          align="center"
+          prop="roleName"
+          label="角色"
+        >
         </el-table-column>
         </el-table-column>
         <el-table-column
         <el-table-column
           show-overflow-tooltip
           show-overflow-tooltip
@@ -148,7 +153,7 @@
       label-position="right"
       label-position="right"
       status-icon
       status-icon
     >
     >
-    <el-form-item label="微校卡号 :" prop="cardNumber">
+      <el-form-item label="微校卡号 :" prop="cardNumber">
         <el-input
         <el-input
           clearable
           clearable
           v-model.trim="ruleForm.cardNumber"
           v-model.trim="ruleForm.cardNumber"
@@ -240,7 +245,14 @@ import lodash from "lodash";
 
 
 import { storeToRefs } from "pinia";
 import { storeToRefs } from "pinia";
 import { useCounterStore } from "@/stores/index";
 import { useCounterStore } from "@/stores/index";
-import { getQueryAccountPage, getAllStatus, getAllRole,editAccount,addAccount,deleteAccount } from "@/api/account";
+import {
+  getQueryAccountPage,
+  getAllStatus,
+  getAllRole,
+  editAccount,
+  addAccount,
+  deleteAccount,
+} from "@/api/account";
 
 
 const router = useRouter();
 const router = useRouter();
 const store = useCounterStore();
 const store = useCounterStore();
@@ -276,7 +288,7 @@ const ruleForm = reactive({
   name: "",
   name: "",
   account: "",
   account: "",
   password: "",
   password: "",
-  cardNumber:"",
+  cardNumber: "",
   phone: "",
   phone: "",
   roleId: "",
   roleId: "",
   stateId: "",
   stateId: "",
@@ -286,16 +298,21 @@ const ruleForm = reactive({
 const rules = reactive({
 const rules = reactive({
   name: [{ required: true, message: "真实姓名不能为空", trigger: "blur" }],
   name: [{ required: true, message: "真实姓名不能为空", trigger: "blur" }],
   account: [{ required: true, message: "账号不能为空", trigger: "blur" }],
   account: [{ required: true, message: "账号不能为空", trigger: "blur" }],
-  password: [{ required: true, message: "密码不能为空", trigger: "blur" },{
+  password: [
+    { required: true, message: "密码不能为空", trigger: "blur" },
+    {
       min: 8,
       min: 8,
       max: 20,
       max: 20,
       pattern:
       pattern:
         /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\._\+(){}])[0-9a-zA-Z!@#$%^&*,\\._\+(){}]{8,20}$/,
         /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\._\+(){}])[0-9a-zA-Z!@#$%^&*,\\._\+(){}]{8,20}$/,
       message: "请输入8-20位正确密码(大小写字母·字符·数字)",
       message: "请输入8-20位正确密码(大小写字母·字符·数字)",
       trigger: "blur",
       trigger: "blur",
-    },],
+    },
+  ],
   phone: [{ required: true, message: "联系方式不能为空", trigger: "blur" }],
   phone: [{ required: true, message: "联系方式不能为空", trigger: "blur" }],
-  cardNumber: [{ required: true, message: "微校卡号不能为空", trigger: "blur" }],
+  cardNumber: [
+    { required: true, message: "微校卡号不能为空", trigger: "blur" },
+  ],
   roleId: [{ required: true, message: "角色不能为空", trigger: "blur" }],
   roleId: [{ required: true, message: "角色不能为空", trigger: "blur" }],
   stateId: [{ required: true, message: "状态不能为空", trigger: "blur" }],
   stateId: [{ required: true, message: "状态不能为空", trigger: "blur" }],
 });
 });
@@ -318,6 +335,12 @@ const getList = async () => {
       loading.value = false;
       loading.value = false;
     } else {
     } else {
       loading.value = false;
       loading.value = false;
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.message,
+        center: true,
+      });
     }
     }
   });
   });
 };
 };
@@ -401,7 +424,7 @@ const deleteS = async (row) => {
       };
       };
       let res = await deleteAccount(params);
       let res = await deleteAccount(params);
       if (res.code == 200) {
       if (res.code == 200) {
-        getList()
+        getList();
         ElMessage({
         ElMessage({
           type: "success",
           type: "success",
           showClose: true,
           showClose: true,
@@ -434,7 +457,7 @@ const submitAdd = lodash.debounce(async (formEl) => {
         phone: ruleForm.phone,
         phone: ruleForm.phone,
         roleId: ruleForm.roleId,
         roleId: ruleForm.roleId,
         stateId: ruleForm.stateId,
         stateId: ruleForm.stateId,
-        cardNumber:ruleForm.cardNumber,
+        cardNumber: ruleForm.cardNumber,
       };
       };
       let res = "";
       let res = "";
       if (dialongTitle.value == "新增账号") {
       if (dialongTitle.value == "新增账号") {

+ 11 - 5
src/views/permission/Role.vue

@@ -223,7 +223,7 @@
                 <div>
                 <div>
                   <span>组织城市 : </span>
                   <span>组织城市 : </span>
                   <el-select
                   <el-select
-                  clearable
+                    clearable
                     v-model="i.provinces"
                     v-model="i.provinces"
                     placeholder="请选择省"
                     placeholder="请选择省"
                     style="width: 140px"
                     style="width: 140px"
@@ -238,7 +238,7 @@
                   </el-select>
                   </el-select>
                   <span> - </span>
                   <span> - </span>
                   <el-select
                   <el-select
-                  clearable
+                    clearable
                     v-model="i.citys"
                     v-model="i.citys"
                     placeholder="请选择市"
                     placeholder="请选择市"
                     style="width: 140px"
                     style="width: 140px"
@@ -438,7 +438,7 @@
                 <div>
                 <div>
                   <span>组织城市 : </span>
                   <span>组织城市 : </span>
                   <el-select
                   <el-select
-                  clearable
+                    clearable
                     v-model="i.provinces"
                     v-model="i.provinces"
                     placeholder="请选择省"
                     placeholder="请选择省"
                     style="width: 140px"
                     style="width: 140px"
@@ -453,7 +453,7 @@
                   </el-select>
                   </el-select>
                   <span> - </span>
                   <span> - </span>
                   <el-select
                   <el-select
-                  clearable
+                    clearable
                     v-model="i.citys"
                     v-model="i.citys"
                     placeholder="请选择市"
                     placeholder="请选择市"
                     style="width: 140px"
                     style="width: 140px"
@@ -1361,6 +1361,12 @@ const getList = async () => {
     loading.value = false;
     loading.value = false;
   } else {
   } else {
     loading.value = false;
     loading.value = false;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.message,
+      center: true,
+    });
   }
   }
 };
 };
 
 
@@ -1461,7 +1467,7 @@ const deleteS = async (row) => {
       };
       };
       let res = await deleteRole(params);
       let res = await deleteRole(params);
       if (res.code == 200) {
       if (res.code == 200) {
-        getList()
+        getList();
         ElMessage({
         ElMessage({
           type: "success",
           type: "success",
           showClose: true,
           showClose: true,