dm-design/商家端web/2.1 营销工具/2.1.1 会员功能/积分商城/添加商品-积分换购-弹窗.html

449 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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: #fa8c16;
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;
background-color: #f5f5f5;
}
.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;
}
.exchange-info {
background: #fff2e8;
border: 1px solid #ffbb96;
border-radius: 4px;
padding: 12px;
margin-top: 8px;
font-size: 13px;
color: #d4380d;
}
.exchange-note {
background: #e6f7ff;
border: 1px solid #91d5ff;
border-radius: 4px;
padding: 12px;
margin-top: 8px;
font-size: 13px;
color: #0050b3;
}
.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="decreasePoints()">-</button>
<input type="number" class="number-input" id="pointsInput" value="1280" min="1">
<button class="number-btn" onclick="increasePoints()">+</button>
</div>
<div class="exchange-info">
用户需要支付 <span id="pointsDisplay">1280</span> 积分 + ¥0.01 即可兑换此商品
</div>
</div>
<div class="form-group">
<label class="form-label">最低兑换金额商业支付最少0.01元)</label>
<div class="input-wrapper">
<input type="text" class="form-input" value="¥0.01" readonly>
</div>
<div class="exchange-note">
提示为符合商业支付规范用户在使用积分兑换时仍需支付最少0.01元的金额
</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 increasePoints() {
const input = document.getElementById('pointsInput');
input.value = parseInt(input.value) + 10;
updateExchangeInfo();
}
function decreasePoints() {
const input = document.getElementById('pointsInput');
const currentValue = parseInt(input.value);
if (currentValue > 1) {
input.value = Math.max(1, currentValue - 10);
updateExchangeInfo();
}
}
// 库存设置
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 updateExchangeInfo() {
const points = document.getElementById('pointsInput').value;
document.getElementById('pointsDisplay').textContent = points;
}
// 关闭弹窗
function closeModal() {
console.log('关闭弹窗');
}
// 确认选择
function confirmSelection() {
const stock = document.getElementById('stockInput').value;
const points = document.getElementById('pointsInput').value;
if (!points || !stock) {
alert('请填写所有必填项');
return;
}
if (parseInt(points) < 1) {
alert('兑换积分不能小于1');
return;
}
const data = {
productId: '192401649879976960',
productName: '黑木耳',
shopName: '牛生蔬菜店',
skuId: '194105142774503836',
pointsType: 'exchange',
stock: stock,
points: points,
minPayment: 0.01
};
console.log('提交数据:', data);
alert('积分换购设置成功!');
}
// 监听积分输入变化
document.getElementById('pointsInput').addEventListener('input', updateExchangeInfo);
// 键盘事件处理
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() {
updateExchangeInfo();
});
</script>
</body>
</html>