440 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			440 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			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>
 | ||
|     <style>
 | ||
|         * {
 | ||
|             margin: 0;
 | ||
|             padding: 0;
 | ||
|             box-sizing: border-box;
 | ||
|         }
 | ||
| 
 | ||
|         body {
 | ||
|             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
 | ||
|             background-color: rgba(0, 0, 0, 0.5);
 | ||
|             display: flex;
 | ||
|             justify-content: center;
 | ||
|             align-items: center;
 | ||
|             min-height: 100vh;
 | ||
|             padding: 20px;
 | ||
|         }
 | ||
| 
 | ||
|         .modal {
 | ||
|             background: white;
 | ||
|             border-radius: 8px;
 | ||
|             box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
 | ||
|             width: 100%;
 | ||
|             max-width: 500px;
 | ||
|             position: relative;
 | ||
|             overflow: hidden;
 | ||
|         }
 | ||
| 
 | ||
|         .modal-header {
 | ||
|             display: flex;
 | ||
|             justify-content: space-between;
 | ||
|             align-items: center;
 | ||
|             padding: 20px 24px;
 | ||
|             border-bottom: 1px solid #f0f0f0;
 | ||
|             background-color: #fafafa;
 | ||
|         }
 | ||
| 
 | ||
|         .modal-title {
 | ||
|             font-size: 18px;
 | ||
|             font-weight: 600;
 | ||
|             color: #333;
 | ||
|         }
 | ||
| 
 | ||
|         .points-type-badge {
 | ||
|             background: #52c41a;
 | ||
|             color: white;
 | ||
|             padding: 4px 8px;
 | ||
|             border-radius: 4px;
 | ||
|             font-size: 12px;
 | ||
|             margin-left: 8px;
 | ||
|         }
 | ||
| 
 | ||
|         .close-btn {
 | ||
|             width: 24px;
 | ||
|             height: 24px;
 | ||
|             border: none;
 | ||
|             background: none;
 | ||
|             cursor: pointer;
 | ||
|             display: flex;
 | ||
|             align-items: center;
 | ||
|             justify-content: center;
 | ||
|             color: #666;
 | ||
|             font-size: 18px;
 | ||
|             border-radius: 4px;
 | ||
|             transition: background-color 0.2s;
 | ||
|         }
 | ||
| 
 | ||
|         .close-btn:hover {
 | ||
|             background-color: #f5f5f5;
 | ||
|         }
 | ||
| 
 | ||
|         .modal-content {
 | ||
|             padding: 24px;
 | ||
|         }
 | ||
| 
 | ||
|         .product-info {
 | ||
|             margin-bottom: 24px;
 | ||
|             padding: 16px;
 | ||
|             background-color: #f8f9fa;
 | ||
|             border-radius: 6px;
 | ||
|             border: 1px solid #e9ecef;
 | ||
|         }
 | ||
| 
 | ||
|         .info-row {
 | ||
|             display: flex;
 | ||
|             margin-bottom: 8px;
 | ||
|             font-size: 14px;
 | ||
|         }
 | ||
| 
 | ||
|         .info-row:last-child {
 | ||
|             margin-bottom: 0;
 | ||
|         }
 | ||
| 
 | ||
|         .info-label {
 | ||
|             color: #666;
 | ||
|             width: 80px;
 | ||
|             flex-shrink: 0;
 | ||
|         }
 | ||
| 
 | ||
|         .info-value {
 | ||
|             color: #333;
 | ||
|             flex: 1;
 | ||
|         }
 | ||
| 
 | ||
|         .form-group {
 | ||
|             margin-bottom: 20px;
 | ||
|         }
 | ||
| 
 | ||
|         .form-label {
 | ||
|             display: block;
 | ||
|             margin-bottom: 8px;
 | ||
|             font-size: 14px;
 | ||
|             color: #333;
 | ||
|             font-weight: 500;
 | ||
|         }
 | ||
| 
 | ||
|         .required {
 | ||
|             color: #ff4757;
 | ||
|         }
 | ||
| 
 | ||
|         .input-wrapper {
 | ||
|             position: relative;
 | ||
|         }
 | ||
