/**
* 奖励信息组件
* 用于创建和管理奖励信息表单元素
*/
/**
* 初始化奖励信息区域
* @param {string} containerId - 容器ID
* @param {Array|string} existingRewards - 已存在的奖励数据数组或reward_id
*/
function initRewardInfo(containerId, existingRewards = null) {
var $ = layui.$;
var form = layui.form;
// 奖励类型选项
var rewardTypes = [
{ value: '1', text: '钻石' },
{ value: '2', text: 'UU币' },
{ value: '3', text: '达达卷' },
{ value: '4', text: '优惠券' }
];
// 存储优惠券数据
var couponsData = [];
// 创建奖励信息卡片
var cardHtml = '
';
if ($('input[name="reward_id"]').length == 0) {
cardHtml += '';
}
// 渲染奖励信息卡片
$('#' + containerId).html(cardHtml);
// 请求优惠券数据
function fetchCoupons(callback) {
var load = layer.load(2);
$.ajax({
url: '/admin/get_coupons',
type: 'GET',
dataType: 'json',
success: function (res) {
layer.close(load);
if (res.code == 0) {
couponsData = res.data;
if (typeof callback === 'function') {
callback(couponsData);
}
} else {
layer.msg(res.msg || '获取优惠券失败', { icon: 2, anim: 6, time: 1500 });
}
},
error: function () {
layer.close(load);
layer.msg('网络错误,请稍后重试', { icon: 2, anim: 6, time: 1500 });
}
});
}
// 生成唯一ID
function generateUniqueId() {
return 'reward_' + new Date().getTime() + '_' + Math.floor(Math.random() * 1000);
}
// 添加奖励项
function addRewardItem(rewardData = null) {
var uniqueId = generateUniqueId();
var html = '';
$('#rewardContainer').append(html);
form.render('select'); // 重新渲染表单
// 绑定删除按钮事件
$('.remove-reward[data-id="' + uniqueId + '"]').click(function () {
var id = $(this).data('id');
$('#' + id).remove();
});
// 如果是优惠券类型,需要加载优惠券数据
if (rewardData && rewardData.reward_type == '4') {
var $item = $('#' + uniqueId);
var $couponSelect = $item.find('.coupon-select');
// 获取优惠券数据并选中指定的优惠券
if (couponsData.length > 0) {
fillCouponOptions($couponSelect, couponsData, rewardData.reward_extend);
} else {
fetchCoupons(function (coupons) {
fillCouponOptions($couponSelect, coupons, rewardData.reward_extend);
});
}
}
return uniqueId;
}
// 添加奖励按钮点击事件
$('#addReward').click(function () {
addRewardItem();
});
// 监听奖励类型选择
form.on('select(rewardTypeFilter)', function (data) {
var $item = $(data.elem).closest('.reward-item');
var value = data.value;
if (value == '4') { // 选择了优惠券
$item.find('.reward-value-container').hide();
$item.find('.coupon-container').show();
$item.find('.reward-value-input').val(''); // 清空奖励数值
// 获取当前选择框的优惠券选择框
var $couponSelect = $item.find('.coupon-select');
// 如果优惠券数据已加载,直接填充
if (couponsData.length > 0) {
fillCouponOptions($couponSelect, couponsData);
} else {
// 否则请求加载
fetchCoupons(function (coupons) {
fillCouponOptions($couponSelect, coupons);
});
}
} else {
$item.find('.reward-value-container').show();
$item.find('.coupon-container').hide();
$item.find('.coupon-select').val(''); // 清空优惠券选择
form.render('select');
}
});
// 填充优惠券选项
function fillCouponOptions($select, coupons, selectedCouponId = null) {
// 清空现有选项,保留第一个"请选择"
$select.find('option:not(:first)').remove();
// 添加优惠券选项
for (var i = 0; i < coupons.length; i++) {
var coupon = coupons[i];
var selected = selectedCouponId && coupon.id == selectedCouponId ? 'selected' : '';
$select.append('');
}
// 重新渲染表单
form.render('select');
}
// 处理初始化奖励数据
if (existingRewards) {
// 如果传入的是字符串(reward_id),则通过接口获取奖励数据
if (typeof existingRewards === 'string' && existingRewards.trim() !== '') {
var rewardId = existingRewards;
// 通过API获取奖励数据
var loadingIndex = layer.load(1, { shade: [0.1, '#fff'] });
$.ajax({
url: '/admin/get_rewards_by_id',
type: 'GET',
data: { reward_id: rewardId },
dataType: 'json',
success: function (res) {
layer.close(loadingIndex);
if (res.status === 1 && res.data && res.data.length > 0) {
// 先获取优惠券数据,再初始化奖励表单
if ($('input[name="reward_id"]').length > 0) {
$('input[name="reward_id"]').val(rewardId);
}
fetchCoupons(function () {
// 遍历奖励数据,添加奖励项
for (var i = 0; i < res.data.length; i++) {
var rewardItem = {
reward_type: res.data[i].reward_type.toString(),
reward_value: res.data[i].reward_value || '',
reward_extend: res.data[i].reward_extend || ''
};
addRewardItem(rewardItem);
}
});
} else {
// layer.msg('没有找到奖励数据或获取失败', { icon: 2, time: 2000 });
}
},
error: function () {
layer.close(loadingIndex);
layer.msg('网络错误,无法获取奖励数据', { icon: 2, time: 2000 });
}
});
}
// 如果传入的是数组,直接使用
else if (Array.isArray(existingRewards) && existingRewards.length > 0) {
// 先获取优惠券数据,再初始化奖励表单
fetchCoupons(function () {
for (var i = 0; i < existingRewards.length; i++) {
addRewardItem(existingRewards[i]);
}
});
}
} else {
// 预加载优惠券数据,以便后续使用
fetchCoupons();
}
}
/**
* 验证奖励信息
* @returns {boolean} - 验证结果
*/
function validateRewardInfo() {
var $ = layui.$;
var hasRewardType = false;
$('.reward-type-select').each(function () {
if ($(this).val()) {
hasRewardType = true;
var $item = $(this).closest('.reward-item');
var rewardType = $(this).val();
// 如果不是优惠券类型,检查奖励数值
if (rewardType != '4' && !$item.find('.reward-value-input').val()) {
layer.msg('请输入奖励数值', { icon: 2, anim: 6, time: 1500 });
hasRewardType = false;
return false;
}
// 如果是优惠券类型,检查是否选择了优惠券
if (rewardType == '4' && !$item.find('.coupon-select').val()) {
layer.msg('请选择优惠券', { icon: 2, anim: 6, time: 1500 });
hasRewardType = false;
return false;
}
}
});
if (!hasRewardType) {
layer.msg('请至少添加一项奖励信息', { icon: 2, anim: 6, time: 1500 });
return false;
}
// 验证通过后,处理奖励数据
processRewardData();
return true;
}
/**
* 处理奖励数据,将其转换为JSON格式并添加到隐藏字段
*/
function processRewardData() {
var $ = layui.$;
var rewardData = [];
// 收集所有奖励项的数据
$('.reward-item').each(function () {
var $item = $(this);
var rewardType = $item.find('.reward-type-select').val();
if (rewardType) {
var rewardObj = {
reward_type: rewardType,
reward_value: '',
coupon_id: ''
};
// 根据奖励类型设置相应的值
if (rewardType == '4') { // 优惠券类型
rewardObj.coupon_id = $item.find('.coupon-select').val() || '';
} else { // 其他类型
rewardObj.reward_value = $item.find('.reward-value-input').val() || '';
}
rewardData.push(rewardObj);
}
});
// 将奖励数据转换为JSON字符串
var rewardJson = JSON.stringify(rewardData);
// 检查表单中是否已存在reward隐藏字段
if ($('input[name="reward"]').length > 0) {
$('input[name="reward"]').val(rewardJson);
} else {
// 创建隐藏字段并添加到表单中
$('form').append('');
}
// 清除可能残留的旧字段(兼容性考虑)
$('input[name="reward_type[]"], input[name="reward_value[]"], input[name="coupon_id[]"]').remove();
}
/**
* 处理奖励数据,将其转换为JSON格式并添加到隐藏字段
*/
async function processRewardIdData(pre, reward_id = '') {
var $ = layui.$;
var rewardData = [];
// 收集所有奖励项的数据
$('.reward-item').each(function () {
var $item = $(this);
var rewardType = $item.find('.reward-type-select').val();
if (rewardType) {
var rewardObj = {
reward_type: rewardType,
reward_value: '',
coupon_id: ''
};
// 根据奖励类型设置相应的值
if (rewardType == '4') { // 优惠券类型
rewardObj.coupon_id = $item.find('.coupon-select').val() || '';
} else { // 其他类型
rewardObj.reward_value = $item.find('.reward-value-input').val() || '';
}
rewardData.push(rewardObj);
}
});
if (reward_id || reward_id == '') {
if ($('input[name="reward_id"]').length > 0) {
reward_id = $('input[name="reward_id"]').val();
}
}
if (reward_id == '' && rewardData.length == 0) {
// layer.msg('请至少添加一项奖励信息', { icon: 2, anim: 6, time: 1500 });
return false;
}
// 将奖励数据转换为JSON字符串
var rewardJson = JSON.stringify(rewardData);
// reward_add_json
var url = "/admin/reward_add_json.html";
var $ = layui.$;
var load = layer.load(2);
let l = await $.post(url, { reward: rewardJson, reward_id: reward_id, reward_id_pre: pre });
layer.close(load);
console.log(l);
if (l && l.status === 1) {
reward_id = l.data.reward_id;
}
// 检查表单中是否已存在reward隐藏字段
if ($('input[name="reward_id"]').length > 0) {
$('input[name="reward_id"]').val(reward_id);
} else {
// 创建隐藏字段并添加到表单中
$('form').append('');
}
// 清除可能残留的旧字段(兼容性考虑)
$('input[name="reward_type[]"], input[name="reward_value[]"], input[name="coupon_id[]"]').remove();
}