feat(商品管理): 添加自动审批功能
在商品管理模块中新增自动审批功能,包括在商品表单、编辑模态框和列表中添加自动审批开关及相关逻辑。同时更新了商品DTO接口以支持自动审批字段。
This commit is contained in:
parent
e4ee388f0f
commit
bad63e65d7
|
@ -5,27 +5,48 @@ export interface GoodsQuery extends BasePageQuery {
|
|||
categoryId?: number;
|
||||
status?: number;
|
||||
goodsId?: number;
|
||||
autoApproval?: number;
|
||||
}
|
||||
|
||||
/** 商品DTO */
|
||||
export interface GoodsDTO {
|
||||
/** 商品ID */
|
||||
goodsId?: number;
|
||||
/** 商品名称 */
|
||||
goodsName: string;
|
||||
/** 商品分类ID */
|
||||
categoryId: number;
|
||||
/** 商品价格 */
|
||||
price: number;
|
||||
/** 库存数量 */
|
||||
stock: number;
|
||||
/** 商品状态(0下架 1上架) */
|
||||
status: number;
|
||||
/** 自动审批开关(0关闭 1开启) */
|
||||
autoApproval: number;
|
||||
/** 商品封面图 */
|
||||
coverImg: string;
|
||||
/** 商品详情(富文本) */
|
||||
goodsDetail: string;
|
||||
/** 创建人ID */
|
||||
creatorId?: number;
|
||||
/** 创建时间 */
|
||||
createTime?: Date;
|
||||
/** 更新人ID */
|
||||
updaterId?: number;
|
||||
/** 更新时间 */
|
||||
updateTime?: Date;
|
||||
/** 备注信息 */
|
||||
remark?: string;
|
||||
/** 删除标志(0存在 1删除) */
|
||||
deleted?: number;
|
||||
/** 所属货柜名称 */
|
||||
cabinetName?: string;
|
||||
/** 货柜单元格编号 */
|
||||
cellNo?: number;
|
||||
/** 单元格编号(字符串形式) */
|
||||
cellNoStr?: string;
|
||||
/** 总库存量(含所有仓库) */
|
||||
totalStock?: number;
|
||||
}
|
||||
|
||||
|
@ -36,6 +57,7 @@ export interface GoodsRequest {
|
|||
price: number;
|
||||
stock: number;
|
||||
status: number;
|
||||
autoApproval: number;
|
||||
coverImg?: string;
|
||||
goodsDetail: string;
|
||||
remark?: string;
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
package com.agileboot.domain.shop.order.query;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.agileboot.common.core.page.AbstractPageQuery;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class SearchShopOrderQuery<T> extends AbstractPageQuery<T> {
|
||||
|
||||
private String orderNumber;
|
||||
private Integer status;
|
||||
private Integer payStatus;
|
||||
private Date startTime;
|
||||
private Date endTime;
|
||||
|
||||
@Override
|
||||
public QueryWrapper<T> addQueryCondition() {
|
||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
queryWrapper
|
||||
.like(StrUtil.isNotEmpty(orderNumber), "order_number", orderNumber)
|
||||
.eq(status != null, "status", status)
|
||||
.eq(payStatus != null, "pay_status", payStatus)
|
||||
.between(startTime != null && endTime != null, "create_time", startTime, endTime)
|
||||
.eq("deleted", 0)
|
||||
.orderByDesc("create_time");
|
||||
|
||||
return queryWrapper;
|
||||
}
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
package com.agileboot.admin.controller.shop;
|
||||
|
||||
import com.agileboot.common.core.base.BaseController;
|
||||
import com.agileboot.common.core.dto.ResponseDTO;
|
||||
import com.agileboot.common.core.page.PageDTO;
|
||||
import com.agileboot.domain.shop.order.OrderApplicationService;
|
||||
import com.agileboot.domain.shop.order.db.ShopOrderEntity;
|
||||
import com.agileboot.domain.shop.order.query.SearchShopOrderQuery;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/shop/order")
|
||||
@RequiredArgsConstructor
|
||||
@Validated
|
||||
public class ShopOrderController extends BaseController {
|
||||
private OrderApplicationService orderApplicationService;
|
||||
|
||||
|
||||
@Operation(summary = "订单列表")
|
||||
// @PreAuthorize("@permission.has('shop:goods:list')")
|
||||
@GetMapping("/list")
|
||||
public ResponseDTO<PageDTO<ShopOrderEntity>> list(SearchShopOrderQuery<ShopOrderEntity> query) {
|
||||
PageDTO<ShopOrderEntity> page = orderApplicationService.getOrderList(query);
|
||||
return ResponseDTO.ok(page);
|
||||
}
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
package com.agileboot.domain.shop.order.db;
|
||||
|
||||
import com.agileboot.common.core.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品订单表
|
||||
* </p>
|
||||
*
|
||||
* @author valarchie
|
||||
* @since 2025-03-10
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("shop_order")
|
||||
@ApiModel(value = "ShopOrderEntity对象", description = "商品订单表")
|
||||
public class ShopOrderEntity extends BaseEntity<ShopOrderEntity> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("订单唯一ID")
|
||||
@TableId(value = "order_id", type = IdType.AUTO)
|
||||
private Long orderId;
|
||||
|
||||
@ApiModelProperty("ucid")
|
||||
@TableField("ucid")
|
||||
private String ucid;
|
||||
|
||||
@ApiModelProperty("openid")
|
||||
@TableField("openid")
|
||||
private String openid;
|
||||
|
||||
@ApiModelProperty("支付网关交易id")
|
||||
@TableField("trade_id")
|
||||
private String tradeId;
|
||||
|
||||
@ApiModelProperty("手机号码")
|
||||
@TableField("mobile")
|
||||
private String mobile;
|
||||
|
||||
@ApiModelProperty("企业微信用户ID或汇邦云用户ID")
|
||||
@TableField("userid")
|
||||
private String userid;
|
||||
|
||||
@ApiModelProperty("用户姓名")
|
||||
@TableField("name")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("是否内部用户(0否 1汇邦云用户 2企业微信用户)")
|
||||
@TableField("is_internal")
|
||||
private Integer isInternal;
|
||||
|
||||
@ApiModelProperty("业务系统订单ID(对接外部系统)")
|
||||
@TableField("biz_order_id")
|
||||
private String bizOrderId;
|
||||
|
||||
@ApiModelProperty("订单总金额")
|
||||
@TableField("total_amount")
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
@ApiModelProperty("订单状态(1待付款 2已付款 3已发货 4已完成 5已取消)")
|
||||
@TableField("`status`")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty("支付状态(1未支付 2已支付 3退款中 4已退款)")
|
||||
@TableField("pay_status")
|
||||
private Integer payStatus;
|
||||
|
||||
@ApiModelProperty("支付方式")
|
||||
@TableField("payment_method")
|
||||
private String paymentMethod;
|
||||
|
||||
@ApiModelProperty("支付时间")
|
||||
@TableField("pay_time")
|
||||
private Date payTime;
|
||||
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.orderId;
|
||||
}
|
||||
|
||||
}
|
|
@ -29,6 +29,7 @@ const formData = reactive<GoodsDTO>({
|
|||
price: 0,
|
||||
stock: 0,
|
||||
status: 1,
|
||||
autoApproval: 0,
|
||||
categoryId: 0,
|
||||
goodsDetail: "",
|
||||
coverImg: ""
|
||||
|
@ -154,6 +155,10 @@ watch(
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="自动审批" prop="autoApproval">
|
||||
<el-switch v-model="formData.autoApproval" :active-value="1" :inactive-value="0" active-text="启用"
|
||||
inactive-text="关闭" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio :label="1">上架</el-radio>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
import { ref, reactive, onMounted, watch } from "vue";
|
||||
import { ElMessage, FormRules } from "element-plus";
|
||||
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
||||
import { addGoodsApi } from "@/api/shop/goods";
|
||||
import { addGoodsApi, GoodsDTO } from "@/api/shop/goods";
|
||||
import { CategoryDTO, getCategoryAllApi } from "@/api/shop/category";
|
||||
import Confirm from "@iconify-icons/ep/check";
|
||||
import Upload from "@iconify-icons/ep/upload";
|
||||
|
@ -18,11 +18,12 @@ const props = defineProps({
|
|||
const emit = defineEmits(["update:visible", "refresh"]);
|
||||
|
||||
const formRef = ref();
|
||||
const formData = reactive({
|
||||
const formData = reactive<GoodsDTO>({
|
||||
goodsName: "",
|
||||
price: 0,
|
||||
stock: 0,
|
||||
status: 1,
|
||||
autoApproval: 0,
|
||||
categoryId: 0,
|
||||
goodsDetail: "",
|
||||
coverImg: ""
|
||||
|
@ -123,6 +124,11 @@ const beforeAvatarUpload = (rawFile) => {
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="自动审批" prop="autoApproval">
|
||||
<el-switch v-model="formData.autoApproval" :active-value="1" :inactive-value="0" active-text="启用"
|
||||
inactive-text="关闭" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio :label="1">上架</el-radio>
|
||||
|
|
|
@ -38,7 +38,7 @@ const pagination = ref({
|
|||
|
||||
// 加载数据
|
||||
const loading = ref(false);
|
||||
const dataList = ref([]);
|
||||
const dataList = ref<GoodsDTO[]>([]);
|
||||
const multipleSelection = ref<number[]>([]);
|
||||
const editVisible = ref(false);
|
||||
const configVisible = ref(false);
|
||||
|
@ -181,6 +181,13 @@ const handleEdit = (row: GoodsDTO) => {
|
|||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="自动审批" prop="autoApproval" width="120">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.autoApproval === 1 ? 'success' : 'info'">
|
||||
{{ row.autoApproval === 1 ? '启用' : '关闭' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="柜口" prop="cellNo" width="120">
|
||||
<template #default="{ row }">
|
||||
{{ !row.cellNoStr ? '未配置' : row.cabinetName + ' 格口' + row.cellNoStr }}
|
||||
|
|
Loading…
Reference in New Issue