| 
 | ||
|         .form-input {
 | ||
|             width: 100%;
 | ||
|             padding: 10px 12px;
 | ||
|             border: 1px solid #d9d9d9;
 | ||
|             border-radius: 4px;
 | ||
|             font-size: 14px;
 | ||
|             transition: border-color 0.2s;
 | ||
|         }
 | ||
| 
 | ||
|         .form-input:focus {
 | ||
|             outline: none;
 | ||
|             border-color: #1890ff;
 | ||
|             box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
 | ||
|         }
 | ||
| 
 | ||
|         .number-input-group {
 | ||
|             display: flex;
 | ||
|             align-items: center;
 | ||
|             border: 1px solid #d9d9d9;
 | ||
|             border-radius: 4px;
 | ||
|             overflow: hidden;
 | ||
|             background: white;
 | ||
|         }
 | ||
| 
 | ||
|         .number-input-group:focus-within {
 | ||
|             border-color: #1890ff;
 | ||
|             box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
 | ||
|         }
 | ||
| 
 | ||
|         .number-btn {
 | ||
|             width: 32px;
 | ||
|             height: 40px;
 | ||
|             border: none;
 | ||
|             background: #fafafa;
 | ||
|             cursor: pointer;
 | ||
|             display: flex;
 | ||
|             align-items: center;
 | ||
|             justify-content: center;
 | ||
|             font-size: 16px;
 | ||
|             color: #666;
 | ||
|             transition: background-color 0.2s;
 | ||
|         }
 | ||
| 
 | ||
|         .number-btn:hover {
 | ||
|             background-color: #f0f0f0;
 | ||
|         }
 | ||
| 
 | ||
|         .number-btn:disabled {
 | ||
|             cursor: not-allowed;
 | ||
|             color: #ccc;
 | ||
|         }
 | ||
| 
 | ||
|         .number-input {
 | ||
|             flex: 1;
 | ||
|             border: none;
 | ||
|             padding: 10px 12px;
 | ||
|             font-size: 14px;
 | ||
|             text-align: center;
 | ||
|             outline: none;
 | ||
|         }
 | ||
| 
 | ||
|         .price-info {
 | ||
|             background: #fff7e6;
 | ||
|             border: 1px solid #ffd591;
 | ||
|             border-radius: 4px;
 | ||
|             padding: 12px;
 | ||
|             margin-top: 8px;
 | ||
|             font-size: 13px;
 | ||
|             color: #d46b08;
 | ||
|         }
 | ||
| 
 | ||
|         .modal-footer {
 | ||
|             padding: 16px 24px;
 | ||
|             border-top: 1px solid #f0f0f0;
 | ||
|             display: flex;
 | ||
|             gap: 12px;
 | ||
|             justify-content: flex-end;
 | ||
|         }
 | ||
| 
 | ||
|         .btn {
 | ||
|             padding: 8px 24px;
 | ||
|             border-radius: 4px;
 | ||
|             font-size: 14px;
 | ||
|             cursor: pointer;
 | ||
|             transition: all 0.2s;
 | ||
|             border: 1px solid;
 | ||
|             min-width: 80px;
 | ||
|         }
 | ||
| 
 | ||
|         .btn-cancel {
 | ||
|             background: white;
 | ||
|             color: #666;
 | ||
|             border-color: #d9d9d9;
 | ||
|         }
 | ||
| 
 | ||
|         .btn-cancel:hover {
 | ||
|             background: #f5f5f5;
 | ||
|             border-color: #bfbfbf;
 | ||
|         }
 | ||
| 
 | ||
|         .btn-primary {
 | ||
|             background: #1890ff;
 | ||
|             color: white;
 | ||
|             border-color: #1890ff;
 | ||
|         }
 | ||
| 
 | ||
|         .btn-primary:hover {
 | ||
|             background: #40a9ff;
 | ||
|             border-color: #40a9ff;
 | ||
|         }
 | ||
| 
 | ||
