Browse Source

修复规格和件数记忆功能,支持中英文逗号,修复数据错位问题

Boss2
Default User 2 months ago
parent
commit
d1abf32f76
  1. 66
      supply-manager.example.js
  2. 1120
      supply-manager.js
  3. 234
      supply.html

66
supply-manager.example.js

@ -1,66 +0,0 @@
// 货源管理模块使用示例
// 本文件展示如何在页面中使用SupplyManager类
const SupplyManager = require('./supply-manager.js');
// 页面实例示例
const pageInstance = {
data: {},
setData: function(data) {
this.data = { ...this.data, ...data };
console.log('页面数据更新:', this.data);
}
};
// 初始化货源管理器
const supplyManager = new SupplyManager(pageInstance);
// 使用示例
async function exampleUsage() {
console.log('===== 货源管理模块使用示例 =====');
try {
// 1. 加载货源列表
console.log('1. 加载货源列表...');
await supplyManager.loadSupplies();
console.log(' 加载完成,货源数量:', supplyManager.data.supplies.length);
// 2. 搜索货源
console.log('2. 搜索货源...');
supplyManager.data.searchKeyword = '罗曼粉';
supplyManager.searchSupplies();
console.log(' 搜索完成,结果数量:', supplyManager.data.publishedSupplies.length);
// 3. 添加新货源
console.log('3. 添加新货源...');
supplyManager.data.newSupply = {
name: '罗曼粉',
price: '10.5',
minOrder: '50',
yolk: '红心',
spec: '格子装',
region: '北京市 北京市 朝阳区',
imageUrls: []
};
// 注意:实际添加货源需要登录状态和网络请求
// await supplyManager.addSupply();
console.log(' 新货源准备完成,等待发布');
// 4. 处理图片
console.log('4. 处理图片URL...');
const processedImages = supplyManager.processImageUrls(['http://example.com/image1.jpg', 'placeholder://example']);
console.log(' 图片处理结果:', processedImages);
// 5. 格式化时间
console.log('5. 格式化时间...');
const formattedTime = supplyManager.formatCreateTime(new Date());
console.log(' 格式化后的时间:', formattedTime);
console.log('===== 示例运行完成 =====');
} catch (error) {
console.error('示例运行出错:', error);
}
}
// 运行示例
exampleUsage();

1120
supply-manager.js

File diff suppressed because it is too large

234
supply.html

