送样需求表创建
This commit is contained in:
parent
ed10b7d545
commit
1974e1b61b
|
@ -6,10 +6,12 @@ type ApiGroup struct {
|
|||
ProductApi
|
||||
ProjectApi
|
||||
CustomerApi
|
||||
OrderApi
|
||||
}
|
||||
|
||||
var (
|
||||
ProdService = service.ServiceGroupApp.GvappServiceGroup.ProductService
|
||||
ProjService = service.ServiceGroupApp.GvappServiceGroup.ProjectService
|
||||
CustService = service.ServiceGroupApp.GvappServiceGroup.CustomerService
|
||||
OrdService = service.ServiceGroupApp.GvappServiceGroup.OrderService
|
||||
)
|
||||
|
|
|
@ -0,0 +1,210 @@
|
|||
package gvapp
|
||||
|
||||
import (
|
||||
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/model/gvapp"
|
||||
gvappReq "github.com/flipped-aurora/gin-vue-admin/server/model/gvapp/request"
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type OrderApi struct {}
|
||||
|
||||
|
||||
|
||||
// CreateOrder 创建订单信息
|
||||
// @Tags Order
|
||||
// @Summary 创建订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body gvapp.Order true "创建订单信息"
|
||||
// @Success 200 {object} response.Response{msg=string} "创建成功"
|
||||
// @Router /Ord/createOrder [post]
|
||||
func (OrdApi *OrderApi) CreateOrder(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
var Ord gvapp.Order
|
||||
err := c.ShouldBindJSON(&Ord)
|
||||
if err != nil {
|
||||
response.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
err = OrdService.CreateOrder(ctx,&Ord)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("创建失败!", zap.Error(err))
|
||||
response.FailWithMessage("创建失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("创建成功", c)
|
||||
}
|
||||
|
||||
// DeleteOrder 删除订单信息
|
||||
// @Tags Order
|
||||
// @Summary 删除订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body gvapp.Order true "删除订单信息"
|
||||
// @Success 200 {object} response.Response{msg=string} "删除成功"
|
||||
// @Router /Ord/deleteOrder [delete]
|
||||
func (OrdApi *OrderApi) DeleteOrder(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
ID := c.Query("ID")
|
||||
err := OrdService.DeleteOrder(ctx,ID)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("删除失败!", zap.Error(err))
|
||||
response.FailWithMessage("删除失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("删除成功", c)
|
||||
}
|
||||
|
||||
// DeleteOrderByIds 批量删除订单信息
|
||||
// @Tags Order
|
||||
// @Summary 批量删除订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Success 200 {object} response.Response{msg=string} "批量删除成功"
|
||||
// @Router /Ord/deleteOrderByIds [delete]
|
||||
func (OrdApi *OrderApi) DeleteOrderByIds(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
IDs := c.QueryArray("IDs[]")
|
||||
err := OrdService.DeleteOrderByIds(ctx,IDs)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("批量删除失败!", zap.Error(err))
|
||||
response.FailWithMessage("批量删除失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("批量删除成功", c)
|
||||
}
|
||||
|
||||
// UpdateOrder 更新订单信息
|
||||
// @Tags Order
|
||||
// @Summary 更新订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body gvapp.Order true "更新订单信息"
|
||||
// @Success 200 {object} response.Response{msg=string} "更新成功"
|
||||
// @Router /Ord/updateOrder [put]
|
||||
func (OrdApi *OrderApi) UpdateOrder(c *gin.Context) {
|
||||
// 从ctx获取标准context进行业务行为
|
||||
ctx := c.Request.Context()
|
||||
|
||||
var Ord gvapp.Order
|
||||
err := c.ShouldBindJSON(&Ord)
|
||||
if err != nil {
|
||||
response.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
err = OrdService.UpdateOrder(ctx,Ord)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("更新失败!", zap.Error(err))
|
||||
response.FailWithMessage("更新失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithMessage("更新成功", c)
|
||||
}
|
||||
|
||||
// FindOrder 用id查询订单信息
|
||||
// @Tags Order
|
||||
// @Summary 用id查询订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param ID query uint true "用id查询订单信息"
|
||||
// @Success 200 {object} response.Response{data=gvapp.Order,msg=string} "查询成功"
|
||||
// @Router /Ord/findOrder [get]
|
||||
func (OrdApi *OrderApi) FindOrder(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
ID := c.Query("ID")
|
||||
reOrd, err := OrdService.GetOrder(ctx,ID)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询失败!", zap.Error(err))
|
||||
response.FailWithMessage("查询失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithData(reOrd, c)
|
||||
}
|
||||
// GetOrderList 分页获取订单信息列表
|
||||
// @Tags Order
|
||||
// @Summary 分页获取订单信息列表
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data query gvappReq.OrderSearch true "分页获取订单信息列表"
|
||||
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "获取成功"
|
||||
// @Router /Ord/getOrderList [get]
|
||||
func (OrdApi *OrderApi) GetOrderList(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
var pageInfo gvappReq.OrderSearch
|
||||
err := c.ShouldBindQuery(&pageInfo)
|
||||
if err != nil {
|
||||
response.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
list, total, err := OrdService.GetOrderInfoList(ctx,pageInfo)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("获取失败!", zap.Error(err))
|
||||
response.FailWithMessage("获取失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithDetailed(response.PageResult{
|
||||
List: list,
|
||||
Total: total,
|
||||
Page: pageInfo.Page,
|
||||
PageSize: pageInfo.PageSize,
|
||||
}, "获取成功", c)
|
||||
}
|
||||
// GetOrderDataSource 获取Order的数据源
|
||||
// @Tags Order
|
||||
// @Summary 获取Order的数据源
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Success 200 {object} response.Response{data=object,msg=string} "查询成功"
|
||||
// @Router /Ord/getOrderDataSource [get]
|
||||
func (OrdApi *OrderApi) GetOrderDataSource(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
// 此接口为获取数据源定义的数据
|
||||
dataSource, err := OrdService.GetOrderDataSource(ctx)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询失败!", zap.Error(err))
|
||||
response.FailWithMessage("查询失败:" + err.Error(), c)
|
||||
return
|
||||
}
|
||||
response.OkWithData(dataSource, c)
|
||||
}
|
||||
|
||||
// GetOrderPublic 不需要鉴权的订单信息接口
|
||||
// @Tags Order
|
||||
// @Summary 不需要鉴权的订单信息接口
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Success 200 {object} response.Response{data=object,msg=string} "获取成功"
|
||||
// @Router /Ord/getOrderPublic [get]
|
||||
func (OrdApi *OrderApi) GetOrderPublic(c *gin.Context) {
|
||||
// 创建业务用Context
|
||||
ctx := c.Request.Context()
|
||||
|
||||
// 此接口不需要鉴权
|
||||
// 示例为返回了一个固定的消息接口,一般本接口用于C端服务,需要自己实现业务逻辑
|
||||
OrdService.GetOrderPublic(ctx)
|
||||
response.OkWithDetailed(gin.H{
|
||||
"info": "不需要鉴权的订单信息接口信息",
|
||||
}, "获取成功", c)
|
||||
}
|
|
@ -11,5 +11,7 @@ func bizModel() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
LocalDb := global.GetGlobalDBByDBName("Local")
|
||||
LocalDb.AutoMigrate(gvapp.Order{})
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -16,7 +16,8 @@ func initBizRouter(routers ...*gin.RouterGroup) {
|
|||
{
|
||||
gvappRouter := router.RouterGroupApp.Gvapp
|
||||
gvappRouter.InitProductRouter(privateGroup, publicGroup)
|
||||
gvappRouter.InitProjectRouter(privateGroup, publicGroup) // 占位方法,保证文件可以正确加载,避免go空变量检测报错,请勿删除。
|
||||
gvappRouter.InitCustomerRouter(privateGroup, publicGroup)
|
||||
gvappRouter.InitProjectRouter(privateGroup, publicGroup)
|
||||
gvappRouter.InitCustomerRouter(privateGroup, publicGroup) // 占位方法,保证文件可以正确加载,避免go空变量检测报错,请勿删除。
|
||||
gvappRouter.InitOrderRouter(privateGroup, publicGroup)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
// 自动生成模板Order
|
||||
package gvapp
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
||||
)
|
||||
|
||||
// 订单信息 结构体 Order
|
||||
type Order struct {
|
||||
global.GVA_MODEL
|
||||
SalesMan *int `json:"salesMan" form:"salesMan" gorm:"column:sales_man;comment:销售经理;" binding:"required"` //销售经理
|
||||
CustomerCode uint `json:"customerCode" form:"customerCode" gorm:"column:customer_code;comment:;" binding:"required"` //客户代码
|
||||
CustomerType *string `json:"customerType" form:"customerType" gorm:"column:customer_type;comment:;"` //客户类型
|
||||
CustomerName *string `json:"customerName" form:"customerName" gorm:"column:customer_name;comment:客户名称;"` //客户名称
|
||||
CustomerLocation *string `json:"customerLocation" form:"customerLocation" gorm:"column:customer_location;comment:;"` //客户所在地
|
||||
ProductCode *string `json:"productCode" form:"productCode" gorm:"column:product_code;comment:产品code;" binding:"required"` //产品code
|
||||
ProductType *string `json:"productType" form:"productType" gorm:"column:product_type;comment:;"` //产品类型
|
||||
ProjectManager *string `json:"projectManager" form:"projectManager" gorm:"column:project_manager;comment:;"` //项目经理
|
||||
DemandDate *time.Time `json:"demandDate" form:"demandDate" gorm:"column:demand_date;comment:需求日期;" binding:"required"` //需求日期
|
||||
DemandQuantity *int `json:"demandQuantity" form:"demandQuantity" gorm:"column:demand_quantity;comment:需求数量;" binding:"required"` //需求数量
|
||||
PlanDeliveryDate *time.Time `json:"planDeliveryDate" form:"planDeliveryDate" gorm:"column:plan_delivery_date;comment:;"` //计划交付日期
|
||||
ActualDeliveryDate *time.Time `json:"actualDeliveryDate" form:"actualDeliveryDate" gorm:"column:actual_delivery_date;comment:;"` //实际交付日期
|
||||
ActualQuantity *int `json:"actualQuantity" form:"actualQuantity" gorm:"column:actual_quantity;comment:;"` //实际交付数量
|
||||
Status *string `json:"status" form:"status" gorm:"column:status;comment:订单状态;"` //交付状态
|
||||
Project *Project `json:"project" form:"project" gorm:"foreignKey:ProductCode;references:ProductCode;"`
|
||||
Customer *Customer `json:"customer" form:"customer" gorm:"foreignKey:CustomerCode;references:ID;"`
|
||||
}
|
||||
|
||||
// TableName 订单信息 Order自定义表名 order
|
||||
func (Order) TableName() string {
|
||||
return "sample_order"
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
package request
|
||||
|
||||
import (
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
|
||||
"time"
|
||||
)
|
||||
|
||||
type OrderSearch struct{
|
||||
StartCreatedAt *time.Time `json:"startCreatedAt" form:"startCreatedAt"`
|
||||
EndCreatedAt *time.Time `json:"endCreatedAt" form:"endCreatedAt"`
|
||||
SalesMan *int `json:"salesMan" form:"salesMan" `
|
||||
CustomerCode *int `json:"customerCode" form:"customerCode" `
|
||||
CustomerType *string `json:"customerType" form:"customerType" `
|
||||
CustomerName *string `json:"customerName" form:"customerName" `
|
||||
CustomerLocation *string `json:"customerLocation" form:"customerLocation" `
|
||||
ProductCode *string `json:"productCode" form:"productCode" `
|
||||
ProductType *string `json:"productType" form:"productType" `
|
||||
ProjectManager *string `json:"projectManager" form:"projectManager" `
|
||||
StartDemandDate *time.Time `json:"startDemandDate" form:"startDemandDate"`
|
||||
EndDemandDate *time.Time `json:"endDemandDate" form:"endDemandDate"`
|
||||
StartDemandQuantity *int `json:"startDemandQuantity" form:"startDemandQuantity"`
|
||||
EndDemandQuantity *int `json:"endDemandQuantity" form:"endDemandQuantity"`
|
||||
StartPlanDeliveryDate *time.Time `json:"startPlanDeliveryDate" form:"startPlanDeliveryDate"`
|
||||
EndPlanDeliveryDate *time.Time `json:"endPlanDeliveryDate" form:"endPlanDeliveryDate"`
|
||||
StartActualDeliveryDate *time.Time `json:"startActualDeliveryDate" form:"startActualDeliveryDate"`
|
||||
EndActualDeliveryDate *time.Time `json:"endActualDeliveryDate" form:"endActualDeliveryDate"`
|
||||
Status *string `json:"status" form:"status" `
|
||||
request.PageInfo
|
||||
Sort string `json:"sort" form:"sort"`
|
||||
Order string `json:"order" form:"order"`
|
||||
}
|
|
@ -6,10 +6,12 @@ type RouterGroup struct {
|
|||
ProductRouter
|
||||
ProjectRouter
|
||||
CustomerRouter
|
||||
OrderRouter
|
||||
}
|
||||
|
||||
var (
|
||||
ProdApi = api.ApiGroupApp.GvappApiGroup.ProductApi
|
||||
ProjApi = api.ApiGroupApp.GvappApiGroup.ProjectApi
|
||||
CustApi = api.ApiGroupApp.GvappApiGroup.CustomerApi
|
||||
OrdApi = api.ApiGroupApp.GvappApiGroup.OrderApi
|
||||
)
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package gvapp
|
||||
|
||||
import (
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/middleware"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type OrderRouter struct {}
|
||||
|
||||
// InitOrderRouter 初始化 订单信息 路由信息
|
||||
func (s *OrderRouter) InitOrderRouter(Router *gin.RouterGroup,PublicRouter *gin.RouterGroup) {
|
||||
OrdRouter := Router.Group("Ord").Use(middleware.OperationRecord())
|
||||
OrdRouterWithoutRecord := Router.Group("Ord")
|
||||
OrdRouterWithoutAuth := PublicRouter.Group("Ord")
|
||||
{
|
||||
OrdRouter.POST("createOrder", OrdApi.CreateOrder) // 新建订单信息
|
||||
OrdRouter.DELETE("deleteOrder", OrdApi.DeleteOrder) // 删除订单信息
|
||||
OrdRouter.DELETE("deleteOrderByIds", OrdApi.DeleteOrderByIds) // 批量删除订单信息
|
||||
OrdRouter.PUT("updateOrder", OrdApi.UpdateOrder) // 更新订单信息
|
||||
}
|
||||
{
|
||||
OrdRouterWithoutRecord.GET("findOrder", OrdApi.FindOrder) // 根据ID获取订单信息
|
||||
OrdRouterWithoutRecord.GET("getOrderList", OrdApi.GetOrderList) // 获取订单信息列表
|
||||
}
|
||||
{
|
||||
OrdRouterWithoutAuth.GET("getOrderDataSource", OrdApi.GetOrderDataSource) // 获取订单信息数据源
|
||||
OrdRouterWithoutAuth.GET("getOrderPublic", OrdApi.GetOrderPublic) // 订单信息开放接口
|
||||
}
|
||||
}
|
|
@ -4,4 +4,5 @@ type ServiceGroup struct {
|
|||
ProductService
|
||||
ProjectService
|
||||
CustomerService
|
||||
OrderService
|
||||
}
|
||||
|
|
|
@ -0,0 +1,160 @@
|
|||
package gvapp
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/model/gvapp"
|
||||
gvappReq "github.com/flipped-aurora/gin-vue-admin/server/model/gvapp/request"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
type OrderService struct{}
|
||||
|
||||
// CreateOrder 创建订单信息记录
|
||||
// Author [yourname](https://github.com/yourname)
|
||||
func (OrdService *OrderService) CreateOrder(ctx context.Context, Ord *gvapp.Order) (err error) {
|
||||
err = global.MustGetGlobalDBByDBName("Local").Create(Ord).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteOrder 删除订单信息记录
|
||||
// Author [yourname](https://github.com/yourname)
|
||||
func (OrdService *OrderService) DeleteOrder(ctx context.Context, ID string) (err error) {
|
||||
err = global.MustGetGlobalDBByDBName("Local").Delete(&gvapp.Order{}, "id = ?", ID).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteOrderByIds 批量删除订单信息记录
|
||||
// Author [yourname](https://github.com/yourname)
|
||||
func (OrdService *OrderService) DeleteOrderByIds(ctx context.Context, IDs []string) (err error) {
|
||||
err = global.MustGetGlobalDBByDBName("Local").Delete(&[]gvapp.Order{}, "id in ?", IDs).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateOrder 更新订单信息记录
|
||||
// Author [yourname](https://github.com/yourname)
|
||||
func (OrdService *OrderService) UpdateOrder(ctx context.Context, Ord gvapp.Order) (err error) {
|
||||
err = global.MustGetGlobalDBByDBName("Local").Model(&gvapp.Order{}).Where("id = ?", Ord.ID).Updates(&Ord).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// GetOrder 根据ID获取订单信息记录
|
||||
// Author [yourname](https://github.com/yourname)
|
||||
func (OrdService *OrderService) GetOrder(ctx context.Context, ID string) (Ord gvapp.Order, err error) {
|
||||
err = global.MustGetGlobalDBByDBName("Local").Preload("Project.Product").Preload(clause.Associations).Where("id = ?", ID).First(&Ord).Error
|
||||
return
|
||||
}
|
||||
|
||||
// GetOrderInfoList 分页获取订单信息记录
|
||||
// Author [yourname](https://github.com/yourname)
|
||||
func (OrdService *OrderService) GetOrderInfoList(ctx context.Context, info gvappReq.OrderSearch) (list []gvapp.Order, total int64, err error) {
|
||||
limit := info.PageSize
|
||||
offset := info.PageSize * (info.Page - 1)
|
||||
// 创建db
|
||||
db := global.MustGetGlobalDBByDBName("Local").Model(&gvapp.Order{})
|
||||
var Ords []gvapp.Order
|
||||
// 如果有条件搜索 下方会自动创建搜索语句
|
||||
if info.StartCreatedAt != nil && info.EndCreatedAt != nil {
|
||||
db = db.Where("created_at BETWEEN ? AND ?", info.StartCreatedAt, info.EndCreatedAt)
|
||||
}
|
||||
if info.SalesMan != nil {
|
||||
db = db.Where("sales_man = ?", *info.SalesMan)
|
||||
}
|
||||
if info.CustomerCode != nil || info.CustomerType != nil && *info.CustomerType != "" || info.CustomerName != nil && *info.CustomerName != "" || info.CustomerLocation != nil && *info.CustomerLocation != "" {
|
||||
db = db.Joins("INNER JOIN customer ON customer.id = sample_order.customer_code")
|
||||
}
|
||||
if info.CustomerCode != nil {
|
||||
db = db.Where("customer.id = ?", *info.CustomerCode)
|
||||
}
|
||||
if info.CustomerType != nil && *info.CustomerType != "" {
|
||||
db = db.Where("customer.type = ?", *info.CustomerType)
|
||||
}
|
||||
if info.CustomerName != nil && *info.CustomerName != "" {
|
||||
db = db.Where("customer.name LIKE ?", "%"+*info.CustomerName+"%")
|
||||
}
|
||||
if info.CustomerLocation != nil && *info.CustomerLocation != "" {
|
||||
db = db.Where("customer.location = ?", *info.CustomerLocation)
|
||||
}
|
||||
if info.ProductCode != nil && *info.ProductCode != "" {
|
||||
db = db.Where("sample_order.product_code = ?", *info.ProductCode)
|
||||
}
|
||||
// 如果产品类型和项目经理都不为空,则通过product_code字段关联查询project表
|
||||
if info.ProductType != nil && *info.ProductType != "" || info.ProjectManager != nil && *info.ProjectManager != ""{
|
||||
db = db.Joins("INNER JOIN project ON project.product_code = sample_order.product_code")
|
||||
}
|
||||
if info.ProductType != nil && *info.ProductType != "" {
|
||||
db = db.Preload("Project.Product", "product_type = ?", info.ProductType).
|
||||
Joins("INNER JOIN product ON product.product_code = project.product_code").
|
||||
Where("product.product_type = ?", *info.ProductType)
|
||||
}
|
||||
if info.ProjectManager != nil && *info.ProjectManager != "" {
|
||||
db = db.Where("project.project_manager = ?", *info.ProjectManager)
|
||||
}
|
||||
if info.StartDemandDate != nil && info.EndDemandDate != nil {
|
||||
db = db.Where("demand_date BETWEEN ? AND ? ", info.StartDemandDate, info.EndDemandDate)
|
||||
}
|
||||
if info.StartDemandQuantity != nil && info.EndDemandQuantity != nil {
|
||||
db = db.Where("demand_quantity BETWEEN ? AND ? ", info.StartDemandQuantity, info.EndDemandQuantity)
|
||||
}
|
||||
if info.StartPlanDeliveryDate != nil && info.EndPlanDeliveryDate != nil {
|
||||
db = db.Where("plan_delivery_date BETWEEN ? AND ? ", info.StartPlanDeliveryDate, info.EndPlanDeliveryDate)
|
||||
}
|
||||
if info.StartActualDeliveryDate != nil && info.EndActualDeliveryDate != nil {
|
||||
db = db.Where("actual_delivery_date BETWEEN ? AND ? ", info.StartActualDeliveryDate, info.EndActualDeliveryDate)
|
||||
}
|
||||
if info.Status != nil && *info.Status != "" {
|
||||
db = db.Where("status = ?", *info.Status)
|
||||
}
|
||||
err = db.Count(&total).Error
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var OrderStr string
|
||||
orderMap := make(map[string]bool)
|
||||
orderMap["sales_man"] = true
|
||||
orderMap["demand_date"] = true
|
||||
orderMap["demand_quantity"] = true
|
||||
orderMap["plan_delivery_date"] = true
|
||||
orderMap["actual_delivery_date"] = true
|
||||
orderMap["actual_quantity"] = true
|
||||
if orderMap[info.Sort] {
|
||||
OrderStr = info.Sort
|
||||
if info.Order == "descending" {
|
||||
OrderStr = OrderStr + " desc"
|
||||
}
|
||||
db = db.Order(OrderStr)
|
||||
}
|
||||
|
||||
if limit != 0 {
|
||||
db = db.Limit(limit).Offset(offset)
|
||||
}
|
||||
|
||||
err = db.Preload("Project.Product").Preload(clause.Associations).Find(&Ords).Error
|
||||
return Ords, total, err
|
||||
}
|
||||
func (OrdService *OrderService) GetOrderDataSource(ctx context.Context) (res map[string][]map[string]any, err error) {
|
||||
res = make(map[string][]map[string]any)
|
||||
|
||||
customerCode := make([]map[string]any, 0)
|
||||
|
||||
global.MustGetGlobalDBByDBName("Local").Table("customer").Where("deleted_at IS NULL").Select("code as label,id as value").Scan(&customerCode)
|
||||
res["customerCode"] = customerCode
|
||||
productCode := make([]map[string]any, 0)
|
||||
|
||||
global.MustGetGlobalDBByDBName("Local").Table("project").Where("deleted_at IS NULL").Select("product_code as label,product_code as value").Scan(&productCode)
|
||||
res["productCode"] = productCode
|
||||
salesMan := make([]map[string]any, 0)
|
||||
|
||||
global.MustGetGlobalDBByDBName("Local").Table("sys_users").Where("deleted_at IS NULL").Select("nick_name as label,id as value").Scan(&salesMan)
|
||||
res["salesMan"] = salesMan
|
||||
projectManager := make([]map[string]any, 0)
|
||||
|
||||
global.MustGetGlobalDBByDBName("Local").Table("sys_users").Where("deleted_at IS NULL").Select("nick_name as label,id as value").Scan(&projectManager)
|
||||
res["projectManager"] = projectManager
|
||||
return
|
||||
}
|
||||
func (OrdService *OrderService) GetOrderPublic(ctx context.Context) {
|
||||
// 此方法为获取数据源定义的数据
|
||||
// 请自行实现
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
import service from '@/utils/request'
|
||||
// @Tags Order
|
||||
// @Summary 创建订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body model.Order true "创建订单信息"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
|
||||
// @Router /Ord/createOrder [post]
|
||||
export const createOrder = (data) => {
|
||||
return service({
|
||||
url: '/Ord/createOrder',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// @Tags Order
|
||||
// @Summary 删除订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body model.Order true "删除订单信息"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||
// @Router /Ord/deleteOrder [delete]
|
||||
export const deleteOrder = (params) => {
|
||||
return service({
|
||||
url: '/Ord/deleteOrder',
|
||||
method: 'delete',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// @Tags Order
|
||||
// @Summary 批量删除订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.IdsReq true "批量删除订单信息"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||
// @Router /Ord/deleteOrder [delete]
|
||||
export const deleteOrderByIds = (params) => {
|
||||
return service({
|
||||
url: '/Ord/deleteOrderByIds',
|
||||
method: 'delete',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// @Tags Order
|
||||
// @Summary 更新订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body model.Order true "更新订单信息"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
|
||||
// @Router /Ord/updateOrder [put]
|
||||
export const updateOrder = (data) => {
|
||||
return service({
|
||||
url: '/Ord/updateOrder',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// @Tags Order
|
||||
// @Summary 用id查询订单信息
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data query model.Order true "用id查询订单信息"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
|
||||
// @Router /Ord/findOrder [get]
|
||||
export const findOrder = (params) => {
|
||||
return service({
|
||||
url: '/Ord/findOrder',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// @Tags Order
|
||||
// @Summary 分页获取订单信息列表
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data query request.PageInfo true "分页获取订单信息列表"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
|
||||
// @Router /Ord/getOrderList [get]
|
||||
export const getOrderList = (params) => {
|
||||
return service({
|
||||
url: '/Ord/getOrderList',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
// @Tags Order
|
||||
// @Summary 获取数据源
|
||||
// @Security ApiKeyAuth
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
|
||||
// @Router /Ord/findOrderDataSource [get]
|
||||
export const getOrderDataSource = () => {
|
||||
return service({
|
||||
url: '/Ord/getOrderDataSource',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
// @Tags Order
|
||||
// @Summary 不需要鉴权的订单信息接口
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data query gvappReq.OrderSearch true "分页获取订单信息列表"
|
||||
// @Success 200 {object} response.Response{data=object,msg=string} "获取成功"
|
||||
// @Router /Ord/getOrderPublic [get]
|
||||
export const getOrderPublic = () => {
|
||||
return service({
|
||||
url: '/Ord/getOrderPublic',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
|
@ -0,0 +1,836 @@
|
|||
|
||||
<template>
|
||||
<div>
|
||||
<div class="gva-search-box">
|
||||
<el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule"
|
||||
@keyup.enter="onSubmit">
|
||||
<el-form-item label="创建日期" prop="createdAt">
|
||||
<template #label>
|
||||
<span>
|
||||
创建日期
|
||||
<el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
|
||||
<el-icon>
|
||||
<QuestionFilled />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</template>
|
||||
<el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期"
|
||||
:disabled-date="time => searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false">
|
||||
</el-date-picker>
|
||||
—
|
||||
<el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期"
|
||||
:disabled-date="time => searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="产品code" prop="productCode">
|
||||
<el-select v-model="searchInfo.productCode" placeholder="请选择产品code" clearable>
|
||||
<el-option v-for="(item, key) in dataSource.productCode" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<template v-if="showAllQuery">
|
||||
<!-- 将需要控制显示状态的查询条件添加到此范围内 -->
|
||||
<el-form-item label="销售经理" prop="salesMan">
|
||||
<el-select v-model.number="searchInfo.salesMan" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.salesMan = undefined }">
|
||||
<el-option v-for="(item, key) in dataSource.salesMan" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
<!-- <el-input v-model.number="searchInfo.salesMan" placeholder="搜索条件" /> -->
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="客户代码" prop="customerCode">
|
||||
<el-select v-model.number="searchInfo.customerCode" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.customerCode = undefined }">
|
||||
<el-option v-for="(item, key) in dataSource.customerCode" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
<!-- <el-input v-model.number="searchInfo.customerCode" placeholder="搜索条件" /> -->
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="客户类型" prop="customerType">
|
||||
<el-select v-model="searchInfo.customerType" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.customerType = undefined }">
|
||||
<el-option v-for="(item, key) in CustomerTypeOptions" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户名称" prop="customerName">
|
||||
<el-input v-model="searchInfo.customerName" placeholder="搜索条件" />
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="客户所在地" prop="customerLocation">
|
||||
<el-select v-model="searchInfo.customerLocation" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.customerLocation = undefined }">
|
||||
<el-option v-for="(item, key) in CustomerLocationOptions" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品类型" prop="productType">
|
||||
<el-select v-model="searchInfo.productType" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.productType = undefined }">
|
||||
<el-option v-for="(item, key) in ProductTypeOptions" :key="key" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目经理" prop="projectManager">
|
||||
<el-select v-model.number="searchInfo.projectManager" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.projectManager = undefined }">
|
||||
<el-option v-for="(item, key) in dataSource.projectManager" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
<!-- <el-input v-model="searchInfo.projectManager" placeholder="搜索条件" /> -->
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="需求日期" prop="demandDate">
|
||||
|
||||
<template #label>
|
||||
<span>
|
||||
需求日期
|
||||
<el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
|
||||
<el-icon>
|
||||
<QuestionFilled />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</template>
|
||||
<el-date-picker v-model="searchInfo.startDemandDate" type="datetime" placeholder="开始日期"
|
||||
:disabled-date="time => searchInfo.endDemandDate ? time.getTime() > searchInfo.endDemandDate.getTime() : false">
|
||||
</el-date-picker>
|
||||
—
|
||||
<el-date-picker v-model="searchInfo.endDemandDate" type="datetime" placeholder="结束日期"
|
||||
:disabled-date="time => searchInfo.startDemandDate ? time.getTime() < searchInfo.startDemandDate.getTime() : false">
|
||||
</el-date-picker>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="需求数量" prop="demandQuantity">
|
||||
|
||||
<el-input v-model.number="searchInfo.startDemandQuantity" placeholder="最小值" />
|
||||
—
|
||||
<el-input v-model.number="searchInfo.endDemandQuantity" placeholder="最大值" />
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="计划交付日期" prop="planDeliveryDate">
|
||||
|
||||
<template #label>
|
||||
<span>
|
||||
计划交付日期
|
||||
<el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
|
||||
<el-icon>
|
||||
<QuestionFilled />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</template>
|
||||
<el-date-picker v-model="searchInfo.startPlanDeliveryDate" type="datetime" placeholder="开始日期"
|
||||
:disabled-date="time => searchInfo.endPlanDeliveryDate ? time.getTime() > searchInfo.endPlanDeliveryDate.getTime() : false">
|
||||
</el-date-picker>
|
||||
—
|
||||
<el-date-picker v-model="searchInfo.endPlanDeliveryDate" type="datetime" placeholder="结束日期"
|
||||
:disabled-date="time => searchInfo.startPlanDeliveryDate ? time.getTime() < searchInfo.startPlanDeliveryDate.getTime() : false">
|
||||
</el-date-picker>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="实际交付日期" prop="actualDeliveryDate">
|
||||
|
||||
<template #label>
|
||||
<span>
|
||||
实际交付日期
|
||||
<el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
|
||||
<el-icon>
|
||||
<QuestionFilled />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</template>
|
||||
<el-date-picker v-model="searchInfo.startActualDeliveryDate" type="datetime" placeholder="开始日期"
|
||||
:disabled-date="time => searchInfo.endActualDeliveryDate ? time.getTime() > searchInfo.endActualDeliveryDate.getTime() : false">
|
||||
</el-date-picker>
|
||||
—
|
||||
<el-date-picker v-model="searchInfo.endActualDeliveryDate" type="datetime" placeholder="结束日期"
|
||||
:disabled-date="time => searchInfo.startActualDeliveryDate ? time.getTime() < searchInfo.startActualDeliveryDate.getTime() : false">
|
||||
</el-date-picker>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="交付状态" prop="status">
|
||||
<el-select v-model="searchInfo.status" clearable placeholder="请选择"
|
||||
@clear="() => { searchInfo.status = undefined }">
|
||||
<el-option v-for="(item, key) in DeliveryStatusOptions" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
|
||||
<el-button icon="refresh" @click="onReset">重置</el-button>
|
||||
<el-button link type="primary" icon="arrow-down" @click="showAllQuery = true" v-if="!showAllQuery">展开
|
||||
</el-button>
|
||||
<el-button link type="primary" icon="arrow-up" @click="showAllQuery = false" v-else>收起</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="gva-table-box">
|
||||
<div class="gva-btn-list">
|
||||
<el-button type="primary" icon="plus" @click="openDialog()">新增</el-button>
|
||||
<el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="onDelete">删除
|
||||
</el-button>
|
||||
<ExportTemplate template-id="gvapp_Order" />
|
||||
<ExportExcel template-id="gvapp_Order" />
|
||||
<ImportExcel template-id="gvapp_Order" @on-success="getTableData" />
|
||||
</div>
|
||||
<el-table ref="multipleTable" style="width: 100%" tooltip-effect="dark" :data="tableData" row-key="ID"
|
||||
@selection-change="handleSelectionChange" @sort-change="sortChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
|
||||
<el-table-column align="left" label="日期" prop="createdAt" width="180">
|
||||
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column sortable align="left" label="销售经理" prop="salesMan" width="120">
|
||||
<template #default="scope">
|
||||
<span>{{ filterDataSource(dataSource.salesMan, scope.row.salesMan) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="客户代码" prop="customerCode" width="120">
|
||||
<template #default="scope">
|
||||
<span>{{ filterDataSource(dataSource.customerCode, scope.row.customerCode) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="客户类型" prop="customerType" width="120">
|
||||
<template #default="scope">
|
||||
|
||||
{{ filterDict(scope.row.customer ? scope.row.customer.type : "", CustomerTypeOptions) }}
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="客户所在地" prop="customerLocation" width="120">
|
||||
<template #default="scope">
|
||||
|
||||
{{ filterDict(scope.row.customer ? scope.row.customer.location : "", CustomerLocationOptions) }}
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="产品code" prop="productCode" width="120">
|
||||
<template #default="scope">
|
||||
<span>{{ filterDataSource(dataSource.productCode, scope.row.productCode) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="产品类型" prop="productType" width="120">
|
||||
<template #default="scope">
|
||||
|
||||
{{ filterDict(scope.row.project ? scope.row.project.product.productType : "", ProductTypeOptions) }}
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="项目经理" prop="projectManager" width="120">
|
||||
<template #default="scope">
|
||||
{{ filterDataSource(dataSource.projectManager, scope.row.project.projectManager) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column sortable align="left" label="需求日期" prop="demandDate" width="180">
|
||||
<template #default="scope">{{ scope.row.demandDate ? formatTimeToStr(scope.row.demandDate, "yyyy-MM-dd") : ""
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column sortable align="left" label="需求数量" prop="demandQuantity" width="120" />
|
||||
<el-table-column sortable align="left" label="计划交付日期" prop="planDeliveryDate" width="180">
|
||||
<template #default="scope">{{ scope.row.planDeliveryDate ? formatTimeToStr(scope.row.planDeliveryDate,
|
||||
"yyyy-MM-dd") : ""
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column sortable align="left" label="实际交付日期" prop="actualDeliveryDate" width="180">
|
||||
<template #default="scope">{{ scope.row.actualDeliveryDate ? formatTimeToStr(scope.row.actualDeliveryDate,
|
||||
"yyyy-MM-dd") : ""
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column sortable align="left" label="发货数量" prop="actualQuantity" width="120" />
|
||||
<el-table-column align="left" label="交付状态" prop="status" width="120">
|
||||
<template #default="scope">
|
||||
|
||||
{{ filterDict(getStatus(scope.row.planDeliveryDate, scope.row.actualDeliveryDate), DeliveryStatusOptions) }}
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="left" label="操作" fixed="right" :min-width="appStore.operateMinWith">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" link class="table-button" @click="getDetails(scope.row)">
|
||||
<el-icon style="margin-right: 5px">
|
||||
<InfoFilled />
|
||||
</el-icon>查看
|
||||
</el-button>
|
||||
<el-button type="primary" link icon="edit" class="table-button" @click="updateOrderFunc(scope.row)">编辑
|
||||
</el-button>
|
||||
<el-button type="primary" link icon="delete" @click="deleteRow(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="gva-pagination">
|
||||
<el-pagination layout="total, sizes, prev, pager, next, jumper" :current-page="page" :page-size="pageSize"
|
||||
:page-sizes="[10, 30, 50, 100]" :total="total" @current-change="handleCurrentChange"
|
||||
@size-change="handleSizeChange" />
|
||||
</div>
|
||||
</div>
|
||||
<el-drawer destroy-on-close :size="appStore.drawerSize" v-model="dialogFormVisible" :show-close="false"
|
||||
:before-close="closeDialog">
|
||||
<template #header>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-lg">{{ type === 'create' ? '新增' : '编辑' }}</span>
|
||||
<div>
|
||||
<el-button :loading="btnLoading" type="primary" @click="enterDialog">确 定</el-button>
|
||||
<el-button @click="closeDialog">取 消</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-form :model="formData" label-position="top" ref="elFormRef" :rules="rule" label-width="80px">
|
||||
<el-form-item label="销售经理:" prop="salesMan">
|
||||
<el-select v-model="formData.salesMan" placeholder="请选择销售经理" style="width:100%" :clearable="false">
|
||||
<el-option v-for="(item, key) in dataSource.salesMan" :key="key" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户代码:" prop="customerCode">
|
||||
<el-select v-model="formData.customerCode" placeholder="请选择客户代码" style="width:100%" :clearable="false">
|
||||
<el-option v-for="(item, key) in dataSource.customerCode" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品code:" prop="productCode">
|
||||
<el-select v-model="formData.productCode" placeholder="请选择产品code" style="width:100%" :clearable="false">
|
||||
<el-option v-for="(item, key) in dataSource.productCode" :key="key" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="需求日期:" prop="demandDate">
|
||||
<el-date-picker v-model="formData.demandDate" type="date" style="width:100%" placeholder="选择日期"
|
||||
:clearable="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="需求数量:" prop="demandQuantity">
|
||||
<el-input v-model.number="formData.demandQuantity" :clearable="false" placeholder="请输入需求数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划交付日期:" prop="planDeliveryDate">
|
||||
<el-date-picker v-model="formData.planDeliveryDate" type="date" style="width:100%" placeholder="选择日期"
|
||||
:clearable="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际交付日期:" prop="actualDeliveryDate">
|
||||
<el-date-picker v-model="formData.actualDeliveryDate" type="date" style="width:100%" placeholder="选择日期"
|
||||
:clearable="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际交付数量:" prop="actualQuantity">
|
||||
<el-input v-model.number="formData.actualQuantity" :clearable="false" placeholder="请输入实际交付数量" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-drawer>
|
||||
|
||||
<el-drawer destroy-on-close :size="appStore.drawerSize" v-model="detailShow" :show-close="true"
|
||||
:before-close="closeDetailShow" title="查看">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="销售经理">
|
||||
<span>{{ filterDataSource(dataSource.salesMan, detailFrom.salesMan) }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户代码">
|
||||
<span>{{ filterDataSource(dataSource.customerCode, detailFrom.customerCode) }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户类型">
|
||||
|
||||
{{ filterDict(detailFrom.customer ? detailFrom.customer.type : "", CustomerTypeOptions) }}
|
||||
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户名称">
|
||||
{{ detailFrom.customer ? detailFrom.customer.name : "" }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户所在地">
|
||||
|
||||
{{ filterDict(detailFrom.customer ? detailFrom.customer.location : "", CustomerLocationOptions) }}
|
||||
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="产品code">
|
||||
<span>{{ filterDataSource(dataSource.productCode, detailFrom.productCode) }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="产品类型">
|
||||
|
||||
{{ filterDict(detailFrom.project ? detailFrom.project.product.productType : "", ProductTypeOptions) }}
|
||||
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="项目经理">
|
||||
<span>{{ filterDataSource(dataSource.projectManager, detailFrom.project.projectManager) }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需求日期">
|
||||
{{ detailFrom.demandDate ? formatTimeToStr(detailFrom.demandDate, "yyyy-MM-dd") : "" }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需求数量">
|
||||
{{ detailFrom.demandQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="计划交付日期">
|
||||
{{ detailFrom.planDeliveryDate ? formatTimeToStr(detailFrom.planDeliveryDate, "yyyy-MM-dd") : "" }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="实际交付日期">
|
||||
{{ detailFrom.planDeliveryDate ? formatTimeToStr(detailFrom.actualDeliveryDate, "yyyy-MM-dd") : "" }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="实际交付数量">
|
||||
{{ detailFrom.actualQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="交付状态">
|
||||
<template #label>
|
||||
<span>
|
||||
交付状态
|
||||
<el-tooltip :content="`按时交付:实际交付日期有效且不晚于计划日期;延期交付:实际交付日期有效且晚于计划日期;延期未交付:计划日期有效但实际日期无效,且当前时间已超过计划日期`">
|
||||
<el-icon>
|
||||
<QuestionFilled />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</template>
|
||||
{{ filterDict(getStatus(detailFrom.planDeliveryDate, detailFrom.actualDeliveryDate), DeliveryStatusOptions) }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-drawer>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
getOrderDataSource,
|
||||
createOrder,
|
||||
deleteOrder,
|
||||
deleteOrderByIds,
|
||||
updateOrder,
|
||||
findOrder,
|
||||
getOrderList
|
||||
} from '@/api/gvapp/order'
|
||||
|
||||
// 全量引入格式化工具 请按需保留
|
||||
import { getDictFunc, formatDate, formatBoolean, filterDict, filterDataSource, returnArrImg, onDownloadFile } from '@/utils/format'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useAppStore } from "@/pinia"
|
||||
|
||||
// 导出组件
|
||||
import ExportExcel from '@/components/exportExcel/exportExcel.vue'
|
||||
// 导入组件
|
||||
import ImportExcel from '@/components/exportExcel/importExcel.vue'
|
||||
// 导出模板组件
|
||||
import ExportTemplate from '@/components/exportExcel/exportTemplate.vue'
|
||||
|
||||
import { formatTimeToStr } from '@/utils/date'
|
||||
|
||||
defineOptions({
|
||||
name: 'Order'
|
||||
})
|
||||
|
||||
// 提交按钮loading
|
||||
const btnLoading = ref(false)
|
||||
const appStore = useAppStore()
|
||||
|
||||
// 控制更多查询条件显示/隐藏状态
|
||||
const showAllQuery = ref(false)
|
||||
|
||||
// 自动化生成的字典(可能为空)以及字段
|
||||
const ProductTypeOptions = ref([])
|
||||
const DeliveryStatusOptions = ref([])
|
||||
const CustomerTypeOptions = ref([])
|
||||
const CustomerLocationOptions = ref([])
|
||||
const formData = ref({
|
||||
salesMan: undefined,
|
||||
customerCode: undefined,
|
||||
productCode: '',
|
||||
demandDate: new Date(),
|
||||
demandQuantity: undefined,
|
||||
planDeliveryDate: undefined,
|
||||
actualDeliveryDate: undefined,
|
||||
actualQuantity: undefined,
|
||||
})
|
||||
const dataSource = ref([])
|
||||
const getDataSourceFunc = async () => {
|
||||
const res = await getOrderDataSource()
|
||||
if (res.code === 0) {
|
||||
dataSource.value = res.data
|
||||
}
|
||||
}
|
||||
getDataSourceFunc()
|
||||
|
||||
const getStatus = (planDeliveryDate, actualDeliveryDate) => {
|
||||
// 统一转换为 Date 对象或时间戳(确保类型安全)
|
||||
const planDate = new Date(planDeliveryDate);
|
||||
const actualDate = new Date(actualDeliveryDate);
|
||||
const now = new Date();
|
||||
|
||||
// 情形1-按时交付:实际交付日期有效且不晚于计划日期
|
||||
if (isValidDate(actualDate) && isValidDate(planDate) && actualDate < planDate) {
|
||||
return '1';
|
||||
}
|
||||
|
||||
// 情形2-延期交付:实际交付日期有效且晚于计划日期
|
||||
if (isValidDate(actualDate) && isValidDate(planDate) && actualDate > planDate) {
|
||||
return '2';
|
||||
}
|
||||
|
||||
// 情形3-延期未交付:计划日期有效但实际日期无效,且当前时间已超过计划日期
|
||||
if (isValidDate(planDate) && !isValidDate(actualDate) && now > planDate) {
|
||||
return '3';
|
||||
}
|
||||
|
||||
// 情形4-正常进行:其他情况(如计划日期未到、数据无效等)
|
||||
return '4';
|
||||
};
|
||||
|
||||
// 辅助函数:验证日期有效性
|
||||
const isValidDate = (date) => {
|
||||
return date instanceof Date && !isNaN(date.getTime());
|
||||
};
|
||||
|
||||
// 验证规则
|
||||
const rule = reactive({
|
||||
salesMan: [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input', 'blur'],
|
||||
},
|
||||
],
|
||||
customerCode: [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input', 'blur'],
|
||||
},
|
||||
],
|
||||
productCode: [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input', 'blur'],
|
||||
},
|
||||
{
|
||||
whitespace: true,
|
||||
message: '不能只输入空格',
|
||||
trigger: ['input', 'blur'],
|
||||
}
|
||||
],
|
||||
demandDate: [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input', 'blur'],
|
||||
},
|
||||
],
|
||||
demandQuantity: [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input', 'blur'],
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
const searchRule = reactive({
|
||||
createdAt: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
|
||||
callback(new Error('请填写结束日期'))
|
||||
} else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
|
||||
callback(new Error('请填写开始日期'))
|
||||
} else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
|
||||
callback(new Error('开始日期应当早于结束日期'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}, trigger: 'change'
|
||||
}
|
||||
],
|
||||
demandDate: [{
|
||||
validator: (rule, value, callback) => {
|
||||
if (searchInfo.value.startDemandDate && !searchInfo.value.endDemandDate) {
|
||||
callback(new Error('请填写结束日期'))
|
||||
} else if (!searchInfo.value.startDemandDate && searchInfo.value.endDemandDate) {
|
||||
callback(new Error('请填写开始日期'))
|
||||
} else if (searchInfo.value.startDemandDate && searchInfo.value.endDemandDate && (searchInfo.value.startDemandDate.getTime() === searchInfo.value.endDemandDate.getTime() || searchInfo.value.startDemandDate.getTime() > searchInfo.value.endDemandDate.getTime())) {
|
||||
callback(new Error('开始日期应当早于结束日期'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}, trigger: 'change'
|
||||
}],
|
||||
planDeliveryDate: [{
|
||||
validator: (rule, value, callback) => {
|
||||
if (searchInfo.value.startPlanDeliveryDate && !searchInfo.value.endPlanDeliveryDate) {
|
||||
callback(new Error('请填写结束日期'))
|
||||
} else if (!searchInfo.value.startPlanDeliveryDate && searchInfo.value.endPlanDeliveryDate) {
|
||||
callback(new Error('请填写开始日期'))
|
||||
} else if (searchInfo.value.startPlanDeliveryDate && searchInfo.value.endPlanDeliveryDate && (searchInfo.value.startPlanDeliveryDate.getTime() === searchInfo.value.endPlanDeliveryDate.getTime() || searchInfo.value.startPlanDeliveryDate.getTime() > searchInfo.value.endPlanDeliveryDate.getTime())) {
|
||||
callback(new Error('开始日期应当早于结束日期'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}, trigger: 'change'
|
||||
}],
|
||||
actualDeliveryDate: [{
|
||||
validator: (rule, value, callback) => {
|
||||
if (searchInfo.value.startActualDeliveryDate && !searchInfo.value.endActualDeliveryDate) {
|
||||
callback(new Error('请填写结束日期'))
|
||||
} else if (!searchInfo.value.startActualDeliveryDate && searchInfo.value.endActualDeliveryDate) {
|
||||
callback(new Error('请填写开始日期'))
|
||||
} else if (searchInfo.value.startActualDeliveryDate && searchInfo.value.endActualDeliveryDate && (searchInfo.value.startActualDeliveryDate.getTime() === searchInfo.value.endActualDeliveryDate.getTime() || searchInfo.value.startActualDeliveryDate.getTime() > searchInfo.value.endActualDeliveryDate.getTime())) {
|
||||
callback(new Error('开始日期应当早于结束日期'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}, trigger: 'change'
|
||||
}],
|
||||
})
|
||||
|
||||
const elFormRef = ref()
|
||||
const elSearchFormRef = ref()
|
||||
|
||||
// =========== 表格控制部分 ===========
|
||||
const page = ref(1)
|
||||
const total = ref(0)
|
||||
const pageSize = ref(10)
|
||||
const tableData = ref([])
|
||||
const searchInfo = ref({})
|
||||
// 排序
|
||||
const sortChange = ({ prop, order }) => {
|
||||
const sortMap = {
|
||||
salesMan: 'sales_man',
|
||||
demandDate: 'demand_date',
|
||||
demandQuantity: 'demand_quantity',
|
||||
planDeliveryDate: 'plan_delivery_date',
|
||||
actualDeliveryDate: 'actual_delivery_date',
|
||||
actualQuantity: 'actual_quantity',
|
||||
}
|
||||
|
||||
let sort = sortMap[prop]
|
||||
if (!sort) {
|
||||
sort = prop.replace(/[A-Z]/g, match => `_${match.toLowerCase()}`)
|
||||
}
|
||||
|
||||
searchInfo.value.sort = sort
|
||||
searchInfo.value.order = order
|
||||
getTableData()
|
||||
}
|
||||
// 重置
|
||||
const onReset = () => {
|
||||
searchInfo.value = {}
|
||||
getTableData()
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const onSubmit = () => {
|
||||
elSearchFormRef.value?.validate(async (valid) => {
|
||||
if (!valid) return
|
||||
page.value = 1
|
||||
getTableData()
|
||||
})
|
||||
}
|
||||
|
||||
// 分页
|
||||
const handleSizeChange = (val) => {
|
||||
pageSize.value = val
|
||||
getTableData()
|
||||
}
|
||||
|
||||
// 修改页面容量
|
||||
const handleCurrentChange = (val) => {
|
||||
page.value = val
|
||||
getTableData()
|
||||
}
|
||||
|
||||
// 查询
|
||||
const getTableData = async () => {
|
||||
const table = await getOrderList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
|
||||
if (table.code === 0) {
|
||||
tableData.value = table.data.list
|
||||
total.value = table.data.total
|
||||
page.value = table.data.page
|
||||
pageSize.value = table.data.pageSize
|
||||
}
|
||||
}
|
||||
|
||||
getTableData()
|
||||
|
||||
// ============== 表格控制部分结束 ===============
|
||||
|
||||
// 获取需要的字典 可能为空 按需保留
|
||||
const setOptions = async () => {
|
||||
ProductTypeOptions.value = await getDictFunc('ProductType')
|
||||
DeliveryStatusOptions.value = await getDictFunc('DeliveryStatus')
|
||||
CustomerTypeOptions.value = await getDictFunc('CustomerType')
|
||||
CustomerLocationOptions.value = await getDictFunc('CustomerLocation')
|
||||
}
|
||||
|
||||
// 获取需要的字典 可能为空 按需保留
|
||||
setOptions()
|
||||
|
||||
|
||||
// 多选数据
|
||||
const multipleSelection = ref([])
|
||||
// 多选
|
||||
const handleSelectionChange = (val) => {
|
||||
multipleSelection.value = val
|
||||
}
|
||||
|
||||
// 删除行
|
||||
const deleteRow = (row) => {
|
||||
ElMessageBox.confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
deleteOrderFunc(row)
|
||||
})
|
||||
}
|
||||
|
||||
// 多选删除
|
||||
const onDelete = async () => {
|
||||
ElMessageBox.confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const IDs = []
|
||||
if (multipleSelection.value.length === 0) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: '请选择要删除的数据'
|
||||
})
|
||||
return
|
||||
}
|
||||
multipleSelection.value &&
|
||||
multipleSelection.value.map(item => {
|
||||
IDs.push(item.ID)
|
||||
})
|
||||
const res = await deleteOrderByIds({ IDs })
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
})
|
||||
if (tableData.value.length === IDs.length && page.value > 1) {
|
||||
page.value--
|
||||
}
|
||||
getTableData()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 行为控制标记(弹窗内部需要增还是改)
|
||||
const type = ref('')
|
||||
|
||||
// 更新行
|
||||
const updateOrderFunc = async (row) => {
|
||||
const res = await findOrder({ ID: row.ID })
|
||||
type.value = 'update'
|
||||
if (res.code === 0) {
|
||||
formData.value = res.data
|
||||
dialogFormVisible.value = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 删除行
|
||||
const deleteOrderFunc = async (row) => {
|
||||
const res = await deleteOrder({ ID: row.ID })
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '删除成功'
|
||||
})
|
||||
if (tableData.value.length === 1 && page.value > 1) {
|
||||
page.value--
|
||||
}
|
||||
getTableData()
|
||||
}
|
||||
}
|
||||
|
||||
// 弹窗控制标记
|
||||
const dialogFormVisible = ref(false)
|
||||
|
||||
// 打开弹窗
|
||||
const openDialog = () => {
|
||||
type.value = 'create'
|
||||
dialogFormVisible.value = true
|
||||
}
|
||||
|
||||
// 关闭弹窗
|
||||
const closeDialog = () => {
|
||||
dialogFormVisible.value = false
|
||||
formData.value = {
|
||||
salesMan: undefined,
|
||||
customerCode: undefined,
|
||||
productCode: '',
|
||||
demandDate: new Date(),
|
||||
demandQuantity: undefined,
|
||||
planDeliveryDate: undefined,
|
||||
actualDeliveryDate: undefined,
|
||||
actualQuantity: undefined,
|
||||
}
|
||||
}
|
||||
// 弹窗确定
|
||||
const enterDialog = async () => {
|
||||
btnLoading.value = true
|
||||
elFormRef.value?.validate(async (valid) => {
|
||||
if (!valid) return btnLoading.value = false
|
||||
let res
|
||||
switch (type.value) {
|
||||
case 'create':
|
||||
res = await createOrder(formData.value)
|
||||
break
|
||||
case 'update':
|
||||
res = await updateOrder(formData.value)
|
||||
break
|
||||
default:
|
||||
res = await createOrder(formData.value)
|
||||
break
|
||||
}
|
||||
btnLoading.value = false
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '创建/更改成功'
|
||||
})
|
||||
closeDialog()
|
||||
getTableData()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const detailFrom = ref({})
|
||||
|
||||
// 查看详情控制标记
|
||||
const detailShow = ref(false)
|
||||
|
||||
|
||||
// 打开详情弹窗
|
||||
const openDetailShow = () => {
|
||||
detailShow.value = true
|
||||
}
|
||||
|
||||
|
||||
// 打开详情
|
||||
const getDetails = async (row) => {
|
||||
// 打开弹窗
|
||||
const res = await findOrder({ ID: row.ID })
|
||||
if (res.code === 0) {
|
||||
detailFrom.value = res.data
|
||||
openDetailShow()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 关闭详情弹窗
|
||||
const closeDetailShow = () => {
|
||||
detailShow.value = false
|
||||
detailFrom.value = {}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
|
@ -0,0 +1,178 @@
|
|||
|
||||
<template>
|
||||
<div>
|
||||
<div class="gva-form-box">
|
||||
<el-form :model="formData" ref="elFormRef" label-position="right" :rules="rule" label-width="80px">
|
||||
<el-form-item label="销售经理:" prop="salesMan">
|
||||
<el-select v-model="formData.salesMan" placeholder="请选择销售经理" style="width:100%" :clearable="false" >
|
||||
<el-option v-for="(item,key) in dataSource.salesMan" :key="key" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户代码:" prop="customerCode">
|
||||
<el-select v-model="formData.customerCode" placeholder="请选择客户代码" style="width:100%" :clearable="false" >
|
||||
<el-option v-for="(item,key) in dataSource.customerCode" :key="key" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品code:" prop="productCode">
|
||||
<el-select v-model="formData.productCode" placeholder="请选择产品code" style="width:100%" :clearable="false" >
|
||||
<el-option v-for="(item,key) in dataSource.productCode" :key="key" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="需求日期:" prop="demandDate">
|
||||
<el-date-picker v-model="formData.demandDate" type="date" placeholder="选择日期" :clearable="false"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="需求数量:" prop="demandQuantity">
|
||||
<el-input v-model.number="formData.demandQuantity" :clearable="false" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划交付日期:" prop="planDeliveryDate">
|
||||
<el-date-picker v-model="formData.planDeliveryDate" type="date" placeholder="选择日期" :clearable="false"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际交付日期:" prop="actualDeliveryDate">
|
||||
<el-date-picker v-model="formData.actualDeliveryDate" type="date" placeholder="选择日期" :clearable="false"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际交付数量:" prop="actualQuantity">
|
||||
<el-input v-model.number="formData.actualQuantity" :clearable="false" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button :loading="btnLoading" type="primary" @click="save">保存</el-button>
|
||||
<el-button type="primary" @click="back">返回</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
getOrderDataSource,
|
||||
createOrder,
|
||||
updateOrder,
|
||||
findOrder
|
||||
} from '@/api/gvapp/order'
|
||||
|
||||
defineOptions({
|
||||
name: 'OrderForm'
|
||||
})
|
||||
|
||||
// 自动获取字典
|
||||
import { getDictFunc } from '@/utils/format'
|
||||
import { useRoute, useRouter } from "vue-router"
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { ref, reactive } from 'vue'
|
||||
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
// 提交按钮loading
|
||||
const btnLoading = ref(false)
|
||||
|
||||
const type = ref('')
|
||||
const ProductTypeOptions = ref([])
|
||||
const DeliveryStatusOptions = ref([])
|
||||
const CustomerTypeOptions = ref([])
|
||||
const CustomerLocationOptions = ref([])
|
||||
const formData = ref({
|
||||
salesMan: undefined,
|
||||
customerCode: undefined,
|
||||
productCode: '',
|
||||
demandDate: new Date(),
|
||||
demandQuantity: undefined,
|
||||
planDeliveryDate: new Date(),
|
||||
actualDeliveryDate: new Date(),
|
||||
actualQuantity: undefined,
|
||||
})
|
||||
// 验证规则
|
||||
const rule = reactive({
|
||||
salesMan : [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input','blur'],
|
||||
}],
|
||||
customerCode : [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input','blur'],
|
||||
}],
|
||||
productCode : [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input','blur'],
|
||||
}],
|
||||
demandDate : [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input','blur'],
|
||||
}],
|
||||
demandQuantity : [{
|
||||
required: true,
|
||||
message: '',
|
||||
trigger: ['input','blur'],
|
||||
}],
|
||||
})
|
||||
|
||||
const elFormRef = ref()
|
||||
const dataSource = ref([])
|
||||
const getDataSourceFunc = async()=>{
|
||||
const res = await getOrderDataSource()
|
||||
if (res.code === 0) {
|
||||
dataSource.value = res.data
|
||||
}
|
||||
}
|
||||
getDataSourceFunc()
|
||||
|
||||
// 初始化方法
|
||||
const init = async () => {
|
||||
// 建议通过url传参获取目标数据ID 调用 find方法进行查询数据操作 从而决定本页面是create还是update 以下为id作为url参数示例
|
||||
if (route.query.id) {
|
||||
const res = await findOrder({ ID: route.query.id })
|
||||
if (res.code === 0) {
|
||||
formData.value = res.data
|
||||
type.value = 'update'
|
||||
}
|
||||
} else {
|
||||
type.value = 'create'
|
||||
}
|
||||
ProductTypeOptions.value = await getDictFunc('ProductType')
|
||||
DeliveryStatusOptions.value = await getDictFunc('DeliveryStatus')
|
||||
CustomerTypeOptions.value = await getDictFunc('CustomerType')
|
||||
CustomerLocationOptions.value = await getDictFunc('CustomerLocation')
|
||||
}
|
||||
|
||||
init()
|
||||
// 保存按钮
|
||||
const save = async() => {
|
||||
btnLoading.value = true
|
||||
elFormRef.value?.validate( async (valid) => {
|
||||
if (!valid) return btnLoading.value = false
|
||||
let res
|
||||
switch (type.value) {
|
||||
case 'create':
|
||||
res = await createOrder(formData.value)
|
||||
break
|
||||
case 'update':
|
||||
res = await updateOrder(formData.value)
|
||||
break
|
||||
default:
|
||||
res = await createOrder(formData.value)
|
||||
break
|
||||
}
|
||||
btnLoading.value = false
|
||||
if (res.code === 0) {
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '创建/更改成功'
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 返回按钮
|
||||
const back = () => {
|
||||
router.go(-1)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
Loading…
Reference in New Issue