瀏覽代碼

充值套餐修改数据表
商品多规格修改库存

罗永浩 3 月之前
父節點
當前提交
22856f7276

+ 120 - 40
addons/admin/src/views/pay/components/MealsManage.vue

@@ -2,18 +2,19 @@
 	<div class="ele-body">
 		<el-card shadow="never">
 			<!-- 搜索表单 -->
-			<el-form :model="where" label-width="80px" class="ele-form-search" @keyup.enter.native="query" @submit.native.prevent>
+			<el-form :model="where" label-width="80px" class="ele-form-search" @keyup.enter.native="query"
+				@submit.native.prevent>
 				<el-row :gutter="15">
 					<el-col :md="6" :sm="12">
 						<el-form-item label="关键词:">
-							<el-input v-model="where.keyword" placeholder="请输入金额/备注/产品ID" clearable/>
+							<el-input v-model="where.keyword" placeholder="请输入金额/备注/产品ID" clearable />
 						</el-form-item>
 					</el-col>
 					<el-col :md="6" :sm="12">
 						<el-form-item label="状态:">
 							<el-select v-model="where.status" placeholder="请选择状态" clearable class="ele-fluid">
-								<el-option label="有效" :value="1"/>
-								<el-option label="无效" :value="2"/>
+								<el-option label="有效" :value="1" />
+								<el-option label="无效" :value="2" />
 							</el-select>
 						</el-form-item>
 					</el-col>
@@ -29,16 +30,12 @@
 			</el-form>
 
 			<!-- 数据表格 -->
-			<ele-data-table
-				ref="table"
-				:config="table"
-				:choose.sync="selection"
-				height="calc(100vh - 315px)">
+			<ele-data-table ref="table" :config="table" :choose.sync="selection" height="calc(100vh - 315px)">
 				<template slot-scope="{index}">
-					<el-table-column type="selection" width="45" align="center" fixed="left"/>
-					<el-table-column prop="id" label="ID" width="60" align="center" sortable="custom"/>
-					<el-table-column prop="product_id" label="产品ID" width="100" align="center"/>
-					<el-table-column prop="money" label="面值金额" width="100" align="center">
+					<el-table-column type="selection" width="45" align="center" fixed="left" />
+					<el-table-column prop="id" label="ID" width="60" align="center" sortable="custom" />
+					<el-table-column prop="product_id" label="产品ID" width="100" align="center" />
+					<el-table-column prop="money" label="缴费金额" width="100" align="center">
 						<template slot-scope="{row}">
 							<span style="color: #F56C6C; font-weight: bold;">¥{{ row.money }}</span>
 						</template>
@@ -54,20 +51,49 @@
 							<span style="color: #67C23A; font-weight: bold;">¥{{ row.pay_money }}</span>
 						</template>
 					</el-table-column>
-					<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip/>
-					<el-table-column prop="sort" label="排序" width="80" align="center"/>
+					<el-table-column v-if="type === 1" prop="phone_type" label="话费类型" width="100" align="center">
+						<template slot-scope="{row}">
+							<el-tag v-if="row.phone_type === 1" type="success" size="mini">快充</el-tag>
+							<el-tag v-else-if="row.phone_type === 2" type="warning" size="mini">慢充</el-tag>
+							<span v-else>-</span>
+						</template>
+					</el-table-column>
+					<el-table-column v-if="type === 1" prop="phone_service" label="服务商" width="100" align="center">
+						<template slot-scope="{row}">
+							<el-tag v-if="row.phone_service === 0" size="mini">三网</el-tag>
+							<el-tag v-else-if="row.phone_service === 1" type="success" size="mini">移动</el-tag>
+							<el-tag v-else-if="row.phone_service === 2" type="danger" size="mini">电信</el-tag>
+							<el-tag v-else-if="row.phone_service === 3" type="warning" size="mini">联通</el-tag>
+							<span v-else>-</span>
+						</template>
+					</el-table-column>
+					<el-table-column v-if="type === 2" prop="electric_type" label="电网类型" width="100" align="center">
+						<template slot-scope="{row}">
+							<el-tag v-if="row.electric_type === 1" type="primary" size="mini">国网</el-tag>
+							<el-tag v-else-if="row.electric_type === 2" type="success" size="mini">南网</el-tag>
+							<span v-else>-</span>
+						</template>
+					</el-table-column>
+					<el-table-column v-if="type === 3" prop="gas_type" label="燃气服务商" width="120" align="center">
+						<template slot-scope="{row}">
+							<el-tag v-if="row.gas_type === 1" size="mini">华润燃气</el-tag>
+							<el-tag v-else-if="row.gas_type === 2" type="success" size="mini">新奥燃气</el-tag>
+							<el-tag v-else-if="row.gas_type === 3" type="warning" size="mini">中燃燃气</el-tag>
+							<el-tag v-else-if="row.gas_type === 4" type="danger" size="mini">北京燃气</el-tag>
+							<el-tag v-else-if="row.gas_type === 5" type="info" size="mini">港华燃气</el-tag>
+							<span v-else>-</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="remark" label="备注" min-width="150" show-overflow-tooltip />
+					<el-table-column prop="sort" label="排序" width="80" align="center" />
 					<el-table-column label="状态" width="80" align="center">
 						<template slot-scope="{row}">
