JhHardwareWRS/pages/index/index.wxml
2026-06-24 15:19:14 +08:00

269 lines
11 KiB
Plaintext

<view class="index-shell">
<scroll-view
class="page index-page safe-bottom"
scroll-y
type="list"
refresher-enabled
refresher-triggered="{{refreshing}}"
bindrefresherrefresh="onPullDownRefresh"
>
<view class="header">
<view class="header-row">
<view class="brand-block">
<text class="title metallic-title">嘉恒智能报工</text>
<text class="subtitle">宁波嘉恒智能科技有限公司</text>
<view wx:if="{{currentUser}}" class="location-status">
<text>当前位置:</text>
<block wx:if="{{locationEntered}}">
<text>已进入 </text>
<text class="location-point-name">{{currentAttendancePointName}}</text>
<text> 考勤点</text>
</block>
<text wx:else class="location-not-entered">未进入考勤点</text>
</view>
<text wx:if="{{currentUser}}" class="location-refresh-tip">下拉刷新位置</text>
</view>
<view wx:if="{{currentUser}}" class="header-user" bindtap="switchCurrentRole">
<view class="avatar small-avatar">
<image wx:if="{{avatarPath}}" class="avatar-image" src="{{avatarPath}}" mode="aspectFill"></image>
<text wx:else class="avatar-text">{{avatarText}}</text>
</view>
<view class="header-user-text">
<text class="header-name">{{currentUser.name}}</text>
<view class="role-line">
<text>{{currentRoleName}}</text>
<text wx:if="{{canSwitchRole}}" class="role-arrow">▾</text>
</view>
</view>
</view>
</view>
</view>
<view class="tab-pane" hidden="{{activeTab !== 'home'}}">
<button class="scan-btn" bindtap="scanDevice">扫一扫</button>
<view wx:if="{{currentUser}}" class="notice-card">
<view class="notice-hero">
<view class="notice-badge">通知</view>
<swiper wx:if="{{notices.length}}" class="notice-swiper" autoplay circular vertical interval="3200" duration="420">
<swiper-item wx:for="{{notices}}" wx:key="id">
<view class="notice-slide">
<text class="notice-title">{{item.title}}</text>
<text class="notice-content">{{item.content}}</text>
</view>
</swiper-item>
</swiper>
<view wx:else class="notice-empty">
<text class="notice-title">暂无通知</text>
<text class="notice-content">今天暂无新的通知。</text>
</view>
</view>
<view wx:if="{{noticeList.length}}" class="notice-list">
<view wx:for="{{noticeList}}" wx:key="id" class="notice-list-row">
<text class="notice-dot"></text>
<text class="notice-list-title">{{item.title}}</text>
</view>
</view>
</view>
<view wx:if="{{!currentUser}}" class="card">
<view class="button-row">
<button class="btn primary full" open-type="getPhoneNumber" bindgetphonenumber="wechatLogin">手机号快捷登录</button>
</view>
<view wx:if="{{roleChoices.length}}" class="role-list">
<text class="label">请选择角色</text>
<button
wx:for="{{roleChoices}}"
wx:key="role"
class="role-btn"
data-role="{{item.role}}"
bindtap="chooseRole"
>
{{item.name}} · {{item.roleName}}
</button>
</view>
</view>
<block wx:if="{{showOverview}}">
<view class="section-title">概览</view>
<view class="grid">
<view
wx:for="{{overviewItems}}"
wx:key="key"
class="stat tappable-stat stat-{{item.key}} {{item.alert ? 'stat-alert' : ''}}"
data-url="{{item.url}}"
data-disabled-text="{{item.disabledText}}"
bindtap="openOverview"
>
<text class="label">{{item.label}}</text>
<text class="stat-number">{{item.value || 0}}</text>
<text class="stat-link">查看清单</text>
</view>
</view>
</block>
<block wx:if="{{showWorkerTrend}}">
<view class="section-title">最近7天成品数量</view>
<view class="card trend-card">
<view class="row trend-head">
<view>
<text class="label">7天合计</text>
<text class="value">{{workerTrend.total || 0}}</text>
</view>
<view class="text-right">
<text class="label">单日最高</text>
<text class="value">{{workerTrend.max || 0}}</text>
</view>
</view>
<view class="trend-plot">
<view class="trend-axis trend-axis-top">{{workerTrend.max || 0}}</view>
<view class="trend-axis trend-axis-bottom">0</view>
<view class="trend-plot-body">
<view class="trend-grid-line top"></view>
<view class="trend-grid-line middle"></view>
<view class="trend-grid-line bottom"></view>
<view
wx:for="{{workerTrend.segments}}"
wx:key="index"
class="trend-segment"
style="left: {{item.left}}%; top: {{item.top}}%; width: {{item.width}}%; transform: rotate({{item.angle}}deg);"
></view>
<view
wx:for="{{workerTrend.points}}"
wx:key="date"
class="trend-point-wrap {{item.edgeClass}}"
style="left: {{item.left}}%; top: {{item.top}}%;"
>
<text wx:if="{{item.value}}" class="trend-point-value">{{item.valueText}}</text>
<text class="trend-point"></text>
</view>
</view>
<view class="trend-label-row">
<text
wx:for="{{workerTrend.points}}"
wx:key="date"
class="trend-date-label {{item.edgeClass}}"
style="left: {{item.left}}%;"
>{{item.label}}</text>
</view>
</view>
</view>
</block>
</view>
<view class="tab-pane" hidden="{{activeTab !== 'workbench'}}">
<view class="section-title">工作台</view>
<view wx:if="{{!actions.length}}" class="list-empty">请选择账号</view>
<view wx:else class="workbench-panel">
<view class="app-grid">
<view
wx:for="{{actions}}"
wx:key="key"
class="app-item"
data-url="{{item.url}}"
data-action="{{item.action}}"
bindtap="openAction"
>
<view class="app-icon app-icon-{{item.key}}">{{item.icon}}</view>
<text class="app-title">{{item.title}}</text>
<text class="app-desc">{{item.desc}}</text>
</view>
</view>
</view>
</view>
<view class="tab-pane" hidden="{{activeTab !== 'mine'}}">
<view class="section-title">我的</view>
<view wx:if="{{!currentUser}}" class="card">
<view class="button-row">
<button class="btn primary full" open-type="getPhoneNumber" bindgetphonenumber="wechatLogin">手机号快捷登录</button>
</view>
<view wx:if="{{roleChoices.length}}" class="role-list">
<text class="label">请选择角色</text>
<button
wx:for="{{roleChoices}}"
wx:key="role"
class="role-btn"
data-role="{{item.role}}"
bindtap="chooseRole"
>
{{item.name}} · {{item.roleName}}
</button>
</view>
</view>
<view wx:else class="card profile-card">
<view class="profile-head">
<view class="avatar large-avatar">
<image wx:if="{{avatarPath}}" class="avatar-image" src="{{avatarPath}}" mode="aspectFill"></image>
<text wx:else class="avatar-text large-avatar-text">{{avatarText}}</text>
</view>
<view class="profile-main">
<text class="profile-name">{{currentUser.name}}</text>
<text class="subtitle">{{currentUser.phone}}</text>
</view>
</view>
<view class="divider"></view>
<view class="info-row" bindtap="switchCurrentRole">
<text class="label inline-label">当前角色</text>
<view class="info-value">
<text>{{currentRoleName}}</text>
<text wx:if="{{canSwitchRole}}" class="role-arrow">▾</text>
</view>
</view>
<view class="info-row">
<text class="label inline-label">全部角色</text>
<text class="value">{{currentRolesText}}</text>
</view>
<view wx:if="{{currentUser.role !== 'manager'}}" class="info-row">
<text class="label inline-label">考勤点</text>
<text class="value">{{currentUser.attendancePointsText || '-'}}</text>
</view>
<view class="button-row">
<button class="btn secondary full" bindtap="chooseAvatar">更换头像</button>
<button class="btn danger full" bindtap="resetDemo">退出登录</button>
</view>
</view>
</view>
</scroll-view>
<view class="bottom-bar">
<view class="bottom-item {{activeTab === 'home' ? 'active' : ''}}" data-tab="home" bindtap="switchTab">
<text class="bottom-icon">⌂</text>
<text>首页</text>
</view>
<view class="bottom-item {{activeTab === 'workbench' ? 'active' : ''}}" data-tab="workbench" bindtap="switchTab">
<text class="bottom-icon">▦</text>
<text>工作台</text>
</view>
<view class="bottom-item {{activeTab === 'mine' ? 'active' : ''}}" data-tab="mine" bindtap="switchTab">
<text class="bottom-icon">○</text>
<text>我的</text>
</view>
</view>
<view wx:if="{{temporaryWorkerModalVisible}}" class="temp-worker-mask" catchtap="closeTemporaryWorkerModal">
<view class="temp-worker-panel" catchtap="noop">
<text class="temp-worker-title">创建临时工</text>
<text class="temp-worker-tip">{{temporaryWorkerPrompt}}</text>
<view class="temp-worker-field">
<text class="temp-worker-label">姓名</text>
<input
class="input temp-worker-input"
value="{{temporaryWorkerName}}"
placeholder="请输入姓名"
bindinput="onTemporaryWorkerNameInput"
confirm-type="done"
cursor-spacing="24"
/>
</view>
<view class="button-row temp-worker-actions">
<button class="btn secondary full" bindtap="closeTemporaryWorkerModal">取消</button>
<button class="btn primary full" bindtap="submitTemporaryWorker">确认创建</button>
</view>
</view>
</view>
</view>