|         @media (max-width: 480px) {
 | ||
|             .modal {
 | ||
|                 margin: 0;
 | ||
|                 border-radius: 0;
 | ||
|                 height: 100vh;
 | ||
|                 max-width: none;
 | ||
|             }
 | ||
|             
 | ||
|             .modal-content {
 | ||
|                 padding: 20px;
 | ||
|             }
 | ||
|             
 | ||
|             .modal-footer {
 | ||
|                 padding: 16px 20px;
 | ||
|             }
 | ||
|             
 | ||
|             .btn {
 | ||
|                 flex: 1;
 | ||
|             }
 | ||
|         }
 | ||
|     </style>
 | ||
| </head>
 | ||
| <body>
 | ||
|     <div class="modal">
 | ||
|         <div class="modal-header">
 | ||
|             <h2 class="modal-title">
 | ||
|                 已选择商品
 | ||
|                 <span class="points-type-badge">积分优惠购</span>
 | ||
|             </h2>
 | ||
|             <button class="close-btn" onclick="closeModal()">×</button>
 | ||
|         </div>
 | ||
|         
 | ||
|         <div class="modal-content">
 | ||
|             <div class="product-info">
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">商品ID:</span>
 | ||
|                     <span class="info-value">192401649879976960</span>
 | ||
|                 </div>
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">商品名称:</span>
 | ||
|                     <span class="info-value">黑木耳</span>
 | ||
|                 </div>
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">归属摊位:</span>
 | ||
|                     <span class="info-value">牛生蔬菜店</span>
 | ||
|                 </div>
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">规格名称:</span>
 | ||
|                     <span class="info-value">小份</span>
 | ||
|                 </div>
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">SKU-ID:</span>
 | ||
|                     <span class="info-value">194105142774503836</span>
 | ||
|                 </div>
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">商品原价:</span>
 | ||
|                     <span class="info-value">¥12.80</span>
 | ||
|                 </div>
 | ||
|                 <div class="info-row">
 | ||
|                     <span class="info-label">当前剩余库存:</span>
 | ||
|                     <span class="info-value">50</span>
 | ||
|                 </div>
 | ||
|             </div>
 | ||
| 
 | ||
|             <div class="form-group">
 | ||
|                 <label class="form-label">添加库存(负数代表减少库存) <span class="required">*</span></label>
 | ||
|                 <div class="number-input-group">
 | ||
|                     <button class="number-btn" onclick="decreaseStock()">-</button>
 | ||
|                     <input type="number" class="number-input" id="stockInput" value="10" min="0">
 | ||
|                     <button class="number-btn" onclick="increaseStock()">+</button>
 | ||
|                 </div>
 | ||
|             </div>
 | ||
| 
 | ||
|             <div class="form-group">
 | ||
|                 <label class="form-label">优惠购所需积分 <span class="required">*</span></label>
 | ||
|                 <div class="number-input-group">
 | ||
|                     <button class="number-btn" onclick="decreaseDiscountPoints()">-</button>
 | ||
|                     <input type="number" class="number-input" id="discountPointsInput" value="100" min="1">
 | ||
|                     <button class="number-btn" onclick="increaseDiscountPoints()">+</button>
 | ||
|                 </div>
 | ||
|             </div>
 | ||
| 
 | ||
|             <div class="form-group">
 | ||
|                 <label class="form-label">优惠购商品价格 <span class="required">*</span></label>
 | ||
|                 <div class="input-wrapper">
 | ||
|                     <input type="number" class="form-input" id="discountPriceInput" placeholder="请输入优惠购价格" step="0.01" min="0" value="8.80">
 | ||
|                 </div>
 | ||
|                 <div class="price-info">
 | ||
|                     提示:用户需要支付 <span id="discountPointsDisplay">100</span> 积分 + ¥<span id="discountPriceDisplay">8.80</span> 即可购买此商品
 | ||
|                 </div>
 | ||
|             </div>
 | ||
|         </div>
 | ||
| 
 | ||
|         <div class="modal-footer">
 | ||
|             <button class="btn btn-cancel" onclick="closeModal()">取消</button>
 | ||
|             <button class="btn btn-primary" onclick="confirmSelection()">确认</button>
 | ||
|         </div>
 | ||
|     </div>
 | ||
| 
 | ||
|     <script>
 | ||
