hku-class/miniprogram/pages/module/index.wxml
2026-05-16 23:59:13 +08:00

129 lines
6.2 KiB
Plaintext

<view class="page">
<view class="hero">
<view class="eyebrow">MODULE</view>
<view class="hero-title">{{title}}</view>
<view class="hero-subtitle">当前内容来自已开放的班级模块,关闭后会自动隐藏入口。</view>
</view>
<view wx:if="{{isFund && fundStats}}" class="section">
<view class="section-head">
<view class="section-title">班费汇总</view>
</view>
<view class="fund-summary">
<view class="fund-summary-item">
<view class="fund-label">收入</view>
<view class="fund-number income">¥{{fundStats.total_income_text}}</view>
</view>
<view class="fund-summary-item">
<view class="fund-label">支出</view>
<view class="fund-number expense">¥{{fundStats.total_expense_text}}</view>
</view>
<view class="fund-summary-item strong">
<view class="fund-label">结余</view>
<view class="fund-number">¥{{fundStats.balance_text}}</view>
</view>
</view>
</view>
<view class="section">
<view wx:if="{{isFund}}" class="section-head">
<view class="section-title">班费明细</view>
</view>
<view wx:if="{{isDirectory && directoryStats}}" class="section-head directory-summary">
<view class="section-title">同学 {{directoryStats.student_count}} 人 · 老师 {{directoryStats.teacher_count}} 人</view>
</view>
<view wx:for="{{items}}" wx:key="id" class="card" data-id="{{item.id || item.user_id}}" bindtap="openItem">
<view wx:if="{{isTimeline}}" class="feed-card">
<view class="feed-head">
<view class="row-mark">动</view>
<view class="row-body">
<view class="card-title">{{item.title}}</view>
<view class="muted">{{item.author_name}} · {{item.created_at}}</view>
</view>
<view wx:if="{{item.can_delete}}" class="more-dot" data-id="{{item.id}}" catchtap="openTimelineActions">···</view>
</view>
<view wx:if="{{item.content}}" class="feed-content">{{item.content}}</view>
<view wx:if="{{item.image_urls && item.image_urls.length}}" class="feed-images">
<image wx:for="{{item.image_urls}}" wx:for-item="img" wx:key="*this" src="{{img}}" mode="aspectFill" data-src="{{img}}" data-post-id="{{item.id}}" catchtap="previewImage" />
</view>
<view class="feed-actions">
<view>赞 {{item.like_count}}</view>
<view>评论 {{item.comment_count}}</view>
</view>
</view>
<view wx:elif="{{isDirectory}}" class="member-row">
<view class="avatar">{{item.initial}}</view>
<view class="row-body">
<view class="member-title-line">
<view class="card-title">{{item.name}}</view>
<view wx:if="{{item.show_member_role}}" class="member-role-badge {{item.member_role_class}}">{{item.member_role_text}}</view>
</view>
<view class="muted">{{item.company || "公司未填写"}} · {{item.position || "职位未填写"}}</view>
<view class="muted">{{item.industry || "行业未填写"}}{{item.committee_text}}</view>
<view wx:if="{{item.show_student_id}}" class="muted">学号:{{item.student_id}}</view>
</view>
</view>
<view wx:elif="{{isSchedule}}" class="schedule-row">
<view class="date-badge">
<view class="date-day">{{item.schedule_day}}</view>
<view class="date-month">{{item.schedule_month}}</view>
</view>
<view class="row-body">
<view class="card-title">{{item.title}}</view>
<view class="muted">{{item.location || "地点待定"}}</view>
<view class="muted">{{item.schedule_time_text}}</view>
</view>
<view class="schedule-side">
<view wx:if="{{item.schedule_countdown_text}}" class="schedule-countdown {{item.schedule_countdown_class}}">{{item.schedule_countdown_text}}</view>
<view class="pill">{{item.schedule_type_text}}</view>
</view>
</view>
<view wx:elif="{{isVotes}}" class="vote-row">
<view class="row-mark">选</view>
<view class="row-body">
<view class="card-title">{{item.title}}</view>
<view wx:if="{{item.description}}" class="muted">{{item.description}}</view>
<view class="vote-meta">
<text>{{item.vote_type_text}}</text>
<text>{{item.vote_options_text}}</text>
<text>{{item.total_voters}} 人参与</text>
</view>
</view>
<view class="pill {{item.vote_pill_class}}">{{item.vote_action_text}}</view>
</view>
<view wx:elif="{{isFund}}" class="fund-row">
<view class="fund-type-badge {{item.fund_type_class}}">{{item.fund_type_text}}</view>
<view class="row-body">
<view class="fund-row-top">
<view class="card-title">{{item.category}}</view>
<view class="fund-amount {{item.fund_type_class}}">¥{{item.amount_text}}</view>
</view>
<view class="muted">{{item.description || "无备注"}}</view>
<view class="muted">{{item.recorder_name}} · {{item.record_date}}</view>
<view wx:if="{{item.image_urls && item.image_urls.length}}" class="feed-images fund-images">
<image wx:for="{{item.image_urls}}" wx:for-item="img" wx:key="*this" src="{{img}}" mode="aspectFill" data-src="{{img}}" data-record-id="{{item.id}}" catchtap="previewFundImage" />
</view>
<view class="fund-detail-link">查看详情</view>
</view>
</view>
<view wx:else class="list-row">
<view class="row-mark">{{moduleIcon}}</view>
<view class="row-body">
<view class="card-title">{{item.title || item.name || item.book_title || item.category}}</view>
<view class="muted">{{item.description || item.content || item.author_name || item.recorder_name || item.location || ""}}</view>
</view>
</view>
</view>
</view>
<view wx:if="{{!loading && !items.length}}" class="empty">
<view class="muted">暂无内容</view>
</view>
<view wx:if="{{canPostTimeline || canManage}}" class="fab-spacer"></view>
<button wx:if="{{canPostTimeline || canManage}}" class="fab-button" bindtap="openCreate" aria-label="新增">+</button>
</view>