-							<el-switch
-								v-model="row.status"
-								:active-value="1"
-								:inactive-value="2"
-								@change="changeStatus(row)"
+							<el-switch v-model="row.status" :active-value="1" :inactive-value="2" @change="changeStatus(row)"
 								:disabled="!permission.includes(permissionPrefix + ':status')">
 							</el-switch>
 						</template>
 					</el-table-column>
-					<el-table-column prop="create_time_text" label="创建时间" min-width="160" align="center" show-overflow-tooltip/>
+					<el-table-column prop="create_time_text" label="创建时间" min-width="160" align="center" show-overflow-tooltip />
 
 					<!-- 操作 -->
 					<el-table-column label="操作" width="180" align="center" fixed="right">
@@ -85,28 +111,58 @@
 		</el-card>
 
 		<!-- 编辑弹窗 -->
-		<el-dialog :title="editForm.id ? '修改套餐' : '添加套餐'" :visible.sync="editVisible" width="600px" :destroy-on-close="true" :close-on-click-modal="false">
+		<el-dialog :title="editForm.id ? '修改套餐' : '添加套餐'" :visible.sync="editVisible" width="600px" :destroy-on-close="true"
+			:close-on-click-modal="false">
 			<el-form :model="editForm" :rules="editRules" ref="editForm" label-width="100px">
 				<el-form-item label="产品ID:" prop="product_id">
-					<el-input v-model.number="editForm.product_id" placeholder="请输入产品ID" clearable/>
+					<el-input v-model.number="editForm.product_id" placeholder="请输入产品ID" clearable />
 					<div class="el-form-item__tip">从充值平台获取的产品ID</div>
 				</el-form-item>
-				<el-form-item label="面值金额:" prop="money">
-					<el-input v-model.number="editForm.money" placeholder="请输入面值金额" clearable>
+				<el-form-item label="缴费金额:" prop="money">
+					<el-input v-model.number="editForm.money" placeholder="请输入缴费金额" clearable>
 						<template slot="prepend">¥</template>
 					</el-input>
 				</el-form-item>
-				<el-form-item label="折扣:" prop="discount">
+				<el-form-item label="折扣:" prop="discount" required>
 					<el-input v-model.number="editForm.discount" placeholder="请输入折扣,0表示无折扣" clearable>
 						<template slot="append">%</template>
 					</el-input>
 					<div class="el-form-item__tip">0-100,0表示无折扣,100表示原价</div>
 				</el-form-item>
+				<el-form-item v-if="type === 1" label="话费类型:" prop="phone_type" required>
+					<el-radio-group v-model="editForm.phone_type">
+						<el-radio :label="1">快充</el-radio>
+						<el-radio :label="2">慢充</el-radio>
+					</el-radio-group>
+				</el-form-item>
+				<el-form-item v-if="type === 1" label="服务商:" prop="phone_service" required>
+					<el-select v-model="editForm.phone_service" placeholder="请选择服务商" clearable class="ele-fluid">
+						<el-option label="三网" :value="0" />
+						<el-option label="移动" :value="1" />
+						<el-option label="电信" :value="2" />
+						<el-option label="联通" :value="3" />
+					</el-select>
+				</el-form-item>
+				<el-form-item v-if="type === 2" label="电网类型:" prop="electric_type" required>
+					<el-radio-group v-model="editForm.electric_type">
+						<el-radio :label="1">国网</el-radio>
+						<el-radio :label="2">南网</el-radio>
+					</el-radio-group>
+				</el-form-item>
+				<el-form-item v-if="type === 3" label="燃气服务商:" prop="gas_type" required>
+					<el-select v-model="editForm.gas_type" placeholder="请选择燃气服务商" clearable class="ele-fluid">
+						<el-option label="华润燃气" :value="1" />
+						<el-option label="新奥燃气" :value="2" />
+						<el-option label="中燃燃气" :value="3" />
+						<el-option label="北京燃气" :value="4" />
+						<el-option label="港华燃气" :value="5" />
+					</el-select>
+				</el-form-item>
 				<el-form-item label="备注:">
-					<el-input v-model="editForm.remark" type="textarea" :rows="3" placeholder="请输入备注"/>
+					<el-input v-model="editForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
 				</el-form-item>
 				<el-form-item label="排序:">
-					<el-input-number v-model="editForm.sort" :min="0" :max="9999" controls-position="right" class="ele-fluid"/>
+					<el-input-number v-model="editForm.sort" :min="0" :max="9999" controls-position="right" class="ele-fluid" />
 					<div class="el-form-item__tip">数字越大越靠前</div>
 				</el-form-item>
 				<el-form-item label="状态:" prop="status">
@@ -170,21 +226,38 @@ export default {
 				remark: '',
 				sort: 0,
 				status: 1,
-				type: this.type
+				type: this.type,
+				phone_type: 1,
+				phone_service: 1,
+				electric_type: 1,
+				gas_type: 1
 			},
 			editRules: {
 				product_id: [
-					{required: true, message: '请输入产品ID', trigger: 'blur'}
+					{ required: true, message: '请输入产品ID', trigger: 'blur' }
 				],
 				money: [
-					{required: true, message: '请输入面值金额', trigger: 'blur'},
-					{type: 'number', message: '金额必须为数字', trigger: 'blur'}
+					{ required: true, message: '请输入缴费金额', trigger: 'blur' },
+					{ type: 'number', message: '金额必须为数字', trigger: 'blur' }
 				],
 				discount: [
-					{type: 'number', message: '折扣必须为数字', trigger: 'blur'}
+					{ required: true, message: '请输入折扣', trigger: 'blur' },
+					{ type: 'number', message: '折扣必须为数字', trigger: 'blur' }
+				],
+				phone_type: [
+					{ required: true, message: '请选择话费类型', trigger: 'change' }
+				],
+				phone_service: [
+					{ required: true, message: '请选择服务商', trigger: 'change' }
+				],
+				electric_type: [
+					{ required: true, message: '请选择电网类型', trigger: 'change' }
+				],
+				gas_type: [
+					{ required: true, message: '请选择燃气服务商', trigger: 'change' }
 				],
 				status: [
-					{required: true, message: '请选择状态', trigger: 'change'}
+					{ required: true, message: '请选择状态', trigger: 'change' }
 				]
 			},
 			saveLoading: false
