dm-design/商家端APP/工作台/市场配置/移动端摊位创建.html

871 lines
29 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<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: #f5f7fa;
padding-bottom: 20px;
}
/* 头部 */
.header {
background: linear-gradient(135deg, #409eff, #66b1ff);
color: white;
padding: 15px;
box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2);
display: flex;
align-items: center;
}
.back-btn {
background: none;
border: none;
color: white;
font-size: 20px;
padding: 0 10px 0 0;
cursor: pointer;
}
.page-title {
font-size: 18px;
font-weight: 500;
flex: 1;
text-align: center;
padding-right: 30px;
}
/* 表单区域 */
.form-container {
padding: 0;
}
.form-section {
background: white;
margin-bottom: 12px;
padding: 15px;
}
.section-title {
font-size: 16px;
color: #303133;
font-weight: 600;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #f0f0f0;
}
.form-group {
margin-bottom: 15px;
}
.form-group:last-child {
margin-bottom: 0;
}
.form-label {
display: block;
color: #606266;
font-size: 14px;
margin-bottom: 8px;
font-weight: 500;
}
.form-label.required::before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
.form-input,
.form-select,
.form-textarea {
width: 100%;
padding: 12px;
border: 1px solid #dcdfe6;
border-radius: 8px;
font-size: 14px;
outline: none;
background: #f5f7fa;
transition: all 0.3s;
}
.form-input:focus,
.form-select:focus,
.form-textarea:focus {
border-color: #409eff;
background: white;
}
.form-input::placeholder,
.form-textarea::placeholder {
color: #c0c4cc;
}
.form-textarea {
resize: vertical;
min-height: 80px;
}
.form-hint {
color: #909399;
font-size: 12px;
margin-top: 5px;
line-height: 1.5;
}
/* 图片上传 */
.upload-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.upload-box {
width: 100px;
height: 100px;
border: 1px dashed #dcdfe6;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
background: #fafafa;
cursor: pointer;
transition: all 0.3s;
}
.upload-box:active {
transform: scale(0.95);
border-color: #409eff;
}
.upload-icon {
text-align: center;
}
.upload-icon-plus {
font-size: 32px;
color: #909399;
font-weight: 300;
}
.upload-icon-text {
font-size: 12px;
color: #909399;
margin-top: 5px;
}
/* 开关 */
.switch-container {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px;
background: #f5f7fa;
border-radius: 8px;
}
.switch-label-group {
display: flex;
align-items: center;
gap: 10px;
flex: 1;
}
.switch-text {
color: #606266;
font-size: 14px;
}
.switch {
position: relative;
display: inline-block;
width: 50px;
height: 28px;
flex-shrink: 0;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.switch-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #dcdfe6;
transition: 0.3s;
border-radius: 28px;
}
.switch-slider:before {
position: absolute;
content: "";
height: 22px;
width: 22px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.3s;
border-radius: 50%;
}
.switch input:checked + .switch-slider {
background-color: #409eff;
}
.switch input:checked + .switch-slider:before {
transform: translateX(22px);
}
/* 复选框组 */
.checkbox-group {
display: flex;
flex-direction: column;
gap: 12px;
}
.checkbox-option {
display: flex;
align-items: center;
padding: 10px;
background: #f5f7fa;
border-radius: 8px;
cursor: pointer;
}
.checkbox-option input[type="checkbox"] {
margin: 0 10px 0 0;
width: 18px;
height: 18px;
cursor: pointer;
}
.checkbox-option label {
color: #606266;
font-size: 14px;
cursor: pointer;
flex: 1;
}
/* 权限配置 */
.permission-section {
background: #f9fafc;
padding: 12px;
border-radius: 8px;
border: 1px solid #ebeef5;
}
.permission-all {
padding: 12px;
background: white;
border-radius: 8px;
margin-bottom: 12px;
}
.permission-sub-items {
display: flex;
flex-direction: column;
gap: 8px;
}
.permission-sub-items .checkbox-option {
padding-left: 30px;
}
/* 时间选择 */
.time-group {
display: flex;
align-items: center;
gap: 10px;
margin-top: 10px;
}
.time-input {
flex: 1;
padding: 12px;
border: 1px solid #dcdfe6;
border-radius: 8px;
font-size: 14px;
background: #f5f7fa;
}
.time-separator {
color: #909399;
font-size: 14px;
}
/* 单选框组 */
.radio-group {
display: flex;
gap: 15px;
flex-wrap: wrap;
}
.radio-option {
display: flex;
align-items: center;
gap: 5px;
}
.radio-option input[type="radio"] {
width: 18px;
height: 18px;
cursor: pointer;
}
.radio-option label {
color: #606266;
font-size: 14px;
cursor: pointer;
}
/* 底部按钮 */
.footer-btn {
padding: 0 15px 20px 15px;
}
.btn {
width: 100%;
padding: 14px;
border: none;
border-radius: 8px;
font-size: 16px;
font-weight: 500;
cursor: pointer;
transition: all 0.3s;
}
.btn-primary {
background: linear-gradient(135deg, #67c23a, #85ce61);
color: white;
}
.btn-primary:active {
transform: scale(0.98);
opacity: 0.9;
}
/* 隐藏元素 */
.hidden {
display: none;
}
/* 业务时间标签 */
.business-time-tags {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-top: 10px;
}
.business-tag {
padding: 6px 12px;
background: #ecf5ff;
color: #409eff;
border-radius: 15px;
font-size: 13px;
border: 1px solid #d9ecff;
}
.business-tag.active {
background: #409eff;
color: white;
border-color: #409eff;
}
</style>
</head>
<body>
<!-- 头部 -->
<div class="header">
<button class="back-btn" onclick="goBack()"></button>
<h1 class="page-title" id="pageTitle">创建摊位</h1>
</div>
<form id="createBoothForm" class="form-container">
<!-- 绑定收益人账号 -->
<div class="form-section" id="beneficiarySection">
<div class="section-title">绑定收益人账号</div>
<div class="form-group">
<label class="form-label required">操作类型</label>
<select class="form-select" id="operationType" onchange="handleOperationTypeChange()">
<option value="">请选择操作类型</option>
<option value="bind_market_manager">绑定收益人是市场经营者</option>
<option value="create_supplier">创建新收益人(供货商)</option>
<option value="bind_existing_supplier">绑定已存在的供货商账号</option>
</select>
</div>
<div class="form-group hidden" id="supplierAccountGroup">
<label class="form-label required">供货商手机号</label>
<input type="tel" class="form-input" id="supplierAccount" placeholder="请输入供货商手机号" maxlength="11">
</div>
<div class="form-group hidden" id="supplierNameGroup">
<label class="form-label required">供货商账号名称</label>
<input type="text" class="form-input" id="supplierName" placeholder="请输入供货商账号名称">
</div>
<div class="form-group hidden" id="supplierPasswordGroup">
<label class="form-label required">密码</label>
<input type="password" class="form-input" id="password" placeholder="请输入密码">
</div>
</div>
<!-- 权限配置 -->
<div class="form-section hidden" id="permissionSection">
<div class="section-title">权限配置</div>
<div class="permission-section">
<div class="permission-all">
<div class="checkbox-option">
<input type="checkbox" id="permissionAll" onchange="toggleAllPermissions()">
<label for="permissionAll"><strong>账号权限管理</strong></label>
</div>
</div>
<div class="permission-sub-items">
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm1">
<label for="perm1">订单权限管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm2">
<label for="perm2">订单管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm3">
<label for="perm3">商品管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm4">
<label for="perm4">数据分析</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm5">
<label for="perm5">内容管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm6">
<label for="perm6">运营管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm7">
<label for="perm7">银行卡管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm8">
<label for="perm8">优惠券统计工具管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm9">
<label for="perm9">营销工具管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm10">
<label for="perm10">等级规则</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm11">
<label for="perm11">会员营销工具管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm12">
<label for="perm12">钱包管理</label>
</div>
<div class="checkbox-option">
<input type="checkbox" class="sub-permission" id="perm13">
<label for="perm13">运营管理</label>
</div>
</div>
</div>
</div>
<!-- 店铺基础信息 -->
<div class="form-section">
<div class="section-title">店铺基础信息</div>
<div class="form-group">
<label class="form-label required">摊位名称</label>
<input type="text" class="form-input" id="boothName" placeholder="请输入摊位名称">
</div>
<div class="form-group">
<label class="form-label required">主营类目</label>
<select class="form-select" id="mainCategory">
<option value="">请选择主营类目</option>
<option value="seafood">海鲜水产</option>
<option value="meat">肉禽蛋</option>
<option value="vegetable">蔬菜</option>
<option value="fruit">水果</option>
<option value="grain">粮油调味</option>
<option value="other">其他</option>
</select>
</div>
<div class="form-group">
<label class="form-label required">摊位背景图</label>
<div class="upload-container">
<div class="upload-box" onclick="uploadImage('background')">
<div class="upload-icon">
<div class="upload-icon-plus">+</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">摊位联系电话</label>
<input type="tel" class="form-input" id="boothPhone" placeholder="请输入联系电话/手机号">
</div>
<div class="form-group">
<label class="form-label">摊位照片</label>
<div class="upload-container">
<div class="upload-box" onclick="uploadImage('photo')">
<div class="upload-icon">
<div class="upload-icon-plus">+</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label required">摊位位置</label>
<input type="text" class="form-input" id="boothLocation" placeholder="请输入摊位位置">
</div>
<div class="form-group">
<label class="form-label required">摊位详细地址</label>
<input type="text" class="form-input" id="boothDetailAddress" placeholder="请输入摊位详细地址">
</div>
<div class="form-group">
<label class="form-label">许可证</label>
<div class="upload-container">
<div class="upload-box" onclick="uploadImage('license1')">
<div class="upload-icon">
<div class="upload-icon-plus">+</div>
</div>
</div>
<div class="upload-box" onclick="uploadImage('license2')">
<div class="upload-icon">
<div class="upload-icon-plus">+</div>
</div>
</div>
</div>
</div>
</div>
<!-- 店铺配置 -->
<div class="form-section">
<div class="section-title">店铺配置</div>
<div class="form-group">
<label class="form-label">是否自动开放</label>
<div class="switch-container">
<span class="switch-text">自动营业</span>
<label class="switch">
<input type="checkbox" id="autoOpen" checked>
<span class="switch-slider"></span>
</label>
</div>
<div class="business-time-tags">
<span class="business-tag">00:00:00 至 23:59:00</span>
</div>
</div>
<div class="form-group">
<label class="form-label required">服务自提点位置</label>
<input type="text" class="form-input" id="pickupLocation" placeholder="请输入服务自提点位置">
</div>
<div class="form-group">
<label class="form-label required">自提点详细地址</label>
<input type="text" class="form-input" id="pickupDetailAddress" placeholder="请输入自提点详细地址">
</div>
<div class="form-group">
<label class="form-label">自提点示意图</label>
<div class="upload-container">
<div class="upload-box" onclick="uploadImage('pickup')">
<div class="upload-icon">
<div class="upload-icon-plus">+</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">承接送达承诺</label>
<div class="switch-container">
<span class="switch-text">是否自动承诺</span>
<label class="switch">
<input type="checkbox" id="deliveryPromise" checked>
<span class="switch-slider"></span>
</label>
</div>
</div>
<div class="form-group">
<label class="form-label">营业时间</label>
<div class="checkbox-group">
<div class="checkbox-option">
<input type="checkbox" id="everyday" checked>
<label for="everyday">每天</label>
</div>
<div class="checkbox-option">
<input type="checkbox" id="workday">
<label for="workday">工作日</label>
</div>
<div class="checkbox-option">
<input type="checkbox" id="custom">
<label for="custom">自定义</label>
</div>
</div>
<div class="time-group">
<input type="time" class="time-input" id="deliveryStartTime" value="00:00">
<span class="time-separator"></span>
<input type="time" class="time-input" id="deliveryEndTime" value="23:59">
</div>
</div>
<div class="form-group">
<label class="form-label">承诺送达时间</label>
<input type="number" class="form-input" id="deliveryTime" placeholder="请输入小时数">
<div class="form-hint">小时以内</div>
</div>
</div>
</form>
<!-- 底部按钮 -->
<div class="footer-btn">
<button type="button" class="btn btn-primary" onclick="submitForm()">保存</button>
</div>
<script>
// 返回上一页
function goBack() {
window.history.back();
}
// 页面加载时检测URL参数
window.addEventListener('DOMContentLoaded', function() {
const urlParams = new URLSearchParams(window.location.search);
const mode = urlParams.get('mode');
if (mode === 'edit') {
// 编辑模式:隐藏收益人账号部分,修改页面标题
document.getElementById('pageTitle').textContent = '编辑摊位';
document.getElementById('beneficiarySection').classList.add('hidden');
// 这里可以根据id参数加载摊位数据
const boothId = urlParams.get('id');
console.log('编辑摊位ID:', boothId);
// TODO: 调用后端API获取摊位详情并填充表单
}
});
// 处理操作类型变化
function handleOperationTypeChange() {
const operationType = document.getElementById('operationType').value;
const supplierAccountGroup = document.getElementById('supplierAccountGroup');
const supplierNameGroup = document.getElementById('supplierNameGroup');
const supplierPasswordGroup = document.getElementById('supplierPasswordGroup');
const permissionSection = document.getElementById('permissionSection');
if (operationType === 'create_supplier') {
// 创建新收益人 - 显示手机号、账号名称和密码
supplierAccountGroup.classList.remove('hidden');
supplierNameGroup.classList.remove('hidden');
supplierPasswordGroup.classList.remove('hidden');
permissionSection.classList.remove('hidden');
} else if (operationType === 'bind_existing_supplier') {
// 绑定已存在的供货商 - 只显示手机号
supplierAccountGroup.classList.remove('hidden');
supplierNameGroup.classList.add('hidden');
supplierPasswordGroup.classList.add('hidden');
permissionSection.classList.remove('hidden');
} else {
// 绑定市场经营者 - 隐藏所有
supplierAccountGroup.classList.add('hidden');
supplierNameGroup.classList.add('hidden');
supplierPasswordGroup.classList.add('hidden');
permissionSection.classList.add('hidden');
}
}
// 切换所有权限
function toggleAllPermissions() {
const allCheckbox = document.getElementById('permissionAll');
const subCheckboxes = document.querySelectorAll('.sub-permission');
subCheckboxes.forEach(checkbox => {
checkbox.checked = allCheckbox.checked;
});
}
// 监听子权限变化
document.querySelectorAll('.sub-permission').forEach(checkbox => {
checkbox.addEventListener('change', function() {
const allCheckbox = document.getElementById('permissionAll');
const subCheckboxes = document.querySelectorAll('.sub-permission');
const checkedCount = Array.from(subCheckboxes).filter(cb => cb.checked).length;
allCheckbox.checked = checkedCount === subCheckboxes.length;
});
});
// 图片上传
function uploadImage(type) {
console.log('上传图片类型:', type);
alert('图片上传功能待实现');
// TODO: 实现图片上传功能
}
// 提交表单
function submitForm() {
const urlParams = new URLSearchParams(window.location.search);
const mode = urlParams.get('mode');
const isEditMode = mode === 'edit';
// 获取表单数据
const formData = {
boothName: document.getElementById('boothName').value,
mainCategory: document.getElementById('mainCategory').value,
boothPhone: document.getElementById('boothPhone').value,
boothLocation: document.getElementById('boothLocation').value,
boothDetailAddress: document.getElementById('boothDetailAddress').value,
autoOpen: document.getElementById('autoOpen').checked,
pickupLocation: document.getElementById('pickupLocation').value,
pickupDetailAddress: document.getElementById('pickupDetailAddress').value,
deliveryPromise: document.getElementById('deliveryPromise').checked,
deliveryTime: document.getElementById('deliveryTime').value
};
// 如果不是编辑模式,需要验证收益人账号
if (!isEditMode) {
const operationType = document.getElementById('operationType').value;
formData.operationType = operationType;
if (!operationType) {
alert('请选择操作类型');
return;
}
if (operationType === 'create_supplier') {
const supplierAccount = document.getElementById('supplierAccount').value;
const supplierName = document.getElementById('supplierName').value;
const password = document.getElementById('password').value;
if (!supplierAccount) {
alert('请输入供货商手机号');
return;
}
if (!/^1[3-9]\d{9}$/.test(supplierAccount)) {
alert('请输入正确的手机号');
return;
}
if (!supplierName) {
alert('请输入供货商账号名称');
return;
}
if (!password) {
alert('请输入密码');
return;
}
formData.supplierAccount = supplierAccount;
formData.supplierName = supplierName;
formData.password = password;
} else if (operationType === 'bind_existing_supplier') {
const supplierAccount = document.getElementById('supplierAccount').value;
if (!supplierAccount) {
alert('请输入供货商手机号');
return;
}
if (!/^1[3-9]\d{9}$/.test(supplierAccount)) {
alert('请输入正确的手机号');
return;
}
formData.supplierAccount = supplierAccount;
}
}
// 验证必填字段
if (!formData.boothName) {
alert('请输入摊位名称');
return;
}
if (!formData.mainCategory) {
alert('请选择主营类目');
return;
}
if (!formData.boothLocation) {
alert('请输入摊位位置');
return;
}
if (!formData.boothDetailAddress) {
alert('请输入摊位详细地址');
return;
}
if (!formData.pickupLocation) {
alert('请输入服务自提点位置');
return;
}
if (!formData.pickupDetailAddress) {
alert('请输入自提点详细地址');
return;
}
// 获取权限配置
const permissions = [];
document.querySelectorAll('.sub-permission:checked').forEach(checkbox => {
permissions.push(checkbox.nextElementSibling.textContent);
});
formData.permissions = permissions;
console.log('提交的表单数据:', formData);
// TODO: 调用后端API提交表单
if (isEditMode) {
alert('摊位修改成功!');
} else {
alert('摊位创建成功!');
}
// 返回摊位列表
setTimeout(() => {
goBack();
}, 500);
}
</script>
</body>
</html>