| components/StepProgress.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| components/admin/AdminShell.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| pages/admin-more-actions/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| pages/appointment-scan/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| pages/home/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| pages/index/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
components/StepProgress.vue
@@ -70,6 +70,8 @@ <script setup> import { computed } from 'vue'; import stepArrowActiveImage from '../static/step-arrow-active.png'; import stepArrowInactiveImage from '../static/step-arrow-inactive.png'; const props = defineProps({ currentStep: { @@ -128,9 +130,9 @@ const getArrowSrc = (stepNum) => { if (stepNum < props.currentStep) { return '../../static/step-arrow-active.png'; return stepArrowActiveImage; } return '../../static/step-arrow-inactive.png'; return stepArrowInactiveImage; }; </script> components/admin/AdminShell.vue
@@ -4,12 +4,12 @@ <view class="header-bar"> <view class="title-zone"> <image src="../../static/admin-home/PpVQg.png" class="title-icon" mode="aspectFit"></image> <image :src="titleIcon" class="title-icon" mode="aspectFit"></image> <text class="page-title">{{ title }}</text> </view> <view class="back-btn" @click="goHome"> <image src="../../static/admin-home/Dgd7x.png" class="back-arrow" mode="aspectFit"></image> <image :src="backArrowIcon" class="back-arrow" mode="aspectFit"></image> <text class="back-btn-text">返回预约端</text> </view> </view> @@ -25,21 +25,21 @@ <view v-if="showBottomNav" class="bottom-nav"> <view class="nav-item" :class="{ active: activeTab === 'home' }" @click="goAdminHome"> <view class="nav-icon-box" :class="{ active: activeTab === 'home' }"> <image src="../../static/admin-home/myhDj3.png" class="nav-icon" mode="aspectFit"></image> <image :src="homeNavIcon" class="nav-icon" mode="aspectFit"></image> </view> <text class="nav-text">首页</text> </view> <view class="nav-item" :class="{ active: activeTab === 'records' }" @click="goRecords"> <view class="nav-icon-box" :class="{ active: activeTab === 'records' }"> <image src="../../static/admin-home/v4oODO.png" class="nav-icon" mode="aspectFit"></image> <image :src="recordsNavIcon" class="nav-icon" mode="aspectFit"></image> </view> <text class="nav-text">历史记录</text> </view> <view class="nav-item" :class="{ active: activeTab === 'config' }" @click="goConfig"> <view class="nav-icon-box" :class="{ active: activeTab === 'config' }"> <image src="../../static/admin-home/iRGV0L.png" class="nav-icon" mode="aspectFit"></image> <image :src="configNavIcon" class="nav-icon" mode="aspectFit"></image> </view> <text class="nav-text">配置管理</text> </view> @@ -48,6 +48,12 @@ </template> <script setup> import titleIcon from '../../static/admin-home/PpVQg.png'; import backArrowIcon from '../../static/admin-home/Dgd7x.png'; import homeNavIcon from '../../static/admin-home/myhDj3.png'; import recordsNavIcon from '../../static/admin-home/v4oODO.png'; import configNavIcon from '../../static/admin-home/iRGV0L.png'; const props = defineProps({ title: { type: String, pages/admin-more-actions/index.vue
@@ -6,24 +6,28 @@ <view class="dialog-placeholder"></view> <text class="dialog-title">更多操作</text> <view class="dialog-close-btn" @click="goBack"> <image src="../../static/admin-pages/pDMhJ.png" class="dialog-close" mode="aspectFit"></image> <image :src="dialogCloseIcon" class="dialog-close" mode="aspectFit"></image> </view> </view> <view class="action-item" @click="openUnregisterDialog"> <view class="action-item-left"> <view class="action-icon-box"> <image src="../../static/admin-pages/uZNeV.png" class="action-icon" mode="aspectFit"></image> <image :src="logoutActionIcon" class="action-icon" mode="aspectFit"></image> </view> <text class="action-text">注销设备</text> </view> <image src="../../static/admin-pages/Bmn5y.png" class="action-arrow" mode="aspectFit"></image> <image :src="actionArrowIcon" class="action-arrow" mode="aspectFit"></image> </view> </view> </view> </template> <script setup> import dialogCloseIcon from '../../static/admin-pages/pDMhJ.png'; import logoutActionIcon from '../../static/admin-pages/uZNeV.png'; import actionArrowIcon from '../../static/admin-pages/Bmn5y.png'; const goBack = () => { uni.navigateBack({ delta: 1, pages/appointment-scan/index.vue
@@ -25,7 +25,7 @@ <text class="main-desc">保持二维码完整、清晰,距离扫码口约 10-20 厘米</text> <view class="device-area"> <image src="../../static/device-scan.png" class="device-img" mode="aspectFit"></image> <image :src="deviceScanImage" class="device-img" mode="aspectFit"></image> </view> <text class="helper-text">若识别失败,请调整手机亮度、避免反光,或联系工作人员协助</text> @@ -84,7 +84,7 @@ </view> <view class="device-area"> <image src="../../static/device-id-scan.png" class="device-img" mode="aspectFit"></image> <image :src="deviceIdScanImage" class="device-img" mode="aspectFit"></image> </view> <text class="helper-text">若识别失败,请联系工作人员协助</text> @@ -426,7 +426,7 @@ <text class="main-title">请等待打印凭条</text> <view class="print-demo-card"> <image src="../../static/print-ticket-demo.png" class="print-demo-img" mode="aspectFit"></image> <image :src="printTicketDemoImage" class="print-demo-img" mode="aspectFit"></image> </view> </view> @@ -645,6 +645,9 @@ import { onLoad } from '@dcloudio/uni-app'; import StepProgress from '../../components/StepProgress.vue'; import { HardwareAPI } from '../../utils/visitorDevice'; import deviceScanImage from '../../static/device-scan.png'; import deviceIdScanImage from '../../static/device-id-scan.png'; import printTicketDemoImage from '../../static/print-ticket-demo.png'; const showMissingEntryDialog = ref(false); const dialogCountdown = ref(5); pages/home/index.vue
@@ -1,8 +1,28 @@ <script setup> import { ref } from 'vue'; import adminIcon from '../../static/avatar.png'; import operationImage from '../../static/operation.png'; import appointmentIcon from '../../static/appointment.png'; import registerIcon from '../../static/register.png'; import signOutIcon from '../../static/sign-out.png'; import homeBgImage from '../../static/home-bg.png'; import adminBtnBgImage from '../../static/admin-btn-bg.png'; import welcomeBgImage from '../../static/welcome-bg.png'; // 模拟后台配置:是否显示管理员入口,默认为 true const showAdminEntry = ref(true); const screenStyle = { backgroundImage: `url(${homeBgImage})`, }; const adminBtnStyle = { backgroundImage: `url(${adminBtnBgImage})`, }; const welcomeBadgeStyle = { backgroundImage: `url(${welcomeBgImage})`, }; let pressTimer = null; @@ -45,11 +65,12 @@ </script> <template> <view class="screen"> <view class="screen" :style="screenStyle"> <view class="top-bar"> <text class="logo">LOGO</text> <view class="admin-btn" <view class="admin-btn" :style="showAdminEntry ? adminBtnStyle : null" :class="{ 'hidden-entry': !showAdminEntry }" @touchstart="handleTouchStart" @touchend="handleTouchEnd" @@ -57,38 +78,38 @@ @click="goToAdminHome" > <template v-if="showAdminEntry"> <img class="admin-icon" src="/static/avatar.png" alt="admin-icon" /> <image class="admin-icon" :src="adminIcon" mode="aspectFit" /> <text class="admin-text">管理员登录</text> </template> </view> </view> <view class="hero"> <view class="hero-copy"> <view class="welcome-badge"> <view class="welcome-badge" :style="welcomeBadgeStyle"> <view class="welcome-text">欢迎到访</view> </view> <view class="company-name">成都喜望科技有限公司</view> </view> <view class="hero-figure"> <img class="operation" src="/static/operation.png" alt="operation" /> <image class="operation" :src="operationImage" mode="aspectFit" /> </view> </view> <view class="entry-panel"> <view class="entry-card blue" @click="goAppointment"> <text class="entry-title">预约登记</text> <img class="entry-icon" src="/static/appointment.png" alt="calendar-icon" /> <image class="entry-icon" :src="appointmentIcon" mode="aspectFit" /> </view> <view class="entry-card purple" @click="goOnline"> <text class="entry-title">现场登记</text> <img class="entry-icon" src="/static/register.png" alt="calendar-icon" /> <image class="entry-icon" :src="registerIcon" mode="aspectFit" /> </view> <view class="entry-card orange" @click="goSignOut"> <text class="entry-title">签离</text> <img class="entry-icon" src="/static/sign-out.png" alt="calendar-icon" /> <image class="entry-icon" :src="signOutIcon" mode="aspectFit" /> </view> </view> </view> @@ -103,7 +124,7 @@ box-sizing: border-box; display: flex; flex-direction: column; background: url('/static/home-bg.png') no-repeat center center; background-repeat: no-repeat; background-size: 100%; background-position: center; padding-top: 140rpx; @@ -134,7 +155,8 @@ display: flex; align-items: center; justify-content: center; background: url('/static/admin-btn-bg.png') no-repeat center center; background-repeat: no-repeat; background-position: center; background-size: 100% 100%; } @@ -175,7 +197,8 @@ display: flex; align-items: center; padding-left: 80rpx; background: url('/static/welcome-bg.png') no-repeat center center; background-repeat: no-repeat; background-position: center; background-size: 100% 100%; } pages/index/index.vue
@@ -1,6 +1,6 @@ <template> <view class="content"> <image class="logo" src="/static/logo.png"></image> <image class="logo" :src="logoImage"></image> <view class="text-area"> <text class="title">{{title}}</text> </view> @@ -8,10 +8,13 @@ </template> <script> import logoImage from '../../static/logo.png'; export default { data() { return { title: 'Hello' title: 'Hello', logoImage } }, onLoad() {