|
Server : Apache System : Linux iZ6xhqomji47p1Z 5.10.134-15.al8.x86_64 #1 SMP Thu Jul 20 00:44:04 CST 2023 x86_64 User : www ( 1000) PHP Version : 8.1.30 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/fsjlkj.cn/application/admin/logic/ |
<?php
/**
* 易优CMS
* ============================================================================
* 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
* 网站地址: http://www.eyoucms.com
* ----------------------------------------------------------------------------
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
* ============================================================================
* Author: 陈风任 <491085389@qq.com>
* Date: 2019-07-08
*/
namespace app\admin\logic;
use think\Model;
use think\Db;
/**
* 逻辑定义
* 用于产品规格逻辑功能处理
* @package admin\Logic
*/
class ProductSpecLogic extends Model
{
/**
* 初始化操作
*/
public function _initialize() {
parent::_initialize();
}
// 数组降级返回
public function ArrayDowngrade($GetData = array())
{
$ReturnData = [];
foreach ($GetData as $value){
foreach ($value as $vv){
$ReturnData[] = $vv;
}
}
return $ReturnData;
}
// 一维数组转为二级数组,携带子数组
public function GetPresetData($GetData = array())
{
$GetData = group_same_key($GetData, 'preset_mark_id');
$ReturnData = [];
foreach ($GetData as $key => $value) {
$ReturnData[] = [
'preset_id' => $value[0]['preset_id'],
'preset_mark_id' => $value[0]['preset_mark_id'],
'preset_name' => $value[0]['preset_name'],
'spec_sync' => $value[0]['spec_sync'],
'sort_order' => $value[0]['sort_order'],
'preset_value' => $value,
];
}
return $ReturnData;
}
// 删除规格名称\规格值条件
public function GetDeleteSpecWhere($GetData = array())
{
$where = [];
// 删除规格值
if (isset($GetData['preset_id']) && !empty($GetData['preset_id'])) {
$where = [
'lang' => get_admin_lang(),
'preset_id' => $GetData['preset_id'],
];
}
// 删除规格名称,包扣规格名称下的所有规格值
if (isset($GetData['preset_mark_id']) && !empty($GetData['preset_mark_id'])) {
$where = [
'lang' => get_admin_lang(),
'preset_mark_id' => ['IN', $GetData['preset_mark_id']],
];
}
return $where;
}
// 拼装预设值下拉选项
public function GetPresetValueOption($GetData = array(), $mark_id = null, $aid = null, $type = null)
{
$result = $PresetValueOption = '';
if (!empty($mark_id)) {
$where = [
'lang' => get_admin_lang(),
'aid' => $aid,
'spec_is_select' => 0, // 未选中的
'spec_mark_id' => ['IN', $mark_id],
];
$GetData = Db::name('product_spec_data_handle')->where($where)->field('spec_value_id, spec_name, spec_value')->select();
$PresetValueOption .= "<option value='0'>选择规格值</option>";
foreach ($GetData as $value) {
$PresetValueOption .= "<option value='{$value['spec_value_id']}'>{$value['spec_value']}</option>";
}
if (2 == $type) {
$result = [
'PresetName' => $GetData[0]['spec_name'],
'PresetValueOption' => $PresetValueOption,
];
} else {
$result = $PresetValueOption;
}
} else {
$result .= "<option value='0'>选择规格值</option>";
if (!empty($GetData)) {
foreach ($GetData as $value) {
$result .= "<option value='{$value['preset_id']}'>{$value['preset_value']}</option>";
}
}
}
return $result;
}
// 预设规格标记ID数组
public function GetPresetMarkIdArray($GetData = array())
{
$result = '';
if (isset($GetData['aid']) && !empty($GetData['aid'])) {
$spec_mark_id_arr = $GetData['spec_mark_id_arr'];
if (empty($spec_mark_id_arr)) {
$result = $GetData['spec_mark_id'];
} else {
$return_spec_mark_id = $spec_mark_id_arr . ',' . $GetData['spec_mark_id'];
if (3 < count(explode(',', $return_spec_mark_id))) {
$result = false;
} else {
$result = $return_spec_mark_id;
}
}
} else {
$preset_mark_id_arr = $GetData['preset_mark_id_arr'];
if (empty($preset_mark_id_arr)) {
$result = $GetData['preset_mark_id'];
} else {
$return_preset_mark_id = $preset_mark_id_arr . ',' . $GetData['preset_mark_id'];
if (3 < count(explode(',', $return_preset_mark_id))) {
$result = false;
} else {
$result = $return_preset_mark_id;
}
}
}
return $result;
}
// 拼装规格名称下拉选项
public function GetPresetNameOption($preset_mark_id_arr = null)
{
$MarkIdWhere = explode(',', $preset_mark_id_arr);
$where = [
'lang' => get_admin_lang(),
'preset_mark_id' => ['NOT IN', $MarkIdWhere],
];
$PresetName = Db::name('product_spec_preset')->where($where)->field('preset_id, preset_mark_id, preset_name')->group('preset_mark_id')->order('preset_mark_id desc')->select();
if (!empty($PresetName)) {
// 拼装下拉选项
foreach ($PresetName as $value) {
$Option .= "<option value='{$value['preset_mark_id']}'>{$value['preset_name']}</option>";
}
}
$result = [
'Option' => $Option,
'MarkId' => implode(',', $MarkIdWhere),
];
return $result;
}
public function GetPresetSpecAssembly($GetData = array())
{
$preset_mark_id = $GetData['preset_mark_id'];
if (isset($GetData['aid']) && !empty($GetData['aid'])) {
$PresetMarkIdArray = $GetData['spec_mark_id_arr'];
}else{
$PresetMarkIdArray = $GetData['preset_mark_id_arr'];
}
$i = 0;
if (!empty($PresetMarkIdArray) && !empty($preset_mark_id)) {
$mark_id_arr = explode(',', $PresetMarkIdArray);
foreach ($mark_id_arr as $key => $value) {
if ($value == $preset_mark_id) {
unset($mark_id_arr[$key]);
$i++;
}
}
if (!empty($i)) {
$PresetMarkIdArray = implode(',', $mark_id_arr);
}
}
$HtmlTable = '';
if (!empty($i) && !empty($preset_mark_id)) {
$spec_arr_ses = session('spec_arr');
unset($spec_arr_ses[$preset_mark_id]);
session('spec_arr', $spec_arr_ses);
$HtmlTable = $this->SpecAssembly($spec_arr_ses);
}
$return = [
'HtmlTable' => $HtmlTable,
'PresetMarkIdArray' => $PresetMarkIdArray,
];
return $return;
}
public function GetResetPresetNameOption($GetData = array())
{
$del_mark_id = $GetData['del_mark_id'];
$return = [
'Option' => '',
'MarkId' => '',
];
if (isset($del_mark_id) && !empty($del_mark_id) && !isset($GetData['del_preset_id'])) {
// 删除商品规格处理库的规格数据
if (isset($GetData['aid']) && !empty($GetData['aid'])) {
$WhereData = [
'aid' => $GetData['aid'],
'spec_mark_id' => $del_mark_id,
];
Db::name('product_spec_data_handle')->where($WhereData)->delete(true);
// $Update = [
// 'spec_is_select' => 0,
// 'update_time' => getTime(),
// ];
// Db::name('product_spec_data_handle')->where($WhereData)->update($Update);
} else {
// 删除 session 数据并覆盖原数据
$spec_arr_ses = session('spec_arr');
unset($spec_arr_ses[$del_mark_id]);
session('spec_arr', $spec_arr_ses);
}
// 获取提交的规格标记ID数组并处理生成预设规格下拉信息
$PresetMarkIdArray = !empty($GetData['preset_mark_id_arr']) ? $GetData['preset_mark_id_arr'] : $GetData['spec_mark_id_arr'];
if (!empty($PresetMarkIdArray)) {
$mark_id_arr = explode(',', $PresetMarkIdArray);
foreach ($mark_id_arr as $key => $value) {
if ($value == $del_mark_id) unset($mark_id_arr[$key]);
}
$PresetMarkIdArray = implode(',', $mark_id_arr);
}
$return = $this->GetPresetNameOption($PresetMarkIdArray);
}
return $return;
}
public function ClearSpecValueID($GetData = array())
{
// 清除单个规格值
$del_mark_id = $GetData['del_mark_id'];
$return = [
'Option' => '',
];
if (isset($del_mark_id) && !empty($del_mark_id) && isset($GetData['del_preset_id'])) {
// 删除指定规格值并覆盖原数据
$spec_arr_ses = session('spec_arr');
foreach ($spec_arr_ses[$del_mark_id] as $key => $value) {
if ($value == $GetData['del_preset_id']) unset($spec_arr_ses[$del_mark_id][$key]);
}
// 如果规格大类下的规格值都删完了则删除规格大类
if (empty($spec_arr_ses[$del_mark_id])) unset($spec_arr_ses[$del_mark_id]);
// 覆盖原数据
session('spec_arr', $spec_arr_ses);
// 处理生成预设规格下拉信息
$preset_id = $spec_arr_ses[$del_mark_id];
if (empty($GetData['aid'])) {
$WhereNew = [
'preset_mark_id' => $del_mark_id,
'preset_id' => ['NOT IN', $preset_id],
];
// 加载选中的规格值
$PresetValue = Db::name('product_spec_preset')->where($WhereNew)->select();
$return['Option'] = $this->GetPresetValueOption($PresetValue);
} else {
// 更新规格值
$Where = [
'aid' => $GetData['aid'],
'spec_mark_id' => $del_mark_id,
'spec_value_id' => $GetData['del_preset_id'],
'spec_is_select'=> 1,
];
Db::name('product_spec_data_handle')->where($Where)->update(['spec_is_select'=>0, 'update_time'=>getTime()]);
// 拼装新的下拉框数据
$WhereNew = [
'aid' => $GetData['aid'],
'spec_mark_id' => $del_mark_id,
'spec_is_select' => 0,
];
$Data = Db::name('product_spec_data_handle')->where($WhereNew)->field('spec_value_id,spec_value')->select();
$return['Option'] .= "<option value='0'>选择规格值</option>";
foreach ($Data as $value) {
$return['Option'] .= "<option value='{$value['spec_value_id']}'>{$value['spec_value']}</option>";
}
}
}
return $return;
}
public function GetSessionPostArrayMerge($GetData = array())
{
$preset_id = $GetData['preset_id'];
$preset_mark_id = $GetData['preset_mark_id'];
$spec_arr_ses = session('spec_arr');
if (!empty($preset_mark_id) && !empty($preset_id)) {
$spec_arr_new = [
$preset_mark_id => [
$preset_id,
],
];
foreach ($spec_arr_new as $key => $value) {
if (isset($spec_arr_ses[$key])) {
if (in_array($value[0], $spec_arr_ses[$key])) {
$msg['error'] = '已有相同规格值,无需重复添加!';
return $msg;
} else {
// session存在数据,但选中参数在数据中还没有,合并数据
$spec_arr_ses[$key] = array_merge($spec_arr_ses[$key], $value);
}
} else {
if (!empty($spec_arr_ses)) {
// 不存在
$spec_arr_ses = $spec_arr_ses + $spec_arr_new;
} else {
$spec_arr_ses = $spec_arr_new;
}
}
}
}
session('spec_arr', $spec_arr_ses);
return $spec_arr_ses;
}
public function SpecAssembly($GetData = array())
{
if (empty($GetData)) return ' ';
// 参数处理
foreach ($GetData as $k => $v) {
$spec_arr_sort[$k] = count($v);
}
asort($spec_arr_sort);
foreach ($spec_arr_sort as $key =>$val) {
$spec_arr2[$key] = $GetData[$key];
}
// 获取KEY值
$clo_name = array_keys($spec_arr2);
// 数据组合
$spec_arr2 = $this->DataCombination($spec_arr2);
// 查询预设名称
$spec = Db::name('product_spec_preset')->group('preset_mark_id')->getField('preset_mark_id,preset_name');
// 查询预设值
$specItem = Db::name('product_spec_preset')->getField('preset_id,preset_value,preset_mark_id');
// 组合HTML
$ReturnHtml = "<table class='table table-bordered' id='spec_input_tab' border='1' cellpadding='10' cellspacing='10'><thead><tr>";
// 显示第一行的数据
foreach ($clo_name as $k => $v) {
$ReturnHtml .= "<td><b><input type='hidden' class='prese_name_input_{$v}' name='preset_mark_id[$v][preset_name]' value='{$spec[$v]}'><span class='preset_name_span_{$v}'>{$spec[$v]}</span></b></td>";
}
$ReturnHtml .= "<td><b>价格 <a href=\"javascript:void(0);\" onclick=\"BulkSetPrice(this);\">批量设置 </a></b></td>";
$ReturnHtml .= "<td><b>库存 <a href=\"javascript:void(0);\" onclick=\"BulkSetStock(this);\">批量设置 </a></b></td>";
$ReturnHtml .= "<td><b>虚拟销量</b></td>";
$ReturnHtml .= "</tr></thead><tbody>";
// 显示第二行开始
foreach ($spec_arr2 as $k => $v) {
$ReturnHtml .= "<tr id='preset_value_tr_{$v[0]}'>";
$preset_key_name = array();
foreach($v as $k2 => $v2) {
$ReturnHtml .= "<td><input type='hidden' class='preset_value_input_{$v2}' name='preset_id[$v2][preset_value]' value='{$specItem[$v2]['preset_value']}'><span class='preset_value_span_{$v2}'>{$specItem[$v2]['preset_value']}</span></td>";
$preset_key_name[$v2] = $spec[$specItem[$v2]['preset_mark_id']].':'.$specItem[$v2]['preset_value'];
}
ksort($preset_key_name);
$preset_key = implode('_', array_keys($preset_key_name));
$ReturnHtml .="<td><input class='users_price' name='preset_price[$preset_key][users_price]' value='0' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");UpPrice(this);' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")'/></td>";
$ReturnHtml .="<td><input class='stock_count' name='preset_stock[$preset_key][stock_count]' value='0' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");UpStock(this);' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' data-old_stock='0'/></td>";
$ReturnHtml .="<td><input type='text' name='preset_sales[$preset_key][spec_sales_num]' value='0' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\")' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")'></td>";
$ReturnHtml .="</tr>";
}
$ReturnHtml .= "</tbody>";
$ReturnHtml .= "</table>";
// $ReturnHtml .= '批量设置:<a href="javascript:void(0);" onclick="BulkSetPrice(this);" >价格</a> <a href="javascript:void(0);" onclick="BulkSetStock(this);" >库存</a>';
return $ReturnHtml;
}
public function SpecAssemblyEdit($GetData = array(), $aid = null)
{
if (empty($GetData)) return ' ';
// 参数处理
foreach ($GetData as $k => $v) {
$spec_arr_sort[$k] = count($v);
}
asort($spec_arr_sort);
foreach ($spec_arr_sort as $key =>$val) {
$spec_arr2[$key] = $GetData[$key];
}
// 获取KEY值
$clo_name = array_keys($spec_arr2);
// 数据组合
$spec_arr2 = $this->DataCombination($spec_arr2);
$aid = !empty($aid) ? $aid : session('handleAID');
$where = [
'aid' => $aid,
'spec_is_select' => 1,
];
// 查询规格名称
$order1 = 'spec_mark_id asc, spec_value_id asc';
$spec = Db::name('product_spec_data_handle')->where($where)->order($order1)->group('spec_mark_id')->getField('spec_mark_id, spec_name');
// 查询规格值
$order2 = 'spec_value_id desc';
$specItem = Db::name('product_spec_data_handle')->where($where)->order($order2)->getField('spec_value_id, spec_value, spec_mark_id');
// 查询规格价格
$specPrice = Db::name('product_spec_value')->where('aid', $aid)->order('spec_price asc')->getField('spec_value_id, spec_price, spec_stock, spec_sales_num');
// 组合HTML
$ReturnHtml = "<table class='table table-bordered' id='spec_input_tab' border='1' cellpadding='10' cellspacing='10'><thead><tr>";
// 显示第一行的数据
foreach ($clo_name as $k => $v) {
$ReturnHtml .= "<td><b><input type='hidden' class='spec_name_input_{$v}' name='spec_mark_id[$v][spec_name]' value='{$spec[$v]}'><span class='spec_name_span_{$v}'>{$spec[$v]}</span></b></td>";
}
$ReturnHtml .= "<td><b>价格 <a href=\"javascript:void(0);\" onclick=\"BulkSetPrice(this);\">批量设置 </a></b></td>";
$ReturnHtml .= "<td><b>库存 <a href=\"javascript:void(0);\" onclick=\"BulkSetStock(this);\">批量设置 </a></b></td>";
$ReturnHtml .= "<td><b>虚拟销量</b></td>";
$ReturnHtml .= "</tr></thead><tbody>";
// 显示第二行开始
foreach ($spec_arr2 as $k => $v) {
$ReturnHtml .= "<tr>";
$spec_key_name = array();
foreach($v as $k2 => $v2) {
$ReturnHtml .= "<td><input type='hidden' class='spec_value_input_{$v2}' name='spec_value_id[$v2][spec_value]' value='{$specItem[$v2]['spec_value']}'><span class='spec_value_span_{$v2}'>{$specItem[$v2]['spec_value']}</span></td>";
$spec_key_name[$v2] = $spec[$specItem[$v2]['spec_mark_id']].':'.$specItem[$v2]['spec_value'];
}
ksort($spec_key_name);
$spec_key = implode('_', array_keys($spec_key_name));
$ReturnHtml .="<td><input class='users_price' name='spec_price[$spec_key][users_price]' value='{$specPrice[$spec_key]['spec_price']}' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");UpPrice(this);'/></td>";
$ReturnHtml .="<td><input class='stock_count' name='spec_stock[$spec_key][stock_count]' value='{$specPrice[$spec_key]['spec_stock']}' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");UpStock(this);' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' data-old_stock='{$specPrice[$spec_key]['spec_stock']}'/></td>";
$ReturnHtml .="<td><input type='text' name='spec_sales[$spec_key][spec_sales_num]' value='{$specPrice[$spec_key]['spec_sales_num']}' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\")' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")'></td>";
$ReturnHtml .="</tr>";
}
$ReturnHtml .= "</tbody>";
$ReturnHtml .= "</table>";
// $ReturnHtml .= '批量设置:<a href="javascript:void(0);" onclick="BulkSetPrice(this);" >批量设置</a> <a href="javascript:void(0);" onclick="BulkSetStock(this);" >批量设置</a>';
return $ReturnHtml;
}
/**
* 2020/12/18 大黄 秒杀 多规格设置
*/
public function SharpSpecAssemblyEdit($GetData = array(), $aid = null)
{
if (empty($GetData)) return ' ';
// 参数处理
foreach ($GetData as $k => $v) {
$spec_arr_sort[$k] = count($v);
}
asort($spec_arr_sort);
foreach ($spec_arr_sort as $key =>$val) {
$spec_arr2[$key] = $GetData[$key];
}
// 排序
$order = 'spec_value_id asc, spec_id asc, spec_mark_id asc';
// 获取KEY值
$clo_name = array_keys($spec_arr2);
// 数据组合
$spec_arr2 = $this->DataCombination($spec_arr2);
// 查询规格名称
$spec = Db::name('product_spec_data')->where('aid',$aid)->order($order)->group('spec_mark_id')->getField('spec_mark_id, spec_name');
// 查询规格值
$specItem = Db::name('product_spec_data')->where('aid',$aid)->order($order)->getField('spec_value_id, spec_value, spec_mark_id');
// 查询规格价格
$specPrice = Db::name('product_spec_value')->where('aid', $aid)->order('spec_price asc')->getField('spec_value_id, spec_price, spec_stock, seckill_price, seckill_stock');
// 组合HTML
$ReturnHtml = "<table class='table table-bordered' id='spec_input_tab' border='1' cellpadding='10' cellspacing='10'><thead><tr>";
// 显示第一行的数据
foreach ($clo_name as $k => $v) {
$ReturnHtml .= "<td><b><input type='hidden' class='spec_name_input_{$v}' name='spec_mark_id[$v][spec_name]' value='{$spec[$v]}'><span class='spec_name_span_{$v}'>{$spec[$v]}</span></b></td>";
}
$ReturnHtml .= "<td><b>价格 </b></td>";
$ReturnHtml .= "<td><b>库存 </b></td>";
$ReturnHtml .= "<td><b><em class='red'>*</em>秒杀价格 <a href=\"javascript:void(0);\" onclick=\"BulkSetPrice(this);\">批量设置 </a></b></td>";
$ReturnHtml .= "<td><b><em class='red'>*</em>秒杀库存 <a href=\"javascript:void(0);\" onclick=\"BulkSetStock(this);\" >批量设置 </a></b></td>";
$ReturnHtml .= "</tr></thead><tbody>";
// 显示第二行开始
foreach ($spec_arr2 as $k => $v) {
$ReturnHtml .= "<tr>";
$spec_key_name = array();
foreach($v as $k2 => $v2) {
$ReturnHtml .= "<td><input type='hidden' class='spec_value_input_{$v2}' name='spec_value_id[$v2][spec_value]' value='{$specItem[$v2]['spec_value']}'><span class='spec_value_span_{$v2}'>{$specItem[$v2]['spec_value']}</span></td>";
$spec_key_name[$v2] = $spec[$specItem[$v2]['spec_mark_id']].':'.$specItem[$v2]['spec_value'];
}
ksort($spec_key_name);
$spec_key = implode('_', array_keys($spec_key_name));
$ReturnHtml .="<td>{$specPrice[$spec_key]['spec_price']}<input type='hidden' class='users_price' name='spec_price[$spec_key][users_price]' value='{$specPrice[$spec_key]['spec_price']}' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");'/></td>";
$ReturnHtml .="<td>{$specPrice[$spec_key]['spec_stock']}<input type='hidden' class='stock_count' name='spec_stock[$spec_key][stock_count]' value='{$specPrice[$spec_key]['spec_stock']}' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' data-old_stock='{$specPrice[$spec_key]['spec_stock']}'/></td>";
if ($specPrice[$spec_key]['seckill_price'] > 0){
$seckill_price = $specPrice[$spec_key]['seckill_price'];
}else{
$seckill_price = '';
}
$ReturnHtml .="<td><input class='spec_seckill_price' name='seckill_price[$spec_key][spec_seckill_price]' value='{$seckill_price}' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");'/></td>";
if ($specPrice[$spec_key]['seckill_stock'] > 0){
$seckill_stock = $specPrice[$spec_key]['seckill_stock'];
}else{
$seckill_stock = '';
}
$ReturnHtml .="<td><input class='spec_seckill_stock' name='seckill_stock[$spec_key][spec_seckill_stock]' value='{$seckill_stock}' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' data-old_stock='{$specPrice[$spec_key]['seckill_stock']}'/></td>";
$ReturnHtml .="</tr>";
}
$ReturnHtml .= "</tbody>";
$ReturnHtml .= "</table>";
// $ReturnHtml .= '批量设置:<a href="javascript:void(0);" onclick="BulkSetPrice(this);" >批量设置</a> <a href="javascript:void(0);" onclick="BulkSetStock(this);" >批量设置</a>';
return $ReturnHtml;
}
/**
* 2022/03/08 大黄 限时折扣 多规格设置
*/
public function DiscountSpecAssemblyEdit($GetData = array(), $aid = null)
{
if (empty($GetData)) return ' ';
// 参数处理
foreach ($GetData as $k => $v) {
$spec_arr_sort[$k] = count($v);
}
asort($spec_arr_sort);
foreach ($spec_arr_sort as $key =>$val) {
$spec_arr2[$key] = $GetData[$key];
}
// 排序
$order = 'spec_value_id asc, spec_id asc, spec_mark_id asc';
// 获取KEY值
$clo_name = array_keys($spec_arr2);
// 数据组合
$spec_arr2 = $this->DataCombination($spec_arr2);
// 查询规格名称
$spec = Db::name('product_spec_data')->where('aid',$aid)->order($order)->group('spec_mark_id')->getField('spec_mark_id, spec_name');
// 查询规格值
$specItem = Db::name('product_spec_data')->where('aid',$aid)->order($order)->getField('spec_value_id, spec_value, spec_mark_id');
// 查询规格价格
$specPrice = Db::name('product_spec_value')->where('aid', $aid)->order('spec_price asc')->getField('spec_value_id, spec_price, spec_stock, discount_price, discount_stock');
// 组合HTML
$ReturnHtml = "<table class='table table-bordered' id='spec_input_tab' border='1' cellpadding='10' cellspacing='10'><thead><tr>";
// 显示第一行的数据
foreach ($clo_name as $k => $v) {
$ReturnHtml .= "<td><b><input type='hidden' class='spec_name_input_{$v}' name='spec_mark_id[$v][spec_name]' value='{$spec[$v]}'><span class='spec_name_span_{$v}'>{$spec[$v]}</span></b></td>";
}
$ReturnHtml .= "<td><b>价格 </b></td>";
$ReturnHtml .= "<td><b>库存 </b></td>";
$ReturnHtml .= "<td><b><em class='red'>*</em>限时折扣价格 <a href=\"javascript:void(0);\" onclick=\"BulkSetPrice(this);\">批量设置 </a></b></td>";
$ReturnHtml .= "<td><b><em class='red'>*</em>限时折扣库存 <a href=\"javascript:void(0);\" onclick=\"BulkSetStock(this);\" >批量设置 </a></b></td>";
$ReturnHtml .= "</tr></thead><tbody>";
// 显示第二行开始
foreach ($spec_arr2 as $k => $v) {
$ReturnHtml .= "<tr>";
$spec_key_name = array();
foreach($v as $k2 => $v2) {
$ReturnHtml .= "<td><input type='hidden' class='spec_value_input_{$v2}' name='spec_value_id[$v2][spec_value]' value='{$specItem[$v2]['spec_value']}'><span class='spec_value_span_{$v2}'>{$specItem[$v2]['spec_value']}</span></td>";
$spec_key_name[$v2] = $spec[$specItem[$v2]['spec_mark_id']].':'.$specItem[$v2]['spec_value'];
}
ksort($spec_key_name);
$spec_key = implode('_', array_keys($spec_key_name));
$ReturnHtml .="<td>{$specPrice[$spec_key]['spec_price']}<input type='hidden' class='users_price' name='spec_price[$spec_key][users_price]' value='{$specPrice[$spec_key]['spec_price']}' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");'/></td>";
$ReturnHtml .="<td>{$specPrice[$spec_key]['spec_stock']}<input type='hidden' class='stock_count' name='spec_stock[$spec_key][stock_count]' value='{$specPrice[$spec_key]['spec_stock']}' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' data-old_stock='{$specPrice[$spec_key]['spec_stock']}'/></td>";
if ($specPrice[$spec_key]['discount_price'] > 0){
$discount_price = $specPrice[$spec_key]['discount_price'];
}else{
$discount_price = '';
}
$ReturnHtml .="<td><input class='spec_discount_price' name='discount_price[$spec_key][spec_discount_price]' value='{$discount_price}' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");'/></td>";
if ($specPrice[$spec_key]['discount_stock'] > 0){
$discount_stock = $specPrice[$spec_key]['discount_stock'];
}else{
$discount_stock = '';
}
$ReturnHtml .="<td><input class='spec_discount_stock' name='discount_stock[$spec_key][spec_discount_stock]' value='{$discount_stock}' onkeyup='this.value=this.value.replace(/[^\d.]/g,\"\");' onpaste='this.value=this.value.replace(/[^\d.]/g,\"\")' data-old_stock='{$specPrice[$spec_key]['discount_stock']}'/></td>";
$ReturnHtml .="</tr>";
}
$ReturnHtml .= "</tbody>";
$ReturnHtml .= "</table>";
// $ReturnHtml .= '批量设置:<a href="javascript:void(0);" onclick="BulkSetPrice(this);" >批量设置</a> <a href="javascript:void(0);" onclick="BulkSetStock(this);" >批量设置</a>';
return $ReturnHtml;
}
// 数据组合
private function DataCombination()
{
$data = func_get_args();
$data = current($data);
$result = array();
$arr1 = array_shift($data);
foreach($arr1 as $key => $item) {
$result[] = array($item);
}
foreach($data as $key => $item) {
$result = $this->DataCombinationArray($result, $item);
}
return $result;
}
private function DataCombinationArray($arr1, $arr2)
{
$result = array();
foreach ($arr1 as $item1) {
foreach ($arr2 as $item2) {
$temp = $item1;
$temp[] = $item2;
$result[] = $temp;
}
}
return $result;
}
// 添加自定义规格
public function addProductCustomSpec($post = [])
{
// 最大ID值
// $spec_mark_id = Db::name('product_spec_data_handle')->max('spec_mark_id');
// if (empty($spec_mark_id)) $spec_mark_id = Db::name('product_spec_data')->max('spec_mark_id');
$spec_mark_id = date('s') . rand(0, 9);
$spec_value_id = Db::name('product_spec_data_handle')->max('spec_value_id');
if (empty($spec_value_id)) $spec_value_id = Db::name('product_spec_data')->max('spec_value_id');
// 数据处理
$time = getTime();
$handleAID = $handleSpecID = date('His');
if (session('handleAID')) $handleAID = session('handleAID');
$handleSpecID = $handleSpecID . rand(0, 9);
$handleAID = !empty($post['aid']) ? $post['aid'] : $handleAID;
if ('value' === strval($post['action']) && !empty($post['spec_mark_id'])) {
// 添加的数据
$where = [
'aid' => $handleAID,
'spec_mark_id' => $post['spec_mark_id'],
];
$specName = Db::name('product_spec_data_handle')->where($where)->getField('spec_name');
$insert = [
'spec_id' => intval($handleSpecID),
'aid' => $handleAID,
'spec_mark_id' => $post['spec_mark_id'],
'spec_name' => $specName,
'spec_value_id' => ++$spec_value_id,
'spec_value' => '',
'spec_is_select' => 1,
'lang' => get_admin_lang(),
'add_time' => $time,
'update_time' => $time,
];
$spec_mark_id = $post['spec_mark_id'];
} else if ('name' === strval($post['action'])) {
// 添加的数据
$insert = [
'spec_id' => intval($handleSpecID),
'aid' => $handleAID,
'spec_mark_id' => ++$spec_mark_id,
'spec_name' => '',
'spec_value_id' => ++$spec_value_id,
'spec_value' => '',
'spec_is_select' => 1,
'lang' => get_admin_lang(),
'add_time' => $time,
'update_time' => $time,
];
} else if ('specName' === strval($post['action'])) {
// 添加的数据
$where = [
'preset_mark_id' => $post['preset_mark_id'],
];
$specPreset = Db::name('product_spec_preset')->where($where)->select();
$insertAll = [];
foreach ($specPreset as $key => $value) {
$handleSpecID++;
// 添加的数据
$insertAll[] = [
'spec_id' => intval($handleSpecID),
'aid' => $handleAID,
'spec_mark_id' => $value['preset_mark_id'],
'spec_name' => $value['preset_name'],
'spec_value_id' => $value['preset_id'],
'spec_value' => $value['preset_value'],
'spec_is_select' => 0,
'lang' => get_admin_lang(),
'add_time' => $time,
'update_time' => $time,
];
}
$spec_mark_id = $post['preset_mark_id'];
} else if ('specValue' === strval($post['action'])) {
$where = [
'aid' => $handleAID,
'spec_mark_id' => intval($post['spec_mark_id']),
'spec_value_id' => intval($post['spec_value_id']),
];
$update = [
'spec_is_select' => 1,
'update_time' => $time,
];
$spec_mark_id = $post['spec_mark_id'];
}
// 执行添加
if (!empty($insertAll)) {
$resultID = Db::name('product_spec_data_handle')->insertAll($insertAll);
} else if (!empty($insert)) {
$resultID = Db::name('product_spec_data_handle')->insert($insert);
} else if (!empty($where) && !empty($update)) {
$resultID = Db::name('product_spec_data_handle')->where($where)->update($update);
}
// 添加后续操作
if (!empty($resultID)) {
// 查询商品的规格信息
$where = [
'aid' => $handleAID,
'spec_is_select' => 1,
];
$field = 'spec_mark_id, spec_value_id';
$order = 'spec_mark_id asc, spec_value_id asc, spec_id asc';
$data = Db::name('product_spec_data_handle')->where($where)->field($field)->order($order)->select();
// 处理规格数组
$spec_array = [];
if (!empty($data)) {
foreach ($data as $key => $value) {
$spec_array[$value['spec_mark_id']][] = $value['spec_value_id'];
}
}
// 处理规格标记ID串
$spec_mark_id_arr = implode(',', array_keys($spec_array));
// 规格数据库表的自定义aid存入
session('handleAID', $handleAID);
// 处理废弃规格ID,刷新商品添加页时执行删除废弃规格
$del_spec = session('del_spec') ? session('del_spec') : [];
array_push($del_spec, $spec_mark_id);
session('del_spec', $del_spec);
// 返回结束
return [
'spec_array' => $spec_array,
'spec_mark_id' => $spec_mark_id,
'spec_value_id' => $spec_value_id,
'spec_mark_id_arr' => $spec_mark_id_arr
];
}
}
// 获取商品规格名称值下拉框
public function getProductSpecValueOption($specMarkID = 0, $post = [])
{
$handleAID = session('handleAID');
$handleAID = !empty($post['aid']) ? $post['aid'] : $handleAID;
if (!empty($post['del'])) {
if ('specName' === strval($post['del'])) {
$where = [
'aid' => $handleAID,
'lang' => get_admin_lang(),
];
$specMarkIDarr = Db::name('product_spec_data_handle')->where($where)->column('spec_mark_id');
$specMarkIDarr = array_unique($specMarkIDarr);
$where = [
'lang' => get_admin_lang(),
'preset_mark_id' => ['NOT IN', $specMarkIDarr],
];
$field = 'preset_id, preset_mark_id, preset_name';
$PresetName = Db::name('product_spec_preset')->where($where)->field($field)->group('preset_mark_id')->order('preset_mark_id desc')->select();
$preset_name_option .= "<option value='0'>从规格库提取</option>";
if (!empty($PresetName)) {
// 拼装下拉选项
foreach ($PresetName as $value) {
$preset_name_option .= "<option value='{$value['preset_mark_id']}'>{$value['preset_name']}</option>";
}
}
} else if ('specValue' === strval($post['del'])) {
$where = [
'aid' => $handleAID,
'lang' => get_admin_lang(),
'spec_mark_id' => intval($post['spec_mark_id']),
];
$specDataHandle = Db::name('product_spec_data_handle')->where($where)->field('spec_is_select, spec_value_id, spec_name, spec_value')->select();
$spec_value_option .= "<option value='0'>选择规格值</option>";
foreach ($specDataHandle as $value) {
if (0 === intval($value['spec_is_select'])) $spec_value_option .= "<option value='{$value['spec_value_id']}'>{$value['spec_value']}</option>";
}
}
return [
'spec_value_option' => !empty($spec_value_option) ? $spec_value_option : '',
'preset_name_option' => !empty($preset_name_option) ? $preset_name_option : '',
];
} else if (!empty($post['action'])) {
$where = [
'aid' => $handleAID,
'lang' => get_admin_lang(),
'spec_mark_id' => intval($specMarkID),
];
$specDataHandle = Db::name('product_spec_data_handle')->where($where)->field('spec_is_select, spec_value_id, spec_name, spec_value')->select();
$spec_value = '';
$spec_value_option .= "<option value='0'>选择规格值</option>";
foreach ($specDataHandle as $value) {
if (0 === intval($value['spec_is_select'])) $spec_value_option .= "<option value='{$value['spec_value_id']}'>{$value['spec_value']}</option>";
if (1 === intval($value['spec_is_select']) && intval($post['spec_value_id']) === intval($value['spec_value_id'])) {
$spec_value = $value['spec_value'];
}
}
if ('specName' === strval($post['action'])) {
$where = [
'aid' => $handleAID,
'lang' => get_admin_lang(),
];
$specMarkIDarr = Db::name('product_spec_data_handle')->where($where)->column('spec_mark_id');
$specMarkIDarr = array_unique($specMarkIDarr);
$where = [
'lang' => get_admin_lang(),
'preset_mark_id' => ['NOT IN', $specMarkIDarr],
];
$field = 'preset_id, preset_mark_id, preset_name';
$PresetName = Db::name('product_spec_preset')->where($where)->field($field)->group('preset_mark_id')->order('preset_mark_id desc')->select();
$preset_name_option .= "<option value='0'>从规格库提取</option>";
if (!empty($PresetName)) {
// 拼装下拉选项
foreach ($PresetName as $value) {
$preset_name_option .= "<option value='{$value['preset_mark_id']}'>{$value['preset_name']}</option>";
}
}
}
return [
'spec_value' => !empty($spec_value) ? $spec_value : '',
'spec_value_option' => !empty($spec_value_option) ? $spec_value_option : '',
'preset_name_option' => !empty($preset_name_option) ? $preset_name_option : '',
'spec_name' => !empty($specDataHandle[0]['spec_name']) ? $specDataHandle[0]['spec_name'] : '',
];
}
}
// 添加自定义规格名称
public function addProductCustomSpecName($post = [])
{
if (!empty($post['spec_mark_id']) && !empty($post['set_spec_name'])) {
$time = getTime();
$handleAID = session('handleAID');
$handleAID = !empty($post['aid']) ? $post['aid'] : $handleAID;
$where = [
'aid' => $handleAID,
'spec_mark_id' => intval($post['spec_mark_id']),
];
$update = [
'spec_name' => strval($post['set_spec_name']),
'update_time' => $time,
];
$updateID = Db::name('product_spec_data_handle')->where($where)->update($update);
if (!empty($updateID)) {
// 查询商品的规格信息
$where = [
'aid' => $handleAID,
'spec_is_select' => 1,
];
$field = 'spec_mark_id, spec_value_id';
$data = Db::name('product_spec_data_handle')->field($field)->where($where)->select();
// 处理规格数组
$spec_array = [];
if (!empty($data)) {
foreach ($data as $key => $value) {
$spec_array[$value['spec_mark_id']][] = $value['spec_value_id'];
}
}
// 返回结束
return $spec_array;
}
}
}
// 添加自定义规格值
public function addProductCustomSpecValue($post = [])
{
if (!empty($post['spec_mark_id']) && !empty($post['spec_value_id']) && !empty($post['set_spec_value'])) {
$time = getTime();
$handleAID = session('handleAID');
$handleAID = !empty($post['aid']) ? $post['aid'] : $handleAID;
$where = [
'aid' => $handleAID,
'spec_mark_id' => intval($post['spec_mark_id']),
'spec_value_id' => intval($post['spec_value_id']),
];
$update = [
'spec_value' => strval($post['set_spec_value']),
'update_time' => $time,
];
$updateID = Db::name('product_spec_data_handle')->where($where)->update($update);
if (!empty($updateID)) {
// 查询商品的规格信息
$where = [
'aid' => $handleAID,
'spec_is_select' => 1,
];
$field = 'spec_mark_id, spec_value_id';
$data = Db::name('product_spec_data_handle')->field($field)->where($where)->select();
// 处理规格数组
$spec_array = [];
if (!empty($data)) {
foreach ($data as $key => $value) {
$spec_array[$value['spec_mark_id']][] = $value['spec_value_id'];
}
}
// 返回结束
return $spec_array;
}
}
}
// 删除自定义规格
public function delProductCustomSpec($post = [])
{
$handleAID = !empty($post['aid']) ? $post['aid'] : session('handleAID');
// 清除整条规格信息
if (in_array($post['del'], ['name', 'specName'])) {
if (!empty($post['spec_mark_id'])) {
$where = [
'aid' => $handleAID,
'spec_mark_id' => intval($post['spec_mark_id']),
];
$deleteID = Db::name('product_spec_data_handle')->where($where)->delete(true);
}
}
// 清除单个规格信息
else if (in_array($post['del'], ['value'])) {
if (!empty($post['spec_mark_id']) && !empty($post['spec_value_id'])) {
$where = [
'aid' => $handleAID,
'spec_mark_id' => intval($post['spec_mark_id']),
'spec_value_id' => intval($post['spec_value_id']),
];
$deleteID = Db::name('product_spec_data_handle')->where($where)->delete(true);
}
}
// 清除单个规格信息
else if (in_array($post['del'], ['specValue'])) {
if (!empty($post['spec_mark_id']) && !empty($post['spec_value_id'])) {
$where = [
'aid' => $handleAID,
'spec_mark_id' => intval($post['spec_mark_id']),
'spec_value_id' => intval($post['spec_value_id']),
];
$update = [
'spec_is_select' => 0,
'update_time' => getTime(),
];
$deleteID = Db::name('product_spec_data_handle')->where($where)->update($update);
}
}
if (!empty($deleteID)) {
// 查询商品的规格信息
$where = [
'aid' => $handleAID,
'spec_is_select' => 1,
];
$field = 'spec_mark_id, spec_value_id';
$data = Db::name('product_spec_data_handle')->field($field)->where($where)->select();
// 处理规格数组
$spec_array = [];
if (!empty($data)) {
foreach ($data as $key => $value) {
$spec_array[$value['spec_mark_id']][] = $value['spec_value_id'];
}
}
// 返回结束
return $spec_array;
}
}
}