林水寨角色人生小程序edit icon

创建者:
用户AvWabVOZ
Fork(复制)
下载
嵌入
BUG反馈
index.html
index.html
            
            <!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>云上林水寨 - 微信小程序界面预览</title>
  <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;600;700&display=swap" rel="stylesheet">
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    :root {
      --primary: #2D5A3D;
      --primary-light: #4A7C5B;
      --secondary: #8B7355;
      --accent: #D4A84B;
      --bg: #F8F5F0;
      --text-primary: #333333;
      --text-secondary: #666666;
      --text-light: #999999;
      --white: #FFFFFF;
      --border: #E8E8E8;
      --success: #52C41A;
      --error: #FF4D4F;
    }

    body {
      font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, sans-serif;
      background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      padding: 40px 20px;
      color: #fff;
    }

    h1 {
      font-size: 2.5rem;
      font-weight: 700;
      margin-bottom: 10px;
      background: linear-gradient(135deg, #4A7C5B, #D4A84B);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      text-align: center;
    }

    .subtitle {
      color: rgba(255,255,255,0.7);
      font-size: 1.1rem;
      margin-bottom: 40px;
      text-align: center;
    }

    .preview-container {
      display: flex;
      gap: 60px;
      flex-wrap: wrap;
      justify-content: center;
      align-items: flex-start;
    }

    .phone-wrapper {
      display: flex;
      flex-direction: column;
      align-items: center;
    }

    .phone-label {
      color: var(--accent);
      font-size: 1rem;
      font-weight: 500;
      margin-bottom: 15px;
      padding: 8px 20px;
      background: rgba(212, 168, 75, 0.15);
      border-radius: 20px;
    }

    .phone-frame {
      width: 375px;
      height: 812px;
      background: #000;
      border-radius: 55px;
      padding: 12px;
      box-shadow: 
        0 50px 100px rgba(0,0,0,0.5),
        0 0 0 2px #333,
        inset 0 0 0 2px #1a1a1a;
      position: relative;
    }

    .phone-frame::before {
      content: '';
      position: absolute;
      top: 12px;
      left: 50%;
      transform: translateX(-50%);
      width: 150px;
      height: 35px;
      background: #000;
      border-radius: 0 0 20px 20px;
      z-index: 100;
    }

    .phone-screen {
      width: 100%;
      height: 100%;
      background: var(--bg);
      border-radius: 45px;
      overflow: hidden;
      position: relative;
    }

    /* 状态栏 */
    .status-bar {
      height: 44px;
      background: var(--primary);
      display: flex;
      justify-content: space-between;
      align-items: flex-end;
      padding: 0 30px 8px;
      color: #fff;
      font-size: 14px;
      font-weight: 500;
    }

    .status-icons {
      display: flex;
      gap: 5px;
    }

    /* 导航栏 */
    .nav-bar {
      height: 44px;
      background: var(--primary);
      display: flex;
      align-items: center;
      justify-content: center;
      color: #fff;
      font-size: 17px;
      font-weight: 600;
    }

    /* 页面内容 */
    .page-content {
      height: calc(100% - 88px - 50px);
      overflow-y: auto;
      background: var(--bg);
    }

    .page-content::-webkit-scrollbar {
      display: none;
    }

    /* 底部TabBar */
    .tab-bar {
      height: 50px;
      background: #fff;
      display: flex;
      border-top: 1px solid var(--border);
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      z-index: 50;
    }

    .tab-item {
      flex: 1;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 2px;
      font-size: 10px;
      color: var(--text-light);
      cursor: pointer;
      transition: all 0.2s;
    }

    .tab-item.active {
      color: var(--primary);
    }

    .tab-icon {
      width: 22px;
      height: 22px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 18px;
    }

    /* ========== 首页样式 ========== */
    .banner {
      height: 200px;
      background: linear-gradient(135deg, #4A7C5B, #2D5A3D);
      position: relative;
      overflow: hidden;
    }

    .banner::before {
      content: '🏞️';
      font-size: 150px;
      position: absolute;
      right: -30px;
      top: -20px;
      opacity: 0.15;
    }

    .banner-title {
      position: absolute;
      bottom: 50px;
      left: 15px;
      color: #fff;
      font-size: 18px;
      font-weight: 600;
      text-shadow: 0 2px 8px rgba(0,0,0,0.3);
    }

    .search-bar {
      position: absolute;
      top: 15px;
      left: 15px;
      right: 15px;
      height: 36px;
      background: rgba(255,255,255,0.95);
      border-radius: 18px;
      display: flex;
      align-items: center;
      padding: 0 15px;
      color: var(--text-light);
      font-size: 14px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    }

    .search-bar::before {
      content: '🔍';
      margin-right: 8px;
      font-size: 14px;
    }

    .dots {
      position: absolute;
      bottom: 15px;
      left: 50%;
      transform: translateX(-50%);
      display: flex;
      gap: 6px;
    }

    .dot {
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: rgba(255,255,255,0.5);
    }

    .dot.active {
      background: #fff;
      width: 18px;
      border-radius: 3px;
    }

    /* 护照入口卡片 */
    .passport-entry {
      margin: -20px 12px 12px;
      background: linear-gradient(135deg, #2D5A3D 0%, #4A7C5B 100%);
      border-radius: 12px;
      padding: 15px;
      display: flex;
      align-items: center;
      color: #fff;
      position: relative;
      z-index: 10;
      box-shadow: 0 4px 15px rgba(45,90,61,0.3);
    }

    .passport-icon {
      width: 50px;
      height: 50px;
      background: rgba(255,255,255,0.2);
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 24px;
      margin-right: 12px;
    }

    .passport-info {
      flex: 1;
    }

    .passport-title {
      font-size: 16px;
      font-weight: 600;
      margin-bottom: 4px;
    }

    .passport-subtitle {
      font-size: 13px;
      opacity: 0.85;
    }

    .passport-arrow {
      opacity: 0.7;
      font-size: 18px;
    }

    /* 快捷功能 */
    .quick-actions {
      background: #fff;
      margin: 0 12px 12px;
      border-radius: 12px;
      padding: 15px 10px;
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 12px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .action-item {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 6px;
    }

    .action-icon {
      width: 44px;
      height: 44px;
      border-radius: 12px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 20px;
    }

    .action-name {
      font-size: 11px;
      color: var(--text-primary);
    }

    /* 区块标题 */
    .section {
      padding: 0 12px;
      margin-bottom: 15px;
    }

    .section-header {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 12px;
    }

    .section-title {
      font-size: 17px;
      font-weight: 600;
      color: var(--text-primary);
    }

    .section-more {
      font-size: 13px;
      color: var(--text-secondary);
    }

    /* 任务卡片横向滚动 */
    .task-scroll {
      display: flex;
      gap: 10px;
      overflow-x: auto;
      padding-bottom: 5px;
      margin: 0 -12px;
      padding-left: 12px;
      padding-right: 12px;
    }

    .task-scroll::-webkit-scrollbar {
      display: none;
    }

    .task-card {
      flex-shrink: 0;
      width: 160px;
      background: #fff;
      border-radius: 10px;
      overflow: hidden;
      box-shadow: 0 2px 8px rgba(0,0,0,0.06);
    }

    .task-image {
      height: 90px;
      background: linear-gradient(135deg, #e8f5e9, #c8e6c9);
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 40px;
      position: relative;
    }

    .task-tag {
      position: absolute;
      top: 8px;
      left: 8px;
      padding: 3px 8px;
      border-radius: 8px;
      font-size: 10px;
      color: #fff;
    }

    .task-info {
      padding: 10px;
    }

    .task-name {
      font-size: 14px;
      font-weight: 500;
      margin-bottom: 4px;
      color: var(--text-primary);
    }

    .task-location {
      font-size: 11px;
      color: var(--text-secondary);
      margin-bottom: 6px;
    }

    .task-reward {
      font-size: 13px;
      color: var(--accent);
      font-weight: 500;
    }

    /* 活动卡片 */
    .activity-card {
      background: #fff;
      border-radius: 10px;
      overflow: hidden;
      display: flex;
      margin-bottom: 10px;
      box-shadow: 0 2px 8px rgba(0,0,0,0.06);
    }

    .activity-image {
      width: 120px;
      height: 90px;
      background: linear-gradient(135deg, #fff3e0, #ffe0b2);
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 36px;
      flex-shrink: 0;
    }

    .activity-info {
      padding: 10px;
      flex: 1;
      display: flex;
      flex-direction: column;
    }

    .activity-tags {
      display: flex;
      gap: 5px;
      margin-bottom: 4px;
    }

    .tag {
      padding: 2px 6px;
      border-radius: 4px;
      font-size: 10px;
    }

    .tag-hot {
      background: rgba(255, 77, 79, 0.1);
      color: var(--error);
    }

    .tag-book {
      background: rgba(212, 168, 75, 0.15);
      color: var(--accent);
    }

    .activity-name {
      font-size: 14px;
      font-weight: 500;
      color: var(--text-primary);
    }

    .activity-desc {
      font-size: 11px;
      color: var(--text-secondary);
      flex: 1;
    }

    .activity-bottom {
      display: flex;
      justify-content: space-between;
      align-items: center;
    }

    .activity-time {
      font-size: 11px;
      color: var(--text-light);
    }

    .activity-price {
      font-size: 14px;
      font-weight: 500;
      color: var(--error);
    }

    .activity-price.free {
      color: var(--success);
    }

    /* ========== 数字护照页面 ========== */
    .passport-header {
      height: 180px;
      background: linear-gradient(135deg, #2D5A3D, #4A7C5B);
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      color: #fff;
      position: relative;
    }

    .passport-header::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
    }

    .role-avatar {
      width: 80px;
      height: 80px;
      background: rgba(255,255,255,0.2);
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 40px;
      margin-bottom: 10px;
      border: 3px solid rgba(255,255,255,0.3);
    }

    .role-name {
      font-size: 20px;
      font-weight: 600;
      margin-bottom: 4px;
    }

    .passport-id {
      font-size: 13px;
      opacity: 0.8;
    }

    /* 统计卡片 */
    .stats-card {
      background: #fff;
      margin: -30px 12px 12px;
      border-radius: 12px;
      padding: 20px;
      position: relative;
      z-index: 10;
      box-shadow: 0 4px 15px rgba(0,0,0,0.1);
    }

    .stats-row {
      display: flex;
      justify-content: space-around;
      margin-bottom: 15px;
    }

    .stat-item {
      text-align: center;
    }

    .stat-value {
      font-size: 24px;
      font-weight: 700;
      color: var(--primary);
    }

    .stat-label {
      font-size: 12px;
      color: var(--text-secondary);
    }

    .level-info {
      border-top: 1px solid var(--border);
      padding-top: 15px;
    }

    .level-label {
      font-size: 13px;
      color: var(--text-secondary);
      margin-bottom: 8px;
    }

    .level-name {
      color: var(--accent);
      font-weight: 600;
    }

    .progress-bar {
      height: 6px;
      background: var(--border);
      border-radius: 3px;
      overflow: hidden;
      margin-bottom: 6px;
    }

    .progress-inner {
      height: 100%;
      background: linear-gradient(90deg, var(--primary), var(--primary-light));
      border-radius: 3px;
      width: 65%;
    }

    .progress-text {
      font-size: 11px;
      color: var(--text-light);
    }

    /* 勋章区域 */
    .badges-section {
      background: #fff;
      margin: 0 12px 12px;
      border-radius: 12px;
      padding: 15px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .badges-grid {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 15px;
      margin-top: 10px;
    }

    .badge-item {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 5px;
    }

    .badge-icon {
      width: 50px;
      height: 50px;
      background: linear-gradient(135deg, #fff9e6, #fff3cd);
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 24px;
      box-shadow: 0 2px 8px rgba(212,168,75,0.2);
    }

    .badge-icon.locked {
      background: var(--border);
      opacity: 0.5;
    }

    .badge-name {
      font-size: 10px;
      color: var(--text-secondary);
      text-align: center;
    }

    /* ========== 任务页面 ========== */
    .role-tabs {
      display: flex;
      gap: 8px;
      padding: 12px;
      overflow-x: auto;
      background: #fff;
    }

    .role-tabs::-webkit-scrollbar {
      display: none;
    }

    .role-tab {
      flex-shrink: 0;
      padding: 8px 16px;
      border-radius: 20px;
      font-size: 13px;
      background: var(--bg);
      color: var(--text-secondary);
      border: 1px solid transparent;
    }

    .role-tab.active {
      background: rgba(45,90,61,0.1);
      color: var(--primary);
      border-color: var(--primary);
    }

    .task-stats {
      display: flex;
      justify-content: space-around;
      background: #fff;
      margin: 12px;
      padding: 15px;
      border-radius: 12px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .task-stat {
      text-align: center;
    }

    .task-stat-num {
      font-size: 22px;
      font-weight: 700;
      color: var(--text-primary);
    }

    .task-stat-num.primary {
      color: var(--primary);
    }

    .task-stat-num.accent {
      color: var(--accent);
    }

    .task-stat-label {
      font-size: 11px;
      color: var(--text-secondary);
    }

    /* 任务组 */
    .task-group {
      margin: 0 12px 15px;
    }

    .group-header {
      display: flex;
      align-items: center;
      gap: 8px;
      padding: 10px 0;
      border-left: 3px solid var(--primary);
      padding-left: 10px;
      margin-bottom: 10px;
    }

    .group-icon {
      font-size: 18px;
    }

    .group-name {
      font-size: 15px;
      font-weight: 600;
      flex: 1;
    }

    .group-count {
      font-size: 12px;
      color: var(--text-light);
    }

    .task-item {
      background: #fff;
      border-radius: 10px;
      padding: 12px;
      display: flex;
      align-items: flex-start;
      gap: 12px;
      margin-bottom: 8px;
      box-shadow: 0 2px 8px rgba(0,0,0,0.05);
    }

    .task-status {
      width: 22px;
      height: 22px;
      border: 2px solid var(--primary);
      border-radius: 50%;
      flex-shrink: 0;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .task-status.done {
      background: var(--primary);
      color: #fff;
      font-size: 12px;
    }

    .task-content {
      flex: 1;
    }

    .task-item-name {
      font-size: 14px;
      font-weight: 500;
      margin-bottom: 4px;
    }

    .task-item-location {
      font-size: 11px;
      color: var(--text-secondary);
    }

    .task-points {
      font-size: 14px;
      font-weight: 600;
      color: var(--accent);
    }

    /* 扫码按钮 */
    .scan-btn {
      position: fixed;
      bottom: 70px;
      right: 20px;
      width: 56px;
      height: 56px;
      background: linear-gradient(135deg, var(--primary), var(--primary-light));
      border-radius: 50%;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      color: #fff;
      box-shadow: 0 4px 15px rgba(45,90,61,0.4);
      font-size: 20px;
    }

    .scan-btn span {
      font-size: 9px;
      margin-top: 2px;
    }

    /* ========== 商城页面 ========== */
    .points-header {
      background: linear-gradient(135deg, var(--primary), var(--primary-light));
      padding: 30px 15px;
      color: #fff;
      text-align: center;
    }

    .points-label {
      font-size: 13px;
      opacity: 0.85;
    }

    .points-value {
      font-size: 42px;
      font-weight: 700;
      margin: 5px 0 15px;
    }

    .points-actions {
      display: flex;
      justify-content: center;
      gap: 20px;
    }

    .points-action {
      padding: 6px 16px;
      background: rgba(255,255,255,0.2);
      border-radius: 15px;
      font-size: 12px;
    }

    /* 商品分类 */
    .category-tabs {
      display: flex;
      gap: 8px;
      padding: 12px;
      background: #fff;
    }

    .category-tab {
      padding: 8px 16px;
      border-radius: 20px;
      font-size: 13px;
      background: var(--bg);
      color: var(--text-secondary);
    }

    .category-tab.active {
      background: var(--primary);
      color: #fff;
    }

    /* 商品列表 */
    .goods-list {
      padding: 12px;
    }

    .goods-item {
      background: #fff;
      border-radius: 12px;
      overflow: hidden;
      margin-bottom: 12px;
      display: flex;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .goods-image {
      width: 100px;
      height: 100px;
      background: linear-gradient(135deg, #e3f2fd, #bbdefb);
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 40px;
      flex-shrink: 0;
    }

    .goods-info {
      padding: 12px;
      flex: 1;
      display: flex;
      flex-direction: column;
    }

    .goods-name {
      font-size: 14px;
      font-weight: 500;
      margin-bottom: 4px;
    }

    .goods-desc {
      font-size: 11px;
      color: var(--text-secondary);
      flex: 1;
    }

    .goods-bottom {
      display: flex;
      justify-content: space-between;
      align-items: center;
    }

    .goods-price {
      font-size: 16px;
      font-weight: 700;
      color: var(--accent);
    }

    .goods-price span {
      font-size: 11px;
      font-weight: 400;
      color: var(--text-light);
    }

    .exchange-btn {
      padding: 6px 14px;
      background: var(--primary);
      color: #fff;
      border-radius: 15px;
      font-size: 12px;
    }

    /* ========== 个人中心页面 ========== */
    .profile-header {
      background: linear-gradient(135deg, var(--primary), var(--primary-light));
      padding: 40px 15px 30px;
      display: flex;
      align-items: center;
      color: #fff;
    }

    .avatar {
      width: 70px;
      height: 70px;
      background: rgba(255,255,255,0.2);
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 30px;
      margin-right: 15px;
      border: 3px solid rgba(255,255,255,0.3);
    }

    .user-detail {
      flex: 1;
    }

    .user-name {
      font-size: 20px;
      font-weight: 600;
      margin-bottom: 6px;
    }

    .user-level {
      display: inline-block;
      padding: 3px 10px;
      background: var(--accent);
      border-radius: 10px;
      font-size: 11px;
    }

    .user-role-badge {
      display: flex;
      align-items: center;
      gap: 5px;
      padding: 5px 10px;
      background: rgba(255,255,255,0.2);
      border-radius: 15px;
      font-size: 12px;
    }

    .profile-stats {
      display: flex;
      justify-content: space-around;
      background: #fff;
      margin: -20px 12px 12px;
      border-radius: 12px;
      padding: 20px;
      position: relative;
      z-index: 10;
      box-shadow: 0 4px 15px rgba(0,0,0,0.1);
    }

    .profile-stat {
      text-align: center;
    }

    .profile-stat-value {
      font-size: 22px;
      font-weight: 700;
      color: var(--primary);
    }

    .profile-stat-label {
      font-size: 11px;
      color: var(--text-secondary);
    }

    /* 服务网格 */
    .service-card {
      background: #fff;
      margin: 0 12px 12px;
      border-radius: 12px;
      padding: 15px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .service-title {
      font-size: 15px;
      font-weight: 600;
      margin-bottom: 15px;
    }

    .service-grid {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 15px;
    }

    .service-item {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 6px;
    }

    .service-icon {
      width: 44px;
      height: 44px;
      background: rgba(45,90,61,0.08);
      border-radius: 12px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 20px;
    }

    .service-name {
      font-size: 11px;
      color: var(--text-secondary);
    }

    /* 菜单列表 */
    .menu-list {
      background: #fff;
      margin: 0 12px 12px;
      border-radius: 12px;
      overflow: hidden;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .menu-item {
      display: flex;
      align-items: center;
      padding: 15px;
      border-bottom: 1px solid var(--border);
    }

    .menu-item:last-child {
      border-bottom: none;
    }

    .menu-icon {
      margin-right: 12px;
      font-size: 18px;
    }

    .menu-name {
      flex: 1;
      font-size: 14px;
    }

    .menu-arrow {
      color: var(--text-light);
    }

    /* ========== 打卡页面 ========== */
    .checkin-spot {
      height: 200px;
      background: linear-gradient(135deg, #4A7C5B, #2D5A3D);
      position: relative;
      display: flex;
      flex-direction: column;
      justify-content: flex-end;
      padding: 20px;
      color: #fff;
    }

    .checkin-spot::before {
      content: '📸';
      font-size: 120px;
      position: absolute;
      right: -20px;
      top: -20px;
      opacity: 0.1;
    }

    .spot-name {
      font-size: 22px;
      font-weight: 600;
      margin-bottom: 5px;
    }

    .spot-desc {
      font-size: 13px;
      opacity: 0.85;
      margin-bottom: 8px;
    }

    .spot-count {
      font-size: 12px;
      opacity: 0.7;
    }

    .checkin-form {
      margin: 12px;
    }

    .form-card {
      background: #fff;
      border-radius: 12px;
      padding: 15px;
      margin-bottom: 12px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.05);
    }

    .form-title {
      font-size: 15px;
      font-weight: 600;
      margin-bottom: 15px;
    }

    .photo-grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 10px;
    }

    .photo-item, .photo-add {
      aspect-ratio: 1;
      background: var(--bg);
      border-radius: 8px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      border: 2px dashed var(--border);
      color: var(--text-light);
    }

    .photo-add-icon {
      font-size: 24px;
      margin-bottom: 4px;
    }

    .photo-add-text {
      font-size: 11px;
    }

    .photo-item.filled {
      border: none;
      background: linear-gradient(135deg, #e8f5e9, #c8e6c9);
      font-size: 30px;
    }

    .textarea-wrap {
      background: var(--bg);
      border-radius: 8px;
      padding: 12px;
      margin-top: 15px;
    }

    .textarea-placeholder {
      font-size: 13px;
      color: var(--text-light);
    }

    .word-count {
      text-align: right;
      font-size: 11px;
      color: var(--text-light);
      margin-top: 8px;
    }

    .location-bar {
      display: flex;
      align-items: center;
      background: var(--bg);
      border-radius: 8px;
      padding: 12px;
      margin-top: 15px;
      font-size: 13px;
      color: var(--text-secondary);
    }

    .location-icon {
      margin-right: 8px;
    }

    .submit-btn {
      background: linear-gradient(135deg, var(--primary), var(--primary-light));
      color: #fff;
      border: none;
      border-radius: 25px;
      padding: 15px;
      width: 100%;
      font-size: 16px;
      font-weight: 600;
      margin-top: 20px;
    }

    /* 页面切换动画 */
    .page {
      display: none;
    }

    .page.active {
      display: block;
      animation: fadeIn 0.3s ease;
    }

    @keyframes fadeIn {
      from { opacity: 0; transform: translateY(10px); }
      to { opacity: 1; transform: translateY(0); }
    }

    /* 交互说明 */
    .instructions {
      margin-top: 40px;
      text-align: center;
      color: rgba(255,255,255,0.6);
      font-size: 14px;
      max-width: 600px;
    }

    .instructions h3 {
      color: var(--accent);
      margin-bottom: 15px;
      font-size: 18px;
    }

    .feature-list {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      gap: 10px;
      margin-top: 15px;
    }

    .feature-tag {
      padding: 6px 14px;
      background: rgba(255,255,255,0.1);
      border-radius: 20px;
      font-size: 13px;
    }
  </style>
</head>
<body>
  <h1>云上林水寨</h1>
  <p class="subtitle">微信小程序界面预览 · 点击底部导航栏切换页面</p>

  <div class="preview-container">
    <!-- 手机1: 主要页面 -->
    <div class="phone-wrapper">
      <div class="phone-label">主界面预览</div>
      <div class="phone-frame">
        <div class="phone-screen">
          <div class="status-bar">
            <span>9:41</span>
            <div class="status-icons">
              <span>📶</span>
              <span>🔋</span>
            </div>
          </div>
          <div class="nav-bar">云上林水寨</div>
          
          <div class="page-content" id="pageContent1">
            <!-- 首页 -->
            <div class="page active" id="page-home">
              <div class="banner">
                <div class="search-bar">搜索景点、活动、任务...</div>
                <div class="banner-title">不止是旅行,更是另一种生活</div>
                <div class="dots">
                  <div class="dot active"></div>
                  <div class="dot"></div>
                  <div class="dot"></div>
                </div>
              </div>
              
              <div class="passport-entry">
                <div class="passport-icon">🌿</div>
                <div class="passport-info">
                  <div class="passport-title">开启你的田园人生</div>
                  <div class="passport-subtitle">选择角色,获取专属数字护照</div>
                </div>
                <div class="passport-arrow">›</div>
              </div>

              <div class="quick-actions">
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(45,90,61,0.1)">📷</div>
                  <div class="action-name">扫码打卡</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(139,115,85,0.1)">🗺️</div>
                  <div class="action-name">景区地图</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(212,168,75,0.1)">📅</div>
                  <div class="action-name">活动预约</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(91,138,154,0.1)">🔮</div>
                  <div class="action-name">AR导览</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(45,90,61,0.1)">🛤️</div>
                  <div class="action-name">推荐路线</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(139,115,85,0.1)">🌤️</div>
                  <div class="action-name">天气预报</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(212,168,75,0.1)">🎧</div>
                  <div class="action-name">游客服务</div>
                </div>
                <div class="action-item">
                  <div class="action-icon" style="background: rgba(91,138,154,0.1)">💌</div>
                  <div class="action-name">邀请好友</div>
                </div>
              </div>

              <div class="section">
                <div class="section-header">
                  <div class="section-title">今日任务</div>
                  <div class="section-more">查看全部 ›</div>
                </div>
                <div class="task-scroll">
                  <div class="task-card">
                    <div class="task-image">
                      🐟
                      <div class="task-tag" style="background: #4A7C5B">自然探客</div>
                    </div>
                    <div class="task-info">
                      <div class="task-name">稻鱼共生探秘</div>
                      <div class="task-location">📍 稻鱼共生区</div>
                      <div class="task-reward">+20积分</div>
                    </div>
                  </div>
                  <div class="task-card">
                    <div class="task-image">
                      🏺
                      <div class="task-tag" style="background: #8B7355">匠心农人</div>
                    </div>
                    <div class="task-info">
                      <div class="task-name">陶艺大师体验</div>
                      <div class="task-location">📍 手工陶体验基地</div>
                      <div class="task-reward">+30积分 🏅</div>
                    </div>
                  </div>
                  <div class="task-card">
                    <div class="task-image">
                      🎣
                      <div class="task-tag" style="background: #D4A84B">田园美食家</div>
                    </div>
                    <div class="task-info">
                      <div class="task-name">稻花鱼捕捞</div>
                      <div class="task-location">📍 鱼稻共生区</div>
                      <div class="task-reward">+40积分 🏅</div>
                    </div>
                  </div>
                </div>
              </div>

              <div class="section">
                <div class="section-header">
                  <div class="section-title">热门活动</div>
                  <div class="section-more">更多活动 ›</div>
                </div>
                <div class="activity-card">
                  <div class="activity-image">🎨</div>
                  <div class="activity-info">
                    <div class="activity-tags">
                      <span class="tag tag-hot">热门</span>
                      <span class="tag tag-book">需预约</span>
                    </div>
                    <div class="activity-name">非遗大师专场·陶艺体验</div>
                    <div class="activity-desc">省级非遗传承人现场示范教学</div>
                    <div class="activity-bottom">
                      <div class="activity-time">⏰ 10:00/13:00/15:00</div>
                      <div class="activity-price">¥68</div>
                    </div>
                  </div>
                </div>
                <div class="activity-card">
                  <div class="activity-image">🎸</div>
                  <div class="activity-info">
                    <div class="activity-tags">
                      <span class="tag tag-hot">热门</span>
                    </div>
                    <div class="activity-name">稻田晚风音乐会</div>
                    <div class="activity-desc">在星空下聆听民谣,享受慢时光</div>
                    <div class="activity-bottom">
                      <div class="activity-time">⏰ 每日 19:00-21:00</div>
                      <div class="activity-price free">免费</div>
                    </div>
                  </div>
                </div>
              </div>
              <div style="height: 60px;"></div>
            </div>

            <!-- 数字护照 -->
            <div class="page" id="page-passport">
              <div class="passport-header">
                <div class="role-avatar">🌿</div>
                <div class="role-name">自然探客</div>
                <div class="passport-id">NO. LSZ20241128001</div>
              </div>
              <div class="stats-card">
                <div class="stats-row">
                  <div class="stat-item">
                    <div class="stat-value">320</div>
                    <div class="stat-label">积分</div>
                  </div>
                  <div class="stat-item">
                    <div class="stat-value">5</div>
                    <div class="stat-label">勋章</div>
                  </div>
                  <div class="stat-item">
                    <div class="stat-value">8</div>
                    <div class="stat-label">已完成任务</div>
                  </div>
                </div>
                <div class="level-info">
                  <div class="level-label">当前等级:<span class="level-name">林间新客</span></div>
                  <div class="progress-bar">
                    <div class="progress-inner"></div>
                  </div>
                  <div class="progress-text">距下一等级还需 180 积分</div>
                </div>
              </div>

              <div class="badges-section">
                <div class="section-header">
                  <div class="section-title">我的勋章</div>
                  <div class="section-more">5/12</div>
                </div>
                <div class="badges-grid">
                  <div class="badge-item">
                    <div class="badge-icon">🌱</div>
                    <div class="badge-name">初入田园</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon">🐟</div>
                    <div class="badge-name">稻鱼知音</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon">🏺</div>
                    <div class="badge-name">匠心章</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon">📸</div>
                    <div class="badge-name">打卡达人</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon">🍵</div>
                    <div class="badge-name">茶隐居士</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon locked">❓</div>
                    <div class="badge-name">待解锁</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon locked">❓</div>
                    <div class="badge-name">待解锁</div>
                  </div>
                  <div class="badge-item">
                    <div class="badge-icon locked">❓</div>
                    <div class="badge-name">待解锁</div>
                  </div>
                </div>
              </div>
              <div style="height: 60px;"></div>
            </div>

            <!-- 任务页面 -->
            <div class="page" id="page-tasks">
              <div class="role-tabs">
                <div class="role-tab active">全部任务</div>
                <div class="role-tab">🌿 自然探客</div>
                <div class="role-tab">🏺 匠心农人</div>
                <div class="role-tab">🍜 田园美食家</div>
                <div class="role-tab">☁️ 云间隐士</div>
              </div>
              <div class="task-stats">
                <div class="task-stat">
                  <div class="task-stat-num">16</div>
                  <div class="task-stat-label">全部任务</div>
                </div>
                <div class="task-stat">
                  <div class="task-stat-num primary">8</div>
                  <div class="task-stat-label">已完成</div>
                </div>
                <div class="task-stat">
                  <div class="task-stat-num accent">240</div>
                  <div class="task-stat-label">可获积分</div>
                </div>
              </div>

              <div class="task-group">
                <div class="group-header" style="border-color: #4A7C5B">
                  <span class="group-icon">🌿</span>
                  <span class="group-name">自然探客</span>
                  <span class="group-count">3/4</span>
                </div>
                <div class="task-item">
                  <div class="task-status done">✓</div>
                  <div class="task-content">
                    <div class="task-item-name">稻鱼共生探秘</div>
                    <div class="task-item-location">📍 稻鱼共生区</div>
                  </div>
                  <div class="task-points">+20</div>
                </div>
                <div class="task-item">
                  <div class="task-status done">✓</div>
                  <div class="task-content">
                    <div class="task-item-name">观鸟寻踪</div>
                    <div class="task-item-location">📍 白鹭洲</div>
                  </div>
                  <div class="task-points">+25</div>
                </div>
                <div class="task-item">
                  <div class="task-status"></div>
                  <div class="task-content">
                    <div class="task-item-name">夜观萤火</div>
                    <div class="task-item-location">📍 生态长廊</div>
                  </div>
                  <div class="task-points">+30</div>
                </div>
              </div>

              <div class="task-group">
                <div class="group-header" style="border-color: #8B7355">
                  <span class="group-icon">🏺</span>
                  <span class="group-name">匠心农人</span>
                  <span class="group-count">2/4</span>
                </div>
                <div class="task-item">
                  <div class="task-status done">✓</div>
                  <div class="task-content">
                    <div class="task-item-name">陶艺大师体验</div>
                    <div class="task-item-location">📍 手工陶体验基地</div>
                  </div>
                  <div class="task-points">+30</div>
                </div>
                <div class="task-item">
                  <div class="task-status"></div>
                  <div class="task-content">
                    <div class="task-item-name">竹编工艺</div>
                    <div class="task-item-location">📍 非遗传习所</div>
                  </div>
                  <div class="task-points">+35</div>
                </div>
              </div>

              <div class="scan-btn">
                📷
                <span>打卡</span>
              </div>
              <div style="height: 80px;"></div>
            </div>

            <!-- 商城页面 -->
            <div class="page" id="page-mall">
              <div class="points-header">
                <div class="points-label">我的积分</div>
                <div class="points-value">320</div>
                <div class="points-actions">
                  <div class="points-action">积分明细</div>
                  <div class="points-action">我的兑换</div>
                </div>
              </div>
              <div class="category-tabs">
                <div class="category-tab active">全部</div>
                <div class="category-tab">特产礼盒</div>
                <div class="category-tab">手工艺品</div>
                <div class="category-tab">体验券</div>
              </div>
              <div class="goods-list">
                <div class="goods-item">
                  <div class="goods-image">🍚</div>
                  <div class="goods-info">
                    <div class="goods-name">林水寨有机大米 2kg</div>
                    <div class="goods-desc">稻鱼共生 生态种植</div>
                    <div class="goods-bottom">
                      <div class="goods-price">200 <span>积分</span></div>
                      <div class="exchange-btn">兑换</div>
                    </div>
                  </div>
                </div>
                <div class="goods-item">
                  <div class="goods-image">🏺</div>
                  <div class="goods-info">
                    <div class="goods-name">手工陶茶杯</div>
                    <div class="goods-desc">非遗传承人手作</div>
                    <div class="goods-bottom">
                      <div class="goods-price">350 <span>积分</span></div>
                      <div class="exchange-btn">兑换</div>
                    </div>
                  </div>
                </div>
                <div class="goods-item">
                  <div class="goods-image">🎫</div>
                  <div class="goods-info">
                    <div class="goods-name">陶艺体验券</div>
                    <div class="goods-desc">价值68元 含材料费</div>
                    <div class="goods-bottom">
                      <div class="goods-price">150 <span>积分+¥30</span></div>
                      <div class="exchange-btn">兑换</div>
                    </div>
                  </div>
                </div>
                <div class="goods-item">
                  <div class="goods-image">🍵</div>
                  <div class="goods-info">
                    <div class="goods-name">雅瑞轩高山茶</div>
                    <div class="goods-desc">明前春茶 100g</div>
                    <div class="goods-bottom">
                      <div class="goods-price">280 <span>积分</span></div>
                      <div class="exchange-btn">兑换</div>
                    </div>
                  </div>
                </div>
              </div>
              <div style="height: 60px;"></div>
            </div>

            <!-- 个人中心 -->
            <div class="page" id="page-profile">
              <div class="profile-header">
                <div class="avatar">👤</div>
                <div class="user-detail">
                  <div class="user-name">田园旅人</div>
                  <div class="user-level">林间新客</div>
                </div>
                <div class="user-role-badge">
                  <span>🌿</span>
                  <span>自然探客</span>
                </div>
              </div>
              <div class="profile-stats">
                <div class="profile-stat">
                  <div class="profile-stat-value">320</div>
                  <div class="profile-stat-label">积分</div>
                </div>
                <div class="profile-stat">
                  <div class="profile-stat-value">5</div>
                  <div class="profile-stat-label">勋章</div>
                </div>
                <div class="profile-stat">
                  <div class="profile-stat-value">12</div>
                  <div class="profile-stat-label">打卡</div>
                </div>
                <div class="profile-stat">
                  <div class="profile-stat-value">3</div>
                  <div class="profile-stat-label">订单</div>
                </div>
              </div>
              <div class="service-card">
                <div class="service-title">我的服务</div>
                <div class="service-grid">
                  <div class="service-item">
                    <div class="service-icon">📅</div>
                    <div class="service-name">我的预约</div>
                  </div>
                  <div class="service-item">
                    <div class="service-icon">🌾</div>
                    <div class="service-name">我的认养</div>
                  </div>
                  <div class="service-item">
                    <div class="service-icon">🎫</div>
                    <div class="service-name">优惠券</div>
                  </div>
                  <div class="service-item">
                    <div class="service-icon">💌</div>
                    <div class="service-name">邀请好友</div>
                  </div>
                </div>
              </div>
              <div class="menu-list">
                <div class="menu-item">
                  <span class="menu-icon">📊</span>
                  <span class="menu-name">积分明细</span>
                  <span class="menu-arrow">›</span>
                </div>
                <div class="menu-item">
                  <span class="menu-icon">💬</span>
                  <span class="menu-name">意见反馈</span>
                  <span class="menu-arrow">›</span>
                </div>
                <div class="menu-item">
                  <span class="menu-icon">🎧</span>
                  <span class="menu-name">联系客服</span>
                  <span class="menu-arrow">›</span>
                </div>
                <div class="menu-item">
                  <span class="menu-icon">ℹ️</span>
                  <span class="menu-name">关于我们</span>
                  <span class="menu-arrow">›</span>
                </div>
                <div class="menu-item">
                  <span class="menu-icon">⚙️</span>
                  <span class="menu-name">设置</span>
                  <span class="menu-arrow">›</span>
                </div>
              </div>
              <div style="height: 60px;"></div>
            </div>
          </div>

          <div class="tab-bar" id="tabBar1">
            <div class="tab-item active" data-page="home" onclick="switchPage(this, 1)">
              <div class="tab-icon">🏠</div>
              <span>首页</span>
            </div>
            <div class="tab-item" data-page="passport" onclick="switchPage(this, 1)">
              <div class="tab-icon">📖</div>
              <span>数字护照</span>
            </div>
            <div class="tab-item" data-page="tasks" onclick="switchPage(this, 1)">
              <div class="tab-icon">📋</div>
              <span>任务</span>
            </div>
            <div class="tab-item" data-page="mall" onclick="switchPage(this, 1)">
              <div class="tab-icon">🛒</div>
              <span>商城</span>
            </div>
            <div class="tab-item" data-page="profile" onclick="switchPage(this, 1)">
              <div class="tab-icon">👤</div>
              <span>我的</span>
            </div>
          </div>
        </div>
      </div>
    </div>

    <!-- 手机2: 打卡页面 -->
    <div class="phone-wrapper">
      <div class="phone-label">打卡功能</div>
      <div class="phone-frame">
        <div class="phone-screen">
          <div class="status-bar">
            <span>9:41</span>
            <div class="status-icons">
              <span>📶</span>
              <span>🔋</span>
            </div>
          </div>
          <div class="nav-bar">打卡</div>
          
          <div class="page-content">
            <div class="checkin-spot">
              <div class="spot-name">稻田观景台</div>
              <div class="spot-desc">登高望远,尽览田园风光</div>
              <div class="spot-count">🔥 3256人已打卡</div>
            </div>

            <div class="checkin-form">
              <div class="form-card">
                <div class="task-tag" style="background: #4A7C5B; display: inline-block; margin-bottom: 10px; padding: 4px 10px; border-radius: 12px; color: #fff; font-size: 11px;">自然探客</div>
                <div style="font-size: 14px; font-weight: 500; margin-bottom: 5px;">稻鱼共生探秘</div>
                <div style="font-size: 12px; color: var(--accent);">完成可得 +20积分</div>
              </div>

              <div class="form-card">
                <div class="form-title">记录你的田园时光</div>
                <div class="photo-grid">
                  <div class="photo-item filled">🌾</div>
                  <div class="photo-item filled">🏞️</div>
                  <div class="photo-add">
                    <div class="photo-add-icon">📷</div>
                    <div class="photo-add-text">添加照片</div>
                  </div>
                </div>
                <div class="textarea-wrap">
                  <div class="textarea-placeholder">分享你的打卡心得...</div>
                </div>
                <div class="word-count">0/200</div>
                <div class="location-bar">
                  <span class="location-icon">📍</span>
                  <span>点击获取位置</span>
                </div>
              </div>

              <div class="form-card">
                <div style="font-size: 13px; color: var(--text-secondary); margin-bottom: 10px;">同步分享到</div>
                <div style="display: flex; gap: 15px;">
                  <div style="display: flex; align-items: center; gap: 5px; padding: 8px 12px; background: var(--bg); border-radius: 20px; font-size: 12px;">
                    <span>💬</span> 朋友圈
                  </div>
                  <div style="display: flex; align-items: center; gap: 5px; padding: 8px 12px; background: var(--bg); border-radius: 20px; font-size: 12px;">
                    <span>🎵</span> 抖音
                  </div>
                  <div style="display: flex; align-items: center; gap: 5px; padding: 8px 12px; background: var(--bg); border-radius: 20px; font-size: 12px;">
                    <span>📕</span> 小红书
                  </div>
                </div>
                <div style="display: flex; align-items: center; gap: 5px; margin-top: 12px; font-size: 12px; color: var(--accent);">
                  <span>🎁</span> 首次分享可额外获得50积分
                </div>
              </div>

              <button class="submit-btn">完成打卡</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div class="instructions">
    <h3>🌿 云上林水寨 · 小程序功能亮点</h3>
    <p>一款以"数字护照+角色扮演"为核心的田园文旅小程序</p>
    <div class="feature-list">
      <span class="feature-tag">🎭 四大角色体系</span>
      <span class="feature-tag">📖 数字护照</span>
      <span class="feature-tag">📍 景点打卡</span>
      <span class="feature-tag">🏅 勋章收集</span>
      <span class="feature-tag">📋 任务系统</span>
      <span class="feature-tag">🛒 积分商城</span>
      <span class="feature-tag">🌾 数字认养</span>
      <span class="feature-tag">📅 活动预约</span>
    </div>
  </div>

  <script>
    function switchPage(el, phoneIndex) {
      const pageName = el.dataset.page;
      const tabBar = document.getElementById('tabBar' + phoneIndex);
      const pageContent = document.getElementById('pageContent' + phoneIndex);
      
      // 切换tab状态
      tabBar.querySelectorAll('.tab-item').forEach(tab => tab.classList.remove('active'));
      el.classList.add('active');
      
      // 切换页面
      pageContent.querySelectorAll('.page').forEach(page => page.classList.remove('active'));
      document.getElementById('page-' + pageName).classList.add('active');
      
      // 滚动到顶部
      pageContent.scrollTop = 0;
    }
  </script>
</body>
</html>

        
编辑器加载中
预览
控制台