@ -666,6 +666,18 @@
background-color: #ff4d4f;
}
/* 禁用按钮样式 */
.btn-disabled {
background-color: #d9d9d9;
color: #999;
cursor: not-allowed;
pointer-events: none;
}
.btn-disabled:hover {
background-color: #d9d9d9;
}
/* 模态框按钮样式 */
.modal-btn {
padding: 10px 24px;
@ -1107,7 +1119,29 @@
<button onclick="contactCustomerService()">联系客服</button>
<button class="apply-settlement-btn">已入驻</button>
</div>
</div>
<!-- 新鲜程度选择弹窗 -->
<div id="freshnessSelectModal" class="select-modal">
<div class="select-content">
<div class="select-header">
<h3>选择新鲜程度</h3>
<button class="close-btn" onclick="hideFreshnessSelectModal()">×</button>
</div>
<div class="select-search">
<input type="text" id="freshnessSearchInput" placeholder="搜索新鲜程度" oninput="filterFreshnessOptions()" style="width: 100%; padding: 10px; border: 1px solid #d9d9d9; border-radius: 8px; font-size: 14px; box-sizing: border-box;">
</div>
<div class="select-body">
<div id="freshnessOptionsList" class="select-list">
<!-- 新鲜程度选项将通过JavaScript动态生成 -->
</div>
</div>
<div class="select-footer" style="padding: 16px 20px; display: flex; justify-content: space-between; border-top: 1px solid #f0f0f0; background-color: #fafafa;">
<button onclick="hideFreshnessSelectModal()" style="padding: 10px 24px; background-color: #f5f5f5; color: #666; border: none; border-radius: 8px; cursor: pointer; font-size: 14px; font-weight: 500; transition: all 0.3s ease;">取消</button>
<button onclick="confirmFreshnessSelection()" style="padding: 10px 24px; background-color: #1677ff; color: white; border: none; border-radius: 8px; cursor: pointer; font-size: 14px; font-weight: 500; transition: all 0.3s ease;">确定</button>
</div>
</div>
</div>
<!-- 搜索框 -->
<div class="search-container">
@ -1259,6 +1293,16 @@
</div>
</div>
<!-- 新鲜程度 -->
<div class="form-group">
<label class="form-label">新鲜程度</label>
<div class="form-select" id="freshnessSelect" onclick="showFreshnessSelectModal()" style="cursor: pointer; position: relative; padding-right: 30px;">
<span id="freshnessDisplayText">请选择新鲜程度</span>
<input type="hidden" id="freshness" name="freshness">
<span style="position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: #999;"></span>
</div>
</div>
<!-- 地区 -->
<div class="form-group">
<label class="form-label">地区</label>
@ -1663,6 +1707,16 @@
<span style="position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: #999;"></span>
</div>
</div>
<!-- 新鲜程度 -->
<div class="form-group">
<label class="form-label">新鲜程度</label>
<div class="form-select" id="editFreshnessSelect" onclick="showEditFreshnessSelectModal()" style="cursor: pointer; position: relative; padding-right: 30px;">
<span id="editFreshnessDisplayText">请选择新鲜程度</span>
<input type="hidden" id="editFreshness" name="freshness">
<span style="position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: #999;"></span>
</div>
</div>
<!-- 地区 -->
<div class="form-group">
@ -3060,6 +3114,84 @@
}
}
// 新鲜程度选择功能
let allFreshnessOptions = ['正常质量(1-4天)', '一般质量(3天以内)', '一般质量(4天以上)', '精品'];
let filteredFreshnessOptions = [...allFreshnessOptions];
let selectedFreshness = '';
// 显示新鲜程度选择弹窗
function showFreshnessSelectModal() {
const freshnessSelectModal = document.getElementById('freshnessSelectModal');
freshnessSelectModal.classList.add('active');
// 重置搜索输入
document.getElementById('freshnessSearchInput').value = '';
filteredFreshnessOptions = [...allFreshnessOptions];
generateFreshnessOptions();
}
// 隐藏新鲜程度选择弹窗
function hideFreshnessSelectModal() {
const freshnessSelectModal = document.getElementById('freshnessSelectModal');
freshnessSelectModal.classList.remove('active');
}
// 生成新鲜程度选项
function generateFreshnessOptions() {
const freshnessOptionsList = document.getElementById('freshnessOptionsList');
freshnessOptionsList.innerHTML = '';
filteredFreshnessOptions.forEach(freshness => {
const option = document.createElement('div');
option.className = 'select-item';
option.textContent = freshness;
option.onclick = () => {
// 移除所有选项的选中状态
document.querySelectorAll('#freshnessOptionsList .select-item').forEach(item => {
item.classList.remove('selected');
});
// 添加当前选项的选中状态
option.classList.add('selected');
selectedFreshness = freshness;
};
option.ondblclick = () => {
// 双击直接确认选择
const freshnessDisplayText = document.getElementById('freshnessDisplayText');
const freshnessInput = document.getElementById('freshness');
freshnessDisplayText.textContent = freshness;
freshnessInput.value = freshness;
hideFreshnessSelectModal();
saveFormData(); // 保存选择
};
freshnessOptionsList.appendChild(option);
});
}
// 过滤新鲜程度选项
function filterFreshnessOptions() {
const searchInput = document.getElementById('freshnessSearchInput');
const searchKeyword = searchInput.value.toLowerCase();
filteredFreshnessOptions = allFreshnessOptions.filter(freshness => {
return freshness.toLowerCase().includes(searchKeyword);
});
generateFreshnessOptions();
}
// 确认新鲜程度选择
function confirmFreshnessSelection() {
if (selectedFreshness) {
const freshnessDisplayText = document.getElementById('freshnessDisplayText');
const freshnessInput = document.getElementById('freshness');
freshnessDisplayText.textContent = selectedFreshness;
freshnessInput.value = selectedFreshness;
hideFreshnessSelectModal();
saveFormData(); // 保存选择
}
}
// 地区选择功能
let allRegionOptions = [
{ province: '北京市', cities: [
@ -4077,13 +4209,13 @@
`;
} else if (supply.status === 'rejected') {
actionsHTML = `
<button class="btn-success" onclick="preparePublishSupply('${supply.id}')">上架</button>
<button class="${supply.label === 1 ? 'btn-disabled' : 'btn-success'}" ${supply.label === 1 ? '' : `onclick="preparePublishSupply('${supply.id}')"`}>上架</button>
<button class="btn-danger" onclick="deleteSupply('${supply.id}')">删除</button>
<button class="btn-primary" onclick="showRejectReason('${supply.id}')">查看原因</button>
`;
} else if (supply.status === 'hidden' || supply.status === 'sold_out') {
actionsHTML = `
<button class="btn-primary" onclick="preparePublishSupply('${supply.id}')">上架</button>
<button class="${supply.label === 1 ? 'btn-disabled' : 'btn-primary'}" ${supply.label === 1 ? '' : `onclick="preparePublishSupply('${supply.id}')"`}>上架</button>
<button class="btn-danger" onclick="deleteSupply('${supply.id}')">删除</button>
`;
}
@ -5294,6 +5426,7 @@
description: document.getElementById('description').value,
region: document.getElementById('regionValue').value,
contactId: document.getElementById('contactId').value,
freshness: document.getElementById('freshness').value,
imageUrls: supplyData.uploadedImages,
sellerId: userInfo.userId, // 添加当前登录用户的userId作为sellerId
autoOfflineDays: null, // 不再使用天数,设置为null
@ -5910,11 +6043,14 @@
let specifications = [];
let quantities = [];
// 解析规格(中文逗号分隔字符串)
// 解析规格(支持文逗号分隔字符串)
try {
if (supply.specification) {
if (typeof supply.specification === 'string') {
specifications = supply.specification.split(',').filter(spec => spec.trim());
specifications = supply.specification
.split(/[,,]/) // 同时处理中英文逗号
.map(spec => spec.trim())
.filter(spec => spec);
} else if (Array.isArray(supply.specification)) {
specifications = supply.specification;
} else {
@ -5952,12 +6088,16 @@
addEditSpecQuantityPair();
} else {
// 根据规格数量生成相应的规格-件数对
for (let i = 0; i < specifications.length; i++) {
for (let i = 0; i < Math.max(specifications.length, quantities.length); i++) {
// 确保即使数量不匹配,也能正确显示对应的数据
const spec = specifications[i] || '';
const qty = quantities[i] || '';
const pair = document.createElement('div');
pair.className = 'spec-quantity-pair';
pair.innerHTML = `
<input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showEditSpecSelectModalForPair(this, 'pair')" value="${specifications[i]}">
<input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()" value="${quantities[i] || ''}">
<input type="text" class="spec-value" placeholder="请选择规格" readonly onclick="showEditSpecSelectModalForPair(this, 'pair')" value="${spec}">
<input type="text" class="form-input quantity-input" placeholder="请输入件数" onwheel="this.blur()" value="${qty}">
<button type="button" class="remove-quantity-btn" onclick="removeEditSpecQuantityPair(this)">×</button>
`;
specQuantityPairs.appendChild(pair);
@ -6325,6 +6465,76 @@
hideEditProductingSelectModal();
}
// 编辑新鲜程度选择功能
let editAllFreshnessOptions = ['正常质量(1-4天)', '一般质量(3天以内)', '一般质量(4天以上)', '精品'];
let editFilteredFreshnessOptions = [...editAllFreshnessOptions];
let editSelectedFreshness = '';
// 显示编辑新鲜程度选择弹窗
function showEditFreshnessSelectModal() {
const editFreshnessSelectModal = document.getElementById('editFreshnessSelectModal');
editFreshnessSelectModal.classList.add('active');
// 重置搜索输入
document.getElementById('editFreshnessSearchInput').value = '';
editFilteredFreshnessOptions = [...editAllFreshnessOptions];
generateEditFreshnessOptions();
}
// 隐藏编辑新鲜程度选择弹窗
function hideEditFreshnessSelectModal() {
const editFreshnessSelectModal = document.getElementById('editFreshnessSelectModal');
editFreshnessSelectModal.classList.remove('active');
}
// 生成编辑新鲜程度选项
function generateEditFreshnessOptions() {
const editFreshnessOptionsList = document.getElementById('editFreshnessOptionsList');
editFreshnessOptionsList.innerHTML = '';
editFilteredFreshnessOptions.forEach(freshness => {
const option = document.createElement('div');
option.className = 'select-item';
option.textContent = freshness;
option.onclick = () => {
// 移除所有选项的选中状态
document.querySelectorAll('#editFreshnessOptionsList .select-item').forEach(item => {
item.classList.remove('selected');
});
// 添加当前选项的选中状态
option.classList.add('selected');
editSelectedFreshness = freshness;
};
option.ondblclick = () => {
// 双击直接确认选择
document.getElementById('editFreshnessDisplayText').textContent = freshness;
document.getElementById('editFreshness').value = freshness;
hideEditFreshnessSelectModal();
};
editFreshnessOptionsList.appendChild(option);
});
}
// 过滤编辑新鲜程度选项
function filterEditFreshnessOptions() {
const searchInput = document.getElementById('editFreshnessSearchInput');
const searchKeyword = searchInput.value.toLowerCase();
editFilteredFreshnessOptions = editAllFreshnessOptions.filter(freshness => {
return freshness.toLowerCase().includes(searchKeyword);
});
generateEditFreshnessOptions();
}
// 确认编辑新鲜程度选择
function confirmEditFreshnessSelection() {
if (editSelectedFreshness) {
document.getElementById('editFreshnessDisplayText').textContent = editSelectedFreshness;
document.getElementById('editFreshness').value = editSelectedFreshness;
}
hideEditFreshnessSelectModal();
}
// 编辑地区选择功能
// 显示编辑地区选择弹窗
function showEditRegionSelectModal() {
@ -6898,10 +7108,10 @@
const specValue = pair.querySelector('.spec-value').value.trim();
const quantityValue = pair.querySelector('.quantity-input').value.trim();
if (specValue && quantityValue) {
specifications.push(specValue);
quantities.push(quantityValue);
}
// 保存所有添加的规格和件数对,即使其中一个为空
// 这样可以保持记忆功能,下次编辑时还能看到之前添加的对
specifications.push(specValue);
quantities.push(quantityValue);
});
@ -6933,7 +7143,7 @@
description: document.getElementById('editDescription').value,
region: document.getElementById('editRegionValue').value,
contactId: document.getElementById('editContactId').value,
freshness: document.getElementById('editFreshness').value,
imageUrls: editCurrentImages, // 添加编辑后的图片列表
autoOfflineTime: autoOfflineTime, // 自动下架时间
autoOfflineDays: null, // 不再使用天数,设置为null

Loading…
Cancel
Save