Gate record features and storage entry points with invitation guidance; enforce record access in the backend. Add homepage greetings, right-swipe profile dismissal, and move the smoking switch to settings. Simplify API base configuration and remove the unused legacy tab bar component.
151 lines
7.6 KiB
Plaintext
151 lines
7.6 KiB
Plaintext
<view wx:if="{{!recordAccessBlocked}}" capture-bind:tap="onLoginSubscribeTap" class="app-shell app-shell--secondary" style="{{layoutStyle}}">
|
|
<launch-transition />
|
|
<!-- pages/publish/publish.wxml - 统一发布页(增强版编辑器) -->
|
|
<app-nav title="{{titleText}}" back="{{true}}" />
|
|
<scroll-view class="page-bg" scroll-y show-scrollbar="{{false}}" bounces="{{true}}" style="height:100vh;" bindtouchstart="onTouchStart" bindtouchend="onTouchEnd">
|
|
<view class="container"><page-state wx:if="{{editLoading}}" kind="loading" title="正在加载事件" /><page-state wx:elif="{{editLoadError}}" kind="error" title="事件加载失败" action="重试" bind:action="retryEdit" /><block wx:else>
|
|
|
|
<!-- ===== 时间线 / 打卡 / 相册 ===== -->
|
|
<block wx:if="{{type == 'timeline' || type == 'checkin' || type == 'album'}}">
|
|
<view class="input-group">
|
|
<label>{{type == 'album' ? '相册名称' : (type == 'timeline' ? '事件内容' : '标题')}}</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input" placeholder="{{type == 'album' ? '例如:我们的旅行' : (type == 'checkin' ? '例如:吃饭、睡觉、运动' : '例如:第一次约会')}}" value="{{form.title}}" bindinput="onTitleInput" />
|
|
</view>
|
|
</block>
|
|
|
|
<!-- ===== 打卡(类型 + 频率)===== -->
|
|
<block wx:if="{{type == 'checkin'}}">
|
|
<view class="input-group">
|
|
<label>打卡权限</label>
|
|
<picker mode="selector" range="{{checkinTypes}}" value="{{checkinTypeIdx}}" bindchange="onCheckinTypeChange">
|
|
<view class="input">{{checkinTypes[checkinTypeIdx] || '请选择'}}</view>
|
|
</picker>
|
|
</view>
|
|
<view class="input-group">
|
|
<label>打卡频率</label>
|
|
<picker mode="selector" range="{{checkinFreqs}}" value="{{checkinFreqIdx}}" bindchange="onCheckinFreqChange">
|
|
<view class="input">{{checkinFreqs[checkinFreqIdx] || '请选择'}}</view>
|
|
</picker>
|
|
<text style="font-size:22rpx;color:#999;margin-top:8rpx;display:block;">每天/每周/每月:周期内打卡一次即完成 | 不限:有记录即算完成</text>
|
|
</view>
|
|
</block>
|
|
|
|
<!-- ===== 时间线(日期)===== -->
|
|
<block wx:if="{{type == 'timeline'}}">
|
|
<view class="input-group">
|
|
<label>事件日期</label>
|
|
<picker mode="date" value="{{form.date}}" bindchange="onDateInput">
|
|
<view class="input">{{form.date || '请选择事件日期'}}</view>
|
|
</picker>
|
|
</view>
|
|
</block>
|
|
|
|
<!-- ===== 时间线(地点 + 备注 + 重复 + 背景图)===== -->
|
|
<block wx:if="{{type == 'timeline'}}">
|
|
<view class="input-group">
|
|
<label>事件地点(选填)</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input" placeholder="例如:西湖边" value="{{form.location}}" bindinput="onLocationInput" />
|
|
</view>
|
|
<view class="input-group">
|
|
<label>备注(选填)</label>
|
|
<textarea placeholder-class="handwritten-placeholder" class="input textarea" placeholder="记录一些想说的话..." value="{{editorContent}}" bindinput="onContentInput" auto-height maxlength="500" />
|
|
</view>
|
|
<view class="input-group">
|
|
<label>重复选项(选填)</label>
|
|
<picker mode="selector" range="{{repeatOptions}}" value="{{repeatOptionIdx}}" bindchange="onRepeatChange">
|
|
<view class="input">{{repeatOptions[repeatOptionIdx]}}</view>
|
|
</picker>
|
|
</view>
|
|
<view class="input-group">
|
|
<label>背景图片(选填)</label>
|
|
<view class="bg-pick-row">
|
|
<image wx:if="{{bgImageUrl}}" class="bg-preview" src="{{bgImageUrl}}" mode="aspectFill" />
|
|
<view class="bg-pick-btn" bindtap="chooseBgImage">
|
|
<text wx:if="{{!bgImageUrl}}">+ 添加背景</text>
|
|
<text wx:else>更换背景</text>
|
|
</view>
|
|
<view class="bg-remove-btn" wx:if="{{bgImageUrl}}" bindtap="removeBgImage">✕ 移除</view>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
|
|
<!-- ===== 相册(描述 + 封面)===== -->
|
|
<view class="input-group" wx:if="{{type == 'album'}}">
|
|
<label>描述</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input" placeholder="简单描述一下这个相册" value="{{form.desc}}" bindinput="onDescInput" />
|
|
</view>
|
|
<view class="input-group" wx:if="{{type == 'album'}}">
|
|
<label>封面图片</label>
|
|
<view class="cover-pick-row">
|
|
<image wx:if="{{coverPreview}}" class="cover-preview" src="{{coverPreview}}" mode="aspectFill" />
|
|
<view class="cover-pick-btn" bindtap="chooseCover" wx:if="{{!coverPreview}}">
|
|
<text>+</text>
|
|
</view>
|
|
<view class="cover-pick-btn" bindtap="chooseCover" wx:else style="background:#f0f0f0;">
|
|
<text style="font-size:28rpx;">换</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- ===== 日记 ===== -->
|
|
<block wx:if="{{type == 'diary'}}">
|
|
<!-- 标题 -->
|
|
<view class="input-group">
|
|
<label>标题(选填)</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input diary-title-input" placeholder="给日记起个标题..." value="{{form.title}}" bindinput="onTitleInput" maxlength="100" />
|
|
</view>
|
|
|
|
<!-- 内容编辑器(支持换行) -->
|
|
<view class="input-group editor-group">
|
|
<view class="editor-header">
|
|
<label>内容</label>
|
|
<text class="char-count {{contentLength > 5000 ? 'char-warn' : ''}}">{{contentLength}}/5000</text>
|
|
</view>
|
|
<textarea placeholder-class="handwritten-placeholder" class="input textarea diary-editor" placeholder="今天发生了什么有趣的事呢?写下你的心情和感受吧…" value="{{editorContent}}" bindinput="onContentInput" maxlength="5000" auto-height="{{true}}" cursor-spacing="24" />
|
|
</view>
|
|
|
|
<!-- 图片选择(可删除) -->
|
|
<view class="input-group">
|
|
<view class="editor-header">
|
|
<label>图片</label>
|
|
<text class="img-count">{{tempImages.length}}/9</text>
|
|
</view>
|
|
<view class="img-picker-row">
|
|
<view wx:for="{{tempImages}}" wx:key="*this" class="img-picker-wrap">
|
|
<image class="img-picker-thumb" src="{{item}}" mode="aspectFill" />
|
|
<view class="img-picker-del" bindtap="removeImage" data-index="{{index}}" hover-class="del-hover">
|
|
<text>✕</text>
|
|
</view>
|
|
</view>
|
|
<view class="img-picker-add" bindtap="chooseImages" wx:if="{{tempImages.length < 9}}">
|
|
<text class="add-icon">+</text>
|
|
<text class="add-text">添加图片</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
|
|
<!-- ===== 收藏歌曲 ===== -->
|
|
<block wx:if="{{type == 'song'}}">
|
|
<view class="input-group">
|
|
<label>歌曲名</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input" placeholder="例如:小幸运" value="{{form.song_name}}" bindinput="onTitleInput" />
|
|
</view>
|
|
<view class="input-group">
|
|
<label>歌手</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input" placeholder="例如:田馥甄" value="{{form.artist}}" bindinput="onArtistInput" />
|
|
</view>
|
|
<view class="input-group">
|
|
<label>备注(选填)</label>
|
|
<input placeholder-class="handwritten-placeholder" class="input" placeholder="一句话,限60字" maxlength="60" value="{{form.note}}" bindinput="onNoteInput" />
|
|
</view>
|
|
</block>
|
|
|
|
<!-- 提交 -->
|
|
<button class="btn btn-primary submit-btn" bindtap="submit" hover-class="none" loading="{{submitting}}">{{btnText}}</button>
|
|
</block>
|
|
</view>
|
|
</scroll-view>
|
|
|
|
</view>
|