综述: 优化自主经营者初始化店铺页面,新增自定义下拉框组件
- 在自主经营者初始化店铺页面中新增商品类目类型选择功能,支持"线下菜市场"和"云店"两种类型 - 将原有的主营类目原生select下拉框替换为自定义下拉框组件,提升用户交互体验 - 新增自定义下拉框样式,包含触发器、选项列表、选中状态和展开动画效果 - 实现自定义下拉框JavaScript功能,支持点击展开/收起、选项选择和全局关闭等交互逻辑 - 更新大妈集市.rp原型文件,同步最新的页面设计变更
This commit is contained in:
parent
f46e7c92c3
commit
242b93c907
|
|
@ -362,6 +362,88 @@
|
||||||
.hidden {
|
.hidden {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 自定义下拉框样式 */
|
||||||
|
.custom-select {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select-trigger {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px;
|
||||||
|
font-size: 15px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select-trigger:active {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select-trigger span:first-child {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select-trigger.placeholder span:first-child {
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select-trigger .arrow {
|
||||||
|
color: #666;
|
||||||
|
font-size: 12px;
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select.active .arrow {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-options {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-top: none;
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto;
|
||||||
|
z-index: 100;
|
||||||
|
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select.active .custom-options {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-option {
|
||||||
|
padding: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.2s;
|
||||||
|
border-bottom: 1px solid #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-option:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-option:active {
|
||||||
|
background-color: #e8f5e9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-option.selected {
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
color: #4CAF50;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -386,19 +468,42 @@
|
||||||
<input type="text" class="form-input" placeholder="请输入归属菜市场名称" required>
|
<input type="text" class="form-input" placeholder="请输入归属菜市场名称" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-item">
|
||||||
|
<label class="form-label">
|
||||||
|
<span class="required">*</span>商品类目类型
|
||||||
|
</label>
|
||||||
|
<div class="custom-select" id="categoryTypeSelect">
|
||||||
|
<div class="custom-select-trigger placeholder">
|
||||||
|
<span id="categoryTypeSelected">请选择商品类目类型</span>
|
||||||
|
<span class="arrow">▼</span>
|
||||||
|
</div>
|
||||||
|
<div class="custom-options">
|
||||||
|
<div class="custom-option" data-value="offline">线下菜市场</div>
|
||||||
|
<div class="custom-option" data-value="cloud">云店</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="hidden" id="categoryType" name="categoryType" value="">
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<label class="form-label">
|
<label class="form-label">
|
||||||
<span class="required">*</span>主营类目
|
<span class="required">*</span>主营类目
|
||||||
</label>
|
</label>
|
||||||
<select class="form-input" required>
|
<div class="custom-select" id="mainCategorySelect">
|
||||||
<option value="">请选择主营类目</option>
|
<div class="custom-select-trigger placeholder">
|
||||||
<option value="vegetable">蔬菜</option>
|
<span id="mainCategorySelected">请选择主营类目</span>
|
||||||
<option value="fruit">水果</option>
|
<span class="arrow">▼</span>
|
||||||
<option value="meat">肉类</option>
|
</div>
|
||||||
<option value="seafood">海鲜</option>
|
<div class="custom-options">
|
||||||
<option value="grain">粮油</option>
|
<div class="custom-option" data-value="vegetable">蔬菜</div>
|
||||||
<option value="other">其他</option>
|
<div class="custom-option" data-value="fruit">水果</div>
|
||||||
</select>
|
<div class="custom-option" data-value="meat">肉类</div>
|
||||||
|
<div class="custom-option" data-value="seafood">海鲜</div>
|
||||||
|
<div class="custom-option" data-value="grain">粮油</div>
|
||||||
|
<div class="custom-option" data-value="other">其他</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="hidden" id="mainCategory" name="mainCategory" value="">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
|
|
@ -700,10 +805,65 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 自定义下拉框功能
|
||||||
|
function initCustomSelect(selectId, hiddenInputId, displayId) {
|
||||||
|
const selectElement = document.getElementById(selectId);
|
||||||
|
const trigger = selectElement.querySelector('.custom-select-trigger');
|
||||||
|
const options = selectElement.querySelectorAll('.custom-option');
|
||||||
|
const hiddenInput = document.getElementById(hiddenInputId);
|
||||||
|
const displaySpan = document.getElementById(displayId);
|
||||||
|
|
||||||
|
// 点击触发器切换下拉列表
|
||||||
|
trigger.addEventListener('click', function(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
// 关闭其他打开的下拉框
|
||||||
|
document.querySelectorAll('.custom-select.active').forEach(el => {
|
||||||
|
if (el !== selectElement) {
|
||||||
|
el.classList.remove('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
selectElement.classList.toggle('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 选择选项
|
||||||
|
options.forEach(option => {
|
||||||
|
option.addEventListener('click', function(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
const value = this.getAttribute('data-value');
|
||||||
|
const text = this.textContent;
|
||||||
|
|
||||||
|
// 更新显示文本
|
||||||
|
displaySpan.textContent = text;
|
||||||
|
trigger.classList.remove('placeholder');
|
||||||
|
|
||||||
|
// 更新隐藏输入框的值
|
||||||
|
hiddenInput.value = value;
|
||||||
|
|
||||||
|
// 更新选中状态
|
||||||
|
options.forEach(opt => opt.classList.remove('selected'));
|
||||||
|
this.classList.add('selected');
|
||||||
|
|
||||||
|
// 关闭下拉列表
|
||||||
|
selectElement.classList.remove('active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点击页面其他地方关闭下拉框
|
||||||
|
document.addEventListener('click', function() {
|
||||||
|
document.querySelectorAll('.custom-select.active').forEach(el => {
|
||||||
|
el.classList.remove('active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// 页面加载完成后初始化
|
// 页面加载完成后初始化
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// 初始化营业时间选项显示状态
|
// 初始化营业时间选项显示状态
|
||||||
toggleBusinessTimeOptions();
|
toggleBusinessTimeOptions();
|
||||||
|
|
||||||
|
// 初始化自定义下拉框
|
||||||
|
initCustomSelect('categoryTypeSelect', 'categoryType', 'categoryTypeSelected');
|
||||||
|
initCustomSelect('mainCategorySelect', 'mainCategory', 'mainCategorySelected');
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue