feat(商品管理): 添加自动审批功能
在商品管理模块中新增自动审批功能,包括在商品表单、编辑模态框和列表中添加自动审批开关及相关逻辑。同时更新了商品DTO接口以支持自动审批字段。
This commit is contained in:
parent
e4ee388f0f
commit
bad63e65d7
|
@ -5,27 +5,48 @@ export interface GoodsQuery extends BasePageQuery {
|
||||||
categoryId?: number;
|
categoryId?: number;
|
||||||
status?: number;
|
status?: number;
|
||||||
goodsId?: number;
|
goodsId?: number;
|
||||||
|
autoApproval?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 商品DTO */
|
/** 商品DTO */
|
||||||
export interface GoodsDTO {
|
export interface GoodsDTO {
|
||||||
|
/** 商品ID */
|
||||||
goodsId?: number;
|
goodsId?: number;
|
||||||
|
/** 商品名称 */
|
||||||
goodsName: string;
|
goodsName: string;
|
||||||
|
/** 商品分类ID */
|
||||||
categoryId: number;
|
categoryId: number;
|
||||||
|
/** 商品价格 */
|
||||||
price: number;
|
price: number;
|
||||||
|
/** 库存数量 */
|
||||||
stock: number;
|
stock: number;
|
||||||
|
/** 商品状态(0下架 1上架) */
|
||||||
status: number;
|
status: number;
|
||||||
|
/** 自动审批开关(0关闭 1开启) */
|
||||||
|
autoApproval: number;
|
||||||
|
/** 商品封面图 */
|
||||||
coverImg: string;
|
coverImg: string;
|
||||||
|
/** 商品详情(富文本) */
|
||||||
goodsDetail: string;
|
goodsDetail: string;
|
||||||
|
/** 创建人ID */
|
||||||
creatorId?: number;
|
creatorId?: number;
|
||||||
|
/** 创建时间 */
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
|
/** 更新人ID */
|
||||||
updaterId?: number;
|
updaterId?: number;
|
||||||
|
/** 更新时间 */
|
||||||
updateTime?: Date;
|
updateTime?: Date;
|
||||||
|
/** 备注信息 */
|
||||||
remark?: string;
|
remark?: string;
|
||||||
|
/** 删除标志(0存在 1删除) */
|
||||||
deleted?: number;
|
deleted?: number;
|
||||||
|
/** 所属货柜名称 */
|
||||||
cabinetName?: string;
|
cabinetName?: string;
|
||||||
|
/** 货柜单元格编号 */
|
||||||
cellNo?: number;
|
cellNo?: number;
|
||||||
|
/** 单元格编号(字符串形式) */
|
||||||
cellNoStr?: string;
|
cellNoStr?: string;
|
||||||
|
/** 总库存量(含所有仓库) */
|
||||||
totalStock?: number;
|
totalStock?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +57,7 @@ export interface GoodsRequest {
|
||||||
price: number;
|
price: number;
|
||||||
stock: number;
|
stock: number;
|
||||||
status: number;
|
status: number;
|
||||||
|
autoApproval: number;
|
||||||
coverImg?: string;
|
coverImg?: string;
|
||||||
goodsDetail: string;
|
goodsDetail: string;
|
||||||
remark?: 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,
|
price: 0,
|
||||||
stock: 0,
|
stock: 0,
|
||||||
status: 1,
|
status: 1,
|
||||||
|
autoApproval: 0,
|
||||||
categoryId: 0,
|
categoryId: 0,
|
||||||
goodsDetail: "",
|
goodsDetail: "",
|
||||||
coverImg: ""
|
coverImg: ""
|
||||||
|
@ -154,6 +155,10 @@ watch(
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</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-form-item label="状态" prop="status">
|
||||||
<el-radio-group v-model="formData.status">
|
<el-radio-group v-model="formData.status">
|
||||||
<el-radio :label="1">上架</el-radio>
|
<el-radio :label="1">上架</el-radio>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import { ref, reactive, onMounted, watch } from "vue";
|
import { ref, reactive, onMounted, watch } from "vue";
|
||||||
import { ElMessage, FormRules } from "element-plus";
|
import { ElMessage, FormRules } from "element-plus";
|
||||||
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
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 { CategoryDTO, getCategoryAllApi } from "@/api/shop/category";
|
||||||
import Confirm from "@iconify-icons/ep/check";
|
import Confirm from "@iconify-icons/ep/check";
|
||||||
import Upload from "@iconify-icons/ep/upload";
|
import Upload from "@iconify-icons/ep/upload";
|
||||||
|
@ -18,11 +18,12 @@ const props = defineProps({
|
||||||
const emit = defineEmits(["update:visible", "refresh"]);
|
const emit = defineEmits(["update:visible", "refresh"]);
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const formData = reactive({
|
const formData = reactive<GoodsDTO>({
|
||||||
goodsName: "",
|
goodsName: "",
|
||||||
price: 0,
|
price: 0,
|
||||||
stock: 0,
|
stock: 0,
|
||||||
status: 1,
|
status: 1,
|
||||||
|
autoApproval: 0,
|
||||||
categoryId: 0,
|
categoryId: 0,
|
||||||
goodsDetail: "",
|
goodsDetail: "",
|
||||||
coverImg: ""
|
coverImg: ""
|
||||||
|
@ -123,6 +124,11 @@ const beforeAvatarUpload = (rawFile) => {
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</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-form-item label="状态" prop="status">
|
||||||
<el-radio-group v-model="formData.status">
|
<el-radio-group v-model="formData.status">
|
||||||
<el-radio :label="1">上架</el-radio>
|
<el-radio :label="1">上架</el-radio>
|
||||||
|
|
|
@ -38,7 +38,7 @@ const pagination = ref({
|
||||||
|
|
||||||
// 加载数据
|
// 加载数据
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const dataList = ref([]);
|
const dataList = ref<GoodsDTO[]>([]);
|
||||||
const multipleSelection = ref<number[]>([]);
|
const multipleSelection = ref<number[]>([]);
|
||||||
const editVisible = ref(false);
|
const editVisible = ref(false);
|
||||||
const configVisible = ref(false);
|
const configVisible = ref(false);
|
||||||
|
@ -181,6 +181,13 @@ const handleEdit = (row: GoodsDTO) => {
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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">
|
<el-table-column label="柜口" prop="cellNo" width="120">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
{{ !row.cellNoStr ? '未配置' : row.cabinetName + ' 格口' + row.cellNoStr }}
|
{{ !row.cellNoStr ? '未配置' : row.cabinetName + ' 格口' + row.cellNoStr }}
|
||||||
|
|
Loading…
Reference in New Issue