dm-design/平台端web/菜市场管理/菜市场列表.html

1332 lines
50 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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: #f5f7fa;
padding: 20px;
}
.container {
max-width: 1600px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* 搜索栏样式 */
.search-bar {
display: flex;
gap: 15px;
margin-bottom: 20px;
align-items: center;
flex-wrap: wrap;
}
.search-bar input,
.search-bar select {
padding: 8px 12px;
border: 1px solid #dcdfe6;
border-radius: 4px;
font-size: 14px;
outline: none;
min-width: 180px;
}
.search-bar input:focus,
.search-bar select:focus {
border-color: #409eff;
}
.search-bar input::placeholder {
color: #c0c4cc;
}
.btn {
padding: 8px 20px;
border: none;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
transition: all 0.3s;
}
.btn-primary {
background-color: #409eff;
color: white;
}
.btn-primary:hover {
background-color: #66b1ff;
}
.btn-success {
background-color: #67c23a;
color: white;
}
.btn-success:hover {
background-color: #85ce61;
}
.btn-small {
padding: 5px 12px;
font-size: 12px;
}
.btn-danger {
background-color: #f56c6c;
color: white;
}
.btn-danger:hover {
background-color: #f78989;
}
/* 新增按钮 */
.add-section {
margin-bottom: 15px;
}
/* 表格样式 */
.table-wrapper {
overflow-x: auto;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 14px;
}
thead {
background-color: #f5f7fa;
}
th {
padding: 12px 8px;
text-align: center;
font-weight: 500;
color: #606266;
border-bottom: 1px solid #ebeef5;
white-space: nowrap;
}
td {
padding: 12px 8px;
text-align: center;
border-bottom: 1px solid #ebeef5;
color: #606266;
}
tbody tr:hover {
background-color: #f5f7fa;
}
/* 操作按钮组 */
.action-buttons {
display: flex;
flex-direction: column;
gap: 8px;
align-items: center;
}
.action-row {
display: flex;
gap: 5px;
justify-content: center;
flex-wrap: wrap;
}
/* 状态标签 */
.status-normal {
color: #67c23a;
}
.status-disabled {
color: #909399;
}
.business-status {
color: #606266;
}
/* 模态框样式 */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
.modal.active {
display: flex;
align-items: center;
justify-content: center;
}
.modal-content {
background: white;
width: 90%;
max-width: 650px;
max-height: 90vh;
border-radius: 8px;
overflow: hidden;
display: flex;
flex-direction: column;
}
.modal-header {
padding: 20px;
border-bottom: 1px solid #ebeef5;
display: flex;
justify-content: space-between;
align-items: center;
}
.modal-header h3 {
font-size: 18px;
color: #303133;
margin: 0;
}
.modal-close {
font-size: 24px;
color: #909399;
cursor: pointer;
border: none;
background: none;
padding: 0;
width: 24px;
height: 24px;
line-height: 1;
}
.modal-close:hover {
color: #606266;
}
.modal-body {
padding: 20px;
overflow-y: auto;
flex: 1;
}
.modal-footer {
padding: 15px 20px;
border-top: 1px solid #ebeef5;
display: flex;
justify-content: flex-end;
gap: 10px;
}
/* 表单样式 */
.form-section {
margin-bottom: 25px;
}
.form-section-title {
font-size: 16px;
color: #303133;
font-weight: 500;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #ebeef5;
}
.form-group {
margin-bottom: 18px;
display: flex;
align-items: flex-start;
}
.form-label {
width: 120px;
padding-top: 8px;
color: #606266;
font-size: 14px;
text-align: right;
padding-right: 12px;
flex-shrink: 0;
}
.form-label.required::before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
.form-input-wrapper {
flex: 1;
}
.form-input,
.form-select,
.form-textarea {
width: 100%;
padding: 8px 12px;
border: 1px solid #dcdfe6;
border-radius: 4px;
font-size: 14px;
outline: none;
transition: border-color 0.3s;
}
.form-input:focus,
.form-select:focus,
.form-textarea:focus {
border-color: #409eff;
}
.form-input::placeholder,
.form-textarea::placeholder {
color: #c0c4cc;
}
.form-textarea {
resize: vertical;
min-height: 80px;
}
/* 图片上传样式 */
.upload-box {
width: 140px;
height: 140px;
border: 1px dashed #dcdfe6;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
background-color: #fafafa;
transition: border-color 0.3s;
}
.upload-box:hover {
border-color: #409eff;
}
.upload-box-text {
color: #909399;
font-size: 14px;
}
/* 开关样式 */
.switch-group {
display: flex;
align-items: center;
gap: 15px;
}
.switch {
position: relative;
display: inline-block;
width: 44px;
height: 22px;
}
.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: 22px;
}
.switch-slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 2px;
bottom: 2px;
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);
}
.switch-label {
color: #606266;
font-size: 14px;
}
.switch-label.active {
color: #409eff;
}
/* 单选框组样式 */
.radio-group {
display: flex;
gap: 15px;
align-items: center;
}
.radio-option {
display: flex;
align-items: center;
gap: 5px;
}
.radio-option input[type="radio"] {
margin: 0;
}
.radio-option label {
color: #606266;
font-size: 14px;
cursor: pointer;
}
/* 复选框组样式 */
.checkbox-group {
display: flex;
gap: 15px;
align-items: center;
}
.checkbox-option {
display: flex;
align-items: center;
gap: 5px;
}
.checkbox-option input[type="checkbox"] {
margin: 0;
}
.checkbox-option label {
color: #606266;
font-size: 14px;
cursor: pointer;
}
/* 时间输入样式 */
.time-group {
display: flex;
gap: 10px;
align-items: center;
}
.time-input {
width: 180px;
}
/* 说明文字样式 */
.form-hint {
color: #909399;
font-size: 12px;
margin-top: 5px;
line-height: 1.5;
}
/* 地图位置选择 */
.location-input {
position: relative;
}
.location-icon {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
color: #409eff;
cursor: pointer;
}
.btn-cancel {
background-color: white;
color: #606266;
border: 1px solid #dcdfe6;
}
.btn-cancel:hover {
background-color: #f5f7fa;
border-color: #c0c4cc;
}
</style>
</head>
<body>
<div class="container">
<!-- 搜索栏 -->
<div class="search-bar">
<input type="text" placeholder="市场名称">
<select>
<option value="">地区</option>
<option value="shanghai">上海市</option>
<option value="beijing">北京市</option>
<option value="fujian">福建省</option>
</select>
<select>
<option value="">状态</option>
<option value="normal">正常</option>
<option value="disabled">禁用</option>
</select>
<button class="btn btn-primary">搜索</button>
</div>
<!-- 新增按钮 -->
<div class="add-section">
<button class="btn btn-success">新增</button>
<button class="btn btn-primary" onclick="goToPendingMarkets()">待审核菜市场</button>
</div>
<!-- 表格 -->
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>市场名</th>
<th>商品类目类型</th>
<th>地址</th>
<th>经营者姓名</th>
<th>经营者账号</th>
<th>第三方配送</th>
<th>状态</th>
<th>摊位数</th>
<th>营业状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr data-category-type="offline">
<td>权限测试市场</td>
<td>线下菜市场</td>
<td>上海市市辖区闵行区</td>
<td>权限测试</td>
<td>13800001500</td>
<td></td>
<td class="status-normal">正常</td>
<td>2</td>
<td class="business-status">营业</td>
<td>
<div class="action-buttons">
<div class="action-row">
<button class="btn btn-primary btn-small">设置结算比例</button>
<button class="btn btn-primary btn-small">分销推广</button>
<button class="btn btn-primary btn-small">摊位详情</button>
</div>
<div class="action-row">
<button class="btn btn-primary btn-small">详情</button>
<button class="btn btn-primary btn-small">编辑</button>
<button class="btn btn-danger btn-small">删除</button>
</div>
</div>
</td>
</tr>
<tr data-category-type="cloud">
<td>测试菜市场-葡萄</td>
<td>云店</td>
<td>北京市市辖区东城区</td>
<td>林xx</td>
<td>17750208698</td>
<td></td>
<td class="status-normal">正常</td>
<td>0</td>
<td class="business-status">营业</td>
<td>
<div class="action-buttons">
<div class="action-row">
<button class="btn btn-primary btn-small">设置结算比例</button>
<button class="btn btn-primary btn-small">分销推广</button>
<button class="btn btn-primary btn-small">摊位详情</button>
</div>
<div class="action-row">
<button class="btn btn-primary btn-small">详情</button>
<button class="btn btn-primary btn-small">编辑</button>
<button class="btn btn-danger btn-small">删除</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 摊位详情模态框 -->
<div class="modal" id="boothDetailModal">
<div class="modal-content" style="max-width: 1200px;">
<div class="modal-header">
<h3>摊铺详情</h3>
<button class="modal-close" onclick="closeBoothDetailModal()">&times;</button>
</div>
<div class="modal-body">
<!-- 标签页导航 -->
<div style="border-bottom: 2px solid #ebeef5; margin-bottom: 20px;">
<div style="display: inline-block; padding: 10px 20px; border-bottom: 2px solid #409eff; color: #409eff; font-weight: 500; cursor: pointer;">
摊位列表
</div>
</div>
<!-- 摊位列表表格 -->
<div class="table-wrapper">
<table>
<thead>
<tr>
<th>摊位ID</th>
<th>摊位名称</th>
<th>收益人名称</th>
<th>收益人手机号</th>
<th>加入时间</th>
</tr>
</thead>
<tbody id="boothListTableBody">
<!-- 动态填充摊位数据 -->
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-cancel" onclick="closeBoothDetailModal()">关闭</button>
</div>
</div>
</div>
<!-- 设置结算比例模态框 -->
<div class="modal" id="settlementRatioModal">
<div class="modal-content" style="max-width: 500px;">
<div class="modal-header">
<h3>设置结算比例</h3>
<button class="modal-close" onclick="closeSettlementModal()">&times;</button>
</div>
<div class="modal-body">
<form id="settlementRatioForm">
<div class="form-group">
<div class="form-label required">结算比例</div>
<div class="form-input-wrapper">
<input type="number" class="form-input" id="settlementRatio" value="0.000" step="0.001" min="0" max="1" placeholder="请输入结算比例">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-cancel" onclick="closeSettlementModal()">关闭</button>
<button class="btn btn-primary" onclick="submitSettlementRatio()">确定</button>
</div>
</div>
</div>
<!-- 详情模态框 -->
<div class="modal" id="detailMarketModal">
<div class="modal-content">
<div class="modal-header">
<h3>菜市场详情</h3>
<button class="modal-close" onclick="closeDetailModal()">&times;</button>
</div>
<div class="modal-body">
<form id="detailMarketForm">
<!-- 经营者信息 -->
<div class="form-section">
<div class="form-section-title">经营者信息</div>
<div class="form-group">
<div class="form-label">经营者账号</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailOperatorAccount" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">经营者姓名</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailOperatorName" readonly>
</div>
</div>
</div>
<!-- 基础配置 -->
<div class="form-section">
<div class="form-section-title">基础配置</div>
<div class="form-group">
<div class="form-label">菜市场名称</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailMarketName" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">商品类目类型</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailCategoryType" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场背景图</div>
<div class="form-input-wrapper">
<div class="upload-box" style="pointer-events: none;">
<span class="upload-box-text">暂无图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场营业执照</div>
<div class="form-input-wrapper">
<div class="upload-box" style="pointer-events: none;">
<span class="upload-box-text">暂无图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场实拍图</div>
<div class="form-input-wrapper">
<div class="upload-box" style="pointer-events: none;">
<span class="upload-box-text">暂无图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场地址</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailAddress" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">详细地址</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailDetailAddress" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场定位</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailLocation" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场营业时间</div>
<div class="form-input-wrapper">
<div class="switch-group">
<span class="switch-label">手动营业</span>
<label class="switch">
<input type="checkbox" id="detailAutoBusinessTime" disabled>
<span class="switch-slider"></span>
</label>
<span class="switch-label active">自动营业</span>
</div>
<div class="checkbox-group" style="margin-top: 10px;">
<div class="checkbox-option">
<input type="checkbox" id="detailEveryday" disabled>
<label for="detailEveryday">每天</label>
</div>
<div class="checkbox-option">
<input type="checkbox" id="detailWorkday" disabled>
<label for="detailWorkday">工作日</label>
</div>
<div class="checkbox-option">
<input type="checkbox" id="detailCustom" disabled>
<label for="detailCustom">自定义</label>
</div>
</div>
<div class="time-group" style="margin-top: 10px;">
<input type="time" class="form-input time-input" id="detailStartTime" readonly>
<input type="time" class="form-input time-input" id="detailEndTime" readonly>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label">菜市场状态</div>
<div class="form-input-wrapper">
<div class="switch-group">
<span class="switch-label">禁用</span>
<label class="switch">
<input type="checkbox" id="detailMarketStatus" disabled>
<span class="switch-slider"></span>
</label>
<span class="switch-label active">启用</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label">摊位数</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailBoothCount" readonly>
</div>
</div>
<div class="form-group">
<div class="form-label">营业状态</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="detailBusinessStatus" readonly>
</div>
</div>
</div>
<!-- 配送设置 -->
<div class="form-section">
<div class="form-section-title">配送设置</div>
<div class="form-group">
<div class="form-label"></div>
<div class="form-input-wrapper">
<div class="form-hint"> 开启后,将允许该菜市场经营者/摊主(无经营者)自由配置是否呼叫第三方骑手进行配送;</div>
<div class="form-hint">第三方配送费用因距离、天气、时段等因素会产生不同程度的浮动;将根据实际配送费用进行扣除。</div>
</div>
</div>
<div class="form-group">
<div class="form-label">是否允许第三方骑手配送</div>
<div class="form-input-wrapper">
<div class="switch-group">
<span class="switch-label">禁用</span>
<label class="switch">
<input type="checkbox" id="detailThirdPartyDelivery" disabled>
<span class="switch-slider"></span>
</label>
<span class="switch-label active">启用</span>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-cancel" onclick="closeDetailModal()">关闭</button>
</div>
</div>
</div>
<!-- 新增菜市场模态框 -->
<div class="modal" id="addMarketModal">
<div class="modal-content">
<div class="modal-header">
<h3>新增菜市场</h3>
<button class="modal-close" onclick="closeModal()">&times;</button>
</div>
<div class="modal-body">
<form id="addMarketForm">
<!-- 经营者信息 -->
<div class="form-section">
<div class="form-section-title">经营者信息</div>
<div class="form-group">
<div class="form-label required">经营者账号</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="operatorAccount" placeholder="请输入手机号码" maxlength="11">
<div class="form-hint">请输入经营者的手机号码</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">验证码</div>
<div class="form-input-wrapper">
<div style="display: flex; gap: 10px;">
<input type="text" class="form-input" id="verifyCode" placeholder="请输入验证码" maxlength="6" style="flex: 1;">
<button type="button" class="btn btn-primary" id="sendCodeBtn" onclick="sendVerifyCode()">发送验证码</button>
</div>
<div class="form-hint">验证码将发送至经营者手机</div>
</div>
</div>
</div>
<!-- 基础配置 -->
<div class="form-section">
<div class="form-section-title">基础配置</div>
<div class="form-group">
<div class="form-label required">菜市场名称</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" id="marketName" placeholder="请输入菜市场名称25字符内" maxlength="25">
</div>
</div>
<div class="form-group">
<div class="form-label required">商品类目类型</div>
<div class="form-input-wrapper">
<select class="form-select" id="categoryType">
<option value="">请选择商品类目类型</option>
<option value="offline">线下菜市场</option>
<option value="cloud">云店</option>
</select>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场背景图</div>
<div class="form-input-wrapper">
<div class="upload-box">
<span class="upload-box-text">选择图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场营业执照</div>
<div class="form-input-wrapper">
<div class="upload-box">
<span class="upload-box-text">选择图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场实拍图</div>
<div class="form-input-wrapper">
<div class="upload-box">
<span class="upload-box-text">选择图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场营业执照</div>
<div class="form-input-wrapper">
<div class="upload-box">
<span class="upload-box-text">选择图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场实拍图</div>
<div class="form-input-wrapper">
<div class="upload-box">
<span class="upload-box-text">选择图片</span>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场地址</div>
<div class="form-input-wrapper">
<select class="form-select">
<option value="">请选择省市区</option>
<option value="shanghai">上海市</option>
<option value="beijing">北京市</option>
<option value="fujian">福建省</option>
</select>
</div>
</div>
<div class="form-group">
<div class="form-label required">详细地址</div>
<div class="form-input-wrapper">
<input type="text" class="form-input" placeholder="请输入具体地址">
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场定位</div>
<div class="form-input-wrapper">
<div class="location-input">
<input type="text" class="form-input" placeholder="请在地图上选择定位">
<span class="location-icon">📍</span>
</div>
<div class="form-hint" style="color: #f56c6c;">请选择定位</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场营业时间</div>
<div class="form-input-wrapper">
<div class="switch-group">
<span class="switch-label">手动营业</span>
<label class="switch">
<input type="checkbox" id="autoBusinessTime" checked>
<span class="switch-slider"></span>
</label>
<span class="switch-label active">自动营业</span>
</div>
<div class="checkbox-group" style="margin-top: 10px;">
<div class="checkbox-option">
<input type="checkbox" id="everyday">
<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" style="margin-top: 10px;">
<input type="time" class="form-input time-input" placeholder="开始营业时间">
<input type="time" class="form-input time-input" placeholder="结束营业时间">
</div>
</div>
</div>
<div class="form-group">
<div class="form-label required">菜市场状态</div>
<div class="form-input-wrapper">
<div class="switch-group">
<span class="switch-label">禁用</span>
<label class="switch">
<input type="checkbox" id="marketStatus" checked>
<span class="switch-slider"></span>
</label>
<span class="switch-label active">启用</span>
</div>
<div class="form-hint">禁用后,用户端不展示该菜市场</div>
</div>
</div>
</div>
<!-- 配送设置 -->
<div class="form-section">
<div class="form-section-title">配送设置</div>
<div class="form-group">
<div class="form-label"></div>
<div class="form-input-wrapper">
<div class="form-hint"> 开启后,将允许该菜市场经营者/摊主(无经营者)自由配置是否呼叫第三方骑手进行配送;</div>
<div class="form-hint">第三方配送费用因距离、天气、时段等因素会产生不同程度的浮动;将根据实际配送费用进行扣除。</div>
</div>
</div>
<div class="form-group">
<div class="form-label">是否允许第三方骑手配送</div>
<div class="form-input-wrapper">
<div class="switch-group">
<span class="switch-label">禁用</span>
<label class="switch">
<input type="checkbox" id="thirdPartyDelivery" checked>
<span class="switch-slider"></span>
</label>
<span class="switch-label active">启用</span>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-cancel" onclick="closeModal()">取消</button>
<button class="btn btn-primary" onclick="submitForm()">确认</button>
</div>
</div>
</div>
<script>
// 验证码倒计时
let countdown = 0;
let countdownTimer = null;
// 发送验证码
function sendVerifyCode() {
const account = document.getElementById('operatorAccount').value;
const btn = document.getElementById('sendCodeBtn');
// 验证手机号格式
if (!account || !/^1[3-9]\d{9}$/.test(account)) {
alert('请输入正确的手机号码');
return;
}
// 如果正在倒计时,不允许再次发送
if (countdown > 0) {
return;
}
// 这里应该调用后端API发送验证码
// 模拟发送成功
alert('验证码已发送至 ' + account);
// 开始倒计时
countdown = 60;
btn.disabled = true;
btn.textContent = countdown + '秒后重发';
countdownTimer = setInterval(function() {
countdown--;
if (countdown > 0) {
btn.textContent = countdown + '秒后重发';
} else {
clearInterval(countdownTimer);
btn.disabled = false;
btn.textContent = '发送验证码';
}
}, 1000);
}
// 搜索功能
document.querySelector('.search-bar .btn-primary').addEventListener('click', function() {
alert('搜索功能待实现');
});
// 新增功能 - 打开模态框
document.querySelector('.btn-success').addEventListener('click', function() {
openModal();
});
// 打开模态框
function openModal() {
document.getElementById('addMarketModal').classList.add('active');
// 重置倒计时
if (countdownTimer) {
clearInterval(countdownTimer);
countdown = 0;
document.getElementById('sendCodeBtn').disabled = false;
document.getElementById('sendCodeBtn').textContent = '发送验证码';
}
}
// 关闭模态框
function closeModal() {
document.getElementById('addMarketModal').classList.remove('active');
// 清理倒计时
if (countdownTimer) {
clearInterval(countdownTimer);
countdown = 0;
}
// 重置表单
document.getElementById('addMarketForm').reset();
}
// 提交表单
function submitForm() {
const account = document.getElementById('operatorAccount').value;
const verifyCode = document.getElementById('verifyCode').value;
const marketName = document.getElementById('marketName').value;
const categoryType = document.getElementById('categoryType').value;
// 验证必填项
if (!account || !/^1[3-9]\d{9}$/.test(account)) {
alert('请输入正确的手机号码');
return;
}
if (!verifyCode || verifyCode.length !== 6) {
alert('请输入6位验证码');
return;
}
if (!marketName || marketName.trim() === '') {
alert('请输入菜市场名称');
return;
}
if (!categoryType || categoryType === '') {
alert('请选择商品类目类型');
return;
}
// 这里应该调用后端API验证验证码并提交表单
alert('表单提交功能待实现');
closeModal();
}
// 点击模态框背景关闭
document.getElementById('addMarketModal').addEventListener('click', function(e) {
if (e.target === this) {
closeModal();
}
});
// 打开摊位详情模态框
function openBoothDetailModal(marketName) {
// 模拟摊位数据实际应该从后端API获取
const mockBoothData = [
{
id: 4,
name: '猪肉铺',
beneficiaryName: '张三',
beneficiaryPhone: '13800000000',
joinTime: '2025-10-20 12:06:56'
},
{
id: 5,
name: '测试摊位',
beneficiaryName: '李四(和经营者相同)',
beneficiaryPhone: '13800000001和经营者相同',
joinTime: '2025-10-20 12:06:56'
}
];
// 填充表格数据
const tbody = document.getElementById('boothListTableBody');
tbody.innerHTML = '';
if (mockBoothData.length === 0) {
tbody.innerHTML = '<tr><td colspan="5" style="text-align: center; color: #909399;">暂无摊位数据</td></tr>';
} else {
mockBoothData.forEach(booth => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${booth.id}</td>
<td>${booth.name}</td>
<td>${booth.beneficiaryName || ''}</td>
<td>${booth.beneficiaryPhone || ''}</td>
<td>${booth.joinTime}</td>
`;
tbody.appendChild(row);
});
}
// 显示模态框
document.getElementById('boothDetailModal').classList.add('active');
}
// 关闭摊位详情模态框
function closeBoothDetailModal() {
document.getElementById('boothDetailModal').classList.remove('active');
}
// 点击摊位详情模态框背景关闭
document.getElementById('boothDetailModal').addEventListener('click', function(e) {
if (e.target === this) {
closeBoothDetailModal();
}
});
// 打开设置结算比例模态框
function openSettlementModal() {
document.getElementById('settlementRatioModal').classList.add('active');
}
// 关闭设置结算比例模态框
function closeSettlementModal() {
document.getElementById('settlementRatioModal').classList.remove('active');
}
// 提交结算比例
function submitSettlementRatio() {
const ratio = document.getElementById('settlementRatio').value;
if (ratio === '' || ratio < 0 || ratio > 1) {
alert('请输入有效的结算比例(0-1之间)');
return;
}
alert('结算比例已设置为: ' + ratio);
closeSettlementModal();
}
// 点击结算比例模态框背景关闭
document.getElementById('settlementRatioModal').addEventListener('click', function(e) {
if (e.target === this) {
closeSettlementModal();
}
});
// 打开详情模态框
function openDetailModal(rowData) {
// 填充详情数据
document.getElementById('detailOperatorAccount').value = rowData.operatorAccount || '';
document.getElementById('detailOperatorName').value = rowData.operatorName || '';
document.getElementById('detailMarketName').value = rowData.marketName || '';
// 填充商品类目类型,转换为中文显示
let categoryTypeText = '';
if (rowData.categoryType === 'offline') {
categoryTypeText = '线下菜市场';
} else if (rowData.categoryType === 'cloud') {
categoryTypeText = '云店';
} else {
categoryTypeText = rowData.categoryType || '';
}
document.getElementById('detailCategoryType').value = categoryTypeText;
document.getElementById('detailAddress').value = rowData.address || '';
document.getElementById('detailDetailAddress').value = rowData.detailAddress || '';
document.getElementById('detailLocation').value = rowData.location || '';
document.getElementById('detailBoothCount').value = rowData.boothCount || '';
document.getElementById('detailBusinessStatus').value = rowData.businessStatus || '';
// 设置开关状态
document.getElementById('detailAutoBusinessTime').checked = rowData.autoBusinessTime || false;
document.getElementById('detailMarketStatus').checked = rowData.marketStatus || false;
document.getElementById('detailThirdPartyDelivery').checked = rowData.thirdPartyDelivery || false;
// 显示模态框
document.getElementById('detailMarketModal').classList.add('active');
}
// 关闭详情模态框
function closeDetailModal() {
document.getElementById('detailMarketModal').classList.remove('active');
}
// 点击详情模态框背景关闭
document.getElementById('detailMarketModal').addEventListener('click', function(e) {
if (e.target === this) {
closeDetailModal();
}
});
// 从表格行获取数据
function getRowData(button) {
const row = button.closest('tr');
const cells = row.querySelectorAll('td');
return {
marketName: cells[0].textContent.trim(),
categoryType: row.getAttribute('data-category-type') || '',
address: cells[2].textContent.trim(),
operatorName: cells[3].textContent.trim(),
operatorAccount: cells[4].textContent.trim(),
thirdPartyDelivery: cells[5].textContent.trim() === '是',
marketStatus: cells[7].textContent.trim() === '正常',
boothCount: cells[8].textContent.trim(),
businessStatus: cells[9].textContent.trim(),
detailAddress: '',
location: '',
autoBusinessTime: true
};
}
// 为所有操作按钮添加事件监听
document.querySelectorAll('.action-buttons button').forEach(button => {
button.addEventListener('click', function(e) {
e.stopPropagation();
const buttonText = this.textContent;
// 如果是设置结算比例按钮,打开对应的模态框
if (buttonText === '设置结算比例') {
openSettlementModal();
} else if (buttonText === '详情') {
// 获取当前行数据并打开详情模态框
const rowData = getRowData(this);
openDetailModal(rowData);
} else if (buttonText === '摊位详情') {
// 获取市场名称并打开摊位详情模态框
const rowData = getRowData(this);
openBoothDetailModal(rowData.marketName);
} else {
alert(buttonText + ' 功能待实现');
}
});
});
// 跳转到待审核菜市场页面
function goToPendingMarkets() {
window.location.href = '待审核菜市场.html';
}
</script>
</body>
</html>