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

440 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: #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>