|
@@ -563,6 +563,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
// 初始化选项卡验证提示系统
|
|
|
that.initTabValidation();
|
|
|
|
|
|
+ // 监听单规格表单区域的显示状态变化(新增页面也需要)
|
|
|
+ that.watchSingleSpecFormVisibility();
|
|
|
+
|
|
|
Controller.api.bindevent();
|
|
|
Controller.api.add_sku();
|
|
|
});
|
|
@@ -595,12 +598,92 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
// 编辑时初始化商品类型选择状态
|
|
|
that.initEditTypeState();
|
|
|
|
|
|
+ // 延迟再次尝试填充单规格数据,解决某些情况下数据不显示的问题
|
|
|
+ setTimeout(function() {
|
|
|
+ console.log('延迟再次尝试填充单规格数据');
|
|
|
+ that.initSingleSpecData();
|
|
|
+ }, 1000);
|
|
|
+
|
|
|
+ // 监听单规格表单区域的显示状态变化
|
|
|
+ that.watchSingleSpecFormVisibility();
|
|
|
|
|
|
Controller.api.bindevent();
|
|
|
Controller.api.add_sku();
|
|
|
});
|
|
|
},
|
|
|
|
|
|
+ // 监听单规格表单区域的显示状态变化
|
|
|
+ watchSingleSpecFormVisibility: function() {
|
|
|
+ var that = this;
|
|
|
+
|
|
|
+ // 使用MutationObserver监听DOM变化
|
|
|
+ if (typeof MutationObserver !== 'undefined') {
|
|
|
+ var observer = new MutationObserver(function(mutations) {
|
|
|
+ mutations.forEach(function(mutation) {
|
|
|
+ // 检查单规格表单是否变为可见
|
|
|
+ var $singleSpecForm = $('#single-spec-form');
|
|
|
+ if ($singleSpecForm.length > 0 && $singleSpecForm.is(':visible')) {
|
|
|
+ // 检查关键字段是否为空
|
|
|
+ var $priceField = $('#c-price');
|
|
|
+ var $stocksField = $('#c-stocks');
|
|
|
+
|
|
|
+ if ($priceField.length > 0 && $stocksField.length > 0) {
|
|
|
+ var currentPrice = $priceField.val();
|
|
|
+ var currentStocks = $stocksField.val();
|
|
|
+
|
|
|
+ // 如果字段为空且有SKU数据,则重新填充
|
|
|
+ if ((!currentPrice || currentPrice === '') &&
|
|
|
+ (!currentStocks || currentStocks === '') &&
|
|
|
+ Config.goods && Config.goods.spec_type == '0' &&
|
|
|
+ Config.goods_skus && Config.goods_skus.length > 0) {
|
|
|
+
|
|
|
+ console.log('检测到单规格表单变为可见且数据为空,重新填充数据');
|
|
|
+ setTimeout(function() {
|
|
|
+ that.initSingleSpecData();
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ // 开始观察
|
|
|
+ observer.observe(document.body, {
|
|
|
+ childList: true,
|
|
|
+ subtree: true,
|
|
|
+ attributes: true,
|
|
|
+ attributeFilter: ['style', 'class']
|
|
|
+ });
|
|
|
+
|
|
|
+ // 存储observer引用以便后续清理
|
|
|
+ this._singleSpecObserver = observer;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 同时监听选项卡切换事件
|
|
|
+ $('a[href="#skus"]').on('shown.bs.tab', function() {
|
|
|
+ console.log('切换到价格库存选项卡');
|
|
|
+ setTimeout(function() {
|
|
|
+ // 检查是否为单规格且数据未填充
|
|
|
+ var specType = $('input[name="row[spec_type]"]:checked').val();
|
|
|
+ if (specType == '0') {
|
|
|
+ var $priceField = $('#c-price');
|
|
|
+ var $stocksField = $('#c-stocks');
|
|
|
+
|
|
|
+ if ($priceField.length > 0 && $stocksField.length > 0) {
|
|
|
+ var currentPrice = $priceField.val();
|
|
|
+ var currentStocks = $stocksField.val();
|
|
|
+
|
|
|
+ if ((!currentPrice || currentPrice === '') &&
|
|
|
+ (!currentStocks || currentStocks === '')) {
|
|
|
+ console.log('价格库存选项卡:检测到单规格数据为空,重新填充');
|
|
|
+ that.initSingleSpecData();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, 200);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
// 检查多选控件是否为空
|
|
|
isMultiSelectEmpty: function(value) {
|
|
|
if (Array.isArray(value)) {
|
|
@@ -747,33 +830,114 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
}
|
|
|
|
|
|
// 如果是单规格且有SKU数据,填充单规格表单
|
|
|
+ this.initSingleSpecData();
|
|
|
+ },
|
|
|
+
|
|
|
+ // 初始化单规格数据填充
|
|
|
+ initSingleSpecData: function() {
|
|
|
+ var that = this;
|
|
|
+
|
|
|
if (Config.goods && Config.goods.spec_type == '0' && Config.goods_skus && Config.goods_skus.length > 0) {
|
|
|
- console.log('填充单规格数据');
|
|
|
+ console.log('开始填充单规格数据');
|
|
|
var sku = Config.goods_skus[0];
|
|
|
+ console.log('SKU数据:', sku);
|
|
|
|
|
|
- // 延迟填充数据,确保DOM已渲染
|
|
|
- setTimeout(function() {
|
|
|
- $('#c-price').val(sku.price || '');
|
|
|
- $('#c-lineation_price').val(sku.lineation_price || '');
|
|
|
- $('#c-cost_price').val(sku.cost_price || '');
|
|
|
- $('#c-stocks').val(sku.stocks || '');
|
|
|
- $('#c-weight').val(sku.weight || '');
|
|
|
- $('#c-volume').val(sku.volume || '');
|
|
|
- $('#c-sku-sn').val(sku.sku_sn || '');
|
|
|
- $('#c-single-image').val(sku.image || '');
|
|
|
+ // 多次尝试填充数据,确保DOM已渲染
|
|
|
+ var fillAttempts = 0;
|
|
|
+ var maxAttempts = 5;
|
|
|
+
|
|
|
+ function attemptFill() {
|
|
|
+ fillAttempts++;
|
|
|
+ console.log('第' + fillAttempts + '次尝试填充单规格数据');
|
|
|
+
|
|
|
+ // 检查关键元素是否存在
|
|
|
+ var $priceField = $('#c-price');
|
|
|
+ var $stocksField = $('#c-stocks');
|
|
|
|
|
|
- // 更新单规格图片预览
|
|
|
- if (sku.image) {
|
|
|
- var $preview = $('#p-single-image');
|
|
|
- var img = '<li><a href="' + Fast.api.cdnurl(sku.image, true) + '" data-url="' + sku.image + '" target="_blank"><img src="' + Fast.api.cdnurl(sku.image, true) + '"/></a></li>';
|
|
|
- $preview.html(img);
|
|
|
+ if ($priceField.length === 0 || $stocksField.length === 0) {
|
|
|
+ console.log('关键元素未找到,等待DOM渲染完成...');
|
|
|
+ if (fillAttempts < maxAttempts) {
|
|
|
+ setTimeout(attemptFill, 200 * fillAttempts);
|
|
|
+ } else {
|
|
|
+ console.error('单规格表单元素未找到,填充失败');
|
|
|
+ }
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- console.log('单规格数据填充完成');
|
|
|
- }, 200);
|
|
|
+ // 填充数据
|
|
|
+ try {
|
|
|
+ console.log('填充销售价:', sku.price);
|
|
|
+ $priceField.val(sku.price || '0.01');
|
|
|
+
|
|
|
+ console.log('填充划线价:', sku.lineation_price);
|
|
|
+ $('#c-lineation_price').val(sku.lineation_price || '0.00');
|
|
|
+
|
|
|
+ console.log('填充成本价:', sku.cost_price);
|
|
|
+ $('#c-cost_price').val(sku.cost_price || '0.00');
|
|
|
+
|
|
|
+ console.log('填充库存:', sku.stocks);
|
|
|
+ $stocksField.val(sku.stocks || '1');
|
|
|
+
|
|
|
+ console.log('填充重量:', sku.weight);
|
|
|
+ $('#c-weight').val(sku.weight || '0.00');
|
|
|
+
|
|
|
+ console.log('填充体积:', sku.volume);
|
|
|
+ $('#c-volume').val(sku.volume || '0.00');
|
|
|
+
|
|
|
+ console.log('填充SKU编码:', sku.sku_sn);
|
|
|
+ $('#c-sku-sn').val(sku.sku_sn || '');
|
|
|
+
|
|
|
+ console.log('填充图片:', sku.image);
|
|
|
+ $('#c-single-image').val(sku.image || '');
|
|
|
+
|
|
|
+ // 更新单规格图片预览
|
|
|
+ if (sku.image) {
|
|
|
+ var $preview = $('#p-single-image');
|
|
|
+ if ($preview.length > 0) {
|
|
|
+ var img = '<li><a href="' + Fast.api.cdnurl(sku.image, true) + '" data-url="' + sku.image + '" target="_blank"><img src="' + Fast.api.cdnurl(sku.image, true) + '"/></a></li>';
|
|
|
+ $preview.html(img);
|
|
|
+ console.log('单规格图片预览已更新');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 触发字段变化事件,确保验证状态正确
|
|
|
+ $priceField.trigger('change');
|
|
|
+ $stocksField.trigger('change');
|
|
|
+
|
|
|
+ console.log('单规格数据填充完成');
|
|
|
+
|
|
|
+ // 验证填充结果
|
|
|
+ setTimeout(function() {
|
|
|
+ var currentPrice = $priceField.val();
|
|
|
+ var currentStocks = $stocksField.val();
|
|
|
+ console.log('验证填充结果 - 价格:', currentPrice, '库存:', currentStocks);
|
|
|
+
|
|
|
+ if (!currentPrice || currentPrice === '' || !currentStocks || currentStocks === '') {
|
|
|
+ console.warn('单规格数据填充可能不完整,重新尝试...');
|
|
|
+ if (fillAttempts < maxAttempts) {
|
|
|
+ setTimeout(attemptFill, 300);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, 100);
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.error('填充单规格数据时发生错误:', error);
|
|
|
+ if (fillAttempts < maxAttempts) {
|
|
|
+ setTimeout(attemptFill, 200 * fillAttempts);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 开始填充尝试
|
|
|
+ setTimeout(attemptFill, 300);
|
|
|
+
|
|
|
} else if (Config.goods && Config.goods.spec_type == '1') {
|
|
|
console.log('多规格商品,等待Vue组件初始化多规格数据');
|
|
|
// 多规格数据由Vue组件的init方法处理
|
|
|
+ } else {
|
|
|
+ console.log('无需填充单规格数据,或数据不完整');
|
|
|
+ console.log('Config.goods:', Config.goods);
|
|
|
+ console.log('Config.goods_skus:', Config.goods_skus);
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -2201,11 +2365,21 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|
|
// 使用FastAdmin的Favisible系统自动控制显示隐藏
|
|
|
$(document).trigger('fa.event.favisible');
|
|
|
|
|
|
- // 如果切换到单规格,清空多规格数据(可选)
|
|
|
- if (specType == '0' && typeof vm !== 'undefined' && vm) {
|
|
|
- console.log('切换到单规格,清空多规格数据');
|
|
|
- // vm.specList = [];
|
|
|
- // vm.tableData = [];
|
|
|
+ // 如果切换到单规格,在编辑模式下重新填充单规格数据
|
|
|
+ if (specType == '0') {
|
|
|
+ console.log('切换到单规格');
|
|
|
+
|
|
|
+ // 清空多规格数据(可选)
|
|
|
+ if (typeof vm !== 'undefined' && vm) {
|
|
|
+ console.log('清空多规格数据');
|
|
|
+ // vm.specList = [];
|
|
|
+ // vm.tableData = [];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 延迟填充单规格数据,确保表单已显示
|
|
|
+ setTimeout(function() {
|
|
|
+ Controller.initSingleSpecData();
|
|
|
+ }, 200);
|
|
|
}
|
|
|
|
|
|
// 如果切换到多规格,确保Vue组件已初始化
|