269 lines
11 KiB
Plaintext
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>
|