Преглед на файлове

feat(school): 新增学校信息和培训公告功能

- 添加学校信息和培训公告的数据结构和 API 调用
- 实现学校信息和培训公告的展示逻辑
- 增加拨打电话和分享公告的功能
- 优化页面布局和样式
wzg преди 8 месеца
родител
ревизия
6c401eb37b
променени са 3 файла, в които са добавени 108 реда и са изтрити 20 реда
  1. 84 8
      miniprogram/pages/school/school.js
  2. 17 12
      miniprogram/pages/school/school.wxml
  3. 7 0
      project.private.config.json

+ 84 - 8
miniprogram/pages/school/school.js

@@ -1,17 +1,36 @@
 // pages/school/school.js
+import { getApi, postApi } from "../../apis/api";
 Page({
   /**
    * 页面的初始数据
    */
   data: {
     school: {
-      name: "新蔡海员培训学校",
-      photoUrl: "../../images/new-version/pic.png",
-      introduction:
-        "新蔡海员培训学校成立于2000年,是一所专业从事海员培训的现代化职业培训机构。学校配备先进的船舶模拟器、专业的实训设备和经验丰富的教师团队。我们开设了船员适任证培训、特殊培训、船员继续教育等多个培训项目,致力于为航运业培养高素质的专业人才。多年以来,我们已培养了数千名优秀船员,在业内享有良好声誉。学校坚持'安全第一、质量至上'的教学理念,不断提升教学质量和服务水平,为学员提供优质的学习环境和完善的就业服务。",
-      area: "2000平方米",
-      graduatesCount: "500人",
+      id: 1,
+      crewSchoolName: "新蔡海员培训学校",
+      crewSchoolImgFileKey:
+        "new/crew_school/2cd3fd6c-0de4-400c-a847-d7fa07ddd6d31746529627175.png",
+      crewSchoolImgUrl:
+        "https://hhd-shipping-1255802371.cos.ap-shanghai.myqcloud.com/new/crew_school/2cd3fd6c-0de4-400c-a847-d7fa07ddd6d31746529627175.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKID4xb091cy4tRikV0EBrGOGsCF1WkhMlum%26q-sign-time%3D1746529628%3B93158697600%26q-key-time%3D1746529628%3B93158697600%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D659f4bedef396f033e75d39425a4fe00f93dca3c",
+      crewSchoolIntroduce: "新蔡海员",
+      crewSchoolSiteSize: 2000,
+      crewSchoolAnnualGraduationNum: 500,
+      createTime: "2024/02/01 00:00:00",
     },
+    noticeList: [
+      {
+        id: 3,
+        crewSchoolId: 1,
+        trainingNoticeTitle: "测试公告",
+        trainingNoticeImgFileKey:
+          "new/crew_school_training_notice/31c56330-3e68-4204-860b-87925b0f24dd1746495769145.png",
+        trainingNoticeImgUrl:
+          "https://hhd-shipping-1255802371.cos.ap-shanghai.myqcloud.com/new/crew_school_training_notice/31c56330-3e68-4204-860b-87925b0f24dd1746495769145.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKID4xb091cy4tRikV0EBrGOGsCF1WkhMlum%26q-sign-time%3D1746495776%3B93158697600%26q-key-time%3D1746495776%3B93158697600%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D53284698ccdc5d1cbafe36965c22375effbc3e84",
+        trainingNoticeContent: "测试内容",
+        postedBy: "汇很多",
+        createTime: "2025/04/25 14:42:23",
+      },
+    ],
     notice: {
       title: "海员培训课程将在2025年3月10-15日期间在新蔡学员举办",
       author: "汇很多",
@@ -25,7 +44,9 @@ Page({
   /**
    * 生命周期函数--监听页面加载
    */
-  onLoad(options) {},
+  onLoad(options) {
+    this.getSchoolInfo();
+  },
 
   /**
    * 生命周期函数--监听页面初次渲染完成
@@ -66,5 +87,60 @@ Page({
   /**
    * 用户点击右上角分享
    */
-  onShareAppMessage() {},
+  onShareAppMessage(res) {
+    if (res.from === "button") {
+      const title = res.target.dataset.title || "海员培训学校通知";
+      return {
+        title: title,
+        path: "/pages/school/school",
+      };
+    }
+    return {
+      title: "海员培训学校通知",
+      path: "/pages/school/school",
+    };
+  },
+
+  makePhoneCall(e) {
+    const phone = e.currentTarget.dataset.phone;
+    if (phone) {
+      wx.makePhoneCall({
+        phoneNumber: phone,
+      });
+    } else {
+      wx.showToast({
+        title: "电话号码不存在",
+        icon: "none",
+      });
+    }
+  },
+  async getSchoolTrainingNoticeList() {
+    let { data } = await postApi("/crew/school/training/notices", {
+      currentPage: 1,
+      size: 1000,
+      crewSchoolId: this.data.school.id,
+    });
+    if (data.status === 0) {
+      this.setData({
+        noticeList: data.result,
+      });
+    } else {
+      this.setData({
+        noticeList: [],
+      });
+    }
+  },
+  async getSchoolInfo() {
+    let { data } = await getApi("/crew/school/info", {});
+    if (data.status === 0) {
+      this.setData({
+        school: data.result,
+      });
+      this.getSchoolTrainingNoticeList();
+    } else {
+      this.setData({
+        school: {},
+      });
+    }
+  },
 });

+ 17 - 12
miniprogram/pages/school/school.wxml

@@ -5,12 +5,12 @@
   <view class="content">
     <!-- 学校基本信息 -->
     <view class="card">
-      <view class="card-header">{{school.name}}</view>
+      <view class="card-header">{{school.crewSchoolName}}</view>
       <view class="card-content">
         <view class="school-info">
-          <image class="school-photo" mode="aspectFill" src="{{school.photoUrl}}"></image>
+          <image class="school-photo" mode="aspectFill" src="{{school.crewSchoolImgUrl}}"></image>
           <view class="info-item">
-            <text class="intro-text">{{school.introduction}}</text>
+            <text class="intro-text">{{school.crewSchoolIntroduce}}</text>
           </view>
         </view>
       </view>
@@ -21,31 +21,36 @@
       <view class="card-content">
         <view class="operation-data">
           <view class="data-item">
-            <text class="data-value">{{school.area}}</text>
+            <text class="data-value">{{school.crewSchoolSiteSize}}㎡</text>
             <text class="data-label">场地规模</text>
           </view>
           <view class="data-item">
-            <text class="data-value">{{school.graduatesCount}}</text>
+            <text class="data-value">{{school.crewSchoolAnnualGraduationNum}}人</text>
             <text class="data-label">年结业人数</text>
           </view>
         </view>
       </view>
     </view>
     <!-- 培训公告 -->
-    <view class="card">
+    <view class="card" wx:for="{{noticeList}}" wx:key="id">
       <view class="card-header">培训公告</view>
       <view class="card-content">
         <view class="notice-info">
-          <view class="notice-title">{{notice.title}}</view>
+          <view class="notice-title">{{item.trainingNoticeTitle}}</view>
           <view class="notice-meta">
-            <text class="notice-author">{{notice.author}}</text>
-            <text class="notice-date">{{notice.date}}</text>
+            <text class="notice-author">{{item.postedBy}}</text>
+            <text class="notice-date">{{item.createTime}}</text>
           </view>
-          <image class="notice-photo" mode="aspectFill" src="{{notice.photoUrl}}"></image>
+          <image class="notice-photo" mode="aspectFill" src="{{item.trainingNoticeImgUrl}}"></image>
           <view class="notice-content">
-            <text>{{notice.content}}</text>
+            <text>{{item.trainingNoticeContent}}</text>
           </view>
-          <button class="share-btn" open-type="share">分享公告</button>
+          <!-- <button class="contact-btn" bindtap="makePhoneCall" data-id="{{item.id}}" data-phone="{{item.contactPhone}}">
+            拨打电话
+          </button> -->
+          <button class="share-btn" open-type="share" data-title="{{item.trainingNoticeTitle}}">
+            分享公告
+          </button>
         </view>
       </view>
     </view>

+ 7 - 0
project.private.config.json

@@ -2,6 +2,13 @@
   "condition": {
     "miniprogram": {
       "list": [
+        {
+          "name": "pages/school/school",
+          "pathName": "pages/school/school",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
         {
           "name": "pages/shipyard/shipyard",
           "pathName": "pages/shipyard/shipyard",