|         // 优惠购积分设置
 | ||
|         function increaseDiscountPoints() {
 | ||
|             const input = document.getElementById('discountPointsInput');
 | ||
|             input.value = parseInt(input.value) + 1;
 | ||
|             updatePriceInfo();
 | ||
|         }
 | ||
| 
 | ||
|         function decreaseDiscountPoints() {
 | ||
|             const input = document.getElementById('discountPointsInput');
 | ||
|             const currentValue = parseInt(input.value);
 | ||
|             if (currentValue > 1) {
 | ||
|                 input.value = currentValue - 1;
 | ||
|                 updatePriceInfo();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         // 库存设置
 | ||
|         function increaseStock() {
 | ||
|             const input = document.getElementById('stockInput');
 | ||
|             input.value = parseInt(input.value) + 1;
 | ||
|         }
 | ||
| 
 | ||
|         function decreaseStock() {
 | ||
|             const input = document.getElementById('stockInput');
 | ||
|             const currentValue = parseInt(input.value);
 | ||
|             if (currentValue > 0) {
 | ||
|                 input.value = currentValue - 1;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         // 更新价格提示信息
 | ||
|         function updatePriceInfo() {
 | ||
|             const points = document.getElementById('discountPointsInput').value;
 | ||
|             const price = document.getElementById('discountPriceInput').value;
 | ||
|             
 | ||
|             document.getElementById('discountPointsDisplay').textContent = points;
 | ||
|             document.getElementById('discountPriceDisplay').textContent = price || '0.00';
 | ||
|         }
 | ||
| 
 | ||
|         // 关闭弹窗
 | ||
|         function closeModal() {
 | ||
|             console.log('关闭弹窗');
 | ||
|         }
 | ||
| 
 | ||
|         // 确认选择
 | ||
|         function confirmSelection() {
 | ||
|             const stock = document.getElementById('stockInput').value;
 | ||
|             const discountPoints = document.getElementById('discountPointsInput').value;
 | ||
|             const discountPrice = document.getElementById('discountPriceInput').value;
 | ||
|             
 | ||
|             if (!discountPoints || !stock || !discountPrice) {
 | ||
|                 alert('请填写所有必填项');
 | ||
|                 return;
 | ||
|             }
 | ||
| 
 | ||
|             if (parseFloat(discountPrice) < 0) {
 | ||
|                 alert('优惠购价格不能为负数');
 | ||
|                 return;
 | ||
|             }
 | ||
|             
 | ||
|             const data = {
 | ||
|                 productId: '192401649879976960',
 | ||
|                 productName: '黑木耳',
 | ||
|                 shopName: '牛生蔬菜店',
 | ||
|                 skuId: '194105142774503836',
 | ||
|                 pointsType: 'discount',
 | ||
|                 stock: stock,
 | ||
|                 discountPoints: discountPoints,
 | ||
|                 discountPrice: discountPrice
 | ||
|             };
 | ||
| 
 | ||
|             console.log('提交数据:', data);
 | ||
|             alert('积分优惠购设置成功!');
 | ||
|         }
 | ||
| 
 | ||
|         // 监听价格输入变化
 | ||
|         document.getElementById('discountPriceInput').addEventListener('input', updatePriceInfo);
 | ||
|         document.getElementById('discountPointsInput').addEventListener('input', updatePriceInfo);
 | ||
| 
 | ||
|         // 键盘事件处理
 | ||
|         document.addEventListener('keydown', function(e) {
 | ||
|             if (e.key === 'Escape') {
 | ||
|                 closeModal();
 | ||
|             }
 | ||
|         });
 | ||
| 
 | ||
|         // 点击背景关闭弹窗
 | ||
|         document.addEventListener('click', function(e) {
 | ||
|             if (e.target === document.body) {
 | ||
|                 closeModal();
 | ||
|             }
 | ||
|         });
 | ||
| 
 | ||
|         // 页面加载时初始化
 | ||
|         document.addEventListener('DOMContentLoaded', function() {
 | ||
|             updatePriceInfo();
 | ||
|         });
 | ||
|     </script>
 | ||
| </body>
 | ||
| </html> |