@@ -193,7 +266,7 @@ export default {
 	methods: {
 		/* 查询 */
 		query() {
-			this.$refs.table.reload({where: this.where});
+			this.$refs.table.reload({ where: this.where });
 		},
 		/* 重置 */
 		handleReset() {
@@ -214,7 +287,11 @@ export default {
 					remark: row.remark,
 					sort: row.sort,
 					status: row.status,
-					type: this.type
+					type: this.type,
+					phone_type: row.phone_type || 1,
+					phone_service: row.phone_service || 1,
+					electric_type: row.electric_type || 1,
+					gas_type: row.gas_type || 1
 				};
 			} else {
 				this.editForm = {
@@ -225,7 +302,11 @@ export default {
 					remark: '',
 					sort: 0,
 					status: 1,
-					type: this.type
+					type: this.type,
+					phone_type: 1,
+					phone_service: 1,
+					electric_type: 1,
+					gas_type: 1
 				};
 			}
 			this.editVisible = true;
@@ -269,7 +350,7 @@ export default {
 		},
 		/* 删除 */
 		remove(row) {
-			this.$http.post('/pay/meals/delete', {id: row.id}).then(res => {
+			this.$http.post('/pay/meals/delete', { id: row.id }).then(res => {
 				if (res.data.code === 0) {
 					this.$message.success(res.data.msg);
 					this.$refs.table.reload();
@@ -282,5 +363,4 @@ export default {
 }
 </script>
 
-<style scoped>
-</style>
+<style scoped></style>

+ 9 - 0
app/Services/Common/GoodsService.php

@@ -486,6 +486,15 @@ class GoodsService extends BaseService
                 ]);
             }
         }
+
+        // 计算多规格总库存并更新商品主表
+        $totalStock = $skuModel->where(['goods_id' => $goodsId, 'mark' => 1, 'status' => 1])
+            ->sum('stock');
+        $this->model->where('id', $goodsId)->update([
+            'stock' => $totalStock ?? 0,
+            'update_time' => $now
+        ]);
+
         return true;
     }
 

+ 16 - 8
app/Services/Common/PayMealsService.php

@@ -16,7 +16,7 @@ class PayMealsService extends BaseService
     public function getList()
     {
         $params = request()->all();
-        
+
         $page = $params['page'] ?? 1;
         $limit = $params['limit'] ?? 20;
         $type = $params['type'] ?? '';
@@ -37,10 +37,10 @@ class PayMealsService extends BaseService
 
         // 关键词搜索
         if (!empty($keyword)) {
-            $query->where(function($q) use ($keyword) {
+            $query->where(function ($q) use ($keyword) {
                 $q->where('money', 'like', "%{$keyword}%")
-                  ->orWhere('remark', 'like', "%{$keyword}%")
-                  ->orWhere('product_id', 'like', "%{$keyword}%");
+                    ->orWhere('remark', 'like', "%{$keyword}%")
+                    ->orWhere('product_id', 'like', "%{$keyword}%");
             });
         }
 
@@ -84,7 +84,7 @@ class PayMealsService extends BaseService
         if ($id === null) {
             $id = request()->input('id');
         }
-        
+
         $info = PayMealsModel::where('id', $id)
             ->where('mark', 1)
             ->first();
@@ -123,6 +123,10 @@ class PayMealsService extends BaseService
             'discount' => (float)($params['discount'] ?? 0),
             'remark' => (string)($params['remark'] ?? ''),
             'type' => (int)($params['type'] ?? 1),
+            'phone_type' => (int)($params['phone_type'] ?? 1),
+            'phone_service' => (int)($params['phone_service'] ?? 1),
+            'electric_type' => (int)($params['electric_type'] ?? 1),
+            'gas_type' => (int)($params['gas_type'] ?? 1),
             'sort' => (int)($params['sort'] ?? 0),
             'status' => (int)($params['status'] ?? 1),
             'create_time' => time(),
@@ -158,7 +162,11 @@ class PayMealsService extends BaseService
         $meal->product_id = $params['product_id'] ?? $meal->product_id;
         $meal->money = $params['money'] ?? $meal->money;
         $meal->discount = $params['discount'] ?? $meal->discount;
-        $meal->remark = $params['remark'] ?? $meal->remark;
+        $meal->remark = isset($params['remark']) ? $params['remark'] : '';
+        $meal->phone_type = $params['phone_type'] ?? $meal->phone_type;
+        $meal->phone_service = $params['phone_service'] ?? $meal->phone_service;
+        $meal->electric_type = $params['electric_type'] ?? $meal->electric_type;
+        $meal->gas_type = $params['gas_type'] ?? $meal->gas_type;
         $meal->sort = $params['sort'] ?? $meal->sort;
         $meal->status = $params['status'] ?? $meal->status;
         $meal->update_time = time();
@@ -173,7 +181,7 @@ class PayMealsService extends BaseService
     public function delete()
     {
         $id = request()->input('id');
-        
+
         $meal = PayMealsModel::where('id', $id)
             ->where('mark', 1)
             ->first();
@@ -196,7 +204,7 @@ class PayMealsService extends BaseService
         if ($ids === null) {
             $ids = request()->input('ids', []);
         }
-        
+
         $count = PayMealsModel::whereIn('id', $ids)
             ->where('mark', 1)
             ->update(['mark' => 0]);