|
@@ -44,25 +44,17 @@ class Package extends Backend
|
|
|
$order_a = explode(',', $order_a);
|
|
$order_a = explode(',', $order_a);
|
|
|
$order[$order_a[0]] = $order_a[1];
|
|
$order[$order_a[0]] = $order_a[1];
|
|
|
} else {
|
|
} else {
|
|
|
- $order['p.sort'] = 'asc';
|
|
|
|
|
- $order['p.id'] = 'desc';
|
|
|
|
|
|
|
+ $order['sort'] = 'asc';
|
|
|
|
|
+ $order['id'] = 'desc';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 分页
|
|
// 分页
|
|
|
$page = $this->request->get('page', 1);
|
|
$page = $this->request->get('page', 1);
|
|
|
$limit = $this->request->get('limit', 20);
|
|
$limit = $this->request->get('limit', 20);
|
|
|
|
|
|
|
|
- // 查询数据(统计规格数量和已售总数)
|
|
|
|
|
- $specCountSubQuery = Db::name('package_price')
|
|
|
|
|
- ->field('package_id, COUNT(*) as spec_count, SUM(sold_count) as total_sold')
|
|
|
|
|
- ->where('status', 1)
|
|
|
|
|
- ->group('package_id')
|
|
|
|
|
- ->buildSql();
|
|
|
|
|
|
|
|
|
|
|
|
+ // 查询套餐列表并计算库存状态
|
|
|
$packageList = Db::name('package')
|
|
$packageList = Db::name('package')
|
|
|
- ->alias('p')
|
|
|
|
|
- ->leftJoin([$specCountSubQuery => 'sc'], 'p.id = sc.package_id')
|
|
|
|
|
- ->field('p.*, IFNULL(sc.spec_count, 0) as spec_count, IFNULL(sc.total_sold, 0) as total_sold')
|
|
|
|
|
->where($where)
|
|
->where($where)
|
|
|
->order($order)
|
|
->order($order)
|
|
|
->paginate([
|
|
->paginate([
|
|
@@ -70,14 +62,35 @@ class Package extends Backend
|
|
|
'page' => $page
|
|
'page' => $page
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
- // 转换功能特性字段
|
|
|
|
|
|
|
+ // 为每个套餐计算库存状态
|
|
|
$list = $packageList->items();
|
|
$list = $packageList->items();
|
|
|
- foreach ($list as &$item) {
|
|
|
|
|
- if (!empty($item['features'])) {
|
|
|
|
|
- $item['features'] = json_decode($item['features'], true);
|
|
|
|
|
|
|
+ foreach ($list as &$package) {
|
|
|
|
|
+ // 获取该套餐的所有规格
|
|
|
|
|
+ $specs = Db::name('package_price')
|
|
|
|
|
+ ->where('package_id', $package['id'])
|
|
|
|
|
+ ->select()
|
|
|
|
|
+ ->toArray();
|
|
|
|
|
+
|
|
|
|
|
+ // 计算总库存和总已售
|
|
|
|
|
+ $totalStock = 0;
|
|
|
|
|
+ $totalSold = 0;
|
|
|
|
|
+ foreach ($specs as $spec) {
|
|
|
|
|
+ $totalStock += $spec['stock'];
|
|
|
|
|
+ $totalSold += $spec['sold_count'];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 根据库存设置库存状态
|
|
|
|
|
+ if ($totalStock == 0) {
|
|
|
|
|
+ $package['stock_status'] = '售罄';
|
|
|
|
|
+ } elseif ($totalStock <= 10) {
|
|
|
|
|
+ $package['stock_status'] = '即将售罄';
|
|
|
} else {
|
|
} else {
|
|
|
- $item['features'] = [];
|
|
|
|
|
|
|
+ $package['stock_status'] = '充足';
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ $package['remaining_stock'] = $totalStock;
|
|
|
|
|
+ $package['sold_count'] = $totalSold;
|
|
|
|
|
+ $package['spec_count'] = count($specs);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$this->success('查询成功', [
|
|
$this->success('查询成功', [
|
|
@@ -94,9 +107,7 @@ class Package extends Backend
|
|
|
{
|
|
{
|
|
|
$id = $this->request->post('id');
|
|
$id = $this->request->post('id');
|
|
|
$name = $this->request->post('name');
|
|
$name = $this->request->post('name');
|
|
|
- $type = $this->request->post('type', 1);
|
|
|
|
|
$description = $this->request->post('description', '');
|
|
$description = $this->request->post('description', '');
|
|
|
- $features = $this->request->post('features', []);
|
|
|
|
|
$sort = $this->request->post('sort', 0);
|
|
$sort = $this->request->post('sort', 0);
|
|
|
$status = $this->request->post('status', 1);
|
|
$status = $this->request->post('status', 1);
|
|
|
|
|
|
|
@@ -116,16 +127,9 @@ class Package extends Backend
|
|
|
$this->error(__('套餐名称已存在'));
|
|
$this->error(__('套餐名称已存在'));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 处理功能特性字段
|
|
|
|
|
- if (!is_array($features)) {
|
|
|
|
|
- $features = [];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
$data = [
|
|
$data = [
|
|
|
'name' => $name,
|
|
'name' => $name,
|
|
|
- 'type' => $type,
|
|
|
|
|
'description' => $description,
|
|
'description' => $description,
|
|
|
- 'features' => json_encode($features, JSON_UNESCAPED_UNICODE),
|
|
|
|
|
'sort' => $sort,
|
|
'sort' => $sort,
|
|
|
'status' => $status,
|
|
'status' => $status,
|
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
@@ -250,13 +254,6 @@ class Package extends Backend
|
|
|
$this->error(__('套餐不存在'));
|
|
$this->error(__('套餐不存在'));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 处理功能特性字段
|
|
|
|
|
- if (!empty($packageInfo['features'])) {
|
|
|
|
|
- $packageInfo['features'] = json_decode($packageInfo['features'], true);
|
|
|
|
|
- } else {
|
|
|
|
|
- $packageInfo['features'] = [];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
// 获取套餐规格列表
|
|
// 获取套餐规格列表
|
|
|
$specList = Db::name('package_price')
|
|
$specList = Db::name('package_price')
|
|
|
->where('package_id', $id)
|
|
->where('package_id', $id)
|
|
@@ -264,43 +261,58 @@ class Package extends Backend
|
|
|
->select()
|
|
->select()
|
|
|
->toArray();
|
|
->toArray();
|
|
|
|
|
|
|
|
- // 统计库存和销售情况
|
|
|
|
|
|
|
+ // 计算规格库存状态和汇总数据
|
|
|
$totalStock = 0;
|
|
$totalStock = 0;
|
|
|
$totalSold = 0;
|
|
$totalSold = 0;
|
|
|
- foreach ($specList as $spec) {
|
|
|
|
|
- $totalStock += $spec['stock'];
|
|
|
|
|
- $totalSold += $spec['sold_count'];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $cardTypeMap = [
|
|
|
|
|
+ 1 => '次卡',
|
|
|
|
|
+ 2 => '按积分',
|
|
|
|
|
+ 3 => '日卡',
|
|
|
|
|
+ 4 => '周卡',
|
|
|
|
|
+ 5 => '季卡',
|
|
|
|
|
+ 6 => '月卡',
|
|
|
|
|
+ 7 => '年卡'
|
|
|
|
|
+ ];
|
|
|
|
|
|
|
|
- // 统计用户购买数量(如果user_package表存在)
|
|
|
|
|
- $userPurchaseCount = 0;
|
|
|
|
|
- try {
|
|
|
|
|
- $userPurchaseCount = Db::name('user_package')
|
|
|
|
|
- ->where('package_id', $id)
|
|
|
|
|
- ->count();
|
|
|
|
|
- } catch (\Exception $e) {
|
|
|
|
|
- // 表不存在,设为0
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $typeMap = [
|
|
|
|
|
+ 1 => '个人套餐',
|
|
|
|
|
+ 2 => '团队套餐',
|
|
|
|
|
+ ];
|
|
|
|
|
|
|
|
- // 统计企业购买数量(如果company_package表存在)
|
|
|
|
|
- $companyPurchaseCount = 0;
|
|
|
|
|
- try {
|
|
|
|
|
- $companyPurchaseCount = Db::name('company_package')
|
|
|
|
|
- ->where('package_id', $id)
|
|
|
|
|
- ->count();
|
|
|
|
|
- } catch (\Exception $e) {
|
|
|
|
|
- // 表不存在,设为0
|
|
|
|
|
|
|
+ foreach ($specList as &$spec) {
|
|
|
|
|
+ // 计算库存状态
|
|
|
|
|
+ if ($spec['stock'] == 0) {
|
|
|
|
|
+ $spec['stock_status'] = '售罄';
|
|
|
|
|
+ } elseif ($spec['stock'] <= 10) {
|
|
|
|
|
+ $spec['stock_status'] = '即将售罄';
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $spec['stock_status'] = '充足';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 翻译类型和卡类型
|
|
|
|
|
+ $spec['type_text'] = $typeMap[$spec['type']] ?? '未知';
|
|
|
|
|
+ $spec['card_type_text'] = $cardTypeMap[$spec['card_type']] ?? '未知';
|
|
|
|
|
+
|
|
|
|
|
+ // 格式化收费方式显示
|
|
|
|
|
+ if ($spec['card_type'] == 1 && $spec['unit_value'] > 0) {
|
|
|
|
|
+ $spec['charge_text'] = '按次数:' . $spec['unit_value'] . '次';
|
|
|
|
|
+ } elseif ($spec['card_type'] == 2 && $spec['points_value'] > 0) {
|
|
|
|
|
+ $spec['charge_text'] = '按积分:' . $spec['points_value'] . '积分';
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $spec['charge_text'] = $spec['card_type_text'];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $totalStock += $spec['stock'];
|
|
|
|
|
+ $totalSold += $spec['sold_count'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$result = [
|
|
$result = [
|
|
|
'package_info' => $packageInfo,
|
|
'package_info' => $packageInfo,
|
|
|
'spec_list' => $specList,
|
|
'spec_list' => $specList,
|
|
|
'statistics' => [
|
|
'statistics' => [
|
|
|
- 'spec_count' => count($specList),
|
|
|
|
|
'total_stock' => $totalStock,
|
|
'total_stock' => $totalStock,
|
|
|
'total_sold' => $totalSold,
|
|
'total_sold' => $totalSold,
|
|
|
- 'user_purchase_count' => $userPurchaseCount,
|
|
|
|
|
- 'company_purchase_count' => $companyPurchaseCount
|
|
|
|
|
|
|
+ 'spec_count' => count($specList)
|
|
|
]
|
|
]
|
|
|
];
|
|
];
|
|
|
|
|
|
|
@@ -317,9 +329,11 @@ class Package extends Backend
|
|
|
$packageId = $this->request->post('package_id');
|
|
$packageId = $this->request->post('package_id');
|
|
|
$specName = $this->request->post('spec_name');
|
|
$specName = $this->request->post('spec_name');
|
|
|
$price = $this->request->post('price', 0);
|
|
$price = $this->request->post('price', 0);
|
|
|
- $originalPrice = $this->request->post('original_price', 0);
|
|
|
|
|
$stock = $this->request->post('stock', 0);
|
|
$stock = $this->request->post('stock', 0);
|
|
|
- $unitValue = $this->request->post('unit_value', '');
|
|
|
|
|
|
|
+ $type = $this->request->post('type', 1);
|
|
|
|
|
+ $cardType = $this->request->post('card_type', 1);
|
|
|
|
|
+ $unitValue = $this->request->post('unit_value', 0);
|
|
|
|
|
+ $pointsValue = $this->request->post('points_value', 0);
|
|
|
$description = $this->request->post('description', '');
|
|
$description = $this->request->post('description', '');
|
|
|
$sort = $this->request->post('sort', 0);
|
|
$sort = $this->request->post('sort', 0);
|
|
|
|
|
|
|
@@ -331,6 +345,15 @@ class Package extends Backend
|
|
|
$this->error(__('价格必须大于0'));
|
|
$this->error(__('价格必须大于0'));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 验证条件
|
|
|
|
|
+ if ($cardType == 1 && $unitValue <= 0) {
|
|
|
|
|
+ $this->error(__('次卡类型必须填写有效次数'));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ($cardType == 2 && $pointsValue <= 0) {
|
|
|
|
|
+ $this->error(__('积分类型必须填写有效积分数量'));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 检查套餐是否存在
|
|
// 检查套餐是否存在
|
|
|
$packageInfo = Db::name('package')
|
|
$packageInfo = Db::name('package')
|
|
|
->where('id', $packageId)
|
|
->where('id', $packageId)
|
|
@@ -357,9 +380,11 @@ class Package extends Backend
|
|
|
'package_id' => $packageId,
|
|
'package_id' => $packageId,
|
|
|
'spec_name' => $specName,
|
|
'spec_name' => $specName,
|
|
|
'price' => $price,
|
|
'price' => $price,
|
|
|
- 'original_price' => $originalPrice,
|
|
|
|
|
'stock' => $stock,
|
|
'stock' => $stock,
|
|
|
|
|
+ 'type' => $type,
|
|
|
|
|
+ 'card_type' => $cardType,
|
|
|
'unit_value' => $unitValue,
|
|
'unit_value' => $unitValue,
|
|
|
|
|
+ 'points_value' => $pointsValue,
|
|
|
'description' => $description,
|
|
'description' => $description,
|
|
|
'sort' => $sort,
|
|
'sort' => $sort,
|
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
@@ -381,10 +406,10 @@ class Package extends Backend
|
|
|
$message = '新增成功';
|
|
$message = '新增成功';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
$this->error('操作失败: ' . $e->getMessage());
|
|
$this->error('操作失败: ' . $e->getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if ($result) {
|
|
if ($result) {
|
|
|
$this->success($message, ['id' => $id]);
|
|
$this->success($message, ['id' => $id]);
|
|
|
} else {
|
|
} else {
|
|
@@ -435,10 +460,10 @@ class Package extends Backend
|
|
|
->where('id', $id)
|
|
->where('id', $id)
|
|
|
->delete();
|
|
->delete();
|
|
|
|
|
|
|
|
-
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
$this->error('删除失败: ' . $e->getMessage());
|
|
$this->error('删除失败: ' . $e->getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if ($result) {
|
|
if ($result) {
|
|
|
$this->success('删除成功');
|
|
$this->success('删除成功');
|
|
|
} else {
|
|
} else {
|
|
@@ -492,10 +517,10 @@ class Package extends Backend
|
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
$this->error('操作失败: ' . $e->getMessage());
|
|
$this->error('操作失败: ' . $e->getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if ($result) {
|
|
if ($result) {
|
|
|
$statusText = $status == 1 ? '启用' : '禁用';
|
|
$statusText = $status == 1 ? '启用' : '禁用';
|
|
|
$this->success("成功{$statusText}{$result}个套餐");
|
|
$this->success("成功{$statusText}{$result}个套餐");
|
|
@@ -529,10 +554,10 @@ class Package extends Backend
|
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
$this->error('操作失败: ' . $e->getMessage());
|
|
$this->error('操作失败: ' . $e->getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
if ($result) {
|
|
if ($result) {
|
|
|
$this->success("成功更新{$result}个规格的库存");
|
|
$this->success("成功更新{$result}个规格的库存");
|
|
|
} else {
|
|
} else {
|
|
@@ -570,14 +595,19 @@ class Package extends Backend
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 获取规格状态选项
|
|
|
|
|
|
|
+ * 获取卡类型选项
|
|
|
* @return void
|
|
* @return void
|
|
|
*/
|
|
*/
|
|
|
- public function specStatusOptions():void
|
|
|
|
|
|
|
+ public function cardTypeOptions():void
|
|
|
{
|
|
{
|
|
|
$options = [
|
|
$options = [
|
|
|
- ['value' => 1, 'label' => '正常'],
|
|
|
|
|
- ['value' => 2, 'label' => '售罄']
|
|
|
|
|
|
|
+ ['value' => 1, 'label' => '次卡'],
|
|
|
|
|
+ ['value' => 2, 'label' => '按积分'],
|
|
|
|
|
+ ['value' => 3, 'label' => '日卡'],
|
|
|
|
|
+ ['value' => 4, 'label' => '周卡'],
|
|
|
|
|
+ ['value' => 5, 'label' => '季卡'],
|
|
|
|
|
+ ['value' => 6, 'label' => '月卡'],
|
|
|
|
|
+ ['value' => 7, 'label' => '年卡']
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
$this->success('获取成功', $options);
|
|
$this->success('获取成功', $options);
|
|
@@ -608,79 +638,17 @@ class Package extends Backend
|
|
|
$totalSold = Db::name('package_price')
|
|
$totalSold = Db::name('package_price')
|
|
|
->sum('sold_count');
|
|
->sum('sold_count');
|
|
|
|
|
|
|
|
- // 按类型统计
|
|
|
|
|
- $typeStats = Db::name('package')
|
|
|
|
|
- ->field('type, COUNT(*) as count')
|
|
|
|
|
- ->where('status', 1)
|
|
|
|
|
- ->group('type')
|
|
|
|
|
- ->select()
|
|
|
|
|
- ->toArray();
|
|
|
|
|
-
|
|
|
|
|
$stats = [
|
|
$stats = [
|
|
|
'total_package' => $totalPackage,
|
|
'total_package' => $totalPackage,
|
|
|
'active_package' => $activePackage,
|
|
'active_package' => $activePackage,
|
|
|
'total_spec' => $totalSpec,
|
|
'total_spec' => $totalSpec,
|
|
|
'total_stock' => $totalStock,
|
|
'total_stock' => $totalStock,
|
|
|
- 'total_sold' => $totalSold,
|
|
|
|
|
- 'type_stats' => $typeStats
|
|
|
|
|
|
|
+ 'total_sold' => $totalSold
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
$this->success('获取成功', $stats);
|
|
$this->success('获取成功', $stats);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 导出套餐数据
|
|
|
|
|
- * @return void
|
|
|
|
|
- */
|
|
|
|
|
- public function export():void
|
|
|
|
|
- {
|
|
|
|
|
- $where = [];
|
|
|
|
|
-
|
|
|
|
|
- // 根据筛选条件构建查询条件
|
|
|
|
|
- if (!empty($this->request->get('name'))) {
|
|
|
|
|
- $name = $this->request->get('name');
|
|
|
|
|
- $where[] = ['name', 'like', '%' . $name . '%'];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (!empty($this->request->get('status'))) {
|
|
|
|
|
- $status = $this->request->get('status');
|
|
|
|
|
- $where['status'] = $status;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 查询数据
|
|
|
|
|
- $packageList = Db::name('package')
|
|
|
|
|
- ->where($where)
|
|
|
|
|
- ->order('sort', 'asc')
|
|
|
|
|
- ->order('id', 'desc')
|
|
|
|
|
- ->select()
|
|
|
|
|
- ->toArray();
|
|
|
|
|
-
|
|
|
|
|
- // 状态映射
|
|
|
|
|
- $typeMap = [1 => '个人套餐', 2 => '团队套餐', 3 => '企业套餐'];
|
|
|
|
|
- $statusMap = [1 => '启用', 2 => '禁用'];
|
|
|
|
|
-
|
|
|
|
|
- foreach ($packageList as &$item) {
|
|
|
|
|
- $item['type'] = $typeMap[$item['type']] ?? '未知';
|
|
|
|
|
- $item['status'] = $statusMap[$item['status']] ?? '未知';
|
|
|
|
|
-
|
|
|
|
|
- // 获取规格信息
|
|
|
|
|
- $specs = Db::name('package_price')
|
|
|
|
|
- ->where('package_id', $item['id'])
|
|
|
|
|
- ->order('sort', 'asc')
|
|
|
|
|
- ->select()
|
|
|
|
|
- ->toArray();
|
|
|
|
|
-
|
|
|
|
|
- $specInfo = [];
|
|
|
|
|
- foreach ($specs as $spec) {
|
|
|
|
|
- $specInfo[] = "{$spec['spec_name']} - ¥{$spec['price']} (库存:{$spec['stock']})";
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- $item['spec_info'] = implode('; ', $specInfo);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- $this->success('查询成功', $packageList);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 获取所有套餐选项(用于下拉选择)
|
|
* 获取所有套餐选项(用于下拉选择)
|
|
|
* @return void
|
|
* @return void
|
|
@@ -689,7 +657,7 @@ class Package extends Backend
|
|
|
{
|
|
{
|
|
|
$packageList = Db::name('package')
|
|
$packageList = Db::name('package')
|
|
|
->where('status', 1)
|
|
->where('status', 1)
|
|
|
- ->field('id as value, name as label, type')
|
|
|
|
|
|
|
+ ->field('id as value, name as label')
|
|
|
->order('sort', 'asc')
|
|
->order('sort', 'asc')
|
|
|
->order('id', 'asc')
|
|
->order('id', 'asc')
|
|
|
->select()
|
|
->select()
|
|
@@ -712,16 +680,14 @@ class Package extends Backend
|
|
|
|
|
|
|
|
$specList = Db::name('package_price')
|
|
$specList = Db::name('package_price')
|
|
|
->where('package_id', $packageId)
|
|
->where('package_id', $packageId)
|
|
|
- ->where('status', 1)
|
|
|
|
|
->where('stock', '>', 0) // 只显示有库存的规格
|
|
->where('stock', '>', 0) // 只显示有库存的规格
|
|
|
- ->field('id as value, spec_name as label, price, stock, unit_value, description')
|
|
|
|
|
|
|
+ ->field('id as value, spec_name as label, price, stock, type, card_type, unit_value, points_value, description')
|
|
|
->order('sort', 'asc')
|
|
->order('sort', 'asc')
|
|
|
->select()
|
|
->select()
|
|
|
->toArray();
|
|
->toArray();
|
|
|
|
|
|
|
|
$this->success('获取成功', $specList);
|
|
$this->success('获取成功', $specList);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 更新规格销售数量(模拟用户购买)
|
|
* 更新规格销售数量(模拟用户购买)
|
|
|
* @return void
|
|
